定时器(Timer)+计数器(Counter):=>{Int0Int1=>\begin{cases} Int0\\ Int1 \end{cases}=>{Int0Int1
晶振频率:f=12MHZ/11.0592MHZf=12MHZ/11.0592MHZf=12MHZ/11.0592MHZ
计数频率:fT=f/12f_T=f/12fT=f/12 (12分频)(12分频)(12分频)</font3
机器周期:T=1/fTT=1/f_TT=1/fT (12分频)(12分频)(12分频)
寄存器配置:TMOD(工作方式寄存器)&TCON(控制寄存器)TMOD(工作方式寄存器)\&TCON(控制寄存器)TMOD(工作方式寄存器)&TCON(控制寄存器)
工作模式:T/CT {/} CT/C
工作方式:4种(方式0、方式1、方式2、方式3)4种(方式0、方式1、方式2、方式3)4种(方式0、方式1、方式2、方式3)
TMOD:用⃗于选择定时器/计数器的工作方式与工作模式(不可位寻址)\vec 用于选择定时器/计数器的工作方式与工作模式(不可位寻址)用于选择定时器/计数器的工作方式与工作模式(不可位寻址)
(1)GATE−−−门控位(1)GATE---门控位(1)GATE−−−门控位
GATE=0时,仅由TRX(X=0,1)=1启动定时器/计数器
GATE=1时,由TRX(X=0,1)=1和外部中断引脚上的高电平共同启动定时器/计数器(一般默认使用GATE=0)
(2)M1、M0−−−工作方式选择位(2)M_1、M_0---工作方式选择位(2)M1、M0−−−工作方式选择位
(3)C/T−−−计数器模式和定时器模式选择位(3)C/T---计数器模式和定时器模式选择位(3)C/T−−−计数器模式和定时器模式选择位
C/T=0时,定时器模式
C/T=1时,计数器模式,计数器对外部输入引脚T0(p3.4)或T1(p3.5)的外部脉冲计数。
TCON:低四位与外部中断有关(可位寻址)低四位与外部中断有关(可位寻址)低四位与外部中断有关(可位寻址)
TF1、TF0—T1、T0计数溢出标志位
当计数器计数溢出时,该位置置1。使用查询方式时,此位作为状态位供cpu查询,ps:查询该位有效后以软件方法清零。使用中断方式时,此位作为中断标志位,进入中断服务程序后硬件自动清零。
TR1、TR0—计数运行控制位
TR1位/TR0位=1时,启动定时器/计数器,但是还与GATE位的状态有关。
TR1位/TR0位=0时,停止定时器/计数器。
写程序的流程
1、开头定义 void Timer0_Init()
2、写void Timer0_Init() 里面的函数{定义TMOD、算出初值并且给TH0和TL0赋值打开定时器中断允许开关(ET0)、打开总中断开关(EA)、打开定时器(TR0)\begin{cases}定义TMOD、算出初值并且给TH0和TL0赋值\\ 打开定时器中断允许开关(ET0)、打开总中断开关(EA)、打开定时器 (TR0)\end{cases}{定义TMOD、算出初值并且给TH0和TL0赋值打开定时器中断允许开关(ET0)、打开总中断开关(EA)、打开定时器(TR0)
3、写出void Timer0()interrupt 1函数{赋值静态变量TH0/TL0赋值if条件语句来增加次数(注意给i归零,LED= LED)\begin{cases} 赋值静态变量\\ TH0/TL0赋值 \\ if条件语句来增加次数(注意给i归零,LED=~LED) \end{cases}⎩⎪⎨⎪⎧赋值静态变量TH0/TL0赋值if条件语句来增加次数(注意给i归零,LED= LED)
4、主程序引用Timer0_Init();
定时器+计数器
最新推荐文章于 2024-02-07 16:27:35 发布