资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,湖南理工学院机械与电气工程系,单片机原理,及应用教程,机械工业出版社,第六章 单片机串口及应用,计算机与外部设备的基本通信方式有两种,:,并行通信、串行通信,。,一、串行通信的基本概念,(1),、异步通信,1,、串,行,通信有两种基本通信方式:,异步通信、同步通信,。,在停止位后不接着传送下一个字符,在,停止位后接着传送下一个字符,并行通信,:,以字,(,字节,),为单位,数据的各个位同时进行传送。,串行通信,:,以数据位为单位,一位一位顺序进行传送。,发送方将数据怎样分割成位,接收方将接收的位流还原成,数据。这就牵涉到通信格式。,0/1,D0,D1,D2,D3,D4,D5,D6,D7,0/1,1,D0,D1,0,D7,1,第,n-1,个字符,第,n+1,个字符,第,n,个字符帧,8,位数据位,0,停,止,位,起,始,位,停,止,位,起,始,位,在停止位后不接着传送下一个字符,在,停止位后接着传送下一个字符,注意这几个概念:,起始位、数据位、校验位、停止位,。,0/1,D0,D1,D2,D3,D4,D5,D6,D7,0/1,1,1,1,1,D7,1,第,n-1,个字符,第,n+1,个字符,第,n,个字符帧,8,位数据位,0,空,闲,位,起,始,位,D0,1,空闲位,0,(2),、同步通信,数据,1,数据,2,同步字符,1,同步字符,2,数据,1,数据,2,同步字符,数据,3,数据,4,异步通信以数据帧的格式来组织,一帧数据包含起始位和停,止位,不要求,发收,方的时钟精确同步。,EB90H,SYN=16H,2,、数据传送的方式,全双工方式,单工方式,发 送 器,接 收 器,A,站点,B,站点,(a),单工数据传送,半双工方式,发送器,接收器,发送器,接收器,A,站点,B,站点,(b),(b),半双工数据传送,发送器,发送器,接收器,接收器,A,站点,B,站点,(c),全双工数据传送,3,、波特率和发送,/,接收时钟,时钟,数据,时钟,数据,每位,传送时间,Td,与发送,/,接收时钟,Tc,的关系为,:,Td =n,Tc,n取1,16,32 ,64,波特率,发送时钟,/,接收时钟,4,、奇偶校验,二、,MCS-51,串行口的基本结构,:,SBUF(,发送,),发送控制,发送,端口,接收控制,SBUF(,接收,),波,特,率,控,制,写SBUF,接收端口,接收移位寄存器,TxD(P3.1),RxD(P3.0),读SBUF,DB,DB,内,部,数,据,总,线,1,串,行,中,断,TI,RI,发送过程,:,执行一条写,SBUF,指令启动一帧数据的发送,.,(MOV SBUF,A),要预先设置好波特率,.,一帧数据发送,完毕,置位,TI,申请中断,.,接收过程,:,当检测到期,RxD,引脚上的起始位后,便一位一位,的移入到移位寄存器,接收完一帧后送,SBUF,并置位,RI,向,CPU,申请中断。,CPU,响应中断后,执行一条读,SBUF,指令,将数据保存到某一单元。,(MOV A,SBUF),串行口,控制,:,1.,串行口控制寄存器,SCON,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,D7 D6 D5 D4 D3 D2 D1 D0,工作方式控制位,多机,通信位,串行口,接收使能,发送的第,9,位数据,接收中断,发送中断,接收的第,9,位,数据,SM0 SM1,工作方式,功能,波特率,0 0,方式,0,同步移位寄存器,fosc/12,0 1,方式,1,10,位异步收发,定时器,T1,的溢出率,1 0,方式,2,11,位异步收发,fosc/32,fosc/64,1 1,方式,3,11,位异步收发,定时器,T1,的溢出率,串行口的工作方式,:,2.,电源管理寄存器,PCON:,SMODGF1GF0PDIDL,PCON.7,PCON.0,空闲方式的控制位,掉电,方式控制位,通用标志,串行口,波特率控制,1,、方式,0:,同步移位寄存器输入,/,输出方式,.,串行数据通过,RxD,输入或输出,TxD,输出同步脉冲。,数据帧格式,:,D0,D1,D2,D3,D4,D5,.,.,D6,D7,串行口的工作方式和波特率设置,发送过程,怎样启动一帧数据的发送?,怎么检测一帧数据发送结束?,单片机,CPU,怎么与串行口协调,工作?,怎么与外部接收设备同步?,写SBUF,D,1,7,位,0,检测,有效,?,NO,YES,最后移一次,移位发送,置TI,D,SBUF,0,写SBUF,1,DB,接收过程,接收条件,(R,EN=1)and(RI=0),怎样启动一帧数据的接收过程?,怎么知道一帧数据接收结束?,单片机,CPU,怎么与外部发送设协调工作?,条件成立,?,置RI,接收最后,1,位,YES,YES,NO,移位,寄存器,移位寄存器,最左一位为,0?,移位寄存器左移,NO,11111110,串行口方式,0,应用实例,:,1.,方式,0,下的,串入,并出或并入,-,串出,的使用,.,例,.,通过串行口扩展并行口依次循环点亮,8,个发光二极管,8051,RXD,TXD,P1.0,Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8,STB,CD4094,SI,CLK,CD4094,工作模式:串,行,输入模式:,STB=0,。,并行输出模式:,STB=1,。,源程序如下,:,按中断方式工作,.,ORG 0000H,LJMP START,ORG 0023H,LJMP SBI,SBI:SETB P1.0,ACALL DELY,CLR TI,RL A,CLR P1.0,MOV SBUF,A,RETI,END,ORG 0050H,START:MOV SCON,#00H,MOV A ,#01H,MOV IE,#90H,CLR P1.0,MOV SBUF,A,SJMP$,按查询方式工作,:,ORG 0000H,LJMP START,;ORG 0023H,;LJMP SBI,ORG 0050H,START:MOV SCON,#00H,MOV A,#01H,LP:CLR P1.0,MOV SBUF,A,JNB TI ,$,CLR TI,SETB P1.0,ACALL DELY,RL A,SJMP LP,END,例,.,串行口扩展,外接一片,CD4014,扩展 为,8,位并行口,输入,8,路,开关信息,设有一开关提供联络,S=0,请求输入。试编程将,8,位,开关量存入片内,30H,单元,.,8051,RXD,TXD,P1.0,P1.1,D1 D2 D3 D4 D5 D6 D7 D8,P/S,CD4014,SI,CLK,S,P/S,为控制端,:P/S=0,则,CD4014,工作在 串行输出模式,,P/S=1,,则,CD4014,工作并行输入模式。,;,程序如下,:,ORG 2000H,WAT1:JB P1.1,WAT1,SETB P1.0,;,并行输入开关信息,CLR P1.0,;,串行输出到单片机,MOV SCON ,#10H,;,串口方式,0,,接收允许。,WAT2:JNB RI ,WAT2,CLR RI,MOV A ,SBUF,MOV 30H ,A,SJMP$,2.,方式,1:,波特率可变的,10,位异步通信方式。由,TxD,端发送数据,RxD,接收数据,一帧数据由,1,位起始位,8,位数据位和,1,位停止位,组成。,数据帧格式,:,D0 D1 D2 D3 D4 D5 D6 D7,起始,停止,在发送和接收数据之前设置好发送方和接收方的波特率。,写SBUF,D,8,1,7,位,0,检测,有效,?,NO,YES,最后移位,1,次,输出停止位,移位发送,置TI,怎样启动一帧数据的发送?,怎么检测一帧数据发送结束?,单片机,CPU,怎么与串口协调,工作?,怎么与外部接收设备协调?,发送过程,:,D,SBUF,0,写SBUF,1,DB,c.,接收过程,:,软件使,R,EN=1.,怎样启动一帧数据的,接收过程?,怎么知道一帧数据的,接收结束?,单片机,CPU,怎么与串口,协调工作?,是起始位,?,移位接收,接收最后一位,置位,RI,起始位已移到,最左,?,NO,YES,YES,NO,RI&SM2=0?,或,RI=0&SM2=1&,停,止位,=1,装入,SBUF,RB8,停止位,移位寄存器,1FFH,2.,方式,2,和方式,3:,这二种方式都是,11,异步通信方式,只是波特率不同,适合多机通信,.,在这两种方式下,数据由,TxD,发送,RxD,接收,一帧数据由,1,位起始位,9,位数据位和,1,位停止位组成,.,第,9,位保存在,TB8,中,可由软件设定为,1,或,0,既可作为校验位,也可作为地址数据帧标识,.,(1),、数据帧格式,:,*发送过程,写,SBUF,D,触发器,TB8,7,位,0,检测,有效,?,NO,YES,最后移位,1,次,输出停止位,移位发送,置TI,D0 D1 D2 D3 D4 D5 D6 D7,起始,停止,D8,D,SBUF,0,写SBUF,Q,DB,TB8,是起始位,?,移位接收,接收最后一位,置位,RI,起始位已移到,最左,?,NO,YES,YES,NO,RI=0,与,SM2=0?,或,SM2=1,与接收的第九位,=1,装入,SBUF,RB8,第九位,移位寄存器,1FFH,c.,接收过程,:,二,.,波特率设定方法,:,1.,方式,0,的波特率,:,波特率,=fosc/12,2.,方式,2,波特率,:,波特率,=,2,SMOD,T1,的溢出率,3.,方式,1,和方式,3,的波特率,:,波特率,=,2,SMOD,64,fosc,4.T1,溢出率的计算,:,设,Tc,为定时器,T1,的溢出周期,.,(2,n,-X),12/fosc,Tc,=,T1,的溢出率,=,fsoc,(2,n,-X),12,即:,波特率,=,2,SMOD,fsoc,(2,n,-X),12,由此式可求出,X,书中常用波特率一览表可供使用,.,单片机,几种工作方式的比较:,发送数据:,执行一条写,SBUF,指令启动一帧数据的发送过程,一帧数据,发送完毕,串口置位中断请求标志,TI,,,通知单片机。,(,1,),方式,0,:写,SCON,使,REN=1,、,RI=0,,,启动一帧数据的接,收,一帧数据接收完毕,装载,SBUF,并置接收中断请求标志,RI=1,,,通知单片机,(SM2=0),。,(,2,)方式,1,:写,SCON,使,REN=1,,,启动串口工作,串口先,测试当前数据是否为起始位,检查到起始位后逐位移入移,位寄存器,若,RI=SM2=0,,,装载,SBUF,,,置位,RI,,,且停止位,送,RB8,,,通知单片机。或,RI=0,、,SM2=1,且,接收的停止位为,1,时,装载,SBUF,,,置位,RI,。,接收数据:,(,3,)方式,2,和方式,3,:,写,SCON,使,REN=1,,,启动串口工作,,串口先测试当前数据是否为起始位,检查到起始位后逐位,移入移位寄存器,若,RI=SM2=0,,,装载,SBUF,,,且第九位数,据送,RB8,,,置位,RI,。若,RI=0&SM2=1,只有接收的第九位数,据为,1,时方可装载,SBUF,,,且第九位数据送,RB8,,,置位,RI,,,通知单片机。,单片机,串口发送程序的一般结构:,开始,定时计数器,T1,方式,2,按,波特率设定时初值,启动,T1,按,要求初始化,SCON,初始化,SMOD,开,中断,启动串口发送,等待串口中断,初始化数据地址指针,初始化数据长度个数,TI=1,?,清TI=0,指向下一个数据,数据发送完否?,启动串口发送,返回,NO,YES,YES,NO,例:编一个数据发送程序,将片内,RAM,中,20H2FH,的数据串行发,送。串行口设定为方式,2,,,TB8,作校验位。,ORG 0000H,LJMP SEND,ORG 0023H,LJMP SBI,ORG 0030H,SEND:,MOV SCON,#80H,MOV PCON,#00H,MOV R0,#20H,MOV R2,#10H,SETB EA,SETB ES,MOV A ,R0,MOV C,P,MOV TB8 ,C,MOV SBUF ,A,SJMP$,主,程,序,中断服务程序:,SBI:PUSH PSW,PUSH ACC,JBC TI,NEXT,SJMP EXTURN,NEXT:DJNZ R2,NEXT,SJMP RETURN,NEXT:INC R0,MOV A ,R0,MOV C,P,MOV TB8 ,C,MOV SBUF ,A,RETURN:POP ACC,POP PSW,RETI,上题查询方式编程:,ORG 0000H,LJMP SEND,ORG 0030H,SEND:MOV SCON,#80H,MOV PCON,#00H,MOV R0,#20H,MOV R2,#10H,LOOP:MOV A ,R0,MOV C,P,MOV TB8 ,C,MOV SBUF ,A,WAIT:JBC TI,NEXT,SJMP WAIT,NEXT:INC R0,DJNZ R2 ,LOOP,SJMP$,2,、,8051,点对点串行通信应用举例,:,利用,8051,串行口可以进行两个,8051,单片机之间的串行异步通信,.,例,:,甲,乙两机双机通信,甲以查询方式发送数据,乙以中断方式接收数据,编写通信子程序,.,通信协议,:*,约定波特率,:2400b/s(fosc=6MHz);,约定工作方式,1.,*,通信开始,甲机先发通信呼叫信号,06H,询问乙机可否,接收数据,乙机收到了呼叫后若同意接收,则发回,00H,作答,否则,发,15H,作答,.,*,甲机只有在收到了乙机的应答,00H,后才发送数据,.,否则,继续呼叫,.,发送数据的格式,:,字节数,n,数据,1,数据,2,数据,3 ,数据,n,校验和,*乙机根据接收的校验和,判断接收数据的正确性,若正确,向甲机,0FH,否则发,F0H,甲机收到了乙机的,0FH,信后发送,结束,否则甲机重发直到乙机正确接收,.,甲机查询方式发送子程序,:,地址指针,DPTR,长度计数器,R7,校验计数器,R6,置初值,开始,定时器,串行口初始化,发呼叫信号,06H,等待乙机回答,是00H?,NO,Y,发送字节长度数据,发送数据,发送完否,?,N,Y,发送校验和,等待乙机回答,传送正确吗,?,Y,返回,求校验和,求校验和,NO,资源安排,:,31H,30H,为待发送数据块首地址的高低,8,位,2FH,单元为待发送,数据块的长度,.R6,为累加和寄存器,R7,为数据块长度计数器,.,程序清单,:,FMT_T_S:MOV TMOD ,#20H ;,定时器,1,工作在方式,2,MOV TH1 ,#0FAH ;,设置波特率,MOV TL1 ,#0FAH,STEB TR1,MOV SCON ,#50H ;,串行口方式,1,启动接收,MOV PCON,#00H ;,波特率为,2400b/s;,FMT_RAM:MOV DPH ,31H ;,初始化,DPTR,MOV DPL ,30H,MOV R6,#00H ;,清累加和寄存器,MOV R7,2FH ;,送字节数,TX_ACK:MOV A,#06H ;,发呼叫信号,MOV SBUF ,A,WAIT1:,JBC TI,RX_YES,;,等待发送完,1,个字节,SJMP,WAIT1,RX_YES:,JBC RI ,NEXT1 ;,接收乙机应答,SJMP RX_YES,NEXT1:MOV A,SBUF,CJNE A ,#00H,TX_ACK,;,继续呼叫,MOV A,R7 ;,向乙机发送要传送字节数,MOV SBUF ,A,ADD A,R6 ;,求累加和,MOV R6 ,A,WAIT2:JBC TI ,TX_NEWS,SJMP WAIT2,TX_NEWS:MOVX A,DPTR ;,发送数据,MOV SBUF ,A,ADD A ,R6 ;,求累加和,MOV R6 ,A,INC DPTR ;,修改地址,WAIT3:JBC TI,NEXT2 ;,等待发送完毕,1,字节,SJMP WAIT3,NEXT2:DJNZ R7 ,TX_NEWS ;,判断发送结束否,TX_SUM:MOV A,R6 ;,发送累加和,MOV SBUF ,R6,WAIT4:JBC TI,RX_0FH,SJMP WAIT4,RX_0FH:JBC RI ,IF_0FH ;,等待乙机回答,SJMP RX_0FH,IF_0FH:MOV A,SBUF,CJNE A ,#0FH,FMT_RAM ;,判断传送是否正确,RET,乙机中断方式接收子程序,:,中断服务程序,关中断,保护现场,呼叫信号帧,?,Y,是06H?,向甲机发送,00H,清呼叫标志,向甲机发送,15H,N,送,32H,单元保存,数据块长度帧,?,清长度发送标志,数据帧,?,存数据到片外,RAM,形成累加和,地址指针加,1,是最后,1,位,?,Y,清数据,发送标志,Y,N,N,Y,接收校验和,传送正确,?,Y,N,向甲机发回,0FH,重置呼叫,发送,数据,标志,.,清累加和,初始化数据,地址,30H,31H,发,F0H,恢复现场,开中断,返回,Y,N,资源安排,:31H,和,30H,待存放数据,RAM,地址的高低,8,位,32H,数据块,长度寄存器,33H,累加校验和寄存,.,标志位,:7F,7E,7D,分别为呼叫标志,数据发送标志,校验和发送标志,.,;,主程序,ORG 00000H,LJMP FMT_T_S,ORG 0023H,LJMP SERVE,ORG 0050H,FMT_T_S:MOV TMOD ,#20H ;,初始化定时器,T1,的工作方式,MOV TH1,#0FAH ;,波特率为,2400b/s,MOV TL1,#0FAH,MOV SCON ,#50H,;,方式,2,接收允许,MOV PCON,#00H,SETB TR1 ;,启动定时器,SETB 7FH ;,标志位初始化,SETB 7EH,SETB 7DH,MOV 31H,#10H ;,初始化数据地址,MOV 30H ,#00H,MOV 33H ,#00H ;,清累加和,SETB EA ;,开中断,SETB ES,;,转主程序,.,;,中断服务程序,SERVE:CLR EA ;,关中断,CLR RI ;,清接收中断标志,PUSH DPH ;,保护现场,PUSH DPL,PUSH ACC,JB 7FH,RX_ACK ;,是呼叫信号吗,?,JB 7EH,RX_BYTES ;,是数据块长度信号吗,?,JB 7DH,RX_DATA ;,是数据吗,?,RX_SUM:MOV A ,SUBF ;,接收校验和,CJNE A,33H,TX_ERR ;,判断是否正确,正确回发,0FH,;,否则回发,F0H,TX_RIGHT:MOV A ,#0FH ;,正确时应答,MOV SBUF ,A,WAIT1:JNB TI ,WAIT1,CLR TI,SJMP AGAIN,TX_ERR:MOV A ,#0F0H ;,错误时应答,MOV SBUF,A,WAIT2:JNB TI ,WAIT2,CLR TI,SJMP AGAIN,RX_ACK:MOV A ,SBUF ;,判断是否是甲机的呼叫信号,XRL A ,#06H,JZ TX_AGRRE,TX_NACK:MOV A ,#15H,MOV SBUF ,A,WAIT3:JNB TI ,WAIT3,CLR TI,SJMP RETURN,TX_AGREE:MOV A ,#00H ;,向甲机发同意接收,(00H),信号,MOV SBUF ,A,WAIT4:JNB TI ,WAIT4,CLR TI,CLR 7FH,SJMP RETURN,RX_BYTES:MOV A ,SBUF ;,接收数据块长度存,32H,单元,MOV 32H ,A,ADD A ,33H ;,形成累加和,MOV 33H ,A,CLR 7EH ;,清数据块长度标志,SJMP RETURN,RX_DATA:MOV DPH ,31H,MOV DPL ,30H,MOV A ,SBUF ;,接收数据,MOVX DPTR ,A,INC DPTR,MOV 31H,DPH,MOV 30H,DPL,ADD A ,33H ;,形成累加和,MOV 33H ,A,DJNZ 32H ,RETURN ;,数据没接收完中断返回,;,等待下次继续接收,.,CLR 7DH ;,接收完,清数据接收标志,SJMP RETURN,AGAIN:SETB 7FH,SETB 7EH,SETB 7DH.,MOV 33H ,#00H,MOV 31H ,#10H,MOV 30H ,#00H,RETURN:POP ACC,POP DPL,POP DPH,SETB EA,;,开中断,RETI,多机通信,一,.,多机通信的原理,主机,TXD,RXD,TXD,TXD,TXD,RXD,RXD,RXD,8031,8031,8031,0#,从机,1#,从机,n#,从机,图9.2.4,多机通信是一台主机与多台从机之间的通信,这就要求主机能,识别从机,.,*地址帧,*数据帧,寻址,工作方式,*发送,*接收,发送就绪,接收就绪,多机通信的基本工作原理,:,将所有从机的,SM2,位置,1,各从机只能接受地址帧信息,.,b.,主机发送一帧地址信息,(,包括从机的,8,位地址,且,TB8=1).,c.,各从机接收地址帧后与本机地址比较,如果相同,向主机回送本机,地址信息,并清本机的,SM2,为,0,准备接收主机发过来的数据帧,此时,其它从机的,SM2,仍为,1,对主机发来的数据不予理睬,.,d.,主机收到了被选中的从机发回的地址信息后,对该从机发控制,命令,(,此时,TB8=0),以说明主机要求从机发送还是接收,.,e.,从机收到主机的控制命令后向主机发回一个状态信息,表明从机,是否准备就绪,若已准备就绪,主机就可与从机通信了,.,约定资源:,R0,:,主机发送数据的首地址,R1,:,主机接收数据的首地址,R2,:,被寻址的从机地址,R3,:,主机命令,R4,:,数据块长度,程序流程,初始化,T1,、,串口,向从机,发送地址,从机应答?,地址相符否?,发,复位命令,Y,N,N,Y,向从机发送命令,接收从机状态,命令合法否?,N,Y,命令分类,向机发送数据,主机接收从机数据,01,02,从机接收就绪,从机发送就绪,Y,Y,返回,N,N,
展开阅读全文