找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6073|回复: 1
打印 上一主题 下一主题
收起左侧

[求助][求助]51单片机串口数据发送和定时器中断问题

[复制链接]
跳转到指定楼层
楼主
ID:18028 发表于 2009-10-12 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单片机型号是AT89LS52

现在的程序结构是:

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

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

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


出现的问题是:

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

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

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


估计是中断时序混乱问题,我已经被困扰了2天了,很郁闷。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7209 发表于 2009-10-14 08:39 | 只看该作者

理解

     那郁闷很难受

    我也是有几条指令需要用串口发送 可不只应该怎么写

  

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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