《定时计数器结构及工作原理.ppt》由会员分享,可在线阅读,更多相关《定时计数器结构及工作原理.ppt(23页珍藏版)》请在三一办公上搜索。
1、定时:对片内振荡器的f0/12(机器周期)进行计数。定时时间=(2n初值)机器 周期,特点:定时或计数时,都不占用CPU时间。除非定时/计数器溢出,才可能中断CPU的当前操作。,89C51片内有两个16位可编程定时/计数器T0、T1,一、定时/计数器结构及工作原理,计数:计T0/T1端下降沿。检测一个1至0的跳变需要两个机器周期,故最高计数频率为振荡频率的1/24。同时,高电平至少保持 一个完整的机器周期。,4.4 定时/计数器,定时/计数器工作方式由控制字TMOD、TCON来决定,(注意:TMOD不能以位寻址),1.TMOD(89H)工作方式寄存器,二、控制字和工作方式,2.TCON(88H
2、)控制和标志寄存器,(注意:除了可字节寻址外,还可位寻址),SETB TR0SETBTR1,定时/计数器0 可以工作在模式 03定时/计数器1 可以工作在模式 02,图6-7,1.模式0,三、工作方式,M1 M0 0 0,2.模式1:16位,其他同方式0。(初值=216t/机器周期),3.模式2:8位,时间常数可以自动装载,其余同方式0。初始化时,TH0TL0,具有相同的初值。t=(28TH0初值)机器周期 P136,例6-2,模式2的应用。,START:MOVTMOD,#06H;设置T0为模式2,外部计数方式 MOVTH0,#0FFH;T0计数器初值255 MOVTL0,#0FFH SETB
3、TR0;启动T0计数LOOP1:JBCTF0,PTF01;查询T0溢出标志,TF01转移,且TF0=0.SJMPLOOP1PTF01:CLRTR0;停止计数 MOVTMOD,#02H;设置T0为模式2,定时方式 MOVTH0,#06H;T0定时500us MOVTL0,#06H CLRP1.0;p1.0清0 SETBTR0;启动定时500usLOOP2:JBCTF0,PTF02;查询溢出标志,定时到TF01转移,且TF0=0.SJMPLOOP2PTF02:SETBP1.0;P1.0置1 CLRTR0;停止计数 SJMPSTART,外部计数方式 定时方式 外部计数方式 定时方式,P136,例6-
4、2,模式3:仅对定时/计数器0有效 T0TH0+TL0 对定时/计数器1,停止计数。,TH0占用T1的控制位TR1和中断标志位TF1,仅能工作在定时方式,其启动和关闭仅受TR1的控制。,将定时/计数器0分成两个独立的8位计数器TH0、TL0。,定时/计数器1不能工作在方式3,若要其工作在方式3,就会立即停止计数,即保持住原有的计数值。,通常,写入控制字的次序为:1.把工作方式控制字写入TMOD 2.把定时、计数初值装入TLx、THx(x0、1)3.置位EA使CPU开放中断 4.置位ETx允许定时/计数器中断(需要时)5.置位TRx以启动计数,当工作于定时状态时,由于定时/计数器是计数机器周期,
5、每个机器周期包括12个振荡周期,则有:1个机器周期=2us(6MHz)或=1us(12MHz),因为是加1计数器,所以当计数值为X时,装入定时/计数器的初值应为 2nX:方式0,n=13 方式1,n=16 方式2、3,n=8,例1:设单片机的fosc6MHz,T0工作在方式0:求T0的最大定时时间T;产生1ms定时的T0初值;1ms定时在P1.0引脚输出周期为2ms的方波。t=(213初值)机器周期(12/(6106))t=(213初值)2us,T0最大定时时间对应于初值0,所以有:tmax21312/(6106)16384 us 16.384ms,程序:以中断方式:ORG 0000H AJM
6、P MAIN;转主程序 ORG 000BH;到中断服务程序 AJMP TOINT,设fosc6MHz,可通过定时/计数器定时1ms申请中断,在中断程序中让 P1.0 输出1 或 0实现。当fosc6MHz时,振荡周期1/6 us 机器周期121/6 us2us 所以,定时时间常数为:1ms/2us500。方式0时计数器为13位,计数常数21350076921E0CH 若用方式1,计数器为16位,计数常数21650065036 FE0CH,以查询方式 ORG 0000H AJMP MAIN ORG 2000HMAIN:MOV TMOD,#01;定时器0工作在方式1 MOV TL0,#0CH MO
7、V TH0,#0FEH SETB TR0;启动定时器0工作LOOP:JNB TF0,$;查询TF0,若计数器未溢出,原地等待 CLR TF0 CPL P1.0;得到方波 MOV TL0,#0CH MOV TH0,#0FEH;装入16位时间常数 SJMP LOOP,用方式2做。定时时间为:t(28TL0初值)机器周期。所以,仅当定时时间不超过tmax方可用方式2。这时,TL0、TH0赋予相同的值,一旦TL0溢出,置位TF0,并将TH0中的初值自动装入TL0,继续计数,循环往复。,设晶振频率为6MHZ,程序如下:ORG 0000H AJMP MAIN;转主程序 ORG 000BH;T0中断首地址
8、MOV TL0,#131;TL0装入时间常数(256-125)CPL P1.1;P1.1口得到方波 RETI ORG 001BH;T1中断处理程序首地址 MOV TH0,#06H;TH0装入时间常数(256-250)CPL P1.2;P1.2口得到方波 RETIMAIN:MOV TMOD,#03H;T0工作于方式3、定时 MOV TL0,#131,例5:设定时/计数器T0工作于方式3,TL0和TH0作为两个独立 的8位定时/计数器分别产生250us和500us的定时中断,使 P1.1和P1.2 产生500us和1000us的方波(晶振频率为6MHz)。,注意:当一个定时器的最大定时时间仍不能满
9、足定时要求,如:6MHZ时钟时,一个机器周期为2us,最大定时时间 655362131072us131ms0.13s 若希望定时 0.2s200ms,则不可能用一个定时器来完成。这时可以对定时器进行级联。,MOV TH0,#06H;送时间常数SETB EA;CPU开中断SETB ET0;允许中断 SETB ET1 SETB TR0;启动定时 SETB TR1SJMP$;等待,方式3时,由于只能是8位计数器,所以可以在中断程序中辅以软件计数,实现较长时间定时。,例6:如上述,希望定时200ms。时间到时,发光二极管或明或暗。设定时器0 定时 20ms,在软件中查询定时器0定时是否到20ms?若到
10、,用一个口位(P1.0)输出方波,周期为40ms,将此方波加到T1(定时器T1的外部输入),并设置T1的计数常数为5,则可实现200ms定时:,时钟 6MHZ 时,20ms/2us10000,时间常数:65536-10000=55536,定时器0:方式1,定时定时器1:方式2,计数(5个),例:P139 6-4 要求:用T0扩展外部中断源;P1.0引脚输出一个5KHz(周期200us)的方波。,这时,T1可工作在方式 02,仅用C/T即可切换其运行在定时或计数工作方式(本题中要求T1用于串行口波特率发生器)。,MOVTMOD,#27H;T0为模式3,T1为模式2,MOVTL0,#0FFH;置T
11、L0计数初值。MOVTH0,#156;置TH0计数初值(定时100us)MOVTH1,#data;data是根据波特率要求设;置的常数(即初值)MOVTL1,#dataMOVTCON,#55H;外中断0,外中断1边沿触;发,启动T0,T1MOVIE,#9FH;开放全部中断TL0INT:MOVTL0,#0FFH;TL0重赋初值RETITH0INT:MOVTH0,#156;TH0重赋初值CPL P1.0;P1.0取反输出RETI,程序:,例:P141 6-6 设计实时钟程序.(fosc=6MHz,一个机器周期2us)定时器各种工作方式的最大定时时间见P140。用T1产生1s定时(方式1,100ms定时中断,每中断一次软件计数器1,10次则1s。),分与时则通过对秒的软件计数来实现。,MOVA,#01HADDA,31H;分位加1DAAMOV31H,A;转换为BCD码CJNEA,#60H,RETUNT;未记满60min,返回MOV31H,#00H;记满60min,分位清0MOVA,#01HADDA,30H;时位加1DAAMOV30H,A;转换为BCD码CJNEA,#24H,RETUNT;未记满24小时,返回MOV30H,#00H;记满24小时,时位清0RETUNT:POP ACCPOPPSW;恢复现场RETI;中断返回END,