打印

LED显示基本上没闪烁,但偶尔会闪一下,请问这是什么原因?

[复制链接]
2223|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xqhe|  楼主 | 2007-8-17 18:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    程序架构为定时调度任务,周期为4.5ms;任务一:扫描四个LED,每4.5ms;
任务二:TLC549的串口AD数据读取,每一秒:任务三:数据转换,更新LED数据区;现发现LED基本上没闪烁,但偶尔会闪一下.
    自己理解为,其中一个任务时间过长,导致扫描LED任务偶尔延迟,从而闪烁.但由KEIL 测得的各个任务时间分别是:0.420ms1.768ms2.486ms;照这样看,我的理解应该不合理,将周期4.5ms改为3.0ms,跳动明显点,显示基本还是稳定的.
    其中LED任务和另两个任务之一会存在同时请求执行的时刻.
    定时器采用T0,16位手动装载方式.
    这里只有几个小任务,功能也很单一,完全可以用其他的结构,但想知道问题在那里.
    请赐教
renwu1:
void LED_Display(void)
   {
      if (++Digit_G == 4)
      {
      Digit_G = 0;
      }
   switch (Digit_G)
      {
      case 0:
         {      
         LED_DIGIT_0 = 0;
         LED_DIGIT_1 = 1;
         LED_DIGIT_2 = 1;
         LED_DIGIT_3 = 1;
         break;
         }

      case 1:
         {      
         LED_DIGIT_0 = 1;
         LED_DIGIT_1 = 0;
         LED_DIGIT_2 = 1;
         LED_DIGIT_3 = 1;
         break;
         }

      case 2:
         {      
         LED_DIGIT_0 = 1;
         LED_DIGIT_1 = 1;
         LED_DIGIT_2 = 0;
         LED_DIGIT_3 = 1;
         break;
         }

      case 3:
         {      
         LED_DIGIT_0 = 1;
         LED_DIGIT_1 = 1;
         LED_DIGIT_2 = 1;
         LED_DIGIT_3 = 0;
         }
      }
  LED_DATA_PORT = 255 - led[Digit_G];//显示              
   }

renwu 2:
void  adc_conv(void)
{
    unsigned char i;
    unsigned char value=0;
    Clock=0;
    ChipSelect=1;
    ChipSelect=0;
    for(i=0;i<8;i++)
    {
        value<<=1;
        Clock=1;
        if(DataOut==1)
        value|=0x01;//value+=1;
        Clock=0;
    }
    ChipSelect=1;    
    temp=(float)value;    
    k=log(temp/(255-temp)) ;       
    temp=k/3380+1/298.15;           
}

renwu3:
void volage_cov_temp(void)
{               
     temp=1/temp-273.15; 
     tmp=(unsigned int)(temp*100);   
     led[0]=LED_Table_G[tmp%10];
     led[1]=LED_Table_G[tmp%100/10];
     led[2]=LED_Table_G[tmp%1000/100];
     led[3]=LED_Table_G[tmp/1000];
}    

相关帖子

沙发
ayb_ice| | 2007-8-18 07:43 | 只看该作者

要想不闪,要放在中断中显示,中断程序优先级设高点,同时要

使用特权

评论回复
板凳
xqhe|  楼主 | 2007-8-18 12:45 | 只看该作者

谢谢两位的赐教!

        2楼的程序有所改善,但问题还是存在.对于三楼,能说什么呢?只能说,听君一席话,胜读十年书.

使用特权

评论回复
地板
yewuyi| | 2007-8-18 13:22 | 只看该作者

呵呵,看来是对自己写的程序如何执行没把握!!!

这种问题,如果程序是自己写的,一看就应该知道问题出那了……

使用特权

评论回复
5
hotpower| | 2007-8-18 13:29 | 只看该作者

感觉是OS的优先级没玩好.

优先级高任务长也要细分才是.

优先级高考虑的实时采样或处理,至于采样结果的运算或任务的具体处理
可能要让给低任务了.

故可将此优先级高任务分成2个任务处理,一个高于LED,1个低于LED.

或者让LED优先级高些过同级(用时间片).

使用特权

评论回复
6
conwh| | 2007-8-18 20:14 | 只看该作者

可能是数据更新时的扫尾

使用特权

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

本版积分规则

15

主题

46

帖子

0

粉丝