前言
无需多言 直接开始定时器中断 的学习
通过上次的PWM学习,上次用的是周期型TM定时器模块
 这次使用标准型TM定时器模块(STM)
代码
#include <HT66F2390.h>
void Timer0_Init(void){
	_stm0c0 = 0b00001000;
	_stm0c1 = 0b11000001;
	
	_stm0al = 0xD0;
	_stm0ah = 0x07;
	
	_stm0ae = 1;
	_mf0e = 1;
	
	_emi = 1;
}
void LED2_Init(void){
	_phc0 = 0;
	_ph0 = 1;	
}
void main(){
	_wdtc=0b10101111;
	LED2_Init();
	Timer0_Init();
	while(1){
		
	}
}
unsigned int count=0;
DEFINE_ISR(abc,0x14)
{
	if(_stm0af == 1)
	{
		_stm0af = 0;
		if(++count > 1000){
			count = 0;
			_ph0 = ~_ph0;	
		}
	}	
} 
 
代码讲解

 
 主要的还是
 STMnC0 和 STMnC1寄存器
我们需要配置定时器和定时器中断主要就是配置这两个寄存器
 
 根据自己的需求配置为_stm0c0 = 0b00001000;2MHz,开启计数器
 
 这里因为要配置为定时器模式,并且注意一个点

如上图所示:比较器P是8位的,比较器A是16位的
 根据自己的需求来配置,我选择的是16位的,比较器A
 
 再由上图可以知道,比较器里面的数值和计数器相等时,会产生中断 ,那这个比较器的值我们也可以通过手册知道如何配置
 ,因为我们的时钟是2MHz,一次计数是0.5us,然后我们的计数器也是从0开始计数的,所以我们如果要配置1ms就要2000次计数,所以我们配置为
	_stm0al = 0xD0;
	_stm0ah = 0x07;
 
这样子我们就配置好了定时器,接下来就是打开中断
 
 我们需要看着这个图来配置这些中断选项
 
 这个我们可以知道有些是需要我们自己清除中断标志位的
 所以最后我们可以配置中断函数为:
 下面的名字“abc”是自定义的
 后面的地址需要看图配置
DEFINE_ISR(abc,0x14)
{
	if(_stm0af == 1)
	{
		_stm0af = 0;
		if(++count > 1000){
			count = 0;
		}
	}	
} 
 
结果演示
合泰单片机板子上的LED2每隔1S闪烁



















