|
|
一,模式0
模式0和模式1基本相同,不同的是模式1下的Timer寄存器是16位的。而模式0下的Timer寄存器是13位的。
在载入计数初始值时,向THx载入高8位,向TLx的低5位上载入低5位。
二,模式0的计数初值的计算方法如下:
(1)将设计时间,(以us微秒为单位,且小于8192)除以12/fc(MHz)
(2)用8192减去步骤(1)得到的数。
(3)用科学计算器把步骤(2)中得到的数转换成13位二进制数,高位如果是空的用0补上,依次填入THx的高8位和TLx的低5位中,TLx的高3位用0代替。
(4)最后得计数初始值。
三,Timer工作在模式0下产生一个500us的延时,晶振12MHz,计数初值的计算:
01)500us/1us=500;
02)8192-500=7692;
03)7692=1111 0000 01100B;(以B结尾代表是二进制数) ;
04)THx=1111 0000B,TLx=0000,1100B。转换成十六进制数:THx=0F0H,TLx=0CH.所以Timer寄存器计数初值为F00CH。
程序:
ORG 00H;
START:
MOV TMOD,#00H;设置Timer1工作在模式0下
MOV R1,#200; R1为重复定时计数器
LOAD:
MOV TL1,#0CH; 往TL1和TH1中载入计数的初始值F00CH(7692十进制)低5位0CH.
MOV TH1,#0F0H;高8位0F0H,
SETB TR1; 使TR1置1,启动Timer1。
CHECK:
JNB TF1,CHECK;检测Timer1溢出标志位值,当TF1=1,跳出执行下一行,否则返回CHECK;
CLR TR1; TR1清0 关闭Timer1
CLR TF1; 将TF1清0
DJNZ R1,LOAD; 如果R1≠0,跳回LOAD重新装载计数初始值
;~~~~~~~~~~~; 这里是所要处理的程序(如CLR P1.7;)
JMP START; 循环
END; 程序结束(总延时100ms)
|
评分
-
查看全部评分
|