STM8 第一次进中断不准;
main()
{
char1 b1;
GPIO_1();
D2_ODR=1;
//************************************************************
B4=0xff;
B6=0x00;
while(1)
{
menu_0(); //读取EEROM;
array_0(); //EEROM 写入数组;
for(b1=0;b1<10;b1++)
{
AIN=time[B2];//加载菜单2 计时值;
LED1_screen(); //拆分整数
LED4_screen (); //加载菜单1显示;
}
_asm("rim"); // 允许CPU全局中断
time2_IER(); //开定时器,
D2_ODR=0;
while(1)
{
AIN=time[B2];//加载菜单2 计时值;
LED1_screen(); //拆分整数
LED4_screen (); //加载菜单1显示;
}
}
@near @interrupt void TIM2_IER0(void)
{
extern char1 B5;
b1++;
D2_ODR=~D2_ODR;
TIM2_SR1 &=~(0x01); // 清除TIM2溢出中断标志位
if(time[B2]==0)
{B2=B2+1;
D2_ODR=~D2_ODR;
B5=time[B2];
if(B2>=9)
{B2=9;}
}
if(b1==59)
{b1=0;
time[B2]=time[B2]-1;
}
return;
}
void time2_IER(void)
{
CLK_CKDIVR=0B00000000;
TIM2_PSCR =0B00001000; //定时器分频
TIM2_ARRH =0xF4;
TIM2_ARRL =0x24;
TIM2_CNTRH =0x00; //
TIM2_CNTRL =0x00;
TIM2_EGR =0x01; //事件产生寄存器
TIM2_SR1 =0x00;
TIM2_IER =0x01; //中断寄存器
TIM2_CR1 |=0B00000101; //开定器;
}
我这个用LED数码管显示,定时中断时间是1S,但是第一次进中断的时间总是不对。
因为time[B2]在第一次读取的时个,数据是10,但是一上电,显示就是9,只有进入中断后,才会是9,而上电到进中断应该有1S的时间,而一电只看到9,说明第一次时中断时间没有达到1S,不知为何。
在定时子程序里面,我也有加载手动更新。结果第一次进中断的时间还是不对。
还请各位指点下,搞了好几天,也没有找到原因。 |