【例7-1】 假设fsys=6MHz,要求用定时器/计数器T1作定时实现在P1.1上输出周期为5ms的方波。
根据题意,只要使P1.1每隔2.5ms取反一次即可得到5ms的方波,因而定时器/计数器的定时时间为2500μs。
(1)采用工作方式0
因定时时间不长,在TMOD高4位对定时器/计数器T1方式字段设置为方式0,则M1M0=00。采用定时器方式,则C/T=0。置T1x12=0,选择12T模式。在此情况下,只需工作在非门控方式,所以GATE=0。定时器/计数器T0不用,其方式字段可任意设置,但要注意不能设置为方式3,一般取全0。综上所述,TMOD可设置为00H。初值计算如下:
方式0为16位自动重装载计数方式,定时2.5ms时,计算的初值应赋值给TH1高8位,给TL1赋低8位,所以(TH1)=0FBH,(TL1)=1EH。
采用查询方式编程,参考程序如下:
采用中断方式编程,参考程序如下:
(2)采用工作方式1
定时器/计数器工作在方式1与方式0的使用基本相同,只是方式0可以16位计数自动重装载初值,而方式1要手工编程重装载初值。若采用方式1,则在定时器/计数器T1方式控制字TMOD的高4位上置M1M0=01,C/T=0,GATE=0。所以,TMOD可设置为10H,再置T1x12=0。初值计算如下:
计数脉冲周期Tcy=12/fsys=12/(6×106)=2ms
初值=最大计数值-定时时间/Tcy=216-2500/2=64286D=0FB1EH
则定时器T1的初值为(TH1)=0FBH,(TL1)=1EH。
采用查询方式编程,参考程序如下:
采用中断方式编程,参考程序如下:
【例7-2】 假设fsys=12MHz,用12T计数模式,使用定时器/计数器T0工作在方式1,实现在P1.3引脚上输出50Hz的方波。
编程思路分析:
(1)计算定时时间
要求产生周期性的方波,定时器/计数器T0应工作在定时方式。50Hz方波周期为20ms,即高、低电平各10ms。因此,T0的定时时间应设置为10ms,每定时中断一次,P1.3取反一次,即可实现在P1.3引脚上输出频率为50Hz的方波。
(2)定时初值x的计算
T0工作在方式1是16位定时器,其最大计数值为216=65536。
因为fsys=12MHz,则计数脉冲周期=1μs。
定时时间=(65536-x)×计数脉冲周期,即10ms=(65536-x)×1μs
x=65536-10000=55536=0D8F0H
因此,定时器T0的初值为(TH0)=0D8H,(TL0)=0F0H。
(3)定时器工作方式设置
TMOD的低4位控制定时器T0的工作方式选择,T0作定时,工作在方式1,则TMOD预置值为01H。
(4)定时中断方式程序设计
【例7-3】 假设fsys=6MHz,用12T计数模式,使用定时器/计数器T1工作在方式0,P2.0引脚连接一只LED,实现使LED以亮0.5s、灭0.5s的速度闪烁(设低电平使LED亮)。
编程思路分析:
(1)计算定时时间
LED以0.5s的速度闪烁,T1应工作在定时方式,定时时间为500ms,即在500ms对P2.0取反一次。由于在时钟频率fsys=6MHz时,T1最大定时时间只有131ms,因此采用定时时间100ms中断一次,定时中断5次对P2.0取反一次,实现对LED以0.5s的速度闪烁控制。
(2)定时初值x的计算
T1工作在方式0是16位定时器,其最大计数值为216=65536。(www.xing528.com)
因为fsys=6MHz,则计数脉冲周期=2μs。
定时时间=(65536-x)×计数脉冲周期,即100ms=(65536-x)×2μs
x=65536-50000=15536=3CB0H
因此,定时器T1的初值为(TH1)=3CH,(TL1)=0B0H。
(3)定时器工作方式设置
TMOD的高4位控制定时器T1的工作方式选择,T1作定时,工作在方式0,则TMOD预置值为00H。
(4)定时中断方式程序设计
【例7-4】 若在定时器/计数器T1(P3.5)引脚输入脉冲信号,在P2.0引脚上连接一LED灯,编写对T1输入脉冲进行计数的程序,当计数到30000个脉冲后停止计数,使LED亮(低电平亮)。
编程思路分析:
(1)计数工作模式
需要对P3.5引脚输入的脉冲进行计数,定时器/计数器T1作计数器用。平时LED灯灭,当计数到30000个脉冲后,使LED亮。
(2)计算计数初值x
使用T1工作在方式1(16位计数器),其最大计数值为216=65536。要求计数值为30000,则
因此,计数器T1的初值为(TH1)=8AH,(TL1)=0D0H。
(3)计数器工作方式设置
TMOD的高4位控制T1的工作方式选择,T1作计数,工作在方式1,则TMOD预置值为50H。
(4)查询方式编写计数程序
【例7-5】 假设fsys=12MHz,用12T计数模式,使用定时器/计数器T0工作在方式2,实现在P1.3引脚上连续输出周期为100μs的方波。
编程思路分析:
(1)计算定时时间
要求产生周期性的方波,定时器/计数器T0应工作在定时方式。方波周期为100μs,即高、低电平各50μs。因此,T0应设置为50μs定时,每定时中断一次,P1.3取反一次。
(2)定时初值x的计算
要求T0工作在方式2,8位自动重装载,其最大计数值为28=256。
因为fsys=12MHz,则计数脉冲周期=1μs。
定时时间=(256-x)×计数脉冲周期,即50μs=(256-x)×1μs
x=256-50=206=CEH
因此,定时器T0的初值为(TH0)=0CEH,(TL0)=0CEH。
(3)定时器工作方式设置
TMOD的低4位控制定时器T0的工作方式选择,T0作定时,工作在方式2,则TMOD预置值为02H。
(4)中断方式程序设计
(5)查询方式程序设计
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。