7921|8

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机串口数据发送和定时器中断问题 [复制链接]

单片机型号是AT89LS52

现在的程序结构是:

timer0:由蜂鸣器操作触发,触发期间大概每0.3毫秒中断一次,中断服务函数处理少量蜂鸣器代码(7行);

timer1:从系统启动到关机结束一直开启,每2毫秒中断一次,中断服务函数处理代码较多。

串口波特率:115200,由timer2产生;
中断优先级串口最高,也即设置IP=0X10;
串口接收数据以中断方式,发送数据以轮询方式。


出现的问题是:

当timer0中断触发时(由蜂鸣器操作触发),会严重影响串口通信,单片机在收到数据后要向上位机回复数据,上位机每次都能收到数据,但是收到的回复数据100次中会有30次左右为错误数据,最常见的是帧头的首字符错误(应该为2,但是收到的为0)。

当屏蔽掉timer0中断后,只有timer1中断和串口中断工作,上位机还是会有收到数据错误的问题,但错误的次数大为减少,而且若精简timer1中断服务函数中的代码,错误还会继续下降。若将timer1中断由2ms改为30ms一次后,再不会发生串口发送数据错误问题。


我也是该开始接触嵌入式编程,51也是第一次见,很多技术细节不甚清楚,那位仁兄有这方面的经验,还望不吝赐教,尤其是怎么理清这些中断间的关系和干扰?还串口发送数据(轮询方式)时要注意的关键问题等。我已经被困扰了2天了,很郁闷。

最新回复

非常刚性!!  详情 回复 发表于 2009-11-27 17:07
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
0.3毫秒/2毫秒......太繁忙了........
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
51处理这样快的中断,有点不够了......
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 great_bug 的回复:
51处理这样快的中断,有点不够了......
timer0的0.3ms这个我想直接不用中断了,用for循环算了,但是timer1的2ms没法拿到中断外面去,只能由定时器来做。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
0.3ms,我怕你的硬件达不到。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
建议:
1。中断函数服务代码不错过10行。只进行状态确认,标志位处理。
2。主函数处理中断中发生的标志位变动。
3。好好看看化为的软件工程师手册。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
发送也用中断方式我想也许会好些吧?
我原来写过带虚拟串口的程序,就是正常串口与虚拟串口需要同时接受和发送数据。正常串口数据发送也用查询方式,虚拟串口误码率在百分之20左右,后来正常串口发送改为中断方式,虚拟串口误码率一下降到了百分之5以内。
不过我的波特率没你那么高,正常串口9600,虚拟串口4800
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
修改了串口接收中断服务函数到只有5行左右,使用了环形队列来存储收到的数据;问题解决了,看来还是串口中断服务函数过于庞杂所致,导致接收时超时,后一个数据覆盖了前一个数据所致。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
非常刚性!!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表