这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » while 关于定时器变量与主程序循环while。

共2条 1/1 1 跳转至

while 关于定时器变量与主程序循环while。

院士
2006-09-17 18:14:16     打赏
while 关于定时器变量与主程序循环while。



关键词: while     关于     定时器     变量     主程序     循环    

院士
2006-12-22 22:43:00     打赏
2楼
问 主程序中定义了一个秒变量:
uint8 sec,min,hour,sec_bz;
sec=0;
while(sec<2);
while(1)
{
   if(sec_bz==1)
   {
      sec_bz=0;
      //LED亮灭控制;
   }
}
程序执行后,如果把while(sec<2);这句去掉,一切正常,如果加上这句,程序一直停在这边,请问为什么?定时器也有工作啊,这个从sec_bz可以看的出来啊?定时器程序写在target.c里边,具体如下:

在target.c引用了了主程序的几个变量,启动定时器T0,程序如下:
extern uint8 sec,min,hour,sec_bz,count;

        void __irq IRQ_Exception(void)
{

    count++;
    if(count==100)
    {
        WDFEED = 0xAA;    //feed WDT
        WDFEED = 0x55;    
        count=0;
        sec++;
        sec_bz = 1;        
        if(sec==60)
        {
            min++;
            if(min==60)
            {
                min=0;            
                hour++;
            }
        }
    }
}
1: re:建议:
1。 将sec变量加上修饰符volatile,防止优化;
2。 IRQ中断程序建议放在主程序中,同时还要对VIC进行设置。 2: 谢谢加上volatile或放回主程序都可以。 3: 疑问:还有,为什么例程把他们放在target.c里边呢? 4: 死循环程序执行到while(sec<2);语句时就因条件满足进入死循环,不可能往下执行。建议改成:
uint8 sec,min,hour,sec_bz;
sec=0;
while(sec<2)
{
sec++;
}
sec=0;
while(1)
{
   if(sec_bz==1)
   {
      sec_bz=0;
      //LED亮灭控制;
   }
}




共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]