方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。当TL0的低5 位计数溢出时,向TH0进位,而全部13位计数溢出时,则向计数溢出标志位TF0进位。 在方式0下,当为计数工作方式时,计数值的范围是: 1~8192(213) 当为定时工作方式时,定时时间的计算公式为: (213-计数初值)×晶振周期×12 或 (213-计数初值)×机器周期 其时间单位与晶振周期或机器周期相同(ms)。 例题1:当某单片机系统的外接晶振频率为6MHz,该系统的最小定时时间为: [213-(213-1)]×[1/(6×106)]×12=2×10-6=2(ms) 最大定时时间为:
(213-0)×[1/(6×106)]×12=16384×10-6=16384(ms) 或:最小定时单位×1013=16384(ms) 例题2:设某单片机系统的外接晶振频率为6MHz,使用定时器1以方式0产生周期为500ms的等宽正方波连续脉冲,并由P1.0输出。 以查询方式完成。 ⑴ 计算计数初值 欲产生500ms的等宽正方波脉冲,只需在P1.0端以250ms为周期交替输出高低电平即可实现,为此定时时间应为250ms。使用6MHz晶振,根据上例的计算,可知一个机器周期为2ms。方式0为13位计数结构。设待求的计数初值为X,则: (213-X)×2×10-6=250×10-6 求解得: X=213-(250÷2)=8067。 二进制数表示为1111110000011。十六进制表示,高8位为FCH,放入TH1,即TH1=FCH;低5位为03H。放入TL1,即TL1=03H。 ⑵ TMOD寄存器初始化 为把定时器/计数器1设定为方式0,则M1M0=00;为实现定时功能,应使C/T=0;为实现定时器/计数器1的运行控制,则GATE=0。定时器/计数器0不用,有关位设定为0。因此TMOD寄存器应初始化为00H。 ⑶ 由定时器控制寄存器TCON中的TR1位控制定时的启动和停止TR1=1启动,TR1=0停止。 ⑷ 程序设计: MOV TMOD,#00H ;设置T1为工作方式0
MOV TH1,#OFCH ;设置计数初值
MOV TL1,#03H
MOV IE,#00H ;禁止中断
LOOP:
SETB TR1 ;启动定时
JBC TF1,LOOP1 ;查询计数溢出
AJMP LOOP
LOOP1:
MOV TH1,#FCH ;重新设置计数初值
MOV TL1,#03H
CLR TF1 ;计数溢出标志位清0
CPL P1.0 ;输出取反
AJMP LOOP ;重复循环
工作方式1: 方式1是16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成。与工作方式0基本相同,区别仅在于工作方式1的计数器TL1和TH1组成16位计数器,从而比工作方式0有更宽的定时/计数范围。 当为计数工作方式时,计数值的范围是: 1~65536(216) 当为定时工作方式时,定时时间计算公式为: (216-计数初值)×晶振周期×12 或 (216-计数初值)×机器周期 例题1:当某单片机系统的外部晶振频率为6MHz,则最小定时时间为: [216-(216-1)]×1/6×10-6×12=2×10-6=2(ms) 最大定时时间为: (216-0)×1/6×10-6×12=131072×10-6(s)=131072(ms)≈131(ms) 例题2: 某单片机系统外接晶振频率为6MHz,使用定时器1以工作方式1产生周期为500ms的等宽连续正方波脉冲,并在P1.0端输出。,但以中断方式完成。 ⑴ 计算计数初值 TH1=FFH TL1=83H ⑵ TMOD寄存器初始化 TMOD=10H ⑶ 程序设计 主程序: MOV TMOD,#10H ;定时器1工作方式1
MOV TH1,#0FFH ;设置计数初值
MOV TL1,#0A1H
SETB EA ;开中断
SETB ET1 ;定时器1允许中断
LOOP:
SETB TR1 ;定时开始
HERE:
SJMP $ ;等待中断
中断服务程序: MOV TH1,#0FFH ;重新设置计数初值
MOV TL1,#0A1H
CPL P1.0 ;输出取反
RETI ;中断返回
|