关于51单片机串口接受字符串的问题

[复制链接]
5159|11
 楼主| happywxg 发表于 2009-4-17 21:47 | 显示全部楼层 |阅读模式
void serial () interrupt 4
{
    while(RI) 
      {
         //接受上位机发过来转速,转速格式为二进制 
        while(count<3)
        { 
            re_dat[count]=SBUF;   
              count++;
             RI=0;
            SBUF=count;
            while(!TI) ;
            TI=0;
         }
        if(count==3)
        {
         count=0;    
         com_end_flag=1;
        }
     }     
}
这是中断程序,但是现在的问题是接受不稳定,不如我发123,那么下面收到的有时候是123,有时候是333.不知道为什么啊???
 楼主| happywxg 发表于 2009-4-19 21:44 | 显示全部楼层

是没人知道,还是我出的问题太简单

没人会吗??
电脑圆圆 发表于 2009-4-19 22:07 | 显示全部楼层

错误写法

要么中断要么查询,那有两者混用
宇审飞船 发表于 2009-4-19 22:17 | 显示全部楼层

支持圈圈

支持圈圈,圈圈说得对,在论坛中向圈圈这样的牛人,热心人太少了
atuz 发表于 2009-4-19 22:21 | 显示全部楼层

。。。。

山寨连山寨
2shift 发表于 2009-4-20 08:55 | 显示全部楼层

写的太乱

起码的一点,你接收一个数据,发送的确是下一个地址的数据,这好像不是你的本意。接收和发送的中断分开,这样在一起,太乱。
电脑圆圆 发表于 2009-4-20 08:58 | 显示全部楼层

哈哈

:4楼: 支持圈圈 

支持圈圈,圈圈说得对,在论坛中向圈圈这样的牛人,热心人太少了
 
 
——————————————————————————————————
不知山寨真面目,只缘身在此寨中
pinyione 发表于 2009-4-20 09:05 | 显示全部楼层

呵呵

我觉得可以进入中断后把中断关了,等接收完count=3后再开中断,应该就不会有冲突了
中航_夏工 发表于 2009-9-1 22:36 | 显示全部楼层
本帖最后由 中航_夏工 于 2009-9-1 22:39 编辑

进中断后能关中断?我怎么关不了?中断程序里写ES=0好像是摆设
senzh01 发表于 2009-9-2 08:43 | 显示全部楼层
count++;  这句应该放到ti=0;的后面吧?
wwfjj1987 发表于 2011-4-29 16:52 | 显示全部楼层
我来说说吧,
我遇到过和你一样的问题,就是发送的数据被冲掉的现象。
中断服务serial () interrupt 4是接收和发送共用的,所以处理不当可能会一直不间断的进入中断服务函数。
SBUF虽然写入可以发送了,但是SBUF会只发送最后一次写入的值,
所以你最好在中断服务函数里面分开写接收(RI)和发送(TI)的处理。
sysdriver 发表于 2011-4-29 23:56 | 显示全部楼层
LZ写的串口中断确实很乱也非常的不好,但是并没有错误。也没有产生中断冲突的情况。

因为,串口中断还在处理的过程中,是不会再触发串口中断的,而你的回显发送又是while循环,所以在显示123或333的时候是不会再触发串口中断的。而且你发送的时候,加上了while(!TI)判断,所以也应该不会冲掉前面的数据,我想,会不会是频率设置的精度差?或者是处理count的时候出现问题,因为你的count看上去不像局部变量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部