打印

STM8 第一次进中断不准

[复制链接]
1946|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gang8013|  楼主 | 2012-8-24 08:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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,不知为何。

在定时子程序里面,我也有加载手动更新。结果第一次进中断的时间还是不对。



还请各位指点下,搞了好几天,也没有找到原因。
沙发
figo20042005| | 2012-8-24 08:49 | 只看该作者
你的计时的寄存器变量要设置全局变量,或静态变量

使用特权

评论回复
板凳
gang8013|  楼主 | 2012-8-24 10:17 | 只看该作者
这所有的变量,都是全局变量,在MIAN的前面,没有贴进来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

0

粉丝