找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2420|回复: 4
收起左侧

单片机程序跑飞了,各路大神帮小菜找下BUG吧

[复制链接]
ID:144534 发表于 2016-10-26 13:26 | 显示全部楼层 |阅读模式
先贴上部分代码://----------------------------    ADC   -----------------------------------//
unsigned int GET_ADC_Result(unsigned char ch)
{
        unsigned int ADC_VAL=0x0000;
        ADC_CONTR =  ADC_POWER | ADC_SPEEDHH | ch | ADC_START;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while(!(ADC_CONTR & ADC_FLAG));
        ADC_CONTR &= ~ADC_FLAG;
        ADC_VAL = ADC_RES;  //¸ß8λ       
        return ((ADC_VAL << 2)+ADC_RESL); //10λ
}


//-----------------     延迟0.5ms    18.432MHz   --------------------//
void Delay(unsigned int n)
{
        unsigned int x;
        while(n--)
        {
                x = 500;
                while(x--);
        }
}


//-------------------   定时计数器0中断服务函数   40ms   ------------------//
unsigned int Int_times,Zero_times = 0;
void timer0_isr() interrupt 1 using 1
{
        TF0 = 0;
        Int_times++;
        BEEP = !BEEP;
        if(GET_ADC_Result(CURT_SAMP)<0x02){
                Zero_times++;
                if(Zero_times>130){
                        BEEP = 1;
                        LED_R = 1;
                        LED_G = 0;
                }
                if((Int_times==Zero_times)&&(Zero_times==150)){
                        EA = 0;     //关中断
                        ET0 = 0;
                        TR0 = 0;
                        IAP_CONTR = 0x20;    //软复位
                }
        }
        else{
                Int_times = 0;
                Zero_times = 0;
        }       
}

,主函数里面主要是控制一些LED和一些开关,中间也要用上ADC。

情况是这样的: 我想通过单片机来检测一个管脚的电压信号,如果这个管脚的电压低于0x02那我就让单片机复位,也就是这个 定时计数器0中断服务函数 正常情况下完成的内容。


现在问题是:上面的程序正常运行起来的话程序会跑进一个BUG里面,有时候2分钟就进了BUG,有时候40分钟进BUG,但是BUG现象一致,BUG造成的现象是  单片机 会长期处于一个固定状态,比如说  LED 和开关都处于打开状态。  但是如果这个时候我把ADC采样输入那个脚电压设置为0的时候,程序又能正常进入 定时计数器0中断服务函数 ,然后程序重新跑起来,又过2分钟到40分钟,又会出现同样的情况。   
如果把 定时计数器0中断服务函数 中不用AD采样,那就不会出现这个BUG!!!
我查了2天了都没查出来什么问题,实在是查不到哪里出了问题了,还请坛子里大神帮我看看,跪谢~~~

回复

使用道具 举报

ID:144732 发表于 2016-10-28 11:25 | 显示全部楼层
应该是电源没处理好,死机了吧!!
回复

使用道具 举报

ID:7485 发表于 2016-10-28 19:09 | 显示全部楼层
本帖最后由 ahshmj 于 2016-10-28 19:14 编辑

管脚的电压低于0x02”是什么意思?
是AD转换后的值吗?
回复

使用道具 举报

ID:144534 发表于 2016-11-3 17:09 | 显示全部楼层
ahshmj 发表于 2016-10-28 19:09
“管脚的电压低于0x02”是什么意思?
是AD转换后的值吗?

管脚电压低于0x02是我的门限。问题已经解决了,是查询的方式导致的,我换成了中断方式就OK了。不过还是谢谢啦
回复

使用道具 举报

ID:144534 发表于 2016-11-3 17:09 | 显示全部楼层
dyjhy 发表于 2016-10-28 11:25
应该是电源没处理好,死机了吧!!

问题已经解决了,是查询的方式导致的,我换成了中断方式就OK了。不过还是谢谢啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表