#include "STM8S103f3p.h"
#include "stm8s_tim2.h"
unsigned char i=0;
void Init_Tim2(void)
{
TIM2_EGR=0x01; //手动产生更新事件,重新初始化计数器,并允许产生一个更新事件
//设置定时器初值
TIM2_CNTRH=0; //不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0;
//设定自动重装寄存器值
//这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。
//如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。
TIM2_ARRH=0x7A; //31250 4MHz / 128 = 31250Hz (1S)
TIM2_ARRL=0x12; //0x7A12 31250 意味着每产生一次中断时间为1S
TIM2_PSCR=0x07; //分频128
TIM2_IER=0x41; //中断允许位使能
TIM2_CR1=0x01; //使能计时器
}
void Init_GPIO(void)
{
PD_DDR|=0x04;
PD_CR1|=0x04;
PD_CR2|=0x00;
PD_ODR=0x00;
}
main()
{
Init_GPIO();
CLK_PCKENR1=0xFF;
_asm("sim" );
Init_Tim2();
_asm("rim");
while (1);
}
@far @interrupt void TIM2_UPD_OVF_IRQHandler (void)
{
i++;
TIM2_SR1=0x00;
if(i==61)
{ PA_ODR=0x04; i=0;
}
return;
}
我仅仅希望能够定时然后LED灯熄灭,为什么烧录后,LED就是不灭呢? |