ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:24.27KB ,
资源ID:3956734      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3956734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(8051单片机的异步串行通信技术.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8051单片机的异步串行通信技术.docx

1、8051单片机的异步串行通信技术第八章 8051单片机的异步串行通信技术第一节 概述 计算机与外界的信息交换称为通信。常用通信方式有两种:并行通信与串行通信,简称并行传送和串行传送。并行传送具有传送速度快,效率高等优点,但传送多少数据位就需要多少根数据线,传送成本高;串行传送是按位顺序进行数据传送,最少仅需要一根传输线即可完成,传送距离远,但传送速度慢。串行通信又分同步和异步两种方式。同步通信中,在数据传送开始时先用同步字符来指示(常约定12个),并由同时传送的时钟信号来实现发送端和接收端同步,即检测到规定的同步字符后,接着就连续按顺序传送数据。这种传送方式对硬件结构要求较高。在单片机异步通信

2、中,数据分为一帧一帧地传送,即异步串行通信一次传送一个完整字符,字符格式如图81所示: 图81 异步串行通信的字符格式 一个字符应包括以下信息: 1. 起始位:对应逻辑0(space)状态。发送器通过发送起始位开始一帧字符的传送。 2. 数据位:起始位之后传送数据位。数据位中低位在前,高位在后。数据位可以是5、6、7、8位。 3. 奇偶校验位:奇偶校验位实际上是传送的附加位,若该位用于用于奇偶校验,可校检串行传送的正确性。奇偶校验位的设置与否及校验方式(奇校验还是偶校验)由用户需要确定。 4. 停止位:用逻辑1(mark)表示。停止位标志一个字符传送的结束。停止位可以是1、1.5或2位。 串行

3、通信中用每秒传送二进制数据位的数量表示传送速率,称为波特率。 1波特1bps(位/秒) 例如数据传送速率是240帧/秒,每帧由一位起始位、八位数据位和一位停止位组成,则传送速率为: 102402400位/ 秒2400波特 单片机的串行通信主要采用异步通信传送方式。在串行通信中,按不同的通信方向有单工传送和双工传送之分,如图82所示: 甲机 乙机 (a)单工传送 甲机 乙机 (b)双工传送 甲机 乙机 (c)全双工传送 图82 单片机串行通信方向示意 图82(a)中,甲.乙两机只能单方向发送或接收数据; 图82(b)中,甲机和乙机能分时进行双向发送和接收数据; 图82(c)中,甲,乙两机能同时双

4、向发送和接收数据。 第二节 8051串行口的基本结构 MCS51系列单片机串行口结构框图如图83所示: 图83 8051串行口结构框图 一、串行口缓冲寄存器SBUF 图83中SUBF是串行口缓冲寄存器,发送SBUF和接收SBUF地址同为99H,但由于发送SBUF不能接收数据, 接收SBUF也不具有发送功能,故二者工作互不干扰。当CPU向SBUF写入时,数据进入发送SBUF,同时启动串行发送;CPU读SBUF时,实际上是读接收SBUF数据。二、串行通信控制寄存器 与串行通信有关的控制寄存器主要是串行通信控制寄存器SCON。SCON是8051的一个可以位寻址的专用寄存器,用于串行数据通信的控制。S

5、CON的单元地址98H,位地址9FH98H。寄存器内容及位地址表示如下:SCON位地址9F9E9D9C9B9A9998位符号SM0SM1SM2RENTB8RB8TIRI各位功能说明如下:位符号 功 能 说 明SM0,SM1SM0,SM1串行口工作方式选择位: SM0 SM1 工作方式 功 能 0 0 0 8位数码传送,波特率固定,为f晶振/12。 0 1 1 10位数码传送,波特率可变。 1 0 2 11位数码传送,波特率固定,为f晶振/64或f晶振/32。 1 1 3 11位数码传送,波特率可变。SM2SM2多机通信控制位: 当串行口以方式2或方式3接收时,如SM21,则只有当接收到的第九位

6、数据(RB8)为1,才将接收到的前8位数据送入接收SBUF,并使RI位置1,产生中断请求信号;否则将接收到的前8位数据丢弃。而当SM20时,则不论第九位数据为0还是为1,都将前8位数据装入接收SBUF中,并产生中断请求信号。对方式0,SM2必须为0, 对方式1,当SM2=1,只有接收到有效停止位后才使RI位置1。RENREN允许接收位,用于对串行数据的接收进行控制: REN0, 禁止接收;REN1,允许接收。该位由软件置1或清零。TB8TB8发送数据位8:在方式2和方式3时,TB8是要发送的第9位数据。RB8RB8接收数据位8:在方式2和方式3中,RB8位存放接收到的第9位数据TITI发送中断

7、标志:当方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前由硬件置位。因此TI1,表示帧发送结束。其状态既可供软件查询使用,也可请求中断。 TI位由软件清0。RIRI接收中断标志:当方式0时,接收完第8位数据后,该位由硬件置1。在其它方式下,当接收到停止位时,该位由硬件置位。因此RI1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。RI位由软件清0。 另外,电源控制寄存器PCON中SMOD位可影响串行口的波特率。 当(SMOD)1,串行口波特率加倍。 还有中断允许寄存器IE中的ES位可选择串行口中断允许或禁止。 ES0,禁止串行口中断 ES1,允许串行口中

8、断第三节 80 51串行通信工作方式及应用 8051单片机的串行通信共有四种工作方式: 1 串行工作方式0 串行口为同步移位寄存器方式,波特率固定为f晶振/12。该方式主要用于I/O口扩展等,方式0传送数据时,串行数据由RXD(P3.0)端输入或输出,而TXD(P3.1)此时仅作为同步移位脉冲发生器发出移位脉冲。 串行数据的发送和接收以8位为一帧,不设起始位和停止位,其格式如下: D0D1D2D3D4D5D6D7方式0输出数据时,向SBUF写入数据的指令: MOV SBUF, A或: MOV SBUF, XXH即为从RXD端输出数据的发送启动指令。当位数据全部移出后,SCON 中的TI位被自动

9、置1。方式0输入数据时,使 SCON 中REN位置1指令:SETB REN即为从RXD端输入数据启动指令。当接收到8位数据后SCON中的RI位被自动置1。方式0工作时往往需要外部有串入并出寄存器(输出)和并入串出寄存器(输入)配合使用,方式0多用于将串行口转变为并行口的使用场合,如图84所示: 并行输出 并行输入 8051 串行输出 P8 P1 8051 串行输入 P8 P1 RXD D CD4094 RXD Q8 CD4014 TXD CLK STB TXD CLK P/S 移位脉冲 移位脉冲 P1.0 P1.0 (a) (b)图84 串行工作方式0与输入,输出电路的连接示例 图84(a)中

10、CD4094是”串入并出”移位寄存器,TXD端输出频率为F晶振 /12的固定方波信号(移位脉冲),在该移位脉冲的作用下,D端串行输入数据可依次存入CD4094内部8D锁存器锁存。P1.0为选通信号, 当P1.0=STB为高电平时,将内部8D锁存器数据并行输出。图84(b)中CD4014为“串入/并出串出”移位寄存器,P1P8为并行输入端,Q8为串行输出端,当P1.0=P/S=1,加在并行输入端P1P8上的数据在时钟脉冲作用下从Q8端串行输出。方式0的移位操作的波特率固定为单片机晶振频率f晶振的十二分之一。即:波特率=f晶振/12。例如当f晶振=12MHZ,波特率 = 10 6 (位/秒)。例8

11、1 试编写从CD4094并行输出数据36H的参考程序:解: 参考程序如下: MOV SCON, #00H ; 串行口工作方式0。 CLR ES ; 禁止串行口中断。 MOV A, #36H ; 传送数据送A。 CLR P1.0 ; 关闭并行输出。 MOV SBUF, A ; 启动串行输出。 HERE:JBC TI, FS ; 等待串行输出完毕。 AJMP HERE FS:SETB P1.0 ;开启并行输出。RET ;返回。 2串行工作方式1(1) 方式传送的数据格式方式传送一帧为10位的串行数据,包括1位起始位,8位数据位和1位停止位。其帧格式为: 起 始 D0 D1 D2 D3 D4 D5

12、D6 D7 停 止(2)方式1的波特率的确定方式1的波特率是可变的,计算公式为:波特率=(2smod / 32)( T1溢出率) 其中smod为PCON寄存器最高位的值。 所谓定时器T1的溢出就是T1在单位时间内溢出的次数。如设T1为工作方式2,那么T1定时时间: T1定时=(28X)T机 =(28X)12 / F晶振 则T1的溢出率= 1/ T1定时= F晶振 /(12(28X) 由此可得波特率的计算公式为: 波特率=(2smod/32)F晶振 /(12(28X) 实际使用时总是先确定波特率,再计算定时器T1的记数初值X,然后进行T1的初始化。根据上述波特率的计算公式,可得T1记数初值的计算

13、公式为: X = 256 (F晶振2smod )/(384波特率)定时器T1之所以选择工作方式2,是因为方式2具有自动加载功能,可避免通过程序反复装入计数初值而影响波特率的准确性。(3)方式1数据的发送和接收 方式1的数据发送由一条写入单片机发送寄存器SBUF指令启动。8位数据在串行口由硬件自动加入起始位和停止位组成完整的帧格式。在内部移位脉冲作用下,由TXD端串行输出。发送完一帧数据后,使TXD输出端维持”1”状态并置使TI标志位置1以通知CPU发送下一个字符。接收数据由接收单片机SCON中的REN置1开始,随后串行口不断采样RXD端电平,当采样到RXD端电平从1向0跳变时,就认定是接收信号

14、并开始接收从RXD端输入的数据,并送入内部接收寄存器SBUF中,直到停止位到来之后,并使RI位置1,通知CPU从SBUF中取走接收到的一帧字符。方式1传送数据时发送前应先清TI,接收前应先清RI。 例82 甲,乙两单片机拟以工作方式1进行串行数据通信,波特率为1200,甲机发送,发送数据在甲机外部RAM 1000H101FH单元中。乙机接收,并把接收数据依次放入乙机外部RAM 1000H101FH单元中。甲,乙机晶振频率均为6MHZ。 连接方式如图85所示: TXD RXD 甲机 乙机 图85 例82示意图 解:设定:(1) 甲、乙机定时用工作方式2,即初值610613841200 X256

15、243F3H (2) SMOD0,即波特率不倍增。 (3) 用查询传送方式。 (4) SCON=01000000B=40H 可得甲机发送主程序如下: ORG 0030H MOV TMOD, #20H ;设定时器1工作方式2。 MOV TL1, #0F3H ;设置定时器初值。 MOV TH1, #0F3H ;设置重装值。 CLR EA ;禁止中断。 MOV PCON, #00H ;(SMOD)=0。 MOV SCON, #40H ;设串行工作方式1,禁止接收。 MOV DPTR, #1000H ;建立发送数据地址指针初值。 MOV R7, #20H ;建立计数指针。 SETB TR1 ;启动定时

16、器1。 SEND:MOVX A, DPTR ;取数据。 MOV SBUF,A ;启动数据传送操作。 JNB TI, $ ;等待一帧发送完毕。 CLR TI ;清TI标志。 INC DPTR ;指向下一单元。 DJNZ R7, SEND ;数据块传送结束? 没结束继续传送。 CLR TR1 ;传送结束,停止定时器1工作。 RET ;返回。 乙机接收参考程序如下: ORG 0030H MOV TMOD, #20H ;设定时器1工作方式2。 MOV TL1, #0F3H ;设置定时器初值。 MOV TH1, #0F3H ;设置重装值。 CLR EA ;禁止中断。 MOV PCON, #00H ;SM

17、OD=0。 MOV SCON, #40H ;设串行工作方式1。 MOV DPTR, #1000H ;建立接收地址指针初值。 MOV R7, #20H ;建立计数指针。 SETB TR1 ;启动定时器T1。 SETB REN ;启动接收数据操作。RECIV:JNB RI, $ ;等待数据接收完毕。 CLR RI ;清RI标志。 MOV A, SBUF ;取数据。 MOVX DPTR,A ;送外部RAM。 INC DPTR ;指向下一单元。 DJNZ R7, RECIV ;数据块接收完毕?没完继续接收。 CLR TR1 ;接收完毕, 停止定时器1工作。 RET ;返回。 如改用中断方式甲机发送参考

18、程序如下: ORG 0000H AJMP MAIN ORG 0023H LJMP ASEND ;建立串行中断口地址。 ORG 0030H MAIN:MOV SP, #30H ;设置堆栈。 MOV TMOD, #20H ;设定时器1工作方式2。 MOV TL1, #0F3H ;设置定时器初值。 MOV TH1, #0F3H ;设置重装值。 MOV PCON, #00H ;SMOD=0。 MOV SCON, #40H ;设串行工作方式。 MOV R7, #1FH ;建立计数指针。 MOV DPTR, #1000H ;建立发送地址指针初值。 SETB EA ;总中断允许。 SETB ES ;串行中断

19、允许。 SETB TR0 ;启动定时器0。 MOVX A, DPTR ;第一个数据送A。 MOV SBUF, A ;启动传送数据操作。 INC DPTR ;指向下一RAM单元。WAIT:AJMP $ ;等待中断。 中断服务子程序: ORG 0100HCLR TI ;清TI。ASEND:MOVX A, DPTR ;取数据。 MOV SBUF,A ;传送数据 INC DPTR ;指向下一单元。 DJNZ R7, GOON ;传送结束?没结束继续传送。 CLR EA ;传送结束,关闭。 CLR TR1 GOON:RETI ;返回。 顺便指出,甲机以中断方式传送数据时,计数指示为1FH而非20H,这是

20、因为在启动甲机发送时已经向SBUF发送了一个数据。 至于乙机,既可用上述查询方式接收,也可用中断方式接收。中断方式程序设计思路与查询方式类似,不再细述。 在异步串行通讯中,接收机以波特率的3倍检测RXD端信号,检测到两次以上相同信号即为有效信号。 在实际应用中,可根椐需要加入奇偶校验位一起传送,以提高传送的可靠性。 例83 甲,乙两单片机同样以工作方式1进行串行数据通信,波特率为1200,甲机发送,发送数据在甲机外部RAM 1000H101FH单元中,在发送之前先将数据块长度发送给乙机,发送完后,向乙机发送一个累加校验和。 乙机接收,乙机首先接收数据长度,然后接收数据,并把接收数据依次放入乙机

21、外部RAM 1000H101FH单元中,接收完毕后进行一次累加和校验,数据全部接收完毕时向甲机送出状态字,表示传送状态。甲、乙机晶振频率均为6MHZ。 连接方式见图86: 甲 乙 TXD RXD RXD TXD 图86 例83示意图解:设定如下: (1)波特率约定为1200,以定时器T1为波特率发生器,T1用工作方式2(SMOD)0,波特率不倍增。610613841200 则初值: X256 243F3H (2)设置R5为累加和寄存器,R6为数据块长度寄存器。 (3)用查询传送方式。(4)串行口为工作方式1,允许接收,即; SCON=01010000B=50H 可得甲机发送主程序如下: ORG

22、 0030H MOV TMOD, #20H ;设定时器1工作方式2。 MOV TL1, #0F3H ;设置定时器初值。 MOV TH1, #0F3H ;设置重装值。 SETB TR1 ;启动定时器1。 MOV PCON, #00H ;(SMOD)=0。 MOV SCON, #50H ;设串行工作方式1,允许接收。AGAIN:MOV DPTR, #1000H ;建立发送数据地址指针初值。 MOV R6, #20H ;数据块长度送 R6。 MOV R5, #00H ;累加和寄存器清“0”。 MOV SBUF, R6 ;先发送长度值。 L1:JBC TI, L2 ;等待发送结束。 AJMP L1 L

23、2:MOVX A, DPTR ;取数据块中数据。MOV SBUF, A ;发送数据。ADD A, R5 ;发送数据累加。 MOV R5, A ;累加和送R5。INC DPTR ;地址加1。L3:JBC TI, L4 ;等待一帧数据发送完毕。 AJMP L3L4:DJNZ R6, L2 ;判断数据块是否发送完,若未完继续发送。 MOV SBUF, R5 ;数据块发送完毕,发累加和校验码。 L5:JBC TI, L6 ;等待发送累加和码结束。 AJMP L5L6:JBC RI, L7 ;接收从机发来的结果标志码。 AJMP L6L7:MOV A, SBUF JZ L8 ;若标志码为00H,表示接收

24、正确,返回;反之重发。 AJMP AGAIN ;发送有错,重发。L8:RET 乙机接收参考程序如下: ORG 0030H MOV TMOD, #20H ;设定时器1工作方式2。 MOV TL1, #0F3H ;设置定时器初值。 MOV TH0, #0F3H ;设置重装值。 SETB TR1 ;启动T1。 MOV PCON, #00H ;SMOD=0。 MOV SCON, #50H ;设串行工作方式1,允许接收。AGAIN:MOV DPTR, #1000H ;建立接收地址指针初值L0:JBC RI, L1 ;接收发送长度值。 AJMP L0L1:MOV A, SBUF MOV R6, A ;取发

25、送长度值送R6。MOV R5, #00H ;累加和寄存器清”0”。WAIT:JBC RI, L2 ;接收数据。AJMP WAITL2:MOV A, SBUF MOVX DPTR,A ;将所接收数据送数据区。INC DPTR ;指向下一单元。ADD A, R5 ;累加。MOV R5, ADJNZ R6, WAIT ;若数据接收未完继续。L3:JBC RI, L4 ;数据接收完毕,接收主机的累加校验码。 AJMP L3L4:MOV A, SBUF ;取主机累加和校验码。XRL A, R5 ;与本机累加和进行校验。JZ L7 ;若校验正确转L7。MOV SBUF, #0FFH ;校验出错,回送校验出

26、错标志码FFH,表示要求主机重发。L5:JBC TI, L6 ;回送FFH。AJMP L5L6:AJMP AGAIN ;重新接收L7:MOV SBUF, #00H ;回送校验正确标志码00H。L8:JBC TI, L9 ;回送。AJMP L8 L9:RET ;接收完成,返回。 3串行工作方式2 方式2是11位为一帧的串行通信方式,即1位始位,9位数据位和1位停止位。其中第9位数据既可作奇偶校验位,也可作控制位使用。其帧格式为: 起 始 D0 D1 D2 D3 D4 D5 D6 D7 D8 停 止 附加第9位(D8)由软件置1或清零。方式2发送时单片机自动将SBUF中8位数据加上SCON中TB8

27、作为第9位数据进行发送。接收时,单片机将接收到的前8位数据送入SBUF,而在SCON中RB8位中存放第9位数据。方式2波特率只有两种,用公式表示: 波特率(2smod/64)f晶振 当SMOD=0, 波特率为f晶振/64 当SMOD=1, 波特率为f晶振/32 4串行工作方式3 方式3通信过程与方式2完全相同。区别仅在于方式3的波特率可通过设置定时的工作方式和初值来设定(与串行工作方式1波特率设定方法相同)。 顺便指出,由于方式1和方式3的波特率设置较为灵活,在单片机串行通信中得到广泛应用。第四节 单片机多机通信原理 单片机多机通信是指一台主机和多台从机之间的通信。8051的串行通信控制寄存器

28、SCON中设有多机通信控制位SM2(SCON.5)。串行口以方式2或方式3接收时,若SM21,则仅当接收到的第九位数据为1时,才将数据送入接收缓冲器SBUF,并置位RI发出中断请求信号,否则将丢失信息;而当SM20时,则无论第九位是0还是1,都能将数据装入SBUF,并产生中断请求信号。根据这个特性,便可实现主机与多个从机之间的串行通信。 图87为8051多机通信连接示意图,图中8051为主机,其余8051为从机。 TXD RXD TXD RXD TXD RXD TXD RXD 8051 8051 8051 8051 主机 0#从机 1#从机 2#从机 图87 多机通信连接示意 以主机向从机发送

29、数据为例,在编程前,可先定义各从机通信地址,设三个从机地址分别为00H,01H,和02H。主机和从机在初始化程序中将串行口工作方式设定为11位异步通信方式(方式2或方式3),且置位SM2,允许串行口中断。在主机和某一从机通信之前,先向所有从机发出所选从机的地址,即联络通信命令,接着才发送数据或命令。 在主机发送地址时,地址数据标识位TB8(即发送的第九位数据)设置1以表示地址信息,各从机接收到主机发来的地址信息后,则置位中断标志RI,中断后判断主机送来的地址与本从机是否相符。若为本地址,则将本机SM2位清0,准备与主机进行数据通信。 没选中的从机则保持SM21状态,接着主机发送数据帧(TB80表示),各串行口同时收到了数据帧,而只有已选中的从机(SM20)才能产生中断并接收该数据,其余从机因收到第九位数据RB80且本机SM21,所以将数据丢掉。这就实现了主机和从机的一对一通信。通信只能在主从机之间进行,如若在两个从机之间进行,必需通过

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1