资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章,MCS-51,定时,/,计数器,串行口及中断系统,5.1 MCS-51,定时,/,计数器,5.2 MCS-51,串行口,5.3 MCS-51,单片机,中断系统,下页,5.1 MCS-51,定时,/,计数器,51,系列内部有,2,个,16,位的定时,/,计数器,T0,、,T1,52,系列内部有,3,个,16,位的定时,/,计数器,T0,、,T1,、,T2,功能:,定时,计数,串行口的波特率发生器,定时,/,计数器的可编程特性:,确定其工作方式是定时还是计数,预置定时或计数初值,当定时时间到或计数终止时,要不要发中断请求,如何启动定时或计数器工作,上页,下页,回目录,T2,可编程,可 编 程 的,一、定时计数器的结构与工作原理,1,、结构,CPU,TH1(8位),TL1 (8位),T1,T1(P,3.5,),(8DH),(8BH),7 0,7 0,TH0(8位),TL0 (8位),T0,T0(P,3.4,),(8CH),(8AH),7 0,7 0,TCON(88H),TMOD(89H),启动,启动,溢出,溢出,工作方式,工作方式,图,5-1,定时,/,计数器逻辑结构,上页,下页,回目录,“+1”,“+1”,结构,2,个,16,位,T/C,分别由,8,位计数器,TH0,、,TL0,、,TH1,、,TL1,组成,“,+1”,计数器,控制寄存器,TCON,:,控制,T/C,的启停、中断等,方式寄存器,TMOD,:,控制,T/C,的,工作方式,2,、工作原理,定时器,定时输入信号:机器内部震荡信号的,1/12,分频,即每一个机器周期做一次,“,+1”,运算,上页,下页,回目录,T0,T1,若,单片机的晶振主频为,12MHz,则,计数周期为,1,s,计数器,由外部引脚(,T0,为,P,3.4,,,T1,为,P,3.5,),输入计数脉冲,结论,:,T,外,2T,机,f,外,T,CY,T,CY,上页,下页,回目录,外部输入脉冲发生负 跳变时,进行,“,+1”,计数,下降沿,高电平,低电平,T,CY,:,为机器周期,二、定时计数器的方式寄存器和控制寄存器,1,、方式寄存器,TMOD,GATE,C/T,M1,M0,GATE,C/T,M1,M0,LSB,MSB,(,89H,),TMOD,控制,T1,控制,T0,门控位,功能选择位,工作方式选择,上页,下页,回目录,TMOD,和,PCON,两个特殊功能寄存器只能字节寻址不能位寻址。,GATE,C/T,M1,M0,GATE,C/T,M1,M0,INT1 INT0,引脚输入电平的控制,GATE,:,门控位。设定,T1,、,T0,运行时,是否受,GATE=,0,不受外部中断控制,C/T=,0 0,方式,0 13,位计数器,0 1,方式,1 16,位计数器,1 0,方式,2,可自动,重新装载,初值,的,8,位计数器,1 1,方式,3 T0,分为,2,个,8,位计数器,,T1,停止计数,M1M0,操作方式,功 能,表,5-1,操作方式选择,上页,下页,回目录,1,受外部中断控制,0,为定时功能,1,为计数功能,上页,下页,回目录,2,、控制寄存器,TCON,LSB,MSB,(,88H,),TCON,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,T,1,、,T,0,启,/,停控制位,T,1,、,T,0,溢出标志位,与外部中断,INT,1,、,INT,0,有关,己在中断系统介绍,“,0”,停止,“,1”,启动,“,1”,有溢出,“,0”,无溢出,可编程 可控制,“+1”,亦可由指令清“,0”,工作,“1”,“0”,记录有无溢出,上页,下页,回目录,三、定时,/,计数器的,4,种工作方式,方式,0 M1M0=00,13,位的定时计数器,由,TH,的,8,位和,TL,的低,5,位组成,T1(P,3.5,),GATE,TR1,INT1,震荡器,12,TL1,5位,TH1,8位,TF1,中断,K,C/T=0,C/T=1,控制,图,5-3,定时,/,计数器方式,0,逻辑图,1,1,1,“+1”,中断,TL,4,0,以,T1,为例:,13,位计数器,TF1,“+1”,“+1”,上页,下页,回目录,方式,1 M1M0=01,16,位的定时计数器,由,TH,的,8,位和,TL,的,8,位组成,T1(P,3.5,),GATE,TR1,INT1,震荡器,12,TL1,8位,TH1,8位,TF1,中断,K,C/T=0,C/T=1,控制,图,5-4,定时,/,计数器方式,1,逻辑图,16,位计数器,“+1”,1,以,T1,为例:,中断,TF1,“+1”,“+1”,上页,下页,回目录,方式,2 M1M0=10,可,自动,重装载,的,8,位计数器,TH1,(,TH0,),被定义为赋值寄存器,TL1,(,TL0,),被定义为计数器,图,5-5,定时,/,计数器方式,2,逻辑图,T1(P,3.5,),GATE,TR1,INT1,震荡器,12,TL1,8位,TF1,中断,K,C/T=0,C/T=1,控制,TH1,8位,重装载,重装载,1,“+1”,以,T1,为例:,中断,TL1,8,位,TF1,“+1”,“+1”,上页,下页,回目录,方式,3 M1M0=11,T0,被分成,2,个相互独立的,8,位计数器,TL0,、,TH0,TL0,使用自己本身的一些控制位,C/T,、,GATE,、,TR0,TF0,、,INT0,等。,TH0,只能做定时器,并使用,T1,的控,制位,TR1,、,TF1,,,同时占用,T1,的中断源,震荡器,12,1/12f,0sc,TL0,8位,TF0,中断,K,C/T=0,C/T=1,控制,1/12f,0sc,T0(P,3.4,),GATE,TR0,INT0,K,TH0,8位,TF1,中断,控制,1/12f,0sc,TR1,图,5-6,定时,/,计数器方式,3,逻辑图,上页,下页,回目录,1,TH0,借用了,T1,的,TR1,和,TF1,因此控制了,T1,的中断,此时,T1,只能用在一些不要中断的情况下,“+1”,“+1”,1,“+1”,“+1”,TF0,TF1,中,断,中,断,“+1”,上页,下页,回目录,四、定时,/,计数器的初始化,初始化一般有以下几个步骤:,确定工作方式,对方式寄存器,TMOD,赋值,预置定时或计数初值,直接将其写入,T0,、,T1,中,根据需要对中断允许寄存器有关位赋值,以开放,或禁止定时,/,计数器中断,启动定时,/,计数器,将,TR,i,赋,值为“,1”,计数初值的设定:,最大计数值,M,:,不同的工作方式,M,值不同,方式,0,:,M = 2,13,= 8192,方式,1,:,M = 2,16,= 65536,方式,2,、,3,:,M = 2,8,= 256,计数初值,X,的计算方法:,计数方式:,X = M,计数值(,X,即为计数值的补码数,),上页,下页,回目录,定时方式:,(,M,X,),T =,定时值, X = M,定时值,/ T,其中,T,为机器周期,时钟的,12,分频,,若晶振为,6MHz,,则,T =,2,s,,,若晶振为,12MHz,,则,T =,1s,例,5-1,若单片机晶振为,12MHz,,,要求产生,500,s,定时,试计算,X,的初值。,解:,由于,T = 1,s,,产生,500,s,定时,,需要,“,+1”,500,次,定时器方能产生溢出。,采用方式,0:,(,13,位计数器,),X= 2,13,(50010,-6,/10,-6,),= 8192 500 = 7692 = 1E0CH,采用方式,1,:,(,16,位计数器,),X= 2,16,(50010,-6,/10,-6,)= 65036 = FE0CH,THi,TLi,= 0001 1110 0000 1100B,000,1 1110 000,0 1100B,1 1110 000,000,0 1100,B,=,F0,0C,H,要点,:,只取低,13,位,高,8,位赋给,TH0,低,5,位前加,3,个,0,凑成,8,位赋给,TL0,上页,下页,回目录,五、定时,/,计数器应用举例,1,、作定时器用,例,5-2,设主频为,12MHz,,,利用定时器,T1,定时。,使,P1.0,输出周期为,2,ms,的方波。,解:,用,P1.0,作方波输出信号,周期为,2,ms,的,方波,即可用每,1,ms,改变一次电平的方法完成,,故定时值可设置为,1,ms,。,可做,“,+1”,运算,1000,次,使,T1,工作在方式,0,,,即,13,位计数器,定时初值:,X= M,计数次数,= 8192,1000 = 7192 = 1C18H,上页,下页,回目录,由于,TL1,的高,3,位不用,,1C18H,可写成:,1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0,TL1,的高,3,位不用,=E018H,TH1,初值为,E0H,,,TL1,初值为,18H,GATE,C/T,M1,M0,控制,T1,控制,T0,0 0 0 0,选择方式,0,,,13,位计数器,选择定时器方式,INT1,不参与控制,TMOD,=E018H,程序:,上页,下页,回目录,ORG 0000H,AJMP START,ORG 001BH,AJMP BR1,ORG 0030H,START: MOV TMOD,,,#0,MOV TH1,,,#0E0H,MOV TL1,,,#18H,SETB EA,SETB ET1,SETB TR1,SJMP $,BR1,:,MOV TH1,,,#0E0H,MOV TL1,,,#18H,CPL P1.0,RETI,计数初值转换的一种简便方法,(补充),(1).,方式,0:TL0=X.MOD.32,(,即等于,X,除以,32,后所得到的余数部分,),TH0=INT(X/32),(,即等于,X,除以,32,后所得到的整数部分,),(2).,方式,1:TL0=X.MOD.256,(,即等于,X,除以,256,后所得到的余数部分,),TH0=INT(X/256),(,即等于,X,除以,256,后所得到的整数部分,),注:上面的式子中,X,为计数初值,,TL0,、,TH0,存放计数初值。,例,5-3,单片机晶振为,12MHZ,,要求利用,T1,,工作方式,1,产生周期为,2,ms,的方波。,解:,利用方式,1,,,16,位计数器,当定时时间到,,T1,计数器溢出使,TF1,置“,1”,,由于不采用,中断方式,,TF1,置“,1”,后,不会自动复“,0”,故需要指令给,TF1,清“,0”,上页,下页,回目录,初值,=,0,0 0,0 H,-) 0 3 E 8 H,8,1,C,F,H,FC18H,1000,初值:,65536-1ms/1us=65536-1000=64536=FC18H,ORG 0000H,AJMP START,ORG 0030H,START: MOV TMOD,#10H,MOV TH1,#0FCH,MOV TL1,#18H,SETB TR1,LOOPER:JBC TF1,PE,AJMP LOOPER,PE: MOV TH1,#0FCH,MOV TL1,#18H,CPL P1.0,AJMP LOOPER,END,查询方式,中断方式,ORG 0000H,AJMP START,ORG 001BH,AJMP T00,ORG 0030H,START: MOV TMOD,#10H,MOV TH1,#0FCH,MOV TL1,#18H,SETB ET1,SETB EA,SETB TR1,SJMP $,T00: MOV TH1,#0FCH,MOV TL1,#18H,CPL P1.0,RETI,END,2,、作计数器用,例,5-4,用,T0,监视一生产流水线,每生产,100,个工件,,发出一包装命令,包装成一箱,并记录其箱数,上页,下页,回目录,MCS-51,P,1.0,T,0,Vcc,包装机,包装命令,100个,光源,光,敏,上页,下页,回目录,GATE,C/T,M1,M0,控制,T1,控制,T0,TMOD,选方式,2,选计数器,INT0,不参与控制,0 1 1 0,计数初值,X = M,64H = 9CH,用,P1.0,启动外设发包装命令,用,R5R4,作箱数计数器,方式字,TMOD = 06H,程序:,MOV TMOD,#6,MOV P1.0,#0,MOV R5,#0,MOV R4,#0,MOV TH0,#9CH,MOV TL0,#9CH,SETB EA,SETB ET0,SETB TR0,SJMP $,ORG 000BH,AJMP COUNT,;P1.0,为低,;,箱数计数器清“,0”,;,置,T0,工作方式,;,计数初值送计数器,;,;T0,开中断,;CPU,开中断,;,启动,T0,;,;,模拟主程序,;T0,中断入口,;,转向中断服务,上页,下页,回目录,COUNT: MOV A,R4,ADD A,#1,MOV R4,A,MOV A,R5,ADDC A,#0,MOV R5,A,SETB P1.0,MOV R3,#100,DLY: NOP,DJNZ R3,DLY,CLR P1.0,RETI,中断服务:,;,;,;,;,箱计数器加“,1”,;,;,;,启动外设包装,;,给,外设足够时间,;,;,延时,;,停止包装,;,中断返回,上页,下页,回目录,3,、门控位,GATE,的应用,GATE,C/T,M1,M0,控制,T1,控制,T0,TMOD,选方式,1,选定时器方式,INT1,为高时,,T1,开始计数,1 0 0 1,上页,下页,回目录,例,5-5,用,GATE,控制位,测量,INT1(P,3.3,),引脚上,正脉冲的宽度(设:晶振为,12MHz,),T1(P,3.5,),GATE,TR1,INT1,震荡器,12,TL1,8位,TH1,8位,TF1,中断,K,C/T=0,C/T=1,控制,16,位计数器,“+1”,1,INT1,INT1,为高时,T1,开始计数,INT1,为低时,T1,停止计数,0,0,1,1,1,宽度,65,ms,计数值,即,s,数,1,上页,下页,回目录,“+1”,“+1”,0,0,0,INT1,INT1,为高时,T1,开始计数,INT1,为低时,T1,停止计数,上页,下页,回目录,MOV TMOD, #90H,MOV TL1, #0,MOV TH1, #0,JB P3.3, $,SETB TR1,JNB P3.3, $,JB P3.3, $,CLR TR1,:,编程:,;,置,T1,方式控制字,;,;T1,从,0,开始计数,;,等,INT1,低电平,;T1,允许计数,;,等,INT1,高电平,;,等,INT1,低电平,;,停止计数,“,与”,计数时间,问题:计数结果放在哪?,思考与讨论,:,如何测量一个周期信号的频率,?,1.,测频法(频率大于,2KHZ,时),在一定的时间,t (,如,1,秒,),内,直接对信号的个数进行计数。若,1,秒内计得信号的个数为,N,,则信号的频率,=N,。,实现方法:用一个定时器给出定时时间,t,,待测信号从一个外部中断或另一个计数器输入。,2.,测周法(频率小于,2KHZ,时),直接测出一个周期的时间。,实现方法:例,5-5,(1),长定时方法:增加一个软件计数器(如,R7),,记录中断次数。例,6. P1.7,驱动,LED,亮,1,秒灭,1,秒地闪烁,设时钟频率为,12MHz,。,思路:,1S=10ms100,即,10ms,中断一次,中断,100,次即为,1S,。每,100,次中断,(10010ms=1s),改变一次,LED,的亮灭。可采用,T1,工作于方式,1,(非门控),灯的亮灭在中断服务程序中控制。,定时,10ms,的计数值,N=10ms/1us=1000(D),,,故初值,X=65536-10000=55536,(,D,),=0D8F0H,,采用方式,1,(,16,位计数器)。,1s,4,、,长定时方法,的应用,(,补充,),ORG 0000H,AJMP START,ORG 001BH,AJMP PT1INT,ORG 0030H,START,:,MOV R7,#00H,MOV TMOD,,,#10H,MOV TL1,,,#0F0H,MOV TH1,,,#0D8H,SETB EA,SETB ET1,SETB TR1,HERE,:,SJMP HERE,PT1INT: MOV TL1,,,#0F0H,MOV TH1,,,#0D8H,INC R7,CJNE R7,#100, PEND,MOV R7, #00H,CPL P1.7,PEND: RETI,end,程序,例,7.,设在,P1.7,端接有一个发光二极管,LED,,要求利用定时器控制,使,LED,亮一秒灭一秒,周而复始,.,己知晶体频率为,6MHZ,。,思路:,T0,为,100ms,定时,方式,1,,当定时时间到后,,P1.0,输出反相,加到,T1,输入端作计数脉冲,定时,2,次构成一个完整的计数脉冲,(,周期为,200ms),。,T1,计数次数为,5,次,完成,1,秒定时,(200ms5=1s),,方式,2,。如下图:,T1,(2),长定时方法:利用两个定时,/,计数器级联。,该反相器可以不要。,TMOD,:,61H,T0,计数值,=100ms/2us=50000,,方式,1,,定时,100ms,,,初值,=65536-50000=15536=3CB0H,;,TH0=3CH,,,TL0=0B0H,。,T1,计数值,=5,,方式,2,,计数初值,=256-5=251=0FBH,,,同时装入,TH1,和,TL1,,即,TH1=TL1=0FBH,。,采用中断的编程,org 0000h,AJMP MAIN,org 000bh,ajmp,t00,org 001bh,ajmp,t11,ORG 0030H,MAIN:setb,et0,setb,et1,setb,ea,CLR P1.7,SETB P1.0,MOV TMOD,#61H,MOV TH1,#0FBH,MOV TL1,#0FBH,SETB TR1,MOV TH0,#3CH,MOV TL0,#0B0H,SETB TR0,sjmp,$,t11:CPL P1.7,reti,t00:CPL P1.0,reti,END,ORG 2000H,MAIN:CLR P1.7;,灯灭,SETB P1.0,MOV TMOD,#61H,MOV TH1,#0FBH,MOV TL1,#0FBH,SETB TR1,LOOP1:CPL P1.7,LOOP2:MOV TH0,#3CH,MOV TL0,#0B0H,SETB TR0,LOOP3:JBC TF0,LOOP4,SJMP LOOP3,LOOP4:CPL P1.0,JBC TF1,LOOP1,SJMP LOOP2,END,采用查询的编程,5,、利用定时,/,计数器作外部中断输入使用的方法,T0,作为外部中断源的初始化程序:,MOV TMOD,#06H,MOV TL0,#0FFH,MOV TH0,#0FFH,SETB EA,SETB ET0,SETB TR0,;,T0,计数方式,自动装载,;置,计数初值,;,;,T0,开中断,;,CPU,开中断,;,启动,T0,工作,上页,下页,回目录,计数器,“+1”,计数器,向,CPU,发中断请求,向,CPU,发中断请求,TF,0,FFH,T0,FFH,方式,2,(,8,位),FFH,FFH,TF,0,00H,FFH,FFH,P,3.4,P187,六、运行中读取定时,/,计数器值的,讨论(,补充,),8051,可以随时读取,TH,X,和,TL,X,的值,比如用于实时显示计数值等。,但在读取时应注意分时读取,TH,X,和,TL,X,而带来的特殊性。假如先读,TL,X,,再读,TH,X,,由于这时定时,/,计数器还在运行,如果在读取,TH,X,之前刚好发生,TL,X,溢出向,TH,X,进位,这样读得的,TL,X,值就不正确,先读,TH,X,,后读,TL,X,,也可能发生这种错误。,解决办法(,“飞读”,):,先读,TH,X,,后读,TL,X,,再读,TH,X,,若两次读得的,THX,值一样,则读入的数据是正确的,若不一样,则必须重读。,“飞读”程序,RDTIME,:,MOV A,,,TH0,;读,TH0,MOV R0,,,TL0,;读,TL0,并存入,R0,CJNE A,,,TH0,,,RDTIME,;再读,TH0,,与上次,;读入的,TH0,比较,,;若不等,重读,MOV R1,,,A,;存,TH0,在,R1,中,RET,作业,P204: 6 - 31,作业,P,190,:7.8.31,课后,P190-7,(,2,),方法一:查询法(更换初值),方法二:中断法,做标志,更换初值,做标志,设置时间倍数,5.2 MCS - 51,单片机的串行接口,5.2.0,计算机并行通信与串行通信概述,一、串行通信的基本方式,1.,异步通信,以字符为传送单位,用起始位和停止位标识每个字符的开始和结束字符,间隔不固定。,指的是字符间的异步,字符内的各位是同步的。,异步通信常用格式(,即字符的编码形式及规定),:一个字符帧由起始位到停止位的所有位构成一个字符的全部信息,称为,一帧,。,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,停止位,起始位,5.2.1,串行通信基础知识,图,8.30,异步传送数据格式,(a),有空闲位;,(b),无空闲位,发送,/,接收时,数据皆低位在前,。,起始位,:每个字符的开始必须是持续一个比特时间的逻辑“,0”,电平,标志着一个字符的开始。,数据位,:有,5,8,位,紧跟起始位之后,是字符中的有效数据位。传送字符时,先送低位,后送高位。,奇偶校验位,:仅占一位。可根据需要设置为奇校验或偶校验,也可以不设校验位。,停止位,:可设置为,1,位、,1.5,位或,2,位,并规定为逻辑“,1”,状态。,2.,同步通信,所谓,同步传送,,就是指取掉异步传送时每个字符的起始位和停止位,仅在数据块开始处用,1,2,个同步字符来表示数据块传送的开始,然后串行的数据块信息以连续的形式发送,每个发送时钟周期发送一位信息,故同步传送中要求对传送信息的每一位都必须在收、发两端严格保持同步,实现“位同步”。,图中,除数据场的字节数不受限制外,其他均为,8,位。,同步通信的特点,以同步字符作为发送新数据开始的标志,每个数据占一定的长度,数据之间不留空隙。当线路空闲时不断发送同步字符。,同步通信的传送速率高于异步通信,能达到,56kb/s,,但它要求有准确的时钟来实现发送端和接收端之间的严格同步,故而对硬件要求较高。,同步通信用于传送信息量大、传送速率要求高的场合。,二、串行通信中的几个问题,(,一,).,波特率和发送,/,接收时钟,1.,波特率:波特率,(Baud rate),是指每秒钟传送的二进制位数,单位为波特(,Baud),或位,/,秒,(bit/s),。串行通信时发送端和接收端的波特率必须一致。,码元(符号)速率:每秒钟传送的符号(码元或脉冲)数量,单位为“波特”,或“,baud”, “B”,,,又称传码率、波特率。,信息速率:每秒钟传送的信息速率,单位为“比特,/,秒”或者“,bit/s”,,,又称传信率。,码元速率与信息速率之间的关系:若码元速率,为,Rs,,,信息速率为,Rb,,,每个码元有,N,种,可能采用的符号(,N,进制),则它们之间的关系为,Rb,Rs,log2,N,(bit/s),Rs,Rb/,log2,N,(baud),;,N=2,时,,Rs,=,Rb,例,:,设计算机数据传送的速率是,120,字符,/s,,而每个字符假设有,10,个比特,(bit),位,即每帧每帧为,10,位,,(,包括,1,个起始位、,7,个数据位、,1,个奇偶校验位和,1,个停止位,),。,则其波特率为:,120,字符,/s,10 bit/,字符,=1200 bit/s=1200,波特,每位所用的传送时间,Td=1/,波特率,=1/1200= 0.83ms,最常用的波特率有,110,、,300,、,600,、,1200,、,1800,、,2400,、,4800,、,9600,和,19200b/s,。,通常用选定的波特率除以,10,来估计每秒钟可以传送的字符数。,2.,发送,/,接收时钟,二进制数据序列在串行传送中以数字信号波形出现,不论发送还是接收,都必须有时钟信号对传送的数据进行定位。,实际需要:发送,(,接收,),时钟频率,f,c,=n,波特率,(,f,d,),n,波特率因子,,n=1,、,16,、,64,。,同步时,,n=1,;异步时,,n=16,每一位的传送时间,T,d,和发送接收时钟的财期,T,c,之间的关系是:,T,d,=n,T,c,发送时钟,接收时钟,1,个数据位,1,个数据位,Td,Tc,Td,Tc,异步通信方式下的数据接收处理,一般来说,从接收数据线上检测到一个下降沿开始,若其低电平能保持,n Tc/2(,半位时间,),,则确定为起始位,其后每隔,n,Tc,(,一个数据位时间,),在每个数据位的中间采样。,为了保证接收数据的正确无误,对每位数据的检测采用“测三取二”的方法。即把一个位周期(,1/,波特率)分为,16,个状态,在第,7,,,8,,,9,状态检测接收数据线的电平,取其,2,的相同值作为测得值。,(,二)、数据传送模式,串行通信中数据的传送模式,(a),单工通信模式;,(b),半双工通信模式;,(c),全双工通信模式,(三)、数据校验的常用方法,奇校验,:,发送时在每一个字符的最高位之后(发送总是先发低位后发高位)附加一个校验位(,0,或,1,),使所发送的每个字符中(包括校验位)“,1”,的个数为奇数。,偶校验,:,使所发送的每个字符中(包括校验位)“,1”,的个数为偶数。例:发送一个字符“,A”,(以,ASCII,码形式,41H,,第,7,位为校验位),增加一个校验位,使其为(,1,)奇校验,(,2,)偶校验。 奇校验:,1,100 0001,偶校验:,0,100 0001,奇偶校验的方法是对一个字符校验一次,通常只用于异步通信中。奇偶校验位的产生和检验,可用软件或硬件的办法实现。,奇校验一例,:设累加器以,R0,中的内容为地址的单元中放有一,ASCII,码,现要进行奇校验,,A,的最高位为奇偶校验位。,MOV A,R0,MOV C,PSW.0,CPL C,MOV ACC.7,C,(四)信号的调制与解调,异步常用调制解调方法,:,频移键控,FSK,;同步常用调制解调方法,:,调相,PSKDPSK,、正交幅度调制,QAM,。,(五)、串行通信的实现,1.,并行,/,串行转换,2.,串行,/,并行转换,3.,发送时要增加起始位、奇偶校验位和停止位等,接收时在删去起始位、奇偶校验位和停止位,进行奇偶校验等。,4.,有中断功能,要实现这样的功能既可以采用硬件方法,也可以采用软件方法。软件方法会占用,CPU,不少时间,故通常用硬件方法。,MCS-51,系列单片机内部有一个全双工的异步通信接口,UART,。,(六)异步通讯双方的两项约定,(,1,)字符格式规定,(,一帧,),:,数据位,奇偶校验位,起始位和停止位。,(,2,)波特率,(,位,/,秒,),对传送速率的规定。,5.2.2,串行口结构,A,移位寄存器,1.,波特率发生器,:主要由定时,/,计数器,T1,及其内部的一些控制开关和分频器所所组成。它提供串行口的时钟信号,T,XCLK,(发送时钟)和,R,XCLK,(接收时钟),这两个时钟用于控制发送或接收的速率。控制波特率发生器的,SFR,主要有:,TMOD,、,TCON,、,PCON,、,TL1,、,TH1,等。,2.,数据缓冲器,SBUF,发送,SBUF,和接收,SBUF,共用一个地址,99H,。,(,1,),发送,SBUF,存放待发送的,8,位数据,写入,SBUF,将同,时启动发送。,发送指令:,MOVSBUF,,,A,(,2,),接收,SBUF,存放已接收成功的,8,位数据,供,CPU,读取。,读取串行口接收数据指令:,MOV A,,,SBUF,3.,串行口控制,/,状态寄存器,SCON(98H),SM0,,,SM1,:选择串行口,4,种工作方式。,SM0 SM1,模式,功 能,波特率,0 0,0 1,1 0,1 1,0,1,2,3,同步移位寄存器,8,位,UART,9,位,UART,9,位,UART,f,OSC,/12,可变,(T1,溢出率,),f,OSC,/64,或,f,OSC,/32,可变,(T1,溢出率,),SM2:,多机通信控制,由软件设定。串行口的方式,2,和方式,3,适用于多机通信。,1,),.,在方式,2,或方式,3,中,(1).,当,SM2=l,时,,若接收到的第,9,位数据,(RB8),为,0,,则不置位,RI,(,RI=0,不提出中断请求,相当于数据无效);,只有收到,RB8=1,,才置位,RI,(,RI=1,,申请中断,数据有效),用于多机通信中只接收地址帧,(RB8=1),,不接收数据帧,(RB8=0),。,(2).,当,SM2=0,时,收到停止位后必置位,RI,,即不论地址帧(,RB8=1,)或数,据帧(,RB8=0,)都能接收,并申请中断。,2,),.,在方式,1,中,,若,SM2=1,,则只有收到,有效,停止位,(“1”),时才置位,RI,;若,SM2=0,,不管停止位的有效性,收完一帧,,RI,都置“,1”,(中断)。,3,),.,在方式,0,中,,应使,SM2=0,。,REN:,允许接收控制位,,REN=1,,允许接收;,REN=0,,禁止接收。,TB8:,发送的第,9,位数据位,可用作校验位和地址,(“1”)/,数据,(“0”),标识位。,RB8:,接收的第,9,位数据位,(,方式,2,或,3,中,),或停止位,(,方式,1,若,SM2=0),TI:,发送中断标志位,由硬件置位。在方式,0,发送第,8,位结束时或在其它方式,下发送停止位的开始时,,TI,被置位。,TI=1,时,请求中断,,CPU,响应中断,后再发送下一帧数据。注意,TI,必须由软件清零。,RI:,接收中断标志位,由硬件置位。在方式,0,接收到第,8,位结束时或在其它方,式下接收到停止位的中间时,,RI,被置位。,RI=1,时,请求中断,,CPU,响应,中断后,从,SBUF,中取走数据。注意,RI,必须由软件清零。,问题:,为什么,TI,、,RI,要人工清零(软件清零)而其它的中断标志不要?,注,:,从上面的分析可看出,在任何工作方式下, SM2=0,时,都是正常操作。,应用上,:方式,0,,,1,都可将,SM2,置成“,0”,,只有在方式,2,、,3,时,为了实现多机通信时,才将,SM2,置成“,1”,。,4.,节电控制寄存器,PCON,(,97H,),SMOD(PCON.7),:波特率加倍控制位。,SMOD=1,,波特率加倍;,SMOD=0,,则不加倍。,根据,SM0,,,SM1,选择四种工作方式。,一、方式,0,:同步移位寄存器方式。用于扩展并行,I/O,接口。,1,、特点,(,1,),.,一帧,8,位,无起始位和停止位。,(,2,),. RXD,:,数据输入,/,输出端。,TXD,:,同步脉冲输出端,每个脉冲对应一个数据位。,(,3,),.,波特率,B = fosc/12,如:,fosc,=12MHz,,,B=1MHz,,,每位数据占,1,s,,即每个机器周期移动一位数据。,(,4,),.,发送过程:写入,SBUF,,启动发送,一帧发送结束,,TI=1,。,接收过程:,REN=1,且,RI=0,,启动接收,一帧接收完毕,,RI=1,。,5.2.3,串行接口的工作方式,串行口方式,0,发送时序,2,、时序,二、 方式,1,:,8,位数据异步通讯方式,。,1,、特点,(,1,),.,一帧,10,位:,8,位数据位,,1,个起始位,(0),,,1,个停止位,(1),。,(,2,),. RXD,:,接收数据端。,TXD,:,发送数据端。,(,3,),.,波特率:用,T1,作为波特率发生器,R,b,=(2,SMOD,/32)T1,溢出率。,(,4,),.,发送:写入,SBUF,同时启动发送,一帧发送结束,,TI=1,。,接收:,REN=1,,,允许接收。接收完一帧,若,RI=0,且停止位为,1 (,或,SM2=0),,,将接收数据装入,SBUF,,,停止位装入,RB8,,,并使,RI=1,;,否则丢弃接收数据,不置位,RI,。,2,、时序,1.,特点,(1).,一帧为,11,位:,9,位数据位,,1,个起始位,(0),,,1,个停止位,(1),。第,9,位数据位在,TB8/RB8,中,常用作校验位和多机通讯标识位。,(2). RXD,:,接收数据端,,TXD,:,发送数据端。,(3).,波特率: 方式,2,:,B=(2,SMOD,/64)fosc,。,方式,3,:,B=(2,SMOD,/32)T1,溢出率 。,(4).,发送:先装入,TB8,,写入,SBUF,并启动发送,发送结束,,TI=1,。,接收:,REN=1,,允许接收。接收完一帧,若,RI=0,且第,9,位为,1 (,或,SM2=0),,将接收数据装入接收,SBUF,,第,9,位装入,RB8,,使,RI=1,;否则丢弃接收数据,不置位,RI,。,三、 方式,2,和方式,3:,9,位数据异步通讯方式。,发,送,时,序,写入,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,检测,负跳变,2.,时序,5.2.4,波特率的计算,串行口每秒钟发送或接收的数据位数称为波特率。 假设发送一位数据所需时间为,T,则波特率为,1/T,。 ,(1),模式,0,的波特率等于单片机晶振频率的,1/12,即每个机器周期接收或发送一位数据。 ,(2),模式,2,的波特率与电源控制器,PCON,的最高位,SMOD,的写入值有关,: ,即,SMOD=0,波特率为,(1/64),f,OSC,; SMOD=1,波特率为(,1/32,),f,OSC,。,(3),模式,1,和模式,3,的波特率除了与,SMOD,位有关之外,还与定时器,T1,的溢出率有关。,定时器,T1,作为波特率发生器,常选用,定时方式,2,(,8,位重装载初值方式),并且禁止,T1,中断。此时,TH1,从初值计数到产生溢出,它每秒钟溢出的次数称为溢出,率。,设计数初值为,X,,则溢出,(,定时,),周期,t=(256-x)12/f,osc,所以:溢出率,=1/t=f,osc,/12(256-X),。于是:,表,5-4,定时器,T1,产生的常用波特率,例:,假设某,MCS - 51,单片机系统,串行口工作于模式,3,要求传送波特率为,1200 Hz,作为波特率发生器的定时器,T1,工作在方式,2,时,请求出计数初值为多少? 设单片机的振荡频率为,6 MHz,。 ,因为串行口工作于模式,3,时的波特率为,所以,当,SMOD=0,时,初值,TH1=256-610,6,/(1 2001232/1) =243=0F3H,当,SMOD=1,时,初值,TH1=256-610,6,/,(,12001232/2) =230=0E6H,1,、串行口的编程,串行口需初始化后,才能完成数据的输入、输出。其初始化过程如下,: ,(1),按选定串行口的操作模式设定,SCON,的,SM0,、,SM1,两位二进制编码。,(2),对于操作模式,2,或,3,,,应根据需要在,TB8,中写入待发送的第,9,位数据。,(3),若选定的操作模式不是模式,0,,还需设定接收,/,发送的波特率。,设定,SMOD,的状态,以控制波特率是否加倍。,若选定操作模式,1,或,3,,则应对定时器,T1,进行初始化以设定其溢出率。,5.2.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),2,、串行口初始化,(,1,),.,扩展为若干并在行输出口,外接移位寄存器输出,3.,方式,0,应用,外接移位寄存器输入,(,2,),.,扩展为若干并在行输入口,11111110,左移,过零检测,移位,/,装入,例,1,:,用,8051,串行口外接,74LS165,移位寄存器扩展,8,位输入口,输入数据由,8,个开关提供,另有一个开关,K,提供联络信号。电路示意如图,6.11,所示。当开关,K,合上时,表示要求输入数据。输入,8,位开关量,处理不同的程序。,程序如下,: ,START: JB P1.0, $ ;,开关,K,未合上,等待,CLR P1.1,; 165,并行输入数据,SETB P1.1,;,开始串行移位,MOV SCON,10H ;,串行口模式,0,并启动接收,JNB RI, $ ;,查询,RI,CLR RI ;,查询结束,清,RI,MOV A, SBUF ;,输入数据,;,根据,A,处理不同任务,SJMP START ;,准备下一次接收。,例,2,:编写程序,在数码管下每秒钟显示一位,循环显示,09,这,10,个数字,系统晶振频率为,11.0592MHZ,。,(,数码管为共阳极,),TIMER EQU 30H ;,设置片内,RAM,单元,ORG 0000H,AJMP START,ORG 000BH ;T0,中断入口,AJMP INT0,ORG 0040H,START:MOV SP,#60H ;,设置堆栈指针,MOV TMOD,#01H ;T0,定时,方式,1,MOV TL0,#00H,MOV TH0,#4CH ;,延时,50ms,的计数初值,MOV R0,#0H ;,设置显示,”,0”,初值,MOV TIMER,#20 ;,延时,1S,的常数,MOV SCON,#00H ;,串口方式,0,SETB TR0 ;,启动,T0,SETB ET0 ;T0,开中断,SETB EA ;CPU,中断,SJMP $,INT0:,;PUSH ACC ;,保护,A,;,PUSH PSW ;,保护,PSW,;CLR EA ;,关,CPU,中断,;CLR TR0 ;,停止,T0,MOV TL0,#00H ;,重新设置,T0,MOV TH0,#4CH ;50ms,延时计数初值,;SETB TR0 ;,启动,T0,DJNZ TIMER,EXIT ;,到,1s,定时吗,?,MOV TIMER,#20 ;,重设定时,1s,常数,MOV DPTR,#DATA1 ;,置段码表的的基址,MOV A,R0 ;,取偏移量,MOV,C,A,A+DPTR ;,取段码,CLR TI ;,清,TI,CPL A ;,段码表取反,(,变为共阳极段码,),MOV SBUF,A ;,段码输出,INC R0 ;,下一个显示数码,CJNE R0,#0AH,EXIT ;,判断是否到表尾,MOV R0,#00H ;,从头显示,EXIT:,;SETB EA ;CPU,开中断,;POP PSW ;,恢复现场,;POP ACC,RETI,ORG 3000H,DATA1:DB 0FCH,60H,0DAH,0F2H,66H,DB 0B6H,0BEH,0E0H,0FEH,0F6H;,共阴极段码表,;,送出的低位去,dp,高位去,a.,END,例,5-6,应用串口方式,0,输出,在串行口外接移位寄存器,构成显示器接口,如下图所示。,4.,方式,1,应用,5.,方式,2,应用,例,:,如下图,要求将甲机,(,上方单片机,)P1,口的开关状态通过串口发送给乙机,(,下方单片机,),用,LED,灯显示出来,.,甲机程序,ORG 0000H,AJMP START,ORG 0030H,START:MOV SCON,#80H,MOV PCON,#00H,MAIN: MOV A,P1,MOV SBUF,A,WAIT: JBC TI,MAIN,SJMP WAIT,END,乙机程序,ORG 0000H,AJMP START,ORG 0030H,START:MOV SCON,#90H,MOV PCON,#00H,LOOP: JBC RI,READ,SJMP LOOP,READ: MOV A,SBUF,MOV P0,A,AJMP LOOP,END,方法一,:,查询接收,方法二,:,中断接收,ORG 0000H,AJMP START,ORG 0023H,AJMP SERIN,ORG 0030H,START:MOV SCON,#90H,MOV PCON,#00H,SETB ES,SETB EA,SJMP $,SERIN:CLR RI,;,必须要加,MOV A,SBUF,MOV P0,A,RETI,END,若要求甲机乙机双向通信该如何编程,?,例,4,利用串行口进行双机通信。,双机通信系统,如下图所示,是双机通信系统。要求将甲机,8051,芯片内,RAM,中的,40H4FH,的数据串行发送到乙机。甲机工作于模式,2,,,TB8,为奇偶校验位;乙机用于接收串行数据,工作于模式,2,,并对奇偶校验位进行校验,接收数据存于,60H6FH,的单元中。,串行通信的两项约定:,(,1,)字符格式规定,(,一帧,),、工作方式要一致。,数据位,奇偶校验位,起始位和停止位。,(,2,)波特率,(,位,/,秒,),要一致。,5.,方式,2,应用,甲机发送(采用查询方式),:,MOV SCON,80H ;,设置工作方式,2,MOV PCON,00;,置,SMOD=0,波特率不加倍,MOV R0,40H ;,数据区地址指针,MOVR2,10H ;,数据长度,LOOP: MOV A, R0 ;,取发送数据,MOV C, P ;,奇偶位送,TB8,MOVTB8, C,MOV SBUF, A ;,送串口并开始发送数据,WAIT: JBCTI, NEXT ;,检测是否发送结束并清,TI,SJMP WAIT,NEXT: INC R0;,修改发送数据地址指针,DJNZR2, LOOP,RET,乙机接收(查询方式),:,MOV SCON,90H;,模作模式,2,并允许接收,MOV PCON,00H;,置,SMOD=0,MOV RO,60H ;,置数据区地址指针,MOV R2,10H ;,等待接收数据长度,LOOP: JBC RI, READ ;,等待接收数据并清,RI,SJMP LOOP,READ: MOV A, SBUF ;,读一帧数据,
展开阅读全文