资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第1节 单片机的定时器/计数器,1 定时/计数器的结构与工作原理,2 定时器/计数器的控制,3 定时/计数器的工作方式,4 定时/计数器的编程和应用,1 定时/计数器的结构与工作原理,2 定时器/计数器的控制,3 定时/计数器的工作方式,4 定时/计数器的编程和应用,定时器可根据设定时间进行计时的装置,计数器可对输入脉冲数进行统计的装置,电子定时器,机械定时器,电子计步器,机械计数器,典型的定时器和计数器产品,计数器的溢出空间可随计数初值改变定时时间t,t=(计数器最大值-计数初值)机器周期,=(2,n,-a)12/fosc (微秒),基本工作原理:,定时时间t与n、x、fosc三个因素有关,TFx,(X=0、1),定时/计数器的结构,两个外部引脚,T0,(P3.4)和,T1,(P3.5),两个16位定时器,T0,(,TH0,、,TL0,)和,T1,(,TH1,、,TL1,),两个控制寄存器,TCON,和,TMOD,1 定时/计数器的结构与工作原理,2 定时器/计数器的控制,3 定时/计数器的工作方式,4 定时/计数器的编程和应用,第6章,单片机的定时器/计数器,T0,方式,控制,寄存器,TMOD,控制寄存器,TCON,GATE,C/T,M1,M0,GATE,C/T,M1,M0,D7,D5,D4,D3,D2,D1,D0,TMOD,D6,(,89H,),定时器1,定时器0,T1,门控位,参与定时器的启停管理,方式选择位,00-方式0,01-方式1,10-方式2,11-方式3,模式选择位,CT=0-定时,CT=1-计数,T1,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,8FH,8DH,8CH,8BH,8AH,89H,88H,TCON,8EH,(,88H,),定时器控制位,外部中断控制位,启动控制位,TR1=1-启动,TR1=0-停止,溢出标志位,TF=1-溢出,TF=0-清零,门控位,允许TR1启动计数器(=0),允许INT1启动计数器(=1),GATE,C/T,M1,M0,GATE,C/T,M1,M0,D7,D5,D4,D3,D2,D1,D0,TMOD,D6,(89H),定时器1,定时器0,初始状态,:允许TRx启动计数器、定时模式、方式0,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,8FH,8DH,8CH,8BH,8AH,89H,88H,TCON,8EH,(88H),定时器控制位,外部中断控制位,初始状态,:没有定时/计数溢出,TRx处于关闭状态,单片机复位时,两个寄存器的所有位都被清0。,1 定时/计数器的结构与工作原理,2 定时器/计数器的控制,3 定时/计数器的工作方式,4 定时/计数器的编程和应用,工作方式0,使用13位的定时/计数器(THi,7-0,+TLi,4-0,),定时时间 t=(2,13,-a)12/fosc(,s,),计数初值 a=2,13,-tfosc/12,若fosc=12MHz,方式0最大定时量t=2,13,s,=,8.192ms,最小定时量t=1s,解:设fosc=12MHz,计数初值a=2,13,-5100012/12=3192=1100 0111 1000,TH0,TL0,0 1 1 0 0 0 1 1,0,0,0,1 1 0 0 0,6 3 1 8 H,举例:计算,T0方式0,定时,5ms,的计数初值a,注意:方式0的,TL0,高3位未用,可填0,因此,a=0110 0011,000,1 1000=6318H,编程时需将此初值装载到Tx中,例如:,TH0=0 x63;,TL0=0 x18;,工作方式1,使用16位定时/计数器(TH,i7-0,+TL,i7-0,),定时时间为:,t=(2,16,-a)12/fosc (微秒),定时范围扩大到1s 65ms(fosc=12MHz时),计数初值无需修正:a=2,16,-tfosc/12,使用过程中计数初值需要重装载,延时时间 t=(2,8,-a)12/fosc (微秒),可自动重装载计数初值(TLx溢出后THx中数值可自动装入TLx适合于作串口波特率发生器(定时精度较高),工作方式2,采用8位计数器,常数寄存器,T0的工作方式3,主要用于,当T1用作串行口的波特率发生器的情况,TH0+TF1+TR1组成的8位定时器,TL0+TF0+TR0组成的8位定时/计数器,T1组成的无中断功能的定时器,特点,:方式3下T0可有2个具有中断功能的8位定时器,3个定时器,在定时器,T0用作方式3时,T1仅方式2有意义。,TL1 TH1,使用定时,/计数器的步骤:,强调,:TMOD的工作方式字只能以字节形式给出,T0,(,1)设置TMOD,工作方式字,确定,T0?T1?,确定,定时模式?计数模式?,确定,方式0、方式1、方式2、方式3?,确定定时,/计数器的工作状态,由于定时器/计数器以加1方式计数,假设计数值为x,则应装入定时器/计数器的初值为:,(n为不同方式下计数器的位数),(,2)设置合适的计数初值产生期望的定时间隔:,每个机器周期包括12个振荡周期,若晶振频率,为6MHz,一个机器周期:,定时时间为TC:,Tp为机器周期:,计数个数为:,则应装入的计数初值为:,(,2)设置合适的计数初值产生期望的定时间隔,:,计数初值 a=2,n,-tfosc/12,(相当于负数的补码形式),=-tfosc/12,TH0=-t/256;,TL0=-t%256;,装载初值,例:,(12MHz晶振),ET0=1;,EA=1;,void tx_srv(void)interrupt,n,3)确定采用何种方式处理溢出结果,查询方式?中断方式?,若是查询方式采用条件判断语句,if,(TF0),while,(!TF0),若是中断方式中断初始化和中断服务程序:,4)启动定时器:,TR0=1 或 TR1=1,5)进行定时或计数结束后的工作,6)为下次定时/计数做准备(清TF标志+重装载初值),若是中断方式,则无需软件清TF标志位;,若是查询方式,还需软件清除TF标志位,若是方式2,没有重装载问题,否则需重装载初值,1 定时/计数器的结构与工作原理,2 定时器/计数器的控制,3 定时/计数器的工作方式,4 定时/计数器的编程和应用,例1,假设系统时钟频率采用6MHz,要在P1.0上输出一个周期为2ms的方波,如图所示。,思路,:方波的周期用T0来确定,让T0,每隔1ms计数溢出1次,(,每1ms产生一次中断),,CPU响应中断后,在中断服务程序中对P1.0取反。,(1)计算初值,X,设初值为X,,则有:机器周期为 12/(610,6,)=210,-6,(2,16,-X)210,-6,=110,-3,2,16,-X=500 X=65036,X化为16进制,即X=FE0CH=1111111000001100B。,所以,T0的初值为:,TH0=0FEH TL0=0CH,(2)初始化程序设计,对寄存器IP、IE、TCON、TMOD的相应位进行正确设置,将计数初值送入定时器中。,(3)程序设计,中断服务程序除产生方波外,还要注意将计数初值重新装入定时器中,为下一次中断作准备。,参考程序:,ORG 0000H,RESET:AJMP MAIN ;转主程序,ORG 000BH,;T0的中断入口,AJMP IT0P ;转T0中断处理程序IT0P,ORG 0100H,MAIN:MOV SP,#60H ;设堆栈指针,MOV TMOD,#01H ;设置T0为方式1,ACALL PT0M0;调用初始化子程序PT0M0,HERE:AJMP HERE ;自身跳转,PT0M0:MOV TL0,#0CH;T0中断服务程序,T0重新置初值,MOV TH0,#0FEH,SETB TR0 ;启动T0,SETB ET0 ;允许T0中断,SETB EA ;CPU开中断,RET,ITOP:MOV TL0,#0CH ;T0中断服务子程序,T0置初值,MOV TH0,#0FEH,CPL P1.0 ;P1.0的状态取反,RETI,查询方式,的参考程序:,MOV TMOD,#01H ;设置T0为方式1,SETB TR0 ;接通T0,LOOP:MOV TH0,#0FEH ;T0置初值,MOV TL0,#0CH,LOOP1:JNB TF0,LOOP1 ;查询TF0标志,CLR TR0 ;T0溢出,关闭T0,CPL P1.0 ;P1.0的状态求反,SJMP LOOP,【例】,对上例使用定时器/计数器T0的方式0,,设定1ms的定时。在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。解:(1)定时常数计算振荡器频率为 fosc=6MHz=610,6,HZ方式0计数器长度 n=13 2,n,=2,13,=8192定时时间:t=1ms=110,-3,s机器周期:Tp12/(610,6),2us计数值:xTc/Tp1ms/2us500那么应装入的初值为 81925007692定时常数TC转换成二进制数TCB11110 0000 1100 B。所以TCH1EH,TCL0CH。那么应该写入T0的形式为TH0=1EH,TL0=0CH。,例2,假设,系统时钟为6MHz,,,编写定时器T0,产生1秒定时,的程序。,(1)T0工作方式的确定,定时时间较长,采用哪一种工作方式?,由各种工作方式的特性,可计算出:,方式0最长可定时,16.384ms,;,方式1最长可定时,131.072ms,;,方式2最长可定时,512,s,。,选方式1,每隔100ms中断一次,中断10次为1s。,(2)计算计数初值,因为:(2,16,-X)210,-6,=10,-1,所以:X=15536=3CB0H,因此:TH0=3CH,TL0=B0H,(3)10次计数的实现,采用循环程序法。,(4)程序设计,参考程序:,ORG 0000H,RESET:LJMP MAIN ;上电,转主程序入口MAIN,ORG 000BH,;T0的中断入口,LJMP IT0P;转T0中断处理程序IT0P,ORG 1000H,MAIN:MOV SP,#60H;设堆栈指针,MOV B,#0AH ;设循环次数10次,MOV TMOD,#01H ;设T0工作在方式1,MOV TL0,#0B0H ;给T0设初值,MOV TH0,#3CH,SETB TR0 ;启动T0,SETB ET0 ;允许T0中断,SETB EA ;CPU开放中断,HERE:SJMP HERE ;等待中断,ITOP:MOV TL0,#0B0H;T0中断子程序,重装初值,MOV TH0,#3CH ;,DJNZ B,LOOP,CLR TR0 ;1s定时时间到,停止T0工作,LOOP:RETI,例3,利用T1的方式2对外部信号计数,,要求每计满100个数,将P1.0取反。,本例是,方式2计数模式,的应用。,(,1)选择工作方式,外部信号,由T1(P3.5)脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器产生溢出中断,在中断服务程序中将P1.0取反一次。,T1 方式2的控制字为TMOD=60H。不使用T0时,TMOD的低4位可任取,但不能使T0进入方式3,这里取全0。,(2)计算T1的初值,X=2,8,-100=156=9CH,因此,TL1的初值为9CH,重装初值寄存器TH1=9CH,(3)程序设计,ORG 0000H,LJMP MAIN,ORG 001BH,;T1中断服务程序入口,CPL P1.0;P1.0位取反,RETI,ORG 0100H,MAIN:MOV TMOD,#60H;设T1为方式2计数,MOV TL0,#9CH ;T0置初值,MOV TH0,#9CH,SETB TR1;启动T1,SETB ET1 ;开中断,SETB EA,HERE:AJMP HERE,门控位的应用,门控位GATE为1时,TRx=1,INTx=1才能启动定时器。利用这个特性可以测量外部输入脉冲的宽度。,例5,利用T0门控位测试 INT0引脚上出现的正脉冲宽度,已知晶振频率为12MHz,将所测得值最高位存入片内71H单元,低位存入70H单元。,解:设外部脉冲 由(P3.2)输入,T0工作于定时方式 1,(16位计数),GATE设为1。测试时,应在INT0 低电平时,设置TR0为1(16位计数);当INT0 变为高电平时,就启动计数;再次变低时,停止计数。此计数值与机器周期的乘积即为被测正脉冲的宽度。因fosc=12MHZ,机器周期为1us,测试过程如下。,源程序如下:,MOV TMOD,#09H ;设T0为方式1,MOV TL0,#00H ;设计初值取最大值,MOV TH0,#00H,MOV R0,#70H,JB P3.2,$;等P3.2(INT0)变低,SETB TR0 ;启动T0准备工作,JNB P3.2,$;等待P3.2(INT0)变高,JB P3.2,$;等待P3.2(INT0)变低,CLR TR0 ;停止计数,T0从0,开始计数,INT0,09H (TMOD),1 TR0,0 TR0,T0停止计数,MOV R0,TL0 ;存放结果,INC R0,MOV R0,TH0,SJMP$,运行中读定时器/计数器,在读取运行中的定时器/计数器时,,需注意:若恰好出现TLX溢出向THX进位的情况,则读得的(TLX)值就完全不对。,同样,先读(THX)再读(TLX)也可能出错。,方法:先读(THX),后读(TLX),再读(THX)。若两次读得(THX)相同,则读的内容正确。,若前后两次读的(THX)有变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程序,读得的(TH0)和(TL0)放置在R1和R0内。,RDTIME:MOV A,TH0;读(TH0),MOV R0,TL0;读(TL0),CJNE A,TH0,RDTIME,;比较2次读得的(TH0),;不相等则重复读,MOV R1,A;(TH0)送入R1中,RET,本节小结,1、定时器和计数器本质上都是计数器,前者是对时钟脉冲进行计数,后者则是对外来脉冲进行计数。,2、设置,TMOD,工作方式字,可确定定时,/计数器的工作状态;设置合适的计数初值可产生期望的定时间隔。,3、定时器共有4种工作方式,其中方式1采用16位计数器,方式2采用8位计数器,可以自动重装载计数常数。,第2节 单片机的串行通信技术,1 串行通信概述,2 串行口的结构组成及控制寄存器,3 串行通信工作方式及应用举例,4 串行通信设计应用举例,1 串行通信概述,1.1 数据通信,1.2 异步通信和同步通信,1.3 波特率的概念和串行通信的传输方向,2 串行口的结构组成及控制寄存器,3 串行通信工作方式及应用举例,4 串行通信接口,常用的数据通信包括两种形式:并行通信和串行通信。,并行通信,(1),并行方式,数据的各位同时发送或同时接收。,传送速度快,但因需要多根传输线,故一般只在近距离通,信中使用。,串行通信,(2),串行方式,数据的各位依次逐位发送或接收。,传输速度慢,但因只需较少传输线,故适合于远距离通信。,1 串行通信概述,1.1 数据通信,1.2 异步通信和同步通信,1.3 波特率的概念和串行通信的传输方向,2 串行口的结构组成及控制寄存器,3 串行通信工作方式及应用举例,4 串行通信接口,异步通信以字符为单位组成字符帧进行的数据传送,在串行数据通信中,有同步通信和异步通信两种方式。,一帧数据由,起始位,、,数据位,、,可编程位,和,停止位,构成,特点收发双方不同步时,能够依靠在每帧开始时的不断对齐,自行纠正偏差,故对收发双方的时钟精度要求较低,但因每个字节都要建立一次同步,所以工作速度较低。,同步通讯数据格式数据以块为单位连续传送。,在发一组数据时,只在开始用若干个同步字符作为双方的号令,然后连续发送整组数据。,特点数据是以数据块为单位连续传送的,结构紧凑,传输效率高,但要求双方有准确的时钟,对硬件要求高。,1 串行通信概述,1.1 数据通信,1.2 异步通信和同步通信,1.3 波特率的概念和串行通信的传输方向,2 串行口的结构组成及控制寄存器,3 串行通信工作方式及应用举例,4 串行通信接口,波特率为每秒钟发送二进制数码的位数,即b/S(位/秒)。,在串行通信中,数据传输速率的快慢,通过波特率来衡量。,例如,在异步通信中传输速度为360字符/秒,每个字符又包含10位,则波特率为:,360字符/秒*10位/字符 3600波特,标准波特率:110、300、600、1200、2400、4800、9600、19200、38400波特等。,在串行通信中,按照传输数据的流向,可分成三种传输形式:,单工通信 半双工通信 全双工通信,Simplex Half Duplex,Full Duplex,80C51 内部设有一个全双工串行接口,收发双方角色固定不能互换,收发双方角色可换但需切换,收发双方互不影响双向通信,RXD,Receive Data接收数据,TXD,Transmit Data发送数据,80C51单片机串行IO口是可提供同步或异步两种通信方式的全双工串行接口。它由下面几个特殊功能寄存器组成,,发送数据寄存器(SBUF)、,接收数据寄存器(SBUF)、,串行口控制寄存器(SCON),电源控制寄存器(PCON),80C51 内部设有一个全双工串行接口,1 串行通信概述,2 串行口的结构组成及控制寄存器,2.1串行口的结构组成,2.2串行口控制寄存器,3 串行通信工作方式及应用举例,4 串行通信接口,若干寄存器:两个数据缓冲器,SBUF,(,99H,),+,串行控制寄存器,SCON,(,98H,),+,移位寄存器,+.,。,CPU,两个引脚:数据接收,RXD,(P3.0),和数据发送,TXD,(P3.1),。,(1)发送数据过程,(中断法),内部数据并行写入SBUF,发,数据串行送出中断标志位,TI,硬件置1,CPU响应中断,TI,软件清零,写入下一数据,CPU,(2)接收数据的过程,(中断法),外界数据串行送入移位寄存器数据并行送入SBUF,收,标志位,RI,硬件置1,CPU响应中断,RI,软件清零,读走数据,CPU,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,传送数据,同步时钟,数据传送,将串行数据按一定节拍(同步时钟脉冲)输出到传输线上,或从传输线上读入。,同步时钟信号可由,系统时钟,或,定时器,产生,同步时钟和传送数据的关系:,发送数据,时,发送时钟的,下降沿,将数据串行移位输出;,接收数据,时,接收时钟的,上升沿,开始对数据位采样。,1 串行通信概述,2 串行口的结构组成及控制寄存器,2.1串行口的结构组成,2.2串行口控制寄存器,3 串行通信工作方式及应用举例,4 串行通信接口,(1),串行数据缓冲器,,SBUF,在物理上有两个SBUF:一个用于发送,另一个用于接收。在逻辑上只有一个SBUF(,99H,)。,可根据用法区分功能:,uchar counter;,待发送存放变量,SBUF=counter;,完成一次数据发送,counter=SBUF;,完成一次数据接收,CPU,(2)串口控制寄存器,,SCON,(98H),SM2、TB8、RB8主要用于多机通讯,(1)SM0、SM1,串行口4种工作方式的选择位,表 串行口的4种工作方式,SM0 SM1,方式,功 能 说 明,0 0,0,同步移位寄存器方式(用于扩展I/O口),0 1,1,8位异步收发,波特率可变(由定时器控制),1 0,2,9位异步收发,波特率为fosc/64或fosc/32,1 1,3,9位异步收发,波特率可变(由定时器控制),(2)SM2 多机通信控制位,用于方式2或方式3中(,9位,)。,当串行口以,方式2或方式3接收,时,,如果SM2=1,,,只有当接收到的第9位数据(RB8)为“1”时,才将接收到的前8位数据送入SBUF,,并置“1”RI,产生中断请求;当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。,如果SM2=0,,则不论第9位数据是“1”还是“0”,都将 前8位数据送入SBUF中,并置“1”RI,产生中断请求。,在,方式1,时,如果SM2=1,则只有收到停止位时才会激活RI。,在,方式0,时,SM2必须为0。,(3)REN允许串行接收位,由软件置“1”或清“0”。,REN=1,允许串行口接收数据。,REN=0,禁止串行口接收数据。,(4)TB8发送的第9位数据,方式2和3时,TB8是要发送的第9位数据,可作为,奇偶校验位,使用,也可作为,地址帧,或,数据帧,的标志。,=1,为地址帧,=0,为数据帧,(5)RB8接收到的第9位数据,方式2和3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。,(6)TI发送中断标志位,方式0时,,串行发送第8位数据结束时由硬件置“1”,,其它工作方式,,串行口发送停止位的开始时置“1”。TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。CPU响应中断后,向SBUF写入要发送的下一帧数据。TI必须由软件清0。,(7)RI接收中断标志位,方式0时,,接收完第8位数据时,RI由硬件置1。,其它工作方式,,串行接收到停止位时,该位置“1”。RI=1,表示一帧数据接收完毕,并申请中断,CPU从接收SBUF取走数据。该位状态也可软件查询。RI必须由软件清“0”。,(3)电源控制寄存器,,PCON,(87H),由定时器产生的同步时钟,通过SM0和SM1不同的取值,可选择串行通信中的四种工作方式。,SM0 SM1,工作方式,说明,波特率,0 0,方式0,同步移位寄存器,fosc,/,12,0 1,方式1,10位异步收发,由定时器控制,1 0,方式2,11位异步收发,fosc,/,32或fosc,/,64,1 1,方式3,11位异步收发,由定时器控制,1 串行通信概述,2 串行口的结构组成及控制寄存器,3 串行通信工作方式,3.1 方式0(八位同步移位寄存器方式),3.2 方式1(十位异步收发通信模式),3.3 方式2、方式3数据帧格式及应用举例,4 串行通信接口,1方式0,方式0为移位寄存器方式,通过外接CM0S或TTL移位寄存器实现串行、并行转换。该工作方式用于扩展I0接口。,在这种方式下,传送的数据为8位,数据只能从RxD端输入输出。TxD端用于输出移位同步时钟信号,其波特率固定为振荡频率的112,即每个机器周期传送一位数据。方式0可以认为是同步工作方式。,(1)方式0输出,第5章 MCS-51系列单片机的并行、串行输入/输出接口,(2)方式0输入,八位同步移位寄存器方式,用于扩展并行I/O接口,数据传输波特率固定为fosc/12,由RXD引脚输入或输出,数据,(,低位在前,高位在后,),由TXD引脚输出,同步时钟信号,扩展输出口,扩展输入口,实例1,利用,74LS164,扩展并行输出口,并实现发光二极管循环控制功能,74LS164为,8位串并转换移位寄存器,能将串行输入数据转为并行输出,引脚,功能描述,A、B,串行数据输入引脚,Q,A,Q,G,并行数据输出引脚,CLOCK,移位脉冲输入端,CLEAR,移位寄存器清零端,工作原理:,1)CLEAR端若为低电平,输出端,Q,A,Q,G,都为0;,2)CLEAR端若为高电平,且CLOCK端出现上升沿脉冲,则,输出端锁存输入端的电平,接线原理:数据发送端A(B),RXD;同步时钟端CLK,TXD;数据清除端CLR,P1.0,#include,sbit MR=P10;,void delay()/延时,unsigned int i;,for(i=0;i20000;i+),void main(),unsigned char index,LED;/定义LED指针和显示字模,SCON=0;/设置串行模块工作在方式0,MR=1;/CLEAR端1,允许输入数据,while(1),LED=0 xFE;/,(1:灭 0:亮),for(index=0;index 8;index+),SBUF=LED;/控制L0灯点亮,do while(!TI);/通过TI查询判别数据是否输出结束,LED=(LED1)|1);/左移1位,末位置1(1:灭 0:亮),if(LED=0 xff)LED=0 xfe;/若已循环一遍,准备重新开始,delay();,实例1参考程序,实例1运行效果,1 串行通信概述,2 串行口的结构组成及控制寄存器,3 串行通信工作方式,3.1 方式0(八位同步移位寄存器方式),3.2 方式1(十位异步收发通信模式),3.3 方式2、方式3数据帧格式及应用举例,4 串行通信接口,10位数据异步通讯方式,用于双机通信,一帧信息:1个起始位(0)+8位数据位+1个停止位(1),其中起始位和停止位是,自动插入,的。,发送条件:由SBUF=counter即可启动发送过程,发送完成:硬件TI置1,接收条件:在允许接收位REN=1时即可启动接收过程,接收完成:硬件RI置1,数据SBUF,指定,T1,为波特率时钟发生器(波特率时钟可变),通常选择定时器方式2(取fosc为11.0592MHz),序号,波特率,SMOD,a,1,62500,1,0 xff,2,19200,1,0 xfd,3,9600,0,0 xfd,4,4800,0,0 xfa,5,2400,0,0 xf4,6,1200,0,0 xe8,一般初始化过程,例如:,SCON=0 x50;/串口设为方式1,TI和RI清零,允许接收,PCON=0 x80;/波特率加倍(2),TMOD=0 x20;/T1设为定时方式2,TH1=0 xcc;/定时器初值,TL1=0 xcc;/重置的定时初值,IE=10010000B;/中断使能(开中断),TR1=1;/启动T1,GATE,TMOD,C/T,M1,M0,M0,M1,GATE,C/T,(89H),双机通信协议,通行方式:例如异步串行通信,波特率:例如2400b/s,发机要求发送的呼叫信号:例如10H,收机同意接收的应答信号:例如20H,收机不同意接收的应答信号:例如30H,告知数据正确的应答信号:例如0FH,通信结束标志信号:例如0AH,实例2,:,要求设计一个双机通信方案,甲机发送数据,乙机接收数据。两机的振荡频率为12MHz,波特率设置为2.4k,工作在串口方式1。,甲机循环发送0-15的数字,乙机接收后返回接收值。若发送值与返回值相等,继续发送下一数字,否则重复发送当前数字。,发送值和接收值应显示在LED数码管上;,采用查询法检查收发是否完成。,实例2电路原理图,实例2程序流程图,实例2参考程序,实例2参考程序,实例2运行效果,1 串行通信概述,2 串行口的结构组成及控制寄存器,3 串行通信工作方式,3.1 方式0(八位同步移位寄存器方式),3.2 方式1(十位异步收发通信模式),3.3 方式2、方式3数据帧格式及应用举例,4 串行通信接口,方式2和方式3,的数据帧都是11位,用于多机通信,格式为:,一个起始位,8个数据位,一个,可编程位,和一个停止位,可编程位在SCON的,TB8,和,RB8,位中,用于奇偶校验或多机通讯标识。,可编程位可以由软件置1或清0;,发送时在TB8中,连同八位数据通过串口发出。,收到数据后,数据存入接收SBUF内,可编程位存入RB8中。,可编程位用作数据校验位,常用校验方法:在可编程位装入发送数据的奇偶校验位。例如,欲发送数据45H(01000101B),发送数据包含二进制数1的个数为奇数,因此奇偶校验位P=1,在发送数据45H时,将P=1赋值到可编程位TB8,连同数据共同发出。对方接收后,只要将实际数据的奇偶关系与RB8进行对比,即可知道收发过程是否有误。,可编程位用作,多机通讯位,要,保证主机与所选择的从机实现可靠地通讯,,必须保证串口具有识别功能。,SCON中的,SM2位,就是满足这一条件而设置的,多机通讯控制位。,原理:,在串行口以方式2(或方式3)接收时,,若,SM2=1,,表示置多机通讯功能位,这时有两种可能:,(1),接收到的第9位数据为,1,时,,数据才装入SBUF,并,置中断标志RI=1,向CPU发出中断请求;,(2)接收到的,第9位数据为,0,时,,则,不产生中断标志,,,信息将抛弃,。,若SM2=0,,,则,接收的第9位数据不论是0还是1,,都产生RI=1中断标志,接收到的数据装入SBUF中。,应用上述特性,便可实现MCS-51的多机通讯。,设多机系统中有一主机和3个8031从机,,如下图。,主机的RXD与从机的TXD相连,主机TXD与从机的RXD端相连。从机地址分别为00H、01H、02H。,多机通讯工作过程:,(1)从机串行口,编程为方式2或方式3接收,,且,置“1”SM2和REN位,,使从机只处于多机通讯且接收地址帧的状态。,(2)主机,先将从机地址,(即准备接收数据的从机),发给各从机,主机发出的,地址信息,的第9位为1,,各从机接收到的第9位信息RB8为1,且由于SM2=1,则置“1”RI,各从机响应中断,执行中断程序。在中断服务子程序中,,判主机送来的地址是否和本机地址相符合,,,相符则该从机,清“0”SM2位,,准备接收主机的数据或命令;若,不符,则保持,SM2=1,状态,。,(3),接着主机发送数据帧,,此时各从机串行口接收到,的RB8=0,只有地址相符合的从机系统(即已清“0”SM2位的从机),才能激活RI,,从而进入中断,在中断程序中接收主机的数据(或命令);,其它的从机因SM21,又RB8=0不激活中断标志RI,,不能进入中断,接收的数据丢失。,前图所示的多机系统是主从式,由主机控制多机之间 的通讯,,从机和从机的通讯只能经主机才能实现,。,方式2的波特率为固数值:,方式3的波特率和方式1相同,是可变的:,波特率的制定方法,1 串行通信概述,2 串行口的结构组成及控制寄存器,3 串行通信工作方式,3.1 方式0(八位同步移位寄存器方式),3.2 方式1(十位异步收发通信模式),3.3 方式2、方式3数据帧格式及应用举例,4 串行通信接口,MCS-51单片机的串行通讯接口技术,MCS-51串行口的输入、输出均为TTL电平,抗干扰性差,传输距离短。,为提高串行通讯的可靠性,增大串行通讯的距离,采用标准串行接口,如RS-232、RS-422A、RS-485等标准。,RS-232是由美国电子工业协会(EIA)于1962年制定的标准.,RS-232C接口,定义数据终端设备(DTE)和数据通讯设备(DCE)之间的串行接口标准。,图13-1是两台计算机利用MODEM、电话线进行远距离串行通讯的示意图,DTE为计算机,DCE的典型代表是MODEM。,RS-232C的“D”型9针插头的引脚定义。,逻辑1:-3-15V,逻辑0:+3+15V,本节小结,用于串行口通信控制的主要寄存器是SCON,可以设定4种工作方式、接收允许、发送/接收标志、2个可编程位、1个多机通讯位。,串行通信方式0,主要用于单片机I/O接口的扩展,在数据的输入和输出控制中,RXD作为数据线,TXD输出同步时钟脉冲。而且,在方式0下,以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。,方式1的数据帧格式是10位,其中,一个起始位,8个数据位和一个停止位。发送时由SBUF=counter启动发送过程;发送完成后由硬件TI置位;接收时只要接收位REN=1即可启动接收过程,接收后由硬件TI置位,数据存入SBUF。,
展开阅读全文