打印

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

[复制链接]
3743|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 | 只看该作者

支持圈圈

支持圈圈,圈圈说得对,在论坛中向圈圈这样的牛人,热心人太少了

使用特权

评论回复
5
atuz| | 2009-4-19 22:21 | 只看该作者

。。。。

山寨连山寨

使用特权

评论回复
6
2shift| | 2009-4-20 08:55 | 只看该作者

写的太乱

起码的一点,你接收一个数据,发送的确是下一个地址的数据,这好像不是你的本意。接收和发送的中断分开,这样在一起,太乱。

使用特权

评论回复
7
电脑圆圆| | 2009-4-20 08:58 | 只看该作者

哈哈

:4楼: 支持圈圈 

支持圈圈,圈圈说得对,在论坛中向圈圈这样的牛人,热心人太少了
 
 
——————————————————————————————————
不知山寨真面目,只缘身在此寨中

使用特权

评论回复
8
pinyione| | 2009-4-20 09:05 | 只看该作者

呵呵

我觉得可以进入中断后把中断关了,等接收完count=3后再开中断,应该就不会有冲突了

使用特权

评论回复
9
中航_夏工| | 2009-9-1 22:36 | 只看该作者
本帖最后由 中航_夏工 于 2009-9-1 22:39 编辑

进中断后能关中断?我怎么关不了?中断程序里写ES=0好像是摆设

使用特权

评论回复
10
senzh01| | 2009-9-2 08:43 | 只看该作者
count++;  这句应该放到ti=0;的后面吧?

使用特权

评论回复
11
wwfjj1987| | 2011-4-29 16:52 | 只看该作者
我来说说吧,
我遇到过和你一样的问题,就是发送的数据被冲掉的现象。
中断服务serial () interrupt 4是接收和发送共用的,所以处理不当可能会一直不间断的进入中断服务函数。
SBUF虽然写入可以发送了,但是SBUF会只发送最后一次写入的值,
所以你最好在中断服务函数里面分开写接收(RI)和发送(TI)的处理。

使用特权

评论回复
12
sysdriver| | 2011-4-29 23:56 | 只看该作者
LZ写的串口中断确实很乱也非常的不好,但是并没有错误。也没有产生中断冲突的情况。

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

136

帖子

0

粉丝