1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,主要内容,串行通讯补充,MCS,51,单片机的串口,串口编程举例,异步通讯方式,以字符为传送单位,用起始位和停止位标识每个字符的,开始和结束,字符间隔不固定,只需字符传送时同步。,异步通讯常用格式:一个字符帧,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,停止位,起始位,串口通讯,同步通讯,以一串字符为一个传送单位,字符间不加标识位,,在一串字符开始用同步字符标识,硬件要求高,通讯双,方须严格同步。,串行接口功能,发送器,:并,串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志
2、申请中断。,接收器,:串,并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。,控制器,:接收编程命令和控制参数,设置工作方式:同步,/,异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。,串行数据传送方向,单工通讯:数据单向传送。,半双工通讯:数据可分时双向传送。,全双工通讯:可同时进行发送和接收。,发送器,接收器,发送器,接收器,数据缓冲器,SBUF,发送,SBUF,和接收,SBUF,共用一个地址,99H,。,(,1,),发送,SBUF,存放待发送的,8,位数据,写入,SBUF,将同时启动发送。,发送指令:,MOVSBUF,,,A,(,2,),接收,S
3、BUF,存放已接收成功的,8,位数据,供,CPU,读取。,接收数据指令:,MOV A,,,SBUF,控制,/,状态寄存器,SCON,SM0,,,SM1,:,选择串行口,4,种工作方式。,SM2,:,多机控制位,用于多机通讯。,REN,:,REN=1,,,允许接收;,REN=0,,,禁止接收。,TB8,:,发送的第,9,位数据位,可用作校验位,RB8,:,接收的第,9,位数据位或停止位,TI,:发送中断标志,发送一帧结束,,TI=1,RI,:,接收中断标志,接收一帧结束,,RI=1,节电控制寄存器PCON,SMOD(PCON.7),:,波特率加倍控制位。,SMOD=1,,,波特率加倍,,SMOD
4、0,,,则不加倍。,同步移位寄存器方式。用于扩展并行,I/O,接口。,1.,一帧,8,位,无起始位和停止位。,2.RXD,:,数据输入,/,输出端。,TXD,:,同步脉冲输出端,每个脉冲对应一个数据位。,3.,波特率,B=fosc/12,如:,fosc,=12MHz,,,B=1MHz,,,每位数据占,1,s,。,串行接口的工作方式,0,发送过程,:写入,SBUF,,,启动发送,一帧发送结束,,TI=1,。,接收过程,:,REN=1,且,RI=0,,,启动接收,一帧接收完毕,,RI=1,。,发送时序,写入,SBUF,RXD,输出,TXD,TI,D,0,D,1,D,2,D,3,D,4,D,5,D
5、6,D,7,写REN=1,RI=0,RXD,输入,RI,接收时序,(a),(b),方式,1,1.8,位数据位,,1,个起始位,(0),,,1,个停止位,(1),。,2.RXD,:,接收数据端。,TXD,:,发送数据端。,3.,波特率:用,T1,作为,波特率发生器,,,B=(2,SMOD,/32)T1,溢出率。,4.,发送:写入,SBUF,,,同时启动发送,一帧发送结束,,TI=1,。接收:,REN=1,,,允许接收。接收完一帧,若,RI=0,且停止位为,1(,或,SM2=0),,,将接收数据装入,SBUF,,,停止位装入,RB8,,,并使,RI=1,;,否则丢弃接收数据,不置位,RI,。,当
6、REN=1,,,CPU,开始采样,RXD,引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为,0,,继续接收其余位;否则,停止接收,重新采样负跳变。,写入,SBUF,采样,(,a,),发送时序图,TXD,数据输出,TI,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,停止位,起始位,RXD,输入数据,(,b,),接收时序图,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,停止位,起始位,RI,检测,负跳变,1.,一帧为,11,位:,9,位数据位,,1,个起始位,(0),,,1,个停止位,(1),。第,9,位数据位在,TB8/RB8,中,
7、常用作校验位。,2.RXD,:,接收数据端,,TXD,:,发送数据端。,3.,波特率:方式,2,:,B=(2,SMOD,/64)fosc,。,方式,3,:,B=(2,SMOD,/32)T1,溢出率。,方式,2,和方式,3,发送,:先装入,TB8,,,写入,SBUF,并启动发送,发送结束,,TI=1,。,接收,:,REN=1,,,允许接收。接收完一帧,若,RI=0,且第,9,位为,1(,或,SM2=0),,,将接收数据装入接收,SBUF,,,第,9,位装入,RB8,,使,RI=1,;,否则丢弃接收数据,不置位,RI,。,发,送,时,序,写入,SBUF,TXD,输出,TI,RXD,输入,接,收,时
8、序,RI,D,0,D,1,D,2,D,3,D,4,D,5,D,6,TB,8,停止位,起始位,D,7,D,0,D,1,D,2,D,3,D,4,D,5,D,6,RB,8,停止位,起始位,D,7,检测,负跳变,主要内容,串行通讯补充,MCS,51,单片机的串口,串口编程举例,计算波特率,方式,0,为固定波特率:,B=fosc/12,方式,2,可选两种波特率:,B=(2,SMOD,/64)fosc,方式,1,、,3,为可变波特率,用,T1,作波特率发生器,:,B=(2,SMOD,/32)T1,例,接线如图,编一个自发自收程序,检查单片机的串行口是否完好,,f=12MHz,,,波特率,600,,取,S
9、MOD,0,。,解:,依据公式,波特率,求得,MOV TMOD,#20H,MOV TH1,#0CCH,MOV TL1,#0CCH ;,设定波特率,SETB TR1,MOV SCON,#50H ;,方式,1,ABC:CLR TI,MOV P1,#0FEH ;LED,灭,ACALL DAY ;,延时,MOV A,#0FFH,MOV SBUF,A ;,发送数据,FFH,JNB RI,$;RI=1,等待,CLR RI,MOV A,SBUF ;,接收数据,,A=FFH,MOV P1,A ;,灯亮,JNB TI,$;TI=1,等待,ACALL DAY ;,延时,SJMP ABC,DAY:MOV R0,#240,DAL:MOV R1,#240,DJNZ R1,$,DJNZ R0,DAL,RET,






