预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共31页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

6.1定时器的定时与计数功能 1.定时器的计数功能 所谓计数是指对单片机外部所发生的事件进行累计。外部事件的发生以脉冲的形式表示,因此计数功能的实质就是对外部脉冲进行计数。检测一个1到0的跳变需要2个机器周期,故外部输入脉冲的最高频率为振荡频率的1/24。虽然计数器对输入脉冲的占空比无特殊要求,但为了确保某个电平在变化之前被采样一次,要求电平的保持时间至少是一个完整的机器周期。 2.定时器的定时功能 定时器的定时功能也是通过计数的方式来实现的,只是此时的计数脉冲来自单片机内部,由振荡器经12分频后提供,即每个机器周期提供一个计数脉冲。所以在定时状态下,每个机器周期定时器自动加1直至计满溢出。6.2定时器的有关寄存器 MCS-51内部定时器的各种功能均在寄存器TCON及TMOD的控制下实现。 6.2.1定时器控制寄存器(TCON)6.2.2定时器工作方式控制寄存器(TMOD) 注意该寄存器不能进行位寻址,只能使用字节传送指令设置其内容。6.3定时器的4种工作方式 6.3.1工作方式0①最大计数量: ②已知要求的计数量n,则计数器的初值为: ③最大定时时间: ④已知要求的定时时间t,则定时器的初值为: 求得初值以后,应将x分配到TL0和TH0:【例6-1】设定时器T0选择工作方式0,定时状态,定时时间1ms,fosc=6MHz。试确定T0初值,计算最大定时时间tmax。 解: ①计算最大定时时间 ②计算计数器的初值 转换为二进制数:x=1111000001100B 取x的低5位送TL0的低5位,TL0的高3位取0,则(TL0)=00001100B=0CH。取x的高8位送给TH0,则(TH0)=11110000B=0F0H。【例6-2】设单片机晶振频率为fosc=12MHz,使用定时器T1以方式0产生周期为2ms的等宽连续方波,并由P1.0输出(用中断方式完成)。 解:欲产生周期为2ms的等宽连续方波,只需在P1.0端以1ms为周期交替输出高低电平即可。因此定时时间应为1ms。 ①计算计数初值 使用12MHz晶振,一个机器周期为1μs。设待求计数初值为x,则: 将x表示为二进制形式:x=1110000011000B,故(TH1)=0E0H,(TL1)=18H。 ③TMOD寄存器初始化 定时器T1为方式0:M1M0=00;定时状态:T/C=0;为实现定时器T1的运行控制,GATE=0。定时器T0不用,有关位设定为0。因此TMOD寄存器应初始化为00H。 ORG 0000H AJMP START ORG 001BH LJMP PITO1 ORG 0100H START:MOV SP,#60H MOV TMOD,#00H MOV TH1,#0E0H MOV TL1,#18H CLR P1.0 SETB EA SETB ET1 SETB TR1 SJMP $ PITO1:MOV TL1,#18H MOV TH1,#0E0H CPL P1.0 RETI END6.3.2工作方式1【例6-3】设单片机晶振频率为fosc=12MHz,使用定时器T1以方式1产生周期为2ms的等宽连续方波,并由P1.0输出(用查询方式完成)。 解:本例同例6-2,基本定时时间为1ms。 ①计算计数初值 将x表示为二进制形式:,故(TH1)=0FCH,(TL1)=18H。 ②TMOD寄存器初始化 定时器T1为方式1:则M1M0=01;定时功能:T/C=0;为实现定时器T1的运行控制,GATE=0。定时器T0不用,有关位设定为0。因此TMOD寄存器应初始化为10H。 ORG 0000H START:MOV TMOD,#10H CLR P1.0 MOV TL1,#18H MOV TH1,#0FCH SETB TR1 LOOP:JNB TF1,$ MOV TL1,#18H MOV TH1,#0FCH CLR TF1 CPL P1.0 SJMP LOOP END6.3.3工作方式2 相关参数的计算如下:【例6-4】用定时器T0以工作方式2计数,每计100次进行累加器加1操作。 解: ①计算计数初值 所以,(TH0)=9CH,(TL0)=9CH ②TMOD寄存器初始化 M1M0=10,T/C=1,GATE=0 因此(TMOD)=06H ORG 0000H AJMP START ORG 0100H START:MOV IE,#00H MOV TMOD,#06H MOV TH0,#9CH MOV TL0,#9CH SETB TR0 LOOP:JBC TF0,LOOP1