合泰单片机ht66fu50:CTM0
0赞简易计数器CTM0/3
这里仅仅是涉及到定时器,并非是定时器中断功能。
构成:
六个寄存器:1)一对只读寄存器2)一对读写寄存器3)两个控制寄存器
1)2个控制寄存器:TM0C0/TM0C1;
TM0C0
T0PAU: =1时运行CTM0;=1时暂停
T0CK2:
T0CK1:计数器的时钟选择,高位至低位:000:fsys/4;
T0CK0:见数据手册Page 113
T0CON: TM0的总开关功能。
T0RP2:
T0RP1:TM0 CCRP 3-bit寄存器,对应于TM0计数器bit 9~bit 7
T0RP0:比较器P匹配周期(见数据手册Page 113)
TM0C1
T0M1:工作模式的选择:11:定时/计数,10:PWM模式 ,
T0M0:00:比较匹配
T0IO1:选择TP0_0, TP0_1输出功能位,结合引脚重置寄存器器的
T0IO0: PRM2(bit1,bit 0:TP01PA, TP00PS)
T0OC: TP0_0, TP0_1输出控制位:
比较匹配输出模式:
0:初始低;1初始高。
PWM模式:0:低有效,1:高有效
T0POL:TP0_0 , TP0_1输出极性控制位0:同相,1:反相
T0DPX: TM0 PWM周期/占空比控制位:
0:CCRP-周期;CCRA-占空比
1:CCRP-占空比;CCRA-周期
T0CCLR:选择TM0计数器清零条件位:0:TM0比较器P匹配
1:TM0比较器A匹配
如:_tm0c0 =0x10; //频率为fsys (系统时钟频率)
_tm0c1 =0xc1; //定时器模式,TM0比较器A匹配
2)2个MCU内部计数的只读寄存器:TM0DL(8bit) /TM0DH(2bit) 共10位
TM0DL/TM0DH不用管
3)2个读写寄存器:TM0AL(8 bit)/TM0AH(2 bit)共10位It belongs to TM0 CCRA
TM0AL/TM0AH:写入你所要计数的数量:
如_tm0ah =1000/256; //装初值,TM0是10位的,最大支持到64K
_tm0al =1000%256; //1000/8M=0.25ms(这里采用了系统时钟)
_t0af 定时器匹配标志位:T0AF,当匹配时t0af = 1;
完整程序:
#include "HT66FU50.h"
unsigned int i;
void main(void)
{
_tm0c0 =0x10; //频率为fSYS
_tm0c1 =0xc1; //定时器模式,TM0比较器A匹配
_tm0ah =1000/256; //装初值,CCRA0是10位的,最多支持到1024
_tm0al =1000%256; //1000/8M=0.125ms
_t0on =1; //定时器0开始工作
_acerl = 0x00; //关闭ADC
_cp0c = 0x08; //关闭比较器功能
_cp1c = 0x08; //关闭比较器功能
_papu = 1; //设置为上拉电阻模式
_pac = 0; //PA口输出模式 因为用的是PA7,也可以设为_pac7=0,该口输出
while(1)
{
while(_t0af) //t0af:当计数值与设置值相等时的触发位。
{
_t0on =0; //匹配时关闭定时器
i++;
_t0af=0; //标志位置0
_t0on =1; //再重新打开
}
if(20000 == i) //满足定时次数时 进入
{
_t0on = 0; //关闭定时器
i=0; //重置计数
_pa7 = ~_pa7; //2秒闪一次
_t0on = 1; //重新打开定时器
}
}
}