打印
[AVR单片机]

继电器反复开合的程序处理问题,求分析

[复制链接]
2512|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangbo_hover|  楼主 | 2010-12-1 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCU:M16
定时器:100MS
程序流程:
水箱液位处理控制部分程序,水箱有三个设定值,当液位达到设定值时,相应继电器会动作,定时100MS,三秒送一次AD值在屏幕上显示,同时液位在设定值附近波动时,做个标志位,AD采集10次30秒内,液位都在设定值以上或者以下,标志位就做相应处理,在主程序中,标志位开启或者关闭,对应继电器的开合
问题:
做一个设定值时,程序正常,做三个设定值时,程序跑飞,不按正常流程走了,而且显示也会延缓,不知道问题出在哪里?
void ad_chuli(void)
{
if(flag_ad!=ad_flag)
  {
    flag_ad=ad_flag;
  if((ad_flag%3)==0)    //3S送一次AD值
                adc();
              if(yewei>=yewei1_setting)
               {
                     time_count++;
                     count_time=0;
               }
               if(yewei<yewei1_setting)  count_time++;
               if(count_time>10)  //低于设定值 采集10*3=30S防抖动
                 {
                     time_count=1;
                     yewei_flag1=0xaa;
                     count_time=11;
               }
               if(time_count>10)    //高于设定值采集10*3=30s防抖动
                   {                           
                      yewei_flag1=0x55;
                      time_count=1;
                      time_count=11;
                   }
   }
}
void main(void)
{
while(1)
       {
       if((SPSR&0X80)!=0)        
      {
     adc();
       }
      ad_chuli();
       sys_control();
       }
}

相关帖子

沙发
yangbo_hover|  楼主 | 2010-12-1 11:32 | 只看该作者
坐等,热心人

使用特权

评论回复
板凳
zhaoyu2005| | 2010-12-2 16:37 | 只看该作者
别等热心人了,自己好好整理思路,这个估计是逻辑问题

使用特权

评论回复
地板
POINTRTOS| | 2010-12-3 15:38 | 只看该作者
呵呵,有点混乱.建议楼主先将time_count与count_time处理好.

使用特权

评论回复
5
老鱼探戈| | 2011-1-10 13:26 | 只看该作者
LZ的函数和变量定义很混乱,我想你自己有时候都会误看的。
把完整的变量定义贴出来看看
例如 ad_flag; 是什么类型的变量。按你的写法应该是一个uchar型的。

水位平均消抖也可行,不过最好用软件家施密特。

使用特权

评论回复
6
weibestww| | 2011-9-1 22:41 | 只看该作者
LZ写程序最好不要用汉语拼音,用常用的英文单词最好!

使用特权

评论回复
7
lisijun100| | 2011-9-2 03:39 | 只看该作者
:lol 没有看懂?

使用特权

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

本版积分规则

1

主题

7

帖子

1

粉丝