资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第8,章,MCS51,串行口,8.,1,串行口及其通信方式,8.,2,IBM-PC,系列机与,单片机 的通信技术,8.,1,串行口及其通信方式,8.1.1,串行通信基础知识,一、异步通讯方式,以字符为传送单位用起始位和停止位标识每个字符的,开始和结束字符间隔不固定,只需字符传送时同步。,1.异步通讯常用格式:一个字符帧,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,停止位,起始位,二、同步通讯,以一串字符为一个传送单位,字符间不加标识位,,在一串字符开始用同步字符标识,硬件要求高,通讯双,方须严格同步。,2.异步通讯双方的两项约定,(1,)字符格式规定,(,一帧,),:,数据位,校验位,起始位和停止位。,(,2,)波特率,(位/秒),对传送速率的规定,例:要求每秒传送,120,个字符,每帧为,10,位。,解:,B=120?0=1200,波特每位,0.83,ms,数据位传输率,=120?=960位/,秒,三,串行接口功能,1.,发送器:并,串数据格式转换,添加标识位和校验位,一,帧发送结束,设置结束标志,申请中断。,2.,接收器:串,并数据格式转换,检查错误,去掉标识位,,保存有效数据,设置接收结束标志,申请中断。,3.,控制器:接收编程命令和控制参数,设置工作方式:同步/,异步、字符格式、波特率、校验方式、数据位与,同步时钟比例等。,四,串行数据传送方向,单工通讯:数据单向传送。,半双工通讯:数据可分时双向传送。,全双工通讯:可同时进行发送和接收。,发送器,接收器,发送器,接收器,8.,1.2,串行口控制寄存器,一、1个全双工串行接口,可同时进行发送和接收。,串行接口输入,/,输出引脚:,TXD(P3.1)、RXD(P3.0),数据格式,(,P.237,图),:按不同方式,一帧位数,8/10/11,发送,/,接收时,数据皆低位在前。,一帧字符发送,/,接收结束,置位标志位,(,TI/RI),并申请,SIO,中断。,中断控制:中断允许位,ES,中断入口:,0023,H,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,停止位,起始位,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,8,停止位,起始位,D,7,二、串行接口控制,1,.数据缓冲器,SBUF,发送,SBUF,和接收,SBUF,共用一个地址99,H。,(1),发送,SBUF,存放待发送的,8,位数据,写入,SBUF,将同,时启动发送。,发送指令:,MOVSBUF,A,(2),接收,SBUF,存放已接收成功的,8,位数据,供,CPU,读取。,读取串行口接收数据指令:,MOV A,SBUF,2.,串行口控制,/,状态寄存器,SCON(98H),SM0,SM1:,选择串行口,4,种工作方式。,SM2:,多机控制位,用于多机通讯。,REN:,允许接收控制位,,REN=1,,允许接收;,REN=0,,禁止接,收。,TB8:,发送的第,9,位数据位,可用作校验位和地址,/,数据标识位,RB8:,接收的第,9,位数据位或停止位,TI:,发送中断标志,发送一帧结束,,TI=1,,必须软件清零,RI:,接收中断标志,接收一帧结束,,RI=1,,必须软件清零,3.节电控制寄存器,PCON,SMOD(PCON.7):,波特率加倍控制位。,SMOD=1,,波特率加倍,,SMOD=0,,则不加倍。,SM0,SM1,选择四种工作方式。,一、方式,0,:同步移位寄存器方式。用于扩展并行,I/O,接口。,1.一帧,8,位,无起始位和停止位。,2.,RXD:,数据输入,/,输出端。,TXD:,同步脉冲输出端,每个脉冲对应一个数据位。,3.波特率,B=fosc/12,如:,fosc,=12MHz,B=1MHz,,每位数据占,1,s。,8.,1.3,串行接口的工作方式,4,.发送过程:写入,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,6,D,7,写REN=1,RI=0,RXD,输入,RI,接收时序,(a),(b),数据从,RXD(P3.0),引脚串行,输出,低位在先,高位,在后;,TXD(P3.1),引脚,输出移位脉冲,其频率为,foc/12;,发送完毕后,中断标志位,TI,为1,。如要发送数据,如下所示:,MOV SCON,#00H ;,串行口方式,0,MOV SBUF,A ;,将数据送出,JNB TI,$;,等待数据发送完毕,5.移位寄存器方式举例,二、方式,1,8位数据异步通讯方式。,1.一帧,10,位:,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。,当,REN=1,CPU,开始采样,RXD,引脚负跳变信号,若出,现负跳变,才进入数据接收状态,先检测起始位,若第一,位为,0,,继续接收其余位;否则,停止接收,重新采样负跳,变。数据采样速率为波特率,16,倍频,在数据位中间,用第,7,、,8、9个脉冲采样,3,次数据位,并,3,中取,2,保留采样值。,写入,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,检测,负跳变,9,位数据异步通讯方式。,1,.一帧为,11,位:,9,位数据位,,1,个起始位,(0,),1个停止位,(1),。第,9,位数据位在,TB8/RB8,中,常用作校验位和多机通讯标识位。,2,.,RXD:,接收数据端,,TXD:,发送数据端。,3,.波特率:方式,2:,B=(2SMOD/64)fosc。,方式,3:,B=(2SMOD/32)T1,溢出率。,三、方式,2,和方式,3,4,.发送:先装入,TB8,,写入,SBUF,并启动发送,发送结束,,TI=1。,接收:,REN=1,,允许接收。接收完一帧,若,RI=0,且第,9,位,为,1(或,SM2=0),,将接收数据装入接收,SBUF,,第,9,位装入,RB8,,使,RI=1;,否则丢弃接收数据,不置位,RI。,发,送,时,序,写入,SBUF,TXD,输出,TI,RXD,输入,接,收,时,序,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,检测,负跳变,8.1.4、计算波特率,方式,0,为固定波特率:,B=fosc/12,方式,2,可选两种波特率:,B=(2SMOD/64)fosc,方式,1、3,为可变波特率,用,T1,作波特率发生器。,B=(2SMOD/32)T1,溢出率,T1,为方式,2,的时间常数:,X=28-t/T,溢出时间:,t=(28-X)T=(28-X)12/fosc,T1,溢出率,=1/,t=fosc/12(2n-X),波特率,B=(2SMOD/32)fosc/12(28-X),串行口方式,1、3,,根据波特率选择,T1,工作方式,计算,时间常数,。,T1,选方式,2,:,TH1=X=28-fosc/122SMOD/(32B),T1,选方式,1,用于低波特率,需考虑,T1,重装时间常数时间。,8,.1.5,串行口的应用,串行口初始化编程格式:,SIO:MOV SCON,#,控制状态字;写方式字且,TI=RI=0,(MOV PCON,#80H);,波特率加倍,(,MOV TMOD,#20H),;T1,作波特率发生器,(,MOV TH1,#X);,选定波特率,(,MOV TL1,#X),(SETB TR1),(SETB EA);,开串行口中断,(,SETB ES),一、串行口初始化,二、发送程序,1,.查询方式:,TRAM:MOV A,R0 ;,取数据,MOVSBUF,A ;,发送一个字符,WAIT:JBCTI,NEXT;,等待发送结束,SJMPWAIT,NEXT:INCR0 ;,准备下一次发送,SJMPTRAM,2.,中断方式:,ORG 0023H;,串行口中断入口,AJMP SINT,MAIN:;,初始化编程,TRAM:MOV A,R0 ;,取数据,MOV SBUF,A ;,发送第一个字符,H:SJMP H ;,其它工作,SINT:CLR TI ;,中断服务程序,INC R0,MOV A,R0 ;,取数据,MOV SBUF,A ;,发送下一个字符,RETI,三、接收程序,REN=1、RI=0,等待接收,当,RI=1,,从,SBUF,读取数据。,1,.,查询方式:,WAIT:JBCRI,NEXT;,查询等待,SJMPWAIT,NEXT:MOVA,SBUF;,读取接收数据,MOVR0,A;,保存数据,INCR0 ;,准备下一次接收,SJMPWAIT,四、串行口方式,0,用于扩展单片机的并行,I/O,接口。,串行口实现:并行,串行的数据转换,74,LS165/74LS164,实现:串行,并行的数据转换。,D0 D1 D2 D3 D4 D5 D6 D7,数据输入,RXD 9,TXD,移位脉冲,2,74,LS165,8051,6 5 4 3 14 13 12 11,D7 D6 D5 D4 D3 D2 D1 D0,数据输入,RXD 1,2,TXD,移位脉冲,74,LS164,8,8051,3,4 5 6 10 11 12 13,五、异步通讯程序举例,1,.,发送程序:,将片内,RAM 50H,起始单元的,16,个数由串 行口发送。要求发送波特率为系统时钟 的,32,分频,并进行奇偶校验。,MAINT:MOV SCON,#80H ;,串行口初始化,MOV PCON,#80H ;,波特率,SETBEA,SETBES;,开串行口中断,MOV R0,#50H ;,设数据指针,MOV R7,#10H ;,数据长度,LOOP:MOV A,R0 ;,取一个字符,MOV C,P ;,加奇偶校验,MOV TB8,C,MOV SBUF,A ;,启动一次发送,HERE:SJMPHERE;CPU,执行其它任务,ORG 0023H ;,串行口中断入口,AJMP TRANI,TRANI:PUSH A;,保护现场,PUSH PSW,CLR TI ;,清发送结束标志,DJNZ R7,NEXT;,是否发送完?,CLR ES;,发送完,关闭串行口中断,SJMP TEND,NEXT:INC R0 ;,未发送完,修改指针,MOV A,R0 ;,取下一个字符,MOV C,P ;,加奇偶校验,MOV TB8,C,MOV SBUF,A;,发送一个字符,POP PSW;,恢复现场,POP A,TEND:RETI ;,中断返回,2.,接收程序:,串行输入,16,个字符,存入片内,RAM,的50,H,起 始单元,串行口波特率为,2400(,设晶振为,11.0592,MHz)。,RECS:MOV SCON,#50H ;,串行口方式,1,允许接收,MOV TMOD,#20H ;T1,方式,2,定时,MOV TL1,#0F4H ;,写入,T1,时间常数,MOV TH1,#0F4HSETB TR1 ;,启动,T1MOV R0,#50H ;,设数据指针,MOV R7,#10H ;,接收数据长度,WAIT:JBC RI,NEXT ;,等待串行口接收,SJMP WAIT,NEXT:MOV A,SBUF ;,读取接收字符,MOV R0,A ;,保存一个字符,INC R0 ;,修改指针,DJNZ R7,WAIT ;,全部字符接收完,?,RET,3.,接收程序:,串行输入,16,个字符,进行奇偶校验。,RECS:MOV SCON,#0D0H ;,串行口方式,3,允许接收,MOV TMOD,#20H ;T1,方式,2,定时,MOV TL1,#0F4H ;,写入,T1,时间常数,MOV TH1,#0F4HSETB TR1 ;,启动,T1MOV R0,#50H ;,设数据指针,MOV R7,#10H ;,接收数据长度,WAIT:JBC RI,NEXT ;,等待串行口接收,SJMP WAIT,NEXT:MOV A,SBUF ;,取一个接收字符,JNB P,COMP ;,奇偶校验,JNB RB8,ERR ;PRB8,,数据出错,SJMP RIGHT ;P=RB8,,数据正确,COMP:JB RB8,ERR,RIGHT:MOV R0,A ;,保存一个字符,INC R0 ;,修改指针,DJNZ R7,WAIT ;,全部字符接收完,?,CLR F0 ;F0=0,,接收数据全部正确,RETERR:SETB F0 ;F0=1,,接收数据出错,RET,8.2,IBM-PC,系列机与 单片机的通信技术(选),一、异步通信适配器,二、,IBM-PC,机与8031双机通信技术,三、,IBM-PC,机与803,l,多机通信技术,一、异步通信适配器,(一)异步通信芯片8250,(二)8250的内部寄存器,二、,IBM-PC,机与8031双机通信技术,(一)通信接口设计,(二)通信软件设计,三、,IBM-PC,机与803,l,多机通信技术,(一)多机通信原理,(二)通信接口设计,(三)通信软件设计,
展开阅读全文