|
单片机型号是AT89LS52
现在的程序结构是:
timer0:由蜂鸣器操作触发,触发期间大概每0.3毫秒中断一次,中断服务函数处理少量蜂鸣器代码(7行);
timer1:从系统启动到关机结束一直开启,每2毫秒中断一次,中断服务函数处理代码较多。
串口波特率:115200,由timer2产生;
中断优先级串口最高,也即设置IP=0X10;
串口接收数据以中断方式,发送数据以轮询方式。
出现的问题是:
当timer0中断触发时(由蜂鸣器操作触发),会严重影响串口通信,单片机在收到数据后要向上位机回复数据,上位机每次都能收到数据,但是收到的回复数据100次中会有30次左右为错误数据,最常见的是帧头的首字符错误(应该为2,但是收到的为0)。
当屏蔽掉timer0中断后,只有timer1中断和串口中断工作,上位机还是会有收到数据错误的问题,但错误的次数大为减少,而且若精简timer1中断服务函数中的代码,错误还会继续下降。若将timer1中断由2ms改为30ms一次后,再不会发生串口发送数据错误问题。
我也是该开始接触嵌入式编程,51也是第一次见,很多技术细节不甚清楚,那位仁兄有这方面的经验,还望不吝赐教,尤其是怎么理清这些中断间的关系和干扰?还串口发送数据(轮询方式)时要注意的关键问题等。我已经被困扰了2天了,很郁闷。
|
|