8051单片机的异步串行通信技术_第1页
8051单片机的异步串行通信技术_第2页
8051单片机的异步串行通信技术_第3页
8051单片机的异步串行通信技术_第4页
8051单片机的异步串行通信技术_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、异步串行通信一次传送一个完整字符,字符格式如图81 所示:图 8 1 异步串行通信的字符格式一个字符应包括以下信息: 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 串行口的基本结构 mcs 51 系列单片机串行口结构框图如图83 所示:图 8 3 8051串行口结构框图一、串行口缓冲寄存器sbuf 图 8 3 中 subf是串行口缓冲寄存器,发送sbuf和接收sbuf地址同为99h,但由于发送 sbuf不能接收数据,接收sbuf也不具有发送功能,故二者工作互不干扰。当 cpu向 sbuf写入时,数据进入发送sbuf ,同时启动串行发送;cpu读 sbuf时,实际上是读接收 sbuf数据。二、串行通信控制寄存器与串行通信有关的控制寄存器主要是串行通信控制寄存器scon 。scon 是 8051 的一个可以位寻址的专用寄存器,用于串行数

5、据通信的控制。scon 的单元地址98h,位地址 9fh98h。寄存器内容及位地址表示如下:scon 位地址9f 9e 9d 9c 9b 9a 99 98 位符号sm0 sm1 sm2 ren tb8 rb8 ti ri 各位功能说明如下:位符号功能说明sm0 ,sm1 sm0 ,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位数码传送,波特率可变。sm2 sm2 多机通信控制位:当串行

6、口以方式2 或方式 3 接收时,如sm2 1,则只有当接收到的第九位数据( rb8 )为 1,才将接收到的前8 位数据送入接收sbuf ,并使 ri位置 1,产生中断请求信号;否则将接收到的前8 位数据丢弃。而当sm20 时,则不论第九位数据为0 还是为 1,都将前8 位数据装入接收sbuf中,并产生中断请求信号。对方式 0,sm2必须为 0, 对方式 1,当 sm2=1 ,只有接收到有效停止位后才使ri 位置 1。ren ren 允许接收位,用于对串行数据的接收进行控制: ren0, 禁止接收; ren 1,允许接收。该位由软件置1 或清零。tb8 tb8发送数据位8:在方式 2 和方式 3

7、 时, tb8是要发送的第9 位数据。rb8 rb8 接收数据位8:在方式 2 和方式 3 中, rb8位存放接收到的第9 位数据ti ti 发送中断标志:当方式 0 时,发送完第8 位数据后,该位由硬件置位。在其它方式下,于发送停止位之前由硬件置位。因此ti1,表示帧发送结束。其状态既可供软件查询使用,也可请求中断。 ti位由软件清0。ri ri接收中断标志:当方式 0 时,接收完第8 位数据后,该位由硬件置1。在其它方式下,当接收到停止位时,该位由硬件置位。因此ri 1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。ri 位由软件清0。另外,电源控制寄存器pcon 中 smod

8、 位可影响串行口的波特率。当( smod ) 1,串行口波特率加倍。还有中断允许寄存器ie 中的 es位可选择串行口中断允许或禁止。 es0,禁止串行口中断 es1,允许串行口中断第三节 80 51 串行通信工作方式及应用 8051单片机的串行通信共有四种工作方式:1 串行工作方式0 串行口为同步移位寄存器方式,波特率固定为f晶振/12 。该方式主要用于i/o 口扩展等,方式 0 传送数据时,串行数据由rxd (p3.0 )端输入或输出,而txd (p3.1 )此时仅作为同步移位脉冲发生器发出移位脉冲。串行数据的发送和接收以8 位为一帧,不设起始位和停止位,其格式如下:d0 d1 d2 d3

9、d4 d5 d6 d7 方式 0 输出数据时,向sbuf写入数据的指令: mov sbuf, a 或: mov sbuf, xxh 即为从 rxd端输出数据的发送启动指令。当位数据全部移出后,scon 中的 ti 位被自动置 1。方式 0 输入数据时,使 scon 中 ren位置 1 指令:setb ren 即为从 rxd端输入数据启动指令。当接收到8 位数据后scon 中的 ri 位被自动置1。方式 0 工作时往往需要外部有串入并出寄存器(输出)和并入串出寄存器(输入)配合使用,方式 0 多用于将串行口转变为并行口的使用场合,如图8 4 所示:并行输出并行输入 8051 串行输出 p8 p1

