1、MCS-51 单片机原理及应用教程单片机原理及应用教程 清华大学出版社清华大学出版社刘迎春刘迎春 主编主编第第6章章 定时定时/计数器计数器u定时器的结构u定时器的工作方式u定时器应用6.1 定时器的结构定时器的结构6.1.1 定时器定时器/计数器的结构计数器的结构CPUTH1TL1P3.5溢出启动中断TCON(88H)TH0TL0溢出启动TMOD(89H)模式模式P3.444图6.1 8051单片机的定时器结构6.1.2 定时器的控制定时器的控制1.工作模式寄存器TMOD D7 D6 D5 D4 D3 D2 D1 D0 TMOD(89H)GATE C/T M1 M0 GATE C/T M1
2、M0 T1 控制位 T0 控制位 图6.2 TMOD 的位定义2.定时器控制寄存器TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TCON(88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 图6.3 TCON的位定义6.2 定时器的工作方式定时器的工作方式6.2.1 模式模式0及应用及应用模式0是选择定时器(T0或T1)的高8位和低5位组成的一个13位定时器计数器。图6.4是T0在模式0时的逻辑电路结构。T1的模式0电路结构与T0相同。图6.4 定时器T0的模式0例例1 设定时器T0选择工作模式0,求最长定时时间,如果要实现定时时间为1ms,fo
3、sc=6MHz。试确定T0的初值。解解:当T0处于工作模式0时,加1计数器为13位。T0最大定时时间对应于13位计数器T0的各位全为0,即(TH0)00H,(TL0)00H。最长定时时间为:tmax=(2130)=213=16.384ms设定时时间为1ms时的初值为X,则:X=7692转化成二进制为:1111000001100B按照低5位,高8位拆开,T0的低5位TL0=01100B=0CHT0的高8位TH0=11110000B,即F0H例例2 接上题,设定时器T0选择工作模式0,要求实现定时时间为1ms,fosc=6MHz。定时时间到后,将P1.0置1。解解:首先计算定时器初值X,计算方法和
4、步骤同上。得:(TH0)=0F0H,(TL0)=0CH程序清单如下:ORG 0000H LJMPMAIN ORG 0030HMAIN:MOVTMOD,#00H MOV TL0,#0CH ;送初值 MOVTH0,#0F0H SETB TR0;启动定时器T0LOOP:JNB TF0,$;等待定时时间到CLR TF0SETBP1.0;P1.0置1SJMP$6.2.2 模式模式1及应用及应用图6.5 定时器T0的模式1例例1 利用定时器T0产生一个频率为50Hz的方波,由P1.1输出。要求采用中断方式。fosc=12MHz。解解:方波周期T=1/50Hz=0.02s=20ms,如果要输出方波,则需要将
5、P1.1状态每半个周期翻转一次。故定时时间为10ms,则定时器初值为:X=6553610000=55536=D8F0H则:TH0=0D8H,TL0=0F0H程序如下 ORG 0000H LJMP MAIN ORG 000BHT0INT:LJMPT0SEVORG0030HMAIN:MOV SP,#60H;设置堆栈指针MOV TMOD,#01H;设定T0为模式1,定时方式MOV TH0,#0D8H;设定初值MOV TL0,#0F0HSETBTR0;启动定时SETB ET0;开中断SETEASJMP$;等待中断T0SEV:MOV TH0,#0D8H;重新装入初值MOV TL0,#0F0HCPLP1.
6、1;P1.0状态取反,输出方波RETI6.2.3 模式模式2及应用及应用模式2把T0(或Tl)配置成一个可以自动重装载的8位定时器/计数器,如图6.6所示。例例1 利用定时器T1的模式2对外部信号计数。要求每计满150次,将P1.0端取反。解解:(1)选择模式:外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入150个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。T1计数工作方式模式2的模式字为TMOD60H。T0不用时,TMOD的低4位可任取,但不能使T0进入模式3,一般取0。(2)计算T1的计数初值:X28-150256-150=106=6AH因此,TL1的
7、初值为6AH,重装初值寄存器TH1初值为6AH。(3)程序清单:MAIN:MOVTMOD,#60H;置T1为模式2计数工作方式MOVTL1,#6AH ;赋初值MOVTH1,#6AHMOV IE,#88H ;定时器T1开中断SETBTR1 ;启动计数器HERE:SJMPHERE ;等待中断ORG001BH ;中断服务程序入口CPLP1.0RETI6.2.4 模式模式3及应用及应用 图6.7 定时器T0的模式3(a)T0模式3时的T1模式0(b)T0模式3时的T1模式06.3 定时器应用定时器应用6.3.1 定时器对输入信号的要求定时器对输入信号的要求 Tcy Tcy 图6.9 对输入脉冲宽度的要
8、求6.3.2 定时器的编程步骤定时器的编程步骤1.确定相关参数(1)确定选用的定时器/计数器。(2)确定工作方式(3)确定工作模式(4)计算计数初值确定数据传送方式 2.初始化程序编写 6.3.3 应用举例应用举例1.波形发生器例例1 从P1.0输出1000个周期为2ms的方波脉冲(设fosc=6MHz)。解:(1)定时器选择(2)工作模式确定(3)计算初值(4)硬件连接及传送方式选择 2.脉冲宽度测量GATE控制位的功能例例1 测量某一方波信号的高电平和低电平的宽度,将结果保存在20H、21H及22H、23H单元中。3.长时间定时程序例例1 试编写利用T0产生1s定时的程序。(设fosc=6
9、MHz)。解:(1)定时器及模式确定(2)计算初值(3)程序清单 6.4 思考练习题思考练习题(1)8051定时器有哪几种工作模式?有何区别?(2)8051单片机内部设有几个定时器/计数器?是由哪些特殊功能寄存器组成的?(3)定时器模式2有什么特点?适用于什么应用场合?(4)8051单片机内部各定时器/计数器的定时、计数速率各是多少?试述定时器/计数器工作于定时器方式和计数器方式的异同。(5)当定时器T0用作模式3时,由于TR1位已被T0占用,如何控制定时器T1的开启和关闭?(6)单片机用内部定时方法产生频率为100KHz等宽矩形波,假定单片机的晶振频率为12MHz,请编程实现。(7)8051定时器作定时和计数时,其计数脉冲分别从何处提供?(8)8051定时器的门控制信号GATE设置为1时,定时器如何启动?