alan2526

合泰单片机ht66fu50:CTM0

0
阅读(3148)

简易计数器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模式 ,

                            T0M0            00:比较匹配

 

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

                            T0IO0:              PRM2bit1,bit 0:TP01PA, TP00PS

                            T0OC:                TP0_0, TP0_1输出控制位:

               比较匹配输出模式:

                0:初始低;1初始高。  

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

                            T0POL           TP0_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) 10    It 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;     //重新打开定时器

                   }

         }

 

 

}