10、 8051 串行输入 p8 p1 rxd d cd4094 rxd q8 cd4014 txd clk stb txd clk p/s 移位脉冲移位脉冲 p1.0 p1.0 (a)(b)图 8 4 串行工作方式0 与输入,输出电路的连接示例图 84(a)中 cd4094是”串入并出”移位寄存器,txd端输出频率为f晶振 /12的固定方波信号(移位脉冲),在该移位脉冲的作用下,d端串行输入数据可依次存入cd4094内部 8d锁存器锁存。 p1.0 为选通信号,当 p1.0=stb 为高电平时,将内部8d锁存器数据并行输出。图 84(b)中 cd4014为“串入 / 并出串出”移位寄存器,p1 p

11、8为并行输入端,q8为串行输出端,当 p1.0=p/s=1 , 加在并行输入端p1p8 上的数据在时钟脉冲作用下从q8端串行输出。方式 0 的移位操作的波特率固定为单片机晶振频率f晶振的十二分之一。即:波特率 =f晶振/12 。例如当 f晶振=12mhz ,波特率 = 10 6(位 / 秒)。例 81 试编写从cd4094并行输出数据36h的参考程序:解:参考程序如下: mov scon, #00h ;串行口工作方式0。 clr es ;禁止串行口中断。 mov a, #36h ;传送数据送a。 clr p1.0 ;关闭并行输出。 mov sbuf, a ;启动串行输出。 here:jbc t

