您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 44单片机应用技术第6章
第六章串行通信本章要点异步通信和同步通信串行通信波特率串行通信的制式串行通信的校验串行口特殊功能寄存器串行工作方式基本概念计算机与外界信息交换称为通信。通信的基本方式可分为并行通信和串行通信:并行通信是数据的各位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。并行通信优点:传送速度快缺点:不便长距离传送串行通信优点:便于长距离传送缺点:传送速度较慢6.1串行通信概述6.1.1异步通信和同步通信异步通信异步通信依靠起始位、停止位保持通信同步。异步通信数据传送按帧传输,一帧数据包含起始位、数据位、校验位和停止位。最常见的帧格式为1个起始位、8个数据位、1个校验位和1个停止位组成,帧与帧之间可有空闲位。起始位约定为0,停止位和空闲位约定为1。异步通信对硬件要求较低,实现起来比较简单、灵活,适用于数据的随机发送/接收,但因每个字节都要建立一次同步,即每个字符都要额外附加两位,所以工作速度较低,在单片机中主要采用异步通信方式。同步通信同步通信依靠同步字符保持通信同步。同步通信是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。同步通信传送的多字节数据由于中间没有空隙,因而传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。6.1.2串行通信波特率波特率bps(bitpersecond)指传输数据的速率,每秒传输数据的位数,即:1波特=1位/秒(1bps)波特率的倒数即为每位传输所需的时间。相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。6.1.3串行通信的制式单工制式指甲乙双方通信时只能单向传送数据,发送方和接收方固定。半双工制式(HalfDuplex)指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。全双工制式(FullDuplex)指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时也能发送。6.1.4串行通信的校验奇偶校验累加和校验循环冗余码校验6.280C51串行口80C51系列单片机有一个全双工的串行口,这个口既可以用于网络通信,也可以实现串行异步通信,还可以作为同步移位寄存器使用。80C51单片机串行口是由发送缓冲寄存器SBUF,接收缓冲寄存器SBUF和移位寄存器三部分组成。6.1.2串行口特殊功能寄存器串行数据缓冲器SBUFSBUF是串行口缓冲寄存器,包括发送和接收寄存器。在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H,用同一寄存器名SBUF。在物理上,SBUF有两个,一个是发送缓冲寄存器,另一个是接收缓冲寄存器。发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。串行控制寄存器SCONSCOND7D6D5D4D3D2D1D0位名称SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H功能工作方式选择多机通信控制接收允许发送第9位接收第9位发送中断接收中断①SM0SM1——串行口工作方式选择位。②SM2——多机通信控制位。在方式2和方式3中,若SM2=1且RB8(接收到的第9数据)=1时,将接收到的前8位数据送入SBUF,并置位RI产生中断;否则,将接收到的8位数据丢弃。而当SM2=0时,则不论第9位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。③REN——允许接收控制位。REN位用于对串行数据的接收进行控制:REN=0,禁止接收;REN=1,允许接收。该位由软件置位或复位。④TB8——方式2和方式3中要发送的第9位数据。在方式2或方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0表示数据,TB8=1表示地址。该位由软件置位或复位。⑤RB8——方式2和方式3中要接收的第9位数据。在方式2或方式3时,RB8存放接收到的第9位数据。⑥TI——发送中断标志。当方式0时,发送完第8位数据后,该位由硬件置位。在其他方式下,遇发送停止位时,该位由硬件置位。因此TI=1,表示帧发送结束,可软件查询TI位标志,也可以请求中断。TI位必须由软件清0。⑦RI——接收中断标志。当方式0时,接收完第8位数据后,该位由硬件置位。在其他方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束,可软件查询RI位标志,也可以请求中断。RI位也必须由软件清0。电源控制寄存器PCONPCON主要是为CHMOS型单片机电源控制而设置的专用寄存器。SMOD=1,串行口波特率加倍。PCON寄存器不能进行位寻址。PCOND7D6D5D4D3D2D1D0位名称SMOD———GF1GF0PDIDL6.2.2串行工作方式80C51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0SM1决定。方式0(同步移位寄存器工作方式)以RXD(P3.0)端作为数据移位的输入/输出端,以TXD(P3.1)端输出移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。方式0可将串行输入输出数据转换成并行输入输出数据。•••D0D1D2D3D4D5D6D7•••(1)数据发送串行口作为并行输出口使用时,要有“串入并出”的移位寄存器配合。在移位时钟脉冲(TXD)的控制下,数据从串行口RXD端逐位移入74HC164SA、SB端。当8位数据全部移出后,SCON寄存器的TI位被自动置1。其后74HC164的内容即可并行输出。74HC164CLR为清0端,输出时CLR必须为1,否则74HC164Q0~Q7输出为0。(2)数据接收串行口作为并行输入口使用时,要有“并入串出”的移位寄存器配合。74HC165S/L端为移位/置入端,当S/L=0时,从Q0~Q7并行置入数据,当S/L=1时,允许从QH端移出数据。在80C51串行控制寄存器SCON中的REN=1时,TXD端发出移位时钟脉冲,从RXD端串行输入8位数据。当接收到第8位数据D7后,置位中断标志RI,表示一帧数据接收完成。(3)波特率方式0时,移位操作的波特率是固定的,为单片机晶振频率的1/12。以fosc表示晶振频率,则波特率=fosc/12,也就是1个机器周期进行一次移位。例6-1电路如图所示,试编制程序按下列顺序要求每隔0.5秒循环操作。①8个发光二极管全部点亮;②从左向右依次暗灭,每次减少一个,直至全灭;③从左向右依次点亮,每次亮一个;④从右向左依次点亮,每次亮一个;⑤从左向右依次点亮,每次增加一个,直至全部点亮;⑥返回从②不断循环。4094为CMOS4000系列“串入并出”移位寄存器,DI端为串行数据输入端,Q1-Q8为并行数据输出端,CLK为移位脉冲输入端,STR端为门控端,STR=0时,关闭并行输出;STR=1时,开启并行输出。可考虑按上述顺序要求编一个发光二极管亮暗控制字表,依次执行。LIGHT:MOVSCON,#00H;串行口方式0CLRES;禁止串行中断MOVDPTR,#TAB;置发光二极管亮暗控制字表首址LP1:MOVR7,#0;置顺序编号0LP2:MOVA,R7;读顺序编号MOVCA,@A+DPTR;读控制字CLRP1.0;关闭并行输出MOVSBUF,A;启动串行发送JNBTI,$;等待发送完毕CLRTI;清发送中断标志SETBP1.0;开启并行输出LCALLDLY500ms;调用延时0.5秒子程序(参阅例4-13)INCR7;指向下一控制字CJNER7,#30,LP2;判循环操作完否?未完继续SJMPLP1;顺序编号0~29依次操作完毕,从0开始重新循环TAB:DB0FFH,7FH,3FH,1FH,0FH,07H,03H,01H,00H;从左向右依次暗灭,每次减少一个,直至全灭;DB80H,40H,20H,10H,08H,04H,02H,01H;从左向右依次点亮,每次亮一个DB02H,04H,08H,10H,20H,40H,80H;从右向左依次点亮,每次亮一个DB0C0H,0E0H,0F0H,0F8H,0FCH,0FEH;从左向右依次点亮,每次增加一个,直至全部点亮;例6-2电路如图所示,试编制程序输入K1~K8状态数据,并存入内RAM40H。4014为CMOS4000系列“并入串出”移位寄存器,P1-P8为并行数据输入端,CLK为移位脉冲输入端,Q8端为串行数据输出端,P/S为预置控制端:P/S=1时,锁存并行输入数据;P/S=0时,可进行串行移位操作。KIN:MOVSCON,#00H;串行口方式0CLRES;禁止串行中断SETBP1.0;锁存并行输入数据CLRP1.0;允许串行移位操作SETBREN;允许并启动接收(TXD发送移位脉冲)JNBRI,$;等待接收完毕MOV40H,SBUF;存入K1~K8状态数据RET;方式1方式1是一帧10位的异步串行通信方式,包括1个起始位,8个数据位和1个停止位。其帧格式:⑴数据发送发送时只要将数据写入SBUF,在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式。然后在移位脉冲的作用下,由TXD端串行输出。一帧数据发送完毕,将SCON中的TI置1。起始D0D1D2D3D4D5D6D7停止⑵数据接收接收时,在REN=1前提下,当采样到RXD从1向0跳变状态时,就认定为已接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入SBUF中,直到停止位到来之后把停止位送入RB8中。一帧数据接收完毕,将SCON中的RI置1,表示可以从SBUF取走接收到的一个字符。⑶波特率方式1的波特率是可变的,由定时/计数器T1的计数溢出率来决定。波特率=2SMOD×(T1溢出率)/32其中SMOD为PCON寄存器中最高位的值,SMOD=1表示波特率倍增。在实际应用时,通常是先确定波特率,后根据波特率求T1定时初值,因此上式又可写为:T1初值=256-2SMOD/32×fosc/(12×波特率)例6-3设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM40H~4FH单元中,乙机接收后存在内RAM50H为首地址的区域中。解:串行方式1波特率取决于T1溢出率(设SMOD=0),计算T1定时初值:T1初值=256–(20/32)×11059200/(12×1200)=232=E8H甲机发送子程序:TXDA:MOVTMOD,#20H;置T1定时器工作方式2MOVTL1,#0E8H;置T1计数初值MOVTH1,#0E8H;置T1计数重装值CLRET1;禁止T1中断SETBTR1;T1启动MOVSCON,#40H;置串行方式1,禁止接收MOVPCON,#00H;置SMOD=0(SMOD不能位操作)CLRES;禁止串行中断MOVR0,#40H;置发送数据区首地址MOVR2,#16;置发送数据长度TRSA:MOVA,@R0;读一个数据MOVSBUF,A;发送JNBTI,$;等待一帧数据发送完毕CLRTI;清发送中断标志INCR0;指向下一字节单元DJNZR2,TRSA;判16个数据发完否?未完继续RET;乙机接收子程序:RXDB:MOVTMOD,#20H;置T1定时器工作方式2MOVTL1,#0E8H;置T1计数初值MOVTH1,#0E8H;置T1计数重装值CLRET1;禁止T1中断SETBTR1;T1启动MOVSCON,#40H;置串行方式1,禁止接收MOVPCON,#00H;置SMOD=0(SMOD不能位操作)CLRES;禁止串行中断MOVR0,#50H;置接收数据区首地址MOVR2,#16;置接收数据长度SETB
本文标题:44单片机应用技术第6章
链接地址:https://www.777doc.com/doc-3372157 .html