第5章 单片机的定时计数器与串行接口NEW.ppt_第1页
第5章 单片机的定时计数器与串行接口NEW.ppt_第2页
第5章 单片机的定时计数器与串行接口NEW.ppt_第3页
第5章 单片机的定时计数器与串行接口NEW.ppt_第4页
第5章 单片机的定时计数器与串行接口NEW.ppt_第5页
免费预览已结束,剩余178页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章单片机的定时/计数器与串行接口,单片机原理、接口及应用,5.1定时/计数器定时计数器结构和工作原理定时计数器的控制寄存器定时器的四种工作方式定时计数器的应用编程5.2串行接口,51系列单片机片内有二个十六位定时/计数器:定时器0(T0)和定时器1(T1)。两个定时器都有定时或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合定时/计数器实际上是16位加1计数器。T0由2个8位持殊功能寄存器TH0和TL0构成,T1由2个8位持殊功能寄存TH1和TL1构成。每个定时器都可由软件设置为定时工作方式或计数工作方式。T0和T1受特殊功能寄存器TMOD和TCON控制。,5.1.18051定时/计数器结构和工作原理,1.定时工作方式(C/T=0),设置为定时工作方式时,定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的,即对系统的机器周期计数。每经过一个机器周期定时器(T0或T1)的数值加1直至计数满产生溢出。如:当8051采用12MHz晶体时,每个机器周期为1s,计5个机器周期即为5s,即定时5s。,2.计数工作方式,设置为计数工作方式时,通过引脚T0(P34)和T1(P35)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时,计数器的值加1,在每个机器周期CPU采样T0和T1的输入电平。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1。由于检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。,5.1.2定时计数器的控制寄存器定时器共有两个控制寄存器:定时器控制TCON(88H)定时器工作模式寄存器TMOD(89H),1.工作模式寄存器TMOD(89H),TMOD用于控制T0和T1的操作模式。其各位的定义如下:,定时器T0,定时器T1,GATE:门控信号GATE=0,TRx=1时即可启动定时器工作;GATE=1,INTx=1才可启动定时器工作。C/T:定时器/计数器选择位C/T=1,为计数器方式;C/T=0,为定时器方式。M1M0工作模式选择位M1M0=00工作方式0(13位方式)。M1M0=01工作方式1(16位方式)。M1M0=10工作方式2(8位自动再装入方式)。M1M0=11工作方式3(T0为2个8位方式)。,2.控制寄存器TCON(88H),TCON寄存器中定时器控制仅用了其中高四位,其意义如下:TF1:T1溢出中断请求标志。TF1=1,T1有溢出中断请求。TF1=0,T1无溢出中断请求。TR1:T1运行控制位。TR1=1,启动T1工作。TR1=0,停止T1工作。,TF0:T0溢出中断请求标志。TF0=1,T0有溢出中断请求。TF0=0,T0无溢出中断请求。TR0:T0运行控制位。TR0=1,启动T0工作。TR0=0,停止T0工作。,定时器的初值C的计算8xx51定时器/计数器不同工作方式的模值不同,由于采用加1计数,为使计数满后回零,计数初值应为负值,计算机中负数采用补码表示。计数初值(C)的求法如下:计数方式:计数初值C=模-X(其中X为要计的脉冲个数)定时方式:定时初值C=t/MC补=模t/MC由公式定时时间t=(模C)*MC得出其中t为欲定时时间,MC为8xx51的机器周期MC=12/fosc,5.1.3定时器的四种工作方式,对TMOD寄存器的M1、M0位的设置,可选择四种工作方式,即方式0、方式1、方式2和方式3。下面用THx、TLx(x=1或0)表示TH1、TL1、TH0和TL0。,1.方式0,当TMOD中M1M0=00时,定时计数器工作在方式0。,定时器(T0或T1)工作于13位定时、计数方式。用于计数方式时最大计数值为2138192个脉冲用于定时工作时,定时时间为:t(213一T0初值)振荡周期12在这种模式下,16寄存器(THx和TLx)只用13位,其中THx占高8位。其中TLx占低5位,TLx的高3位末用。当TLx的低5位溢出时向THx进位,而THx溢出时硬件置TF0,并申请中断。,定时、计数溢出否可查询TF0是否置位,如果开中断则产生溢出中断。,2.方式1,当TMOD中M1M0=01时,定时计数器工作在方式1。,该模式是一个16位定时计数方式。寄存器TH0和TL0是以全16位参与操作,计数方式时最大计数21665536(个外部脉冲)用于定时工作方式时,定时时间为:t(216一T0初值)振荡周期1216寄存器(THx和TLx)中THx提供高8位、TLx提供低8位计数初值,3.方式2当TMOD中M1M0=10时,定时器工作在方式2。方式2是8位的可自动重装载的定时计数方式。,16位的计数器被拆成两个8位,其中TL0用作8位计数器,TH0用以保持计数初值。当TL0计数溢出,置位TF0,TH0中的初值自动装入TL0,继续计数,循环重复计数。用于计数工作方式时,最大计数值为:28256(个外部脉冲)。用于定时工作方式时,其定时时间为;t(28TH0初值)振荡周期12,这种工作方式可省去用户重装常数的程序,并可产生精确的定时时间,特别适用作串行口波待率发生器。,4.方式3当TMOD中M1M0=11时,定时器工作在方式3。,若将T0设置为模式3,TL0和TH0被分成为两个互相独立的8位计数器TH0和TL0。TL0可工作为定时方式或计数方式。占用原T0的各控制位、引脚和中断源。即CT、GATE、TR0、TF0和T0(P3.4)引脚、INT0(P3.2)引脚。TH0只可用作定时功能,占用定时器T1的控制位TR1和T1的中断标志位TF1,其启动和关闭仅受TRl的控制。定时器T1无模式3,可工作于方式0、1、2,但不能使用中断方式。只有将T1用做串行口的波特率发生器时,T0才工作在方式3以便增加一个定时器。,5.1.4定时计数器的应用编程,5.1.4.1定时器的计数初值C的计算和装入,方式0(13位方式):C=(-64H)补=2000H64H=1F9CH1F9CH0001111110011100B把13位中的高八位11111100B装入TH0,而把13位中的低五位xxx11100B装入TL0。MOVTH0,#0FCH;MOVTL0,#1CH;(xxx用“0”填入),例要计100个脉冲的计数初值,方式2(8位自动再装入方式)C=(64H)补=100H64H=9CH初值既要装入TH0,也要装入TL0:MOVTH0,#9CHMOVTL0,#9CH,方式1(16位方式):C=(-64H)补=10000H-64H=FF9CH用指令装入计数初值:MOVTH0,#0FFHMOVTL0,#9CH,5.1.4.2定时计数器的初始化编程定时计数器的初始化编程步骤:1)根据定时时间要求或计数要求计算计数器初值;2)工作方式控制字送TMOD寄存器;3)送计数初值的高八位和低八位到THX和TLX寄存器中;4)启动定时(或计数),即将TRx置位。如果工作于中断方式,需要置位EA(中断总开关)及ETx(允许定时/计数器中断)。并编中断服务程序。,例5-1如图7-2所示,P1中接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,设晶振为6MHz。,5.1.4.3应用编程举例,分析利用T1完成100ms的定时,当P1口线输出“1”时,发光二极管亮,每隔100ms”1”左移一次,采用定时方式1,先计算计数初值:MC=2s100ms/2s=50000=C350H(C350H)补=10000H-C350H=3CB0H,查询方式如下:ORG0030HMOVA,#01H:置第一个LED亮NEXT:MOVP1,AMOVTMOD,#10H;T1工作于定时方式1MOVTH1,#3CHMOVTL1,#0B0H;定时100msSETBTR1AGAI:JBCTF1,SHI;100ms到转SHI,并清TF1SJMPAGAISHI:RLASJMPNEXT,中断方式ORG0000HAJMPMAIN;单片机复位后从0000H开始执行ORG001BHAJMPIV1;转移到IV1ORG0030H;主程序MAIN:MOVA,#01HMOVP1,A;置第一个LED亮MOVTMOD,#10H;T1工作于定时方式1MOVTH1,#3CHMOVTL1,#0B0H;定时100msSETBTR1;启动T1工作SETBEASETBET1;允许T1中断WAIT:SJMPWAIT;等待中断,IV1:RLA;中断服务程序,左移一位MOVP1,A;下一个发光二极管亮MOVTH1,#3CHMOVTL1,#0B0H;重装计数初值RETI;中断返回以上程序进入循环执行,八个LED一直循环轮流点亮。,方法1:采用T0产生周期为200ms脉冲,即P1.0每100ms取反一次作为T1的计数脉冲,T1对下降沿计数,因此T1计5个脉冲正好1000ms。T0采用方式1,X=得X=3CB0H,T1采用方式2,计数初值X=5=FBH均采用查询方式,流程图和程序如下:,例5-2在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮一秒灭一秒周而复始,设fosc=6MHZ。,解:16位定时最大为*2us=131.072ms,显然不能满足要求,可用以下两种方法解决。,ORG0000HMAIN:CLRP1.7SETBP1.0MOVTMOD,#61HMOVTH1,#0FBHMOVTL1,#0FBHSETBTR1LOOP1:CPLP1.7,LOOP2:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0LOOP3:JBCTF0,LOOP4SJMPLOOP3LOOP4:CPLP1.0JBCTF1,LOOP1AJMPLOOP2END,程序中用JBC指令对定时/计数溢出标志位进行检测,当标志位为1时跳转并清标志。,方法2:T0每隔100ms中断一次,利用软件对T0的中断次数进行计数,中断10次即实现了1秒的定时。ORG000BH;T0中断服务程序入口AJMPIP0ORG0030H;主程序开始MAIN:CLRP1.7;T0定时100msMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBET0SETBEA,MOVR4,#0AH;中断10次计数SETBTR0SJMP;等待中断IP0:DJNZR4,RET0MOVR4,#0AHCPLP1.7RET0:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0RETI,解按题意,波形示意图如下:,例5-3由P3.4引脚(T0)输入一个低频脉冲信号(其频率0.5kHz),要求P3.4每发生一次负跳变时,P1.0输出一个500us的同步负脉冲,同时P1.1输出一个1ms的同步正脉冲。已知晶振频率为6MHz。,初态P1.0输出高电平(系统复位时实现),P1.1输出低电平,T0选方式计数方式(计一个脉冲,初值为FFH)。当加在P3.4上的外部脉冲负跳变时,T0加1,计数器溢出,程序查询到TF0为1,改变T0为500us定时工作方式,并使P1.0输出,P1.1输出。T0第一次定时500us溢出后,P1.0恢复,T0第二次定时500us溢出后,P1.1恢复,T0恢复外部脉冲计数。设定时500us的初始值为X,则:(256X)210-6=50010-6解得X=6,源程序如下:BEGIN:MOVTMOD,#6H;设T0为方式外部计数MOVTH0,#0FFH;计数一个脉冲MOVTL0,#0FFHCLRP1.1;P1.1初值为0SETBTR0;启动计数器DELL:JBCTF0,RESP1;检测外跳变信号AJMPDELLRESP1:CLRTR0MOVTMOD,#02H;重置T0为500us定时,MOVTH0,#06H;重置定时初值MOVTL0,#06HSETBP1.1;P1.1置1CLRP1.0;P1.0清0SETBTR0;启动定时计数器DEL2:JBCTF0,RESP2;检测第一次500us到否AJMPDEL2RESP2:SETBP1.0;P1.0恢复1DEL3:JBCTF0,RESP3;检测第二次500us到否AJMPDEL3RESP3:CLRP1.1;P1.1恢复0CLRTR0AJMPBEGIN,5.1.4.4门控位的应用门控位GATE为1时,TRx=1,INTx=1才能启动定时器。利用这个特性可以测量外部输入脉冲的宽度。例5-4利用T0门控位测试INT0引脚上出现的正脉冲宽度,已知晶振频率为12MHz,将所测得值最高位存入片内71H单元,低位存入70H单元。,解:设外部脉冲由(P3.2)输入,T0工作于定时方式1(16位计数),GATE设为1。测试时,应在INT0低电平时,设置TR0为1(16位计数);当INT0变为高电平时,就启动计数;再次变低时,停止计数。此计数值与机器周期的乘积即为被测正脉冲的宽度。因fosc=12MHZ,机器周期为1us,测试过程如下。,源程序如下:MOVTMOD,#09H;设T0为方式1MOVTL0,#00H;设计初值取最大值MOVTH0,#00HMOVR0,#70HJBP3.2,$;等P3.2(INT0)变低SETBTR0;启动T0准备工作JNBP3.2,$;等待P3.2(INT0)JBP3.2,$;等待P3.2(INT0)CLRTR0;停止计数,MOVR0,TL0;存放结果INCR0MOVR0,TH0SJMP$这种方案被测脉冲的宽度最大为65535个机器周期。由于靠软件启动和停止计数,有一定的测量误差。其可能的最大误差与指令的执行时间有关。此例中,在读取定时器的计数之前,已把它停住。但在某些情况下,不希望在读计数值时打断定时的过程,由于我们不可能在同一时刻读取THX和TLX的内容。读取一个时恰好另一个产生溢出,在这种情况下,读取的计数值有可能是错的。可以解决错读的方法是:,先读THX后读TLX,若两次读得的THx没有发生变化,则可确定读到的内容是正确的。若前后两次读到的THx有变化,则再重复上述过程,重复读到的内容就应该是正确的了。下面是按此思路编写的程序段,读到的TH0和TL0放在R1和R0内:RP:MOVA,TH0;MOVR0,TL0;CJNEA,TH0,RP;MOVR1,A,5.2定时/计数器,T2除了具备和定时/计数器T1、T0一样的定时/计数功能外,还具有16位自动重装载、捕获方式和加、减计数方式。所谓捕获方式就是把16位瞬时计数值同时记录在特殊功能寄存器的RCAP2H和RCAP2L中,这样CPU在读计数值时,就避免了在读高字节时低字节的变化引起读数误差。增强型单片机增加了一个T2中断源,在TF2或EXF2为1时产生T2中断,中断矢量地址为002BH。,5.2.1定时/计数器T2的结构和外部引脚,T2采用了两个外部引脚P1.0和P1.1,作用如下:P1.0(T2):定时/计数器T2的外部计数脉冲输入,定时脉冲输出P1.1(T2EX):定时/计数器T2的捕捉/重装方式中,触发和检测控制,T2OE:输出允许位。T2OE=1,允许定时时钟从P1.0输出;T2OE=0,禁止定时时钟从P1.0输出。DCEN:计数方式选择。DCEN=1,T2的计数方式由P1.1引脚状态决定。P1.1=1,T2减计数;P1.1=0,T2加计数。DCEN=0,计数方式与P1.1无关,同T0和T1一样,采用加计数方式。2.TH2、TL2(地址分别为CDH和CCH)TH2存放计数值的高八位,TL2存放计数值的低八位。3.RCAP2H、RCAP2L(地址分别为CBH和CAH)在捕捉方式时,存放捕捉时刻TH2和TL2的瞬时值;在重装方式时存放重装初值。即当捕捉事件发生,RCAP2H=TH2,RCAP2L=TL2;当重装事件发生,TH2=RCAP2H,TL2=RCAP2L,5.2.2定时/计数器T2的寄存器,1.T2MOD(地址C9H)T2MOD为8位的寄存器,但只有两位有效,复位时为xxxxxx00。,4.T2CON(地址C8H)T2CON为8位寄存器,用于对定时/计数器T2进行控制,当系统复位后其值为00H。,TF2:定时器2溢出标志。当允许中断时,将引起中断,中断后必须软件清零。TF2=1,T2有溢出;TF2=0,T2无溢出。如果RCLK=1或TCLK=1时,此位无效。EXF2:定时器2的外部标志。当外部使能位EXEN2=1,且T2EX(P1.1引脚)的负跳变产生捕获或重装时,EXF2被置1。如果允许T2中断,将引起中断,中断后必须软件清零。在递增/递减计数器模式(DCEN=1)中,EXF2不会引起中断。,RCLK:接收时钟允许。RCLK=1时,定时器2的溢出脉冲作为串口工作方式1和方式3的接收时钟。RCLK=0时,将定时器1的溢出脉冲作为接收时钟。TCLK:发送时钟允许。TCLK=1时,定时器2的溢出脉冲作为串口工作方式1和方式3的发送时钟。TCLK=0时,将定时器1的溢出脉冲作为发送时钟。EXEN2:定时器2外部使能标志。当其置位且定时器2未作为串行口时钟时,允许T2EX的负跳变产生捕获或重装。EXEN2=0时,T2EX的跳变对定时器2无效。,TR2:T2的启动/停止位。TR2=1,启动T2工作;TR2=0,停止T2工作。,5.2.3定时/计数器T2的工作方式,定时/计数器T2的工作方式如下表所示:,1.捕捉方式当RCLK=TCLK=0和CP/RL2=1时,定时器工作于16位捕获方式。,图1定时器2捕获方式,1.捕捉方式(续),在捕获模式中,通过T2CON中的EXEN2设置2个选项。如果EXEN2=0,定时器2作为一个16位定时器或计数器(由T2CON中的C/T位选择),溢出时置位TF2,产生中断;如果EXEN2=1,T2EX的未出现负跳变则也可实现16位定时器/计数器的溢出,但当T2EX出现负跳变时产生捕获,同时使T2CON中的EXF2置位,将产生中断,在该模式,TL2和TH2无重新装载值,甚至当产生捕获事件时,计数器仍以T2EX的负跳变或振荡频率的1/12计数。,2.自动重装方式,当DCEN=0(T2MOD.0)时,工作于自动重装方式1,在定时过程中,在该模式中,通过设置EXEN2位进行选择。如果EXEN2=0,定时器2递增计数到0FFFFH,并在溢出后将TF2置位,然后将RCAP2L和RCAP2H中的16位值作为重新装载值装入定时器2。RCAP2L和RCAP2H的值是通过软件预设的。如果EXEN2=1,16位重新装载可通过溢出或T2EX从10负跳变实现。此负跳变可同时将EXF2置位。在允许中断的情况下,则当TF2或EXF2置1时产生中断。,图2定时器2自动重装方式1(DCEN=0),(当RCLK=TCLK=0,CP/RL2=0),当DCEN=1时,工作于自动重装方式2,此时,定时器2可递增或递减计数,由T2EX(P1.1)的电平控制T2是加计数还是减计数。当P1.1为低电平时,T2减计数,当计数溢出时,TH2和TL2中自动重装为FFH。当P1.1为高电平时,T2加计数,当计数溢出时,TH2和TL2中自动重装为RCAP2H和RCAP2L的值。无论是加计数还是减计数,溢出时TF2=1,当溢出时,外部标志位EXF2发生翻转。在此方式中,EXF2标志不会产生中断。,2.自动重装方式(续),(当RCLK=TCLK=0,CP/RL2=0),图3定时器2自动重装方式2(DCEN=1),3.波特率发生器方式,当RCLK或TCLK为1时,T2就处于波特率发生器方式。T2的计数脉冲可以由fosc/2或P1.1输入。此时RCAP2H和RCAP2L中的值用作计数初值,溢出后此值自动装到TH2和TL2中。如果RCLK或TCLK中某值为1时,表示收发时钟一个用T2,另一个用T1。在这种工作方式下,如果在P1.1检测到一个下降沿,则EXF2变为1,可引起中断。,仅当寄存器T2CON中的RCLK或TCLK=1时,T2作为波特率发生器才有效。注意:TH2溢出并不置位TF2,也不产生中断。这样当定时器2作为波特率发生器时,定时器2中断不必被禁止。如果EXEN2(T2外部使能标志)被置位,在T2EX中由1到0的转换会置位EXF2,如中断允许,将产生T2中断。此时,T2EX可用作附加的外部中断。当T2工作在波特率发生器模式下,则不要对TH2和TL2进行读/写,每隔一个状态时间(fosc/2)或由T2进入的异步信号,定时器2将加1。在此情况下对TH2和TH1进行读/写是不准确的;可对RCAP2寄存器进行读,但不要进行写,否则将导致自动重装错误。当对定时器2或寄存器RCAP进行访问时,应关闭定时器(TR2清零)。,4.时钟输出方式当RCLK=TCLK=0、T2OE=1、C/T2=0时,T2处于时钟输出方式,T2的溢出脉冲从P1.0输出,输出脉冲的频率fCLKout由下式决定:,例5-5利用定时/计数器T2作为时钟发生器,从P1.0输出频率为1KHz的脉冲,设fosc=12MHz,分析:根据上述公式计算计数初值。,=,12103,4(65536-(RCAP2H,RCAP2L),(RCAP2H,RCAP2L)=62536=F448H,程序如下:,MOVT2MOD,#02HMOVT2CON,#00HMOVRCAP2H,#0F4HMOVRCAP2L,#48HSETBTR2RET,例5-6测量脉冲信号的周期,并存放于R6R5中。,分析:待测脉冲接P1.1引脚,T2在信号下降沿捕捉,两下降沿计时时间之差即为被测脉冲的周期,采用中断方式,程序如下。,ORG0000HAJMPMAINORG002BHAJMPMSORG0040HMAIN:MOVT2MOD,#00HMOVT2CON,#09H;设T2为16位捕捉方式MOVTL2,#00H;设计数初值MOVTH2,#00HMOVR1,#70H;R1为存放计数值的寄存器地址MOVR0,#00HSETBEA;开中断SETBET2SETBTR2;启动T2计数,NEXT:MOVR1,RCAP2L;存放计数的低字节INCR1MOVR1,RCAP2H;存放计数的高字节INCR1INCR0;中断次数标志增1RETIEND,WAIT:CJNER0,#02H,WAIT;等待P1.1的下降沿CLRET2CLREA;关中断,以便进行数据处理CLRC;将两次捕捉到的计数值相减,即得脉冲宽度MOVA,72HSUBBA,70HMOVR5,AMOVA,73HSUBBA,71HMOVR6,AMS:JBCEXF2,NEXT;P1.1下降沿中断程序CLRTF2;非P1.1脚引起的中断不处理RETI,5.1.5小结,定时计数器应用非常广泛,如定时采样、时间测量、产生音响、作脉冲源、制作日历时钟、测量波形的频率和占空比、检测电机转速等。因此应很好掌握。51系列单片机既有两个16位的定时计数器,有四种不同的工作方式,归纳于下表:,定时和计数实质都是对脉冲的计数,只是被计脉冲的来源不同,定时方式的被计脉冲来源于时钟,计数方式的被计脉冲来源于外部,定时方式的计数初值和被计脉冲周期有关,计数方式的和被计脉冲的个数有关。,无论定时还是计数,当计满规定的脉冲个数产生溢出(计数初值寄存器回零),置位TFx,可以通过程序查询,如果允许中断,会产生中断。,本章应重点掌握定时计数器的应用设计,5.2串行接口概述单片机串行口的结构与工作原理串行口的控制寄存器串行口的工作方式串行口的应用编程,5.2.1概述单片机应用与数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。如下图所示。,数据通信方式有两种:并行通信与串行通信并行通信:所传送数据的各位同时发送或接收,数据有多少位就需要多少根数据线。特点:速度快,成本高,适合近距离传输如计算机并口,打印机,8255。串行通信:所传送数据的各位按顺序一位一位地发送或接收。只需一根数据,一根地线,共2根(如双向通信发送和接收各需1根数据线。)特点:成本低,硬件方便,适合远距离通信,传输速度低。,串行通信的分类:同步串行通信和异步串行通信一、异步通信:,通信的双方应该有一个约定,什么时候开始发送,什么时候发送完毕;接收方收到的信息是否正确等,这就是通信协议。异步串行通信一帧数据格式:一个起始位“0”,表示字符的开始,然后是58位数据即该字符的代码,规定低位在前,高位在后,接下来是奇偶校验位(可省略),最后以停止位“1”表示字符的结束。,优点:硬件结构简单。缺点:传输速度慢。,二、同步通信在同步通信中,发送方在数据或字符开始处就用同步字符(常约定12个字节,指示一帧的开始,由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面就连续按顺序传送若干个数据,最后发校验字节。见下图:,SYN字符1,SYN字符2,数据1,数据2,.,数据n,连续传送n个数据,校验,三、单工、半双工、全双工通信方式,按通信方向分类:单工、半双工、全双工通信方式1单工方式:一端是发送端,另外一端是接收端:,2.半双工方式,每端口有一个发送器和一个接收器,通过开关连接在线路上,数据可以双向传送,但不能同时发送和接收.要通过换向器转换方向。,3.全双工方式,通信双方用两个独立的收发器单独连接,可以同时发送和接收数据,因而提高了速度。,两个通信设备在串行线路上成功地实现通信必须解决两个问题:一是串并转换,即如何把要发送的并行数据串行化,把接收的串行数据并行化;二是设备同步,即同步发送设备与接收设备的工作节拍,以确保发送数据在接收端被正确读出。,(1)串并转换串行通信是将计算机内部的并行数据转换成串行数据,将其通过一根通信线传送;并将接收的串行数据再转换成并行数据送到计算机中。,图发送时的并-串转换,图接收时的串-并转换,设备同步对通信双方有两个共同要求:*通信双方必须采用统一的编码方法:确定一个字符二进制表示值的位发送顺序和位串长度,当然还包括统一的逻辑电平规定,即电平信号高低与逻辑1和逻辑0的固定对应关系。*通信双方必须能产生相同的传送速率。,(2)设备同步,串行通信协议,在串行传输中,通信的双方都按通信协议进行,所谓通信协议就是通信双方必须共同遵守的一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定义等。,另外,还需进行传送错误检测,即在发送时,对传送的数据自动生成校验位或校验码,在接收端能检查校验位或校验码,以确定传送中是否有误码。,51系列单片机内有一个全双工的异步通信接口,通过对串行接口写控制字可以选择其数据格式,同时内部有波特率发生器,提供可选的波特率,可完成双机通信或多机通信。,四、波特率单位时间内传送的信息量。在计算机中,以每秒传送的二进制位数为单位。例如:100字符/秒,1个字符11位,波特率为:10011=1100(波特)平均每位传送占用时间Td=1/1100=0.909ms,5.2.2单片机串行口的结构与工作原理,51单片机有一个可编程的全双工异步串行通信接口,它可作UART用,也可作同步移位寄存器,其帧格式可有8位、10位或ll位,并能设置各种波特率,给使用者带来很大的灵活性。,一、串行口的内部结构,内部总线,发送SBUF(99H),门,8,8,图5.13串行口结构框图,RXD(P3.0),TXD(P3.1),中断,接收SBUF(99H),分频器,发送控制器,接收控制器,串寄行存控器制SCON(98H),输入移位寄存器,TI,RI,定时器T1,fosc/2,波特率发生器,(2)两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H,可同时发送、接收数据。发送缓冲器只能写入,不能读出,CPU写SBUF,一方面修改发送寄存器,同时启动数据串行发送;接收缓冲器只能读出、不能写入。读SBUF,就是读接收寄存器。,由上图,可总结如下:(1)串口主要由两数据缓冲器SBUF和一个输入移位寄存器组成,其内部还有一个串行控制寄存器SCON和一个波特率发生器组成。,(3)波特率发生器可以有两种选择:定时器T1、T2作波特率发生器,改变计数初值就可以改变串行通信的速率,称为可变波特率。以内部时钟的分频器作波特率发生器,因内部时钟频率一定,称为固定波特率。,shift,MOVA,SBUF,串行数据,CPU,CPU,SBUF,SBUF,shift,MOVSBUF,A,并行数据,并行数据,甲方(发送),乙方(接收),甲方发送时,CPU执行指令MOVSBUF,A启动了发送过程,数据并行送入SBUF,在发送时钟shift的控制下由低位到高位一位一位发送,乙方在接收时钟shift的控制下由低位到高位顺序进入移位寄存器SBUF,甲方一帧数据发送完毕,置位发送中断标志TI,该位可作为查询标志(或引起中断),,二、串行通信工作原理用下面简图说明,CPU可再发送下一帧数据。乙方一帧数据到齐即接收缓冲器满,置位接收中断标志RI,该位可作为查询标志(或引起接收中断),通过MOVA,SBUFCPU将这帧数据并行读入。由上述可知:(1)甲、乙方的移位时钟频率应相同,即应具有相同的波特率,否则会造成数据丢失。(2)发送方是先发数据再查标志,接收方是先查标志再收数据。(3)CPU通过指令和SBUF并行交换数据,并不能控制数据的串行移位,它只能查询标志位来确定数据的移位是否完成。,5.2.3串行口的控制寄存器5.2.3.1串行口的控制寄存器SCON(98H)8XX51串行通信的方式选择,接受和发送控制及串行口的标志均由专用寄存器SCON控制和指示,其格式如下:,SM0.SM1:串行口工作方式控制位。00-方式0,01-方式110-方式2,11-方式3,SM2:多机通信控制位,主要用于方式2和方式3。在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求。当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。,TB8:在方式2,3中,TB8是所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。,RB8:在方式2,3中,RB8是从机收到的第9位数据,该数据来自主机的TB8,方式1中停止位存RB8。,REN:串行接收允许位。0-禁止接收,1-允许接收,TI:发送中断标志位。发送前必须用软件清零,发送过程中TI保持零电平,发送完一帧数据后,由硬件置“1”,如果再发送,必须用软件再清零。,RI:接收中断标志位。接收前,必须用软件清零。在方式0时,当接收到的第8位数据结束后,由内部硬件使RI置位。在其他方式时,接收到停止位的中间便由硬件置位RI。如果再接收必须用软件清零。,多机通信,图2.23主从式多机通信系统,在主从式多机系统中,主机发出的信息有两类,而且具有特征,能够有所区分。一类为地址,用来确定需要和主机通信的从机,特征是串行传送的第9位数据为1;另一类是数据,特征是串行传送的第9位数据为0。对从机来说,要利用SCON寄存器中的SM2位的控制功能。在接收时,若RI=0,则只要SM2=0,接收总能实现;而若SM2=1,则发送的第9位TB8必须为1接收才能进行。因此,对于从机来说,在接收地址时,应使SM2=1,以便接收到主机发来的地址,从而确定主机是否打算和自己通信,一经确认后,从机应使SM2=0,以便接收TB8=0的数据。,主从多机通信的过程如下:(1)使所有的从机的SM2位置1,以便接收主机发来的地址。(2)主机发出一帧地址信息,其中包括8位需要与之通信的从机地址,第9位为1。(3)所有从机接收到地址帧后,各自将所接收到的地址与本机地址相比较,对于地址相同的从机,使SM2位清零以接收主机随后发来的所有信息;对于地址不符合的从机,仍保持SM2=1的状态,对主机随后发来的数据不予理睬,直至发送新的地址帧。(4)主机给已被寻址的从机发送控制指令和数据(数据帧的第9位为0)。,PCON的字节地址为87H,无位地址,只能字节寻址.,初始化时SMOD=0.,PCON,87H,5.2.3.2电源控制寄存器PCON,PCON的格式如下图所示,串行通信只用其中的最高位SMOD,SMOD:波特率加倍位。在计算串行方式1、2、3的波特率时,SMOD0不加倍;SMOD1加倍,5.2.4串行口的工作方式,根据串行通信数据格式和波特率的不同,51系列单片机的串行通信有四种工作方式,通过编程进行选择,各工作方式的特点如下:,1.方式0同步移位寄存器方式方式设定:SM0SM1=00,通过执行MOVSCON,#00H。此时:RXD(P3.0):数据的发送或接收口。TXD(P3.1):输出同步移位脉冲。发送、接收的是8位数据,不设起始位和停止位,低位在前,波特率固定为fosc/12。,接收:在满足REN=1,RI=0时,串行口即开始从RXD端以fosc/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,CPU查询到RI=1便可通过指令MOVA,SBUF把”SBUF”中的数据送入累加器中,在再次接收数据之前,必须由软件清除RI,使RI为0。,移位寄位器方式不适用于两个89C51之间的直接数据通信,但可用于接口的扩展,当用单片机构成系统时,往往感到并行口不够用,此时可通过外接串入并出移位寄存器扩展输出接口;通过外接并入串出移位寄存器扩展输入接口。,在方式0下,SM2、RB8和TB8均不起作用,它们通常均应设置为“0”状态。,发送:MOVSBUF,A当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率从RXD引脚输出(低位在前)发送完置TI为1,在再次发送数据之前,必须由软件清TI为0,例5-10串行通信方式0,扩展I/O接口,接八个数码管,使内部数据存储器58H5FH单元的内容依次显示在8个数码管上,58H5FH单元的内容均为0XH。,分析:由于TXD,RXD运行在工作方式0时,可方便的连接串入并出寄存器74LS164或CD4094,TXD发送移位脉冲,RXD发送数据,P3.3用于显示器的输入控制,通过74LS164接八个数码管。,74LS164,程序如下:,ORG0050HSETBP3.3;允许移位寄存器工作MOVSCON,#0;选串行通信方式0MOVR7,#08H;显示八个字符MOVR0,#5FH;先送最后一个显示字符MOVDPTR,#TBA;DPTR指向字形表首址DL0:MOVA,R0;取待显示数码MOVCA,A+DPTR;查字形表MOVSBUF,A;送出显示JNBTI,$;一帧输出完?CLRTI;已完,清中断标志,DECR0;修改显示数据地址DJZNR7,DLOCLRP3.3;8个数据送完,关发送脉冲SJMP$TBA:DB0C0H,0F9H,0A4H,0B0H,99H,92HDB82H,0F8H,80H,90H,83H,83H,0C6HDB0A1H,86H,84H,0FFH,0BFH,补充:根据下图的连线,请编出发光二极管自左至右以一定速度轮流显示的程序。设发光二极管为共阴极接法。,8031,RxD,TxD,P1.0,说明:CD4094是一种8位串行输入(DATA端)并行输出的同步移位寄存器,CLK为同步脉冲输入端,STB为控制端,STB=0则8位并行数据输出端关闭,但允许串行数据从DATA端输入,STB=1则DATA输入端关闭,但允许8位数据并行输出,主程序:,ORG2000HAJMPMAINORG0023HAJMPSBVMAIN:MOVSCON,#00HCLRP1.0MOVA,#80HMOVSBUF,ALOOP:SJMPLOOP,中断服务程序:,ORG0100HSBV:SETBP1.0ACALLDELAYCLRTIRRACLRP1.0MOVSBUF,ARETIDELAY:END,8031,RxD,TxD,P1.0,Q8,CLK,CD4014,例:根据下图电路,编出MCS-51串行输入开关量并把它存入20H单元的程序。要求控制开关Kc断开(Kc=1)时8031处于等待状态,Kc合上(Kc=0)时8031开始输入和进行模拟。,P1.1,Kc,说明:CD4014是并行输入串行输出的同步移位寄存器。其中,Q8为串行输出端,CLK为同步移位脉冲输入端,P/S为控制端。,=,0:则CD4014可以串行输出(并行输入端关闭),1:则CD4014可以并行输入数据(串行输出端关闭),程序:,ORG2000HSTART:JBP1.0,$SETBP1.1CLRP1.1MOVSCON,#10HJNBRI,$CLRRIMOVA,SBUFMOV20H,A,ACALLOTHPROSJMPSTARTEND,例:用89C51串行口外接164串入并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法,如图所示。,解:设数据串行发送采用中断方式,显示的延迟通过调用延迟程序DELAY来实现。,ORG0023H;串行口中断入口AJMPSBR;转入串行口中断服务程序ORG2000H;主程序起始地址MOVSCON,#00H;串行口方式0初始化MOVIE,#90HMOVA,#80H;最左一位发光二极管先亮CLRP1.0;关闭并行输出MOVSBUF,A;开始串行输出LOOP:SJMP$;等待中断SBR:SETBP1.0;启动并行输出ACALLDELAY;显示延迟一段时间CLRTI;清发送中断标志RRA;准备右边一位显示CLRP1.0;关闭并行输出MOVSBUF,A;再一次串行输出RETI;中断返回,74LS165芯片介绍,例:用89C51串行口外加移位寄存器165扩展8位输入口,输入数据由8个开关提供,另有一个开关K提供联络信号。当K=0时,表示要求输入数据,输入的8位为开关量,提供逻辑模拟子程序的输入信号。,解:串行口方式0的接收要用SCON寄存器中的REN位作为开关来控制。对RI采用查询方式来编写程序,当然,先要查询开关K是否闭合。程序清单:START:MOVSCON,#00H;串行口方式0初始化JBP1.1,$;开关K未闭合,等待CLRP1.0;SH/LD=0,并行置入数据SETBP1.0;SH/LD=1,允许串行移位SETBREN;开始串行接收JNBRI,$;查询RICLRRI;查询结束,清RICLRRENMOVA,SBUF;读数据到累加器SJMPSTART;准备下一次模拟,2.方式1(SM0=0,SM1=1)为10位异步通信方式,RXD为接收端,TXD为发送端,每帧数据由1个起始位“0”,8个数据位和1个停止位“1”构成。,(1)发送:执行MOVSBUF,A指令后开始,然后发送电路就自动在8位发送字符前后分别添加1位起始位和停止位,并在移位脉冲作用下在TxD线上依次发送一帧信息。TI在发送停止位时置位,并由软件将它复位。,(2)接收:在RI=0和REN=1的条件下进行。,接收控制器发出装载SBUF的信号,将8位数据装入接收缓冲器SBUF中,停止位装入RB8,并置RI=1,向CPU申请中断,在方式1下,SM2应设定为0。以TXD为串行数据的发送端,RXD为数据的接收端,由T1提供移位时钟,是波特率可变方式,波特率=(2SMOD/32)(T1的溢出率)=(2SMOD/32)(fosc/12(256-x)根据给定的波特率,可以计算T1的计数初值X。,11位异步发送/接收方式,即每帧数据由有一个起始位“0”,9个数据位和1个停止位“1”组成。发送时第九个数据位,由SCON寄存器的TB8位提供,第9位数据位的装入可用以下指令中的一条来完成:SETBTB8CLRTB8接收到的第九位数据存放在SCON寄存器的RB8位.第九位数据可作为检验位(SM2=0),也可用于多机通信中识别传送的是地址还是数据的特征位(SM2=1)。,波特率固定为(2SMOD/64)fosc.,3.方式2,例:带奇偶校验位的数据的发送与接收,4.方式3与方式2接收,发送过程相同,仅波特率不同,方式3的波特率可变(同方式1)公式为:,5.2.5串行口的应用编程,1、设定波特率串行口的波特率有两种方式:固定波特率(方式0、方式2)可变波特率(方式1、方式3)注意:使用可变波特率时,先确定T1的计数初值,并对T1进行初始化。2、填写控制字,即对SCON寄存器设定工作方式串行通信的编程方式:查询方式:查TI、RI是否为“1”。发送程序:发送一个数据、查询TI、发送下一个数据(先发后查)接收程序:查询RI、读入一个数据、查询RI、读下一个数据(先查后收),5.2.5.1查询方式,查询方式发送流程图和接收流程图见下页,中断方式:如果预先开了中断,当TI、RI为“1”,会自动产生中断。发送程序:发送一个数据、等待中断,在中断中再发送下一数据接收程序:等待中断,在中断中再接收一个数据注意:两种方式中当发送或接受数据后都要注意清TI或RI。,5.2.5.2中断方式,中断方式的初始化编程同查询方式,不同的是要开中断,即置位EA和ES,编写中断服务程序。,中断方式串行通信的程序流程见下图:,中断方式发送流程图,中断服务程序,主程序,中断方式接收流程图,中断服务程序,主程序,例5-8接线如图,编一个自发自收程序,检查单片机的串行口是否完好,f=12MHz,波特率600,取SMOD0。,解:依据公式波特率求得,汇编语言编程,MOVTMOD,#20HMOVTH1,#0CCHMOVTL1,#0CCH;设定波特率SETBTR1MOVSCON,#50HABC:CLRTIMOVP1,#0FEH;LED灭ACALLDAY;延时MOVA,#0FFHMOVSBUF,A;发送数据FFHJNBTI,$;TI=1等待,CLRTIJNBRI,$;RI=1等待CLRRIMOVA,SBUF;接收数据,A=FFHMOVP1,A;灯亮ACALLDAY;延时SJMPABCDAY:MOVR0,#0DAL:MOVR1,#0DJNZR1,$DJNZR0,DALRET,如果发送接收正确,可观察到P1.0接的发光二极管闪亮。,例5-7内部数据存储器20H3FH单元中共有32个数据,要求采用方式1串行发送出去,传送速率为1200波特,设fosc=12MHZ。,分析:T1工作于方式2,作为波特率发生器,SMOD=0。T1的时间常数计算如下:,x=230=E6H,(1)查询方式发送程序:ORG0000HMOVTMOD,#20H;T1方式2MOVTH1,#0E6HMOVTL1,#0E6H;T1时间常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论