12、i, fs ;等待串行输出完毕。 ajmp here fs:setb p1.0 ;开启并行输出。ret ;返回。 2串行工作方式1 (1)方式传送的数据格式方式传送一帧为10 位的串行数据,包括1 位起始位, 8 位数据位和1 位停止位。其帧格式为:起始 d0 d1 d2 d3 d4 d5 d6 d7 停止(2)方式 1 的波特率的确定方式 1 的波特率是可变的,计算公式为:波特率 =( 2smod / 32 )( t1 溢出率)其中 smod为 pcon 寄存器最高位的值。所谓定时器t1 的溢出就是t1 在单位时间内溢出的次数。如设t1 为工作方式2,那么 t1定时时间:t1 定时 =(28

13、x ) t机 = (28x) 12 / f晶振则 t1的溢出率 = 1/ t1定时 = f晶振/ (12(28x)由此可得波特率的计算公式为:波特率 =(2smod/32 ) f晶振/ ( 12(28x)实际使用时总是先确定波特率,再计算定时器t1 的记数初值x,然后进行t1 的初始化。根据上述波特率的计算公式,可得t1 记数初值的计算公式为: x = 256 ( f晶振2smod )/ (384波特率)定时器 t1 之所以选择工作方式2,是因为方式2 具有自动加载功能,可避免通过程序反复装入计数初值而影响波特率的准确性。(3)方式 1 数据的发送和接收方式 1 的数据发送由一条写入单片机发送

14、寄存器sbuf指令启动。 8 位数据在串行口由硬件自动加入起始位和停止位组成完整的帧格式。在内部移位脉冲作用下,由txd端串行输出。发送完一帧数据后,使txd输出端维持”1”状态并置使ti 标志位置1 以通知 cpu发送下一个字符。接收数据由接收单片机scon 中的 ren置 1 开始,随后串行口不断采样rxd端电平, 当采样到 rxd端电平从1 向 0 跳变时,就认定是接收信号并开始接收从rxd端输入的数据,并送入内部接收寄存器sbuf中,直到停止位到来之后,并使ri 位置 1,通知 cpu从 sbuf中取走接收到的一帧字符。方式 1 传送数据时发送前应先清ti ,接收前应先清ri。例 82

15、 甲,乙两单片机拟以工作方式1 进行串行数据通信,波特率为 1200,甲机发送,发送数据在甲机外部ram 1000h 101fh 单元中。乙机接收,并把接收数据依次放入乙机外部ram 1000h 101fh单元中。甲,乙机晶振频率均为6mhz 。连接方式如图8 5 所示: txd rxd 甲机乙机图 8 5 例 8 2 示意图解:设定:(1) 甲、乙机定时用工作方式2,即初值61061 384 1200 x 256 243 f3h (2) smod0,即波特率不倍增。 (3) 用查询传送方式。 (4) scon=01000000b=40h 可得甲机发送主程序如下:org 0030h mov t

16、mod, #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 ;启动定时器1。 send :movx a, dptr ;取数据。 mov sbuf,a ;启动数据传送操作。 jnb ti, $ ;等待一帧发送完毕。 clr ti ;清 ti 标志

17、。 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 ; smod=0。 mov scon, #40h ;设串行工作方式1。 mov dptr, #1000h ;建立接收地址指针初值。 mov r7, #20h ;建立计数指针

18、。 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 ;返回。如改用中断方式甲机发送参考程序如下: org 0000h ajmp main org 0023h ljmp asend ;建立串行中断口地址。 org 0030h main :mov

19、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 ;串行中断允许。 setb tr0 ;启动定时器0。 movx a, dptr ;第一个数据送a。 mov sbuf, a ;启动传送数据操作。 inc dptr

20、 ;指向下一ram单元。wait :ajmp $ ;等待中断。中断服务子程序: org 0100h clr ti ; 清 ti 。asend :movx a, dptr ;取数据。 mov sbuf, a ;传送数据 inc dptr ;指向下一单元。 djnz r7, goon ;传送结束?没结束继续传送。 clr ea ;传送结束,关闭。 clr tr1 goon :reti ;返回。顺便指出,甲机以中断方式传送数据时,计数指示为1fh而非 20h,这是因为在启动甲机发送时已经向sbuf发送了一个数据。至于乙机,既可用上述查询方式接收,也可用中断方式接收。中断方式程序设计思路与查询方式类似

21、,不再细述。在异步串行通讯中,接收机以波特率的3 倍检测 rxd端信号,检测到两次以上相同信号即为有效信号。在实际应用中,可根椐需要加入奇偶校验位一起传送,以提高传送的可靠性。例 83 甲,乙两单片机同样以工作方式1 进行串行数据通信,波特率为1200,甲机发送,发送数据在甲机外部ram 1000h101fh单元中,在发送之前先将数据块长度发送给乙机,发送完后,向乙机发送一个累加校验和。乙机接收,乙机首先接收数据长度,然后接收数据,并把接收数据依次放入乙机外部ram 1000h101fh单元中,接收完毕后进行一次累加和校验,数据全部接收完毕时向甲机送出状态字,表示传送状态。甲、乙机晶振频率均为

22、6mhz 。连接方式见图8 6:甲乙 txd rxd rxd txd 图 8 6 例 8 3 示意图解:设定如下:( 1)波特率约定为1200 ,以定时器t1 为波特率发生器,t1 用工作方式2( smod ) 0,波特率不倍增。则初值: x 256 243 f3h (2)设置 r5为累加和寄存器,r6为数据块长度寄存器。(3)用查询传送方式。(4)串行口为工作方式1,允许接收,即; scon=01010000b=50h 可得甲机发送主程序如下:org 0030h mov tmod, #20h ;设定时器1 工作方式2。 mov tl1, #0f3h ;设置定时器初值。 mov th1, #0

23、f3h ;设置重装值。 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 ;等待发送结束。61061 384 1200 ajmp l1 l2: movx a, dptr ;取数据块中数据。mov sbuf , a ;发送数据。add a, r5

24、;发送数据累加。mov r5 , a ;累加和送r5。inc dptr ;地址加1。l3:jbc ti, l4 ;等待一帧数据发送完毕。 ajmp l3 l4:djnz r6 , l2 ;判断数据块是否发送完,若未完继续发送。 mov sbuf, r5 ;数据块发送完毕,发累加和校验码。l5:jbc ti, l6 ;等待发送累加和码结束。 ajmp l5 l6:jbc ri, l7 ;接收从机发来的结果标志码。 ajmp l6 l7:mov a , sbuf jz l8 ;若标志码为00h,表示接收正确,返回;反之重发。 ajmp again ;发送有错,重发。l8:ret 乙机接收参考程序如

25、下: 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 l0 l1:mov a, sbuf mov r6, a ;取发送长度值送r6 。mov r5, #00h ;累加和寄存器清”0”。wait :jb

26、c ri, l2 ;接收数据。ajmp wait l2:mov a, sbuf movx dptr,a ;将所接收数据送数据区。inc dptr ;指向下一单元。add a , r5 ;累加。mov r5 , a djnz r6 , wait ;若数据接收未完继续。l3:jbc ri, l4 ;数据接收完毕,接收主机的累加校验码。 ajmp l3 l4:mov a, sbuf ;取主机累加和校验码。xrl a, r5 ;与本机累加和进行校验。jz l7 ;若校验正确转l7。mov sbuf, #0ffh ;校验出错,回送校验出错标志码ffh ,表示要求主机重发。l5:jbc ti, l6 ;回

27、送 ffh 。ajmp l5 l6: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作为第 9 位数据进行发送。接收时, 单片机将接收到的前8 位数据送入sbuf ,而在scon 中 rb8位中存放第9 位数据。方式2 波特率只有两种,用公式表示:波特率( 2smod/64 ) f晶振当 smod=0 , 波特率为f晶振/64 当 smod=1 , 波特率为f晶振/32 4串行工作方式3 方式 3 通信过程与方式2 完

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论