alan2526

合泰单片机ht66fu50:CTM0

0
阅读(3060)

简易计数器CTM0/3

这里仅仅是涉及到定时器,并非是定时器中断功能。

构成:

六个寄存器:1)一对只读寄存器2)一对读写寄存器3)两个控制寄存器

1)2个控制寄存器:TM0C0/TM0C1;

TM0C0

T0PAU: =1时运行CTM0=1时暂停



T0CK2:

T0CK1:计数器的时钟选择,高位至低位:000fsys/4;

T0CK0:见数据手册Page 113



T0CON: TM0的总开关功能。

T0RP2:

T0RP1:TM0 CCRP 3-bit寄存器,对应于TM0计数器bit 9~bit 7

T0RP0:比较器P匹配周期(见数据手册Page 113





TM0C1

T0M1工作模式的选择:11:定时/计数,10PWM模式 ,

T0M000:比较匹配

T0IO1:选择TP0_0, TP0_1输出功能位,结合引脚重置寄存器器的

T0IO0: PRM2bit1,bit 0:TP01PA, TP00PS

T0OC: TP0_0, TP0_1输出控制位:

比较匹配输出模式:

0:初始低;1初始高。

PWM模式:0:低有效,1:高有效

T0POLTP0_0 , TP0_1输出极性控制位0:同相,1:反相

T0DPX: TM0 PWM周期/占空比控制位:

0CCRP-周期;CCRA-占空比

1CCRP-占空比;CCRA-周期

T0CCLR选择TM0计数器清零条件位:0TM0比较器P匹配

1TM0比较器A匹配

如:_tm0c0 =0x10; //频率为fsys (系统时钟频率)

_tm0c1 =0xc1; //定时器模式,TM0比较器A匹配

2)2MCU内部计数的只读寄存器:TM0DL(8bit) /TM0DH2bit) 共10

TM0DL/TM0DH不用管

3)2个读写寄存器:TM0AL(8 bit)/TM0AH(2 bit)10It belongs to TM0 CCRA

TM0AL/TM0AH:写入你所要计数的数量:

_tm0ah =1000/256; //装初值,TM010位的,最大支持到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; //装初值,CCRA010位的,最多支持到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; //重新打开定时器

}

}

}

Baidu
map