atmega128长期工作后程序异常,求助!!!

2019-03-24 20:19发布

本人写了一个程序,主要是在定时器1中每20ms监控外界端口IO状态,当IO口状态发生变化时,在定时器内把数据存到数组中,然后作标志位,主程序不停查询该标志位,当标志位为1时,通过串口把数组的数据发送出去。但是在长期工作后(不定时,长达几天几个月都可能)发现程序会出问题,本来串口发送数据只会是在定时器监控的IO口发生变化后才会发生,可是出问题后,主程序会一直往串口发送数据,此时还能进入定时器中断,当IO检测状态改变时,串口数据也改变的。出问题后数据可能是不停地重复发数组内的数据,有时候只会发送数组的一部分数据。下面大概写出程序的内容,不是原代码,求分析可能原因。ISR(time1) //忘记是不是这样了
{
       此处重装初值20ms
       if{PORTA!=pastPORTA}
       {
                for(i=0;i<15;i++)
                        table[i]=某逻辑计算后的值;
               mark=1;
        }
}


int main(void)
{
while(1)
{
        if(mark==1)
       {
              mark=0;
             for{i=0;i<15;i++}
             {
                     Uartsend_oneBit(table[i]);//往串口发送数据
              }
        }
}
}
出问题时现象为串口不停发送table[]的数据,多数为table[0]到table[14]的数据,但有时候没有table[0],是从table[1】开始的,有时候甚至会有乱码。但此时定时器中断能进,加入看门狗在主程序喂狗解决不了该问题,用16M晶振,熔丝位是FE,09,3F.详细程序明天上传。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
dj狂人
2019-03-25 15:05
代码太长,没仔细看。异常的时候用示波器看看你监测的那个I/O引脚是个什么样的状态

一周热门 更多>