《单片微机原理及应用》教学课件定时/计数器原理及其应用汽车与交通工程学院Email:chenlinlin@lcu.edu.cn主讲:陈林林《单片微机原理及应用》教学课件2个16位定时器/计数器——(52系列有3个16位Timer)定时器:对片内机器时钟(周期方波)进行计数计数器:对Tx引脚输入的负脉冲进行计数与Timer工作有关的特殊功能寄存器:TCON和TMOD第五章定时/计数器《单片微机原理及应用》教学课件Timer的2个特殊功能寄存器(TCON,TMOD)TF1TR1TF0TR0IE1IT1IE0IT0定时器控制寄存器TCON(88H)TFx:Timer0/1计数溢出标志位。=1计数溢出;=0计数未满TFx标志位可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。TRx:Timer0/1运行控制位。=1启动计数;=0停止计数《单片微机原理及应用》教学课件TR0/TR1:Timer0/1运行控制位:TR0/TR1=0时,Timer0/1停止计数TR0/TR1=1时,Timer0/1启动计数定时器T0/T1中断申请过程在已经开放T0/T1中断允许且已被启动的前提下:T0/T1加满溢出时TF0/TF1标志位自动置“1”检测到TCON中TF0/TF1变“1”后,将产生指令:LCALL000BH/LCALL001BH执行中断服务程序,TF0/TF1标志位会自动清“0”,以备下次中断申请。定时/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)《单片微机原理及应用》教学课件GATEC/TM1M0GATEC/TM1M0定时器方式寄存器TMOD(89H)T1T0M1,M0:工作方式定义位(定义4种方式):C/T:计数器/定时器选择位=1外部事件计数器。对Tx引脚的负脉冲计数;=0片内时钟定时器。对机器周期脉冲计数定时00:13位Timer——用它无益,不要记它!01:16位Timer——经常用到10:可自动重装的8位Timer——经常用到11:T0分为2个8位Timer;T1此时不工作——因为没有带来甚麽好处,几乎无用《单片微机原理及应用》教学课件GATEC/TM1M0GATEC/TM1M0T1T0GATE门控位:Timer可由软件与硬件两者控制GATE=0——普通用法Timer的启/停由软件对TRx位写“1”/“0”控制定时器方式寄存器TMOD(续)(89H)GATE=1——门控用法Timer的启/停由软件对TRx位写“1”/“0”和在INTx引脚上出现的信号的高/低共同控制《单片微机原理及应用》教学课件阅读书上定时器应用程序举例:P.140例1:晶振=6MHz,估算Timer的定时时长(max,min)P.141例2:要求对T0产生100mS定时进行初始化。(晶振=6MHz)P.141例3:产生T=2mS方波(改为方式2)P.142例4:请改为方式1或2再阅读,务请大家不要陷入方式0的困惑之中!P.143例5:定时1秒P.144例6:方式3(双8位定时器)的应用《单片微机原理及应用》教学课件定时器结构与工作方式P.139工作方式1:——16位的定时/计数器振荡器12TLxTHx(8位)(8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制=1开关接通或门与门《单片微机原理及应用》教学课件THx/TLx赋初值:THx赋高8位,TLx赋低8位工作方式1的编程要点:TMOD选方式:写“M1,M0”=01b选方式1若不用门控位,直接用软件写TRx控制启/停若使用门控位,先置位TRx,然后由INTx端的高/低电平来控制其启/停若要允许中断,还须先置位ETx、EA等中断允许控制位,并编写中断服务程序若不用中断,可查询“计数溢出标志TFx”的方式工作,但溢出标志TFx须软件清0《单片微机原理及应用》教学课件定时器(方式1)应用程序举例:分析:已知fosc=6MHz则:(振荡周期)1Tc=1/6MHz(机器周期)1Tm=12Tc=12/6MHz=2S粗略地说:Tmin2S16位定时器最大数值为:216=65536=0FFFFH+1故选择方式1工作可以得到:Tmax=655362=131072S=131.072mS例1:若晶振频率为6MHz,计算单片机的最小与最大定时时间:《单片微机原理及应用》教学课件分析:已知fosc=6MHz则:(机器周期)1Tm=12Tc=12/6MHz=2S100mS÷2S=5000016位定时器最大数值为:216=65536(=0FFFFH+1)故选择方式1工作可以满足要求。计算初值:65536-50000=15536=3CB0H例2:要求对T0产生100mS定时进行初始化。(晶振=6MHz)定时器(方式1)应用程序举例:《单片微机原理及应用》教学课件GATEC/TM1M0GATEC/TM1M0定时器方式寄存器TMOD由分析得知:T0选择方式1,初值=3CB0HXXXX0001初始化:MOVTMOD,#01H;选T0方式1MOVTH0,#3CH;赋初值高8位MOVTL0,#0B0H;赋初值低8位SETBTR0;启动T0定时若需要定时器0产生中断还应当写如下语句:SETBET0;开T0中断允许SETBEA;开总中断允许以及相应的中断服务程序。《单片微机原理及应用》教学课件工作方式2:——8位自动重装的定时/计数器振荡器12TLx(8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制=1开关接通或门与门THx(8位)溢出位门开《单片微机原理及应用》教学课件☞THx/TLx赋相同初值在TLx计数达到0FFH再加“1”时,TL0将溢出,进位位直接进入“TFx”去申请中断,同时打开三态门,使THx中的值自动重装(Copy)进TLx工作方式2的编程:☞TMOD寄存器选方式:写“M1,M0”=10b选中方式2☞其他用法与各种方式1完全相同《单片微机原理及应用》教学课件分析:fosc=6MHz1机器周期=2S1KHz方波周期=1mS半个方波周期=500S500uS÷2uS=250若选择方式2工作,8位定时器最大数值为:28=256=0FFH+1可以满足要求。计算初值:256-250=6P141例3(改):从P1.0脚输出频率=1KHz方波。设:晶振=6MHz。利用T1定时中断。Th:半周期T:周期定时器(方式2)应用程序举例:《单片微机原理及应用》教学课件ORG0000HAJMPMAINORG001BH;T1的中断矢量CPLP1.0;中断服务:P1.0取非RETI;中断返回MAIN:MOVTMOD,#20HMOVTH0,#6MOVTL0,#6SETBET1SETBEASETBTR1HERE:AJMPHERE;原地等待中断END初始化;选T1方式2;赋重装值;赋初值;开T1中断;开总中断;启动T1《单片微机原理及应用》教学课件T0:组织成TL0和TH0两个8位定时/计数器Timer工作方式3——几乎无用T1:不再是定时/计数器了T1的TR1和TF1出借给TH0当控制位使用,剩下的TH1/TL1寄存器只能当作普通寄存器用。《单片微机原理及应用》教学课件振荡器12TL0(8位)TF0申请中断T0端TR0位GATE位INT0端≥1&C/T=0C/T=1控制=1开关接通或门与门TH0(8位)TF1申请中断TR1位控制=1Timer工作方式3结构:☞T0成为双8位Timer☞T1不再有Timer功能☞TF1,TR1出借给TH0《单片微机原理及应用》教学课件长定时举例(设晶振=6MHz,要定时1秒):ORG0000H;P.143例5AJMPMAINORG001BHAJMPTINT;见下一页MAIN:MOVTMOD,#10H;选T1方式1MOVTH1,#3CH;赋初值3CB0H=15536(只能定100mS)MOVTL1,#0B0HMOV30H,#10;软件计数单元30H初值=10CLRF0;芯片复位时已经是“0”,此句可有可无SETBET1;开T1中断SETBEA;开总中断SETBTR1;启动T1HERE:JBCF0,TIMEUP;原地等待“1秒到”的标志F0AJMPHERETIMEUP:(dosomething);定时1秒到了以后要做的事情AJMPHERE中断服务在主程序中《单片微机原理及应用》教学课件长定时举例(续):ORG0000HAJMPMAINORG001BHAJMPTINTMAIN:…………………TINT:DJNZ30H,RTN;若中断不到10次就返回SETBF0;已经中断够10次了“置1”标志位MOV30H,#10;为下一个1秒定时做准备RTN:MOVTH1,#3CH;再赋定时100mS的初值3CB0HMOVTL1,#0B0HRETI;中断返回END《单片微机原理及应用》教学课件将此例的中断服务改写在中断服务程序中:ORG0000HAJMPMAINORG001BHAJMPTINT;见下一页MAIN:MOVTMOD,#10H;选T1方式1MOVTH1,#3CH;赋初值3CB0H=15536(只能定100mS)MOVTL1,#0B0HMOV30H,#10;软件计数单元30H初值=10CLRF0;芯片复位时已经是“0”,此句可有可无SETBET1;开T1中断SETBEA;开总中断SETBTR1;启动T1HERE:AJMPHERE;原地等待中断《单片微机原理及应用》教学课件长定时举例(续):ORG0000HAJMPMAINORG001BHAJMPTINTMAIN:…………………TINT:DJNZ30H,RTN;若中断不到10次就返回MOV30H,#10;为下一个1秒定时做准备(dosomething);定时1秒到了以后要做的事情)RTN:MOVTH1,#3CH;再赋初值MOVTL1,#0B0HRETI;中断返回END中断服务《单片微机原理及应用》教学课件定时器小结:(2个16位加法计数器)☞运行/停止由TRx位控制,(当GATE=1时:由TRx位和Tx引脚上的信号共同控制)☞工作方式由TMOD决定;计数/定时由C/T位决定工作方式0(13位)永远不用工作方式3(T0拆为双8位)几乎无用工作方式1(16位)经常用到工作方式2(8位自动重装)经常用到☞从初值按机器周期或外部脉冲递加,溢出位TFx申请中断;中断允许由ETx位和EA位控制,《单片微机原理及应用》教学课件OVER!