HT66F70A使用总结之定时器

HT66F70A芯片的定时器与51的定时器有很大的不同,我花费了很大的功夫才把HT66F70A的定时器弄清楚,下面是总结。


HT66F70A单片机包含 6 个TM,分别命名为TM0~TM5。每个TM 可被划分为一个特定的类型,即简易型CTM,标准型STM 或增强型ETM。此单片机的定时器除了有定时功能以外,还有其他的功能,具体见下表


TM功能
功能 CTM STM ETM
定时/计数器
捕捉输入 -
比较匹配输出
PWM通道数 1 1 2
单脉冲输出 - 1 1
PWM对齐方式 边沿对齐 边沿对齐 边沿& 中心对齐
PWM 调节周期& 占空比
占空比或周期
占空比或周期
占空比或周期


TM 名称/ 类型参考
TM0 TM1 TM2 TM3 TM4 TM5
10-bit CTM 10-bit ETM 16-bit STM 10-bit CTM 16-bit STM
16-bit STM

下面以简易TM寄存器为例总结此单片机定时器的特点,只要弄清楚了定时器的特点,后面的标准TM和增强TM也都会操作了。


简易型TM 寄存器列表(n=0 或3)
Name
D7
D6 D5 D4 D3 D2 D1 D0
TMnC0
TnPAU
TnCK2
TnCK1
TnCK0
TnON
TnRP2
TnRP1
TnRP0
TMnC1
TnM1
TnM0
TnIO1
TnIO0
TnOC
TnPOL
TnDPX
TnCCLR
TMnDL
D7 D6 D5 D4 D3 D2 D1 D0
TMnDH
- - - - - - D9 D8
TMnAL
D7 D6 D5
D4 D3 D2 D1 D0
TMnAH
- - - - - - D9 D8

其中,TMnDL和TMnDH这两个寄存器属性为只读,其他的寄存器为可读可写。下面简单说明各个标志位的作用,如想看详细资料请查芯片手册。


TnPAU:TMn 计数器暂停控制位
通过设置此位为高可使计数器暂停,清零此位恢复正常计数器操作。


TnCK2~TnCK0:选择TMn 计数时钟位

此三位用于选择TM 的时钟源。


TnON:TMn 计数器On/Off 控制位

此位控制TM 的总开关功能


TnRP2~TnRP0:TMn CCRP 3-bit 寄存器,对应于TMn 计数器bit 9~bit 7 比较器P 匹配周期

此三位设定内部CCRP 3-bit 寄存器的值,然后与内部计数器的高三位进行比较。


TnM1~TnM0:选择TMn 工作模式位


TnIO1~TnIO0:选择TPn,TPnB 输出功能位

TnOC:TPn,TPnB 输出控制位

TnPOL:TPn,TPnB 输出极性控制位

TnDPX:TMn PWM 周期/ 占空比控制位

在使用定时器功能的时候,以上五个标志位不起作用,所以可以暂时忽视。


TnCCLR:选择TMn 计数器清零条件位

此位用于选择清除计数器的方法:

TnCCLR 位设为高,计数器在比较器A 比较匹配发生时被清除;

此位设为低,计数器在比较器P 比较匹配发生或计数器溢出时被清除。


TM0初始化程序

void Tm0Init(void)
{
	uint16 time0 = 200;	//设置为200个周期,time0为中间变量
	_t0ae = 1;		//使能比较器A中断
//	_t0pe = 1;<span style="white-space:pre">		</span>//使能比较器P中断,这里用不到

	_mf0e = 1;	//使能多功能中断
	_emi = 1;	 //开总中断

	_tm0al = time0 & 0xff;	//给比较器A的低8位(D7~D0)赋值
	_tm0ah = time0 >>8;	//给比较器A的高8位(D9~D8)赋值

	_tm0c0 = TnCK_fsys4 | TnON_ON;	//选择系统时钟/4作为时钟源,并打开TM控制位
	_tm0c1 = TnM_TIMER | TnCCLR_A;	//定时器功能设置,选择与比较器A匹配

	_t0pau = 0;	//运行
}

下面简单说明这个初始化后发生的事情,当定时运行的时候,TMnDL(n=0,1,2...)和TMnDH会从0开始自动加1,直到和比较器A(TMnAL寄存器和TMnAH寄存器)所设置的数值相等的时候,就会产生中断,最后进入中断服务程序。

你可能感兴趣的:(定时器,单片机,合泰)