打印
[其他ST产品]

请教C51多节字串口发送与接收问题

[复制链接]
1186|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjh168|  楼主 | 2015-3-30 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*串口中断服务程序,单片机开启串口中断 */
void USART_TI0(void) interrupt 4
{
        if(RI0)                                                                //判断接收标志,如果有数据接收RI被置位
        {
                RI0=0;                                                          //RI被硬件置位必须软件清除标志
                MAIN_BUF[num++]=SBUF0;                                                   //下位机把接收到上位机数据赋值给MAIN_BUF变量                                  
                //num++;
                if(num>8)
                {
                        flag=1;                                                                   //告诉已经接收完
                        num=0;                                                                   //归0,重新等等待计数
                }                 
        }
}

上面这段程序,当我发送完整的9个字节( 00 5a 51 00 00 00 03 00 ae )程序就能正常发送接收。当我发不完整,如00或00 5a 等,程序就卡死,此时需要插拔电。有一些朋友叫我“加个时间判断 多长时间没收到 把计数器清零”  具体怎么修改望好心人帮忙。 此程序把C51的两个定时器用完了。

沙发
hnkf118| | 2015-3-30 11:24 | 只看该作者
你BUF多大?我看你程序 极像越界了。

使用特权

评论回复
板凳
cjh168|  楼主 | 2015-3-30 11:28 | 只看该作者
hnkf118 发表于 2015-3-30 11:24
你BUF多大?我看你程序 极像越界了。

你好!uchar MAIN_BUF[9];  加Q365861332

使用特权

评论回复
地板
lovecat2015| | 2015-3-30 16:17 | 只看该作者
你的缓存开的有多大啊
是不是越界的问题?

使用特权

评论回复
5
cjh168|  楼主 | 2015-3-30 16:36 | 只看该作者
lovecat2015 发表于 2015-3-30 16:17
你的缓存开的有多大啊
是不是越界的问题?

你好!方便加一下QQ吗?我buf[9] 0-8 刚好9  我觉得不像你们说的越界,  目前是,我发00等,数组不完整,程序是不是一直在等下个数的到来,因为没有下个数,所以空在那里。

使用特权

评论回复
6
幸福至上| | 2015-3-30 22:40 | 只看该作者
本帖最后由 幸福至上 于 2015-3-30 22:50 编辑

串口接收数据这样用的话,如果发的数据少于9个,或者通信中丢失几个字节,那岂不是flag一直都为0,这样可能会出BUG的。

使用特权

评论回复
7
cjh168|  楼主 | 2015-3-31 08:36 | 只看该作者
幸福至上 发表于 2015-3-30 22:40
串口接收数据这样用的话,如果发的数据少于9个,或者通信中丢失几个字节,那岂不是flag一直都为0,这样可能 ...

请问我要怎么修改呢?帮帮忙。

使用特权

评论回复
8
金则立则翔| | 2015-3-31 09:11 | 只看该作者
怎样修改还要别人帮忙啊?自己动脑筋

使用特权

评论回复
9
hnkf118| | 2015-3-31 22:17 | 只看该作者
你把 num 先初始化 另外一点 你这样的写法 可能会冲掉以前收到的一些数据。
建议搞成环形环形 缓存区, 这样每次读取的 都是最先收到的数据。 另外你的应用 去做数据分析。

使用特权

评论回复
10
戈卫东| | 2015-3-31 22:32 | 只看该作者
。。。。。。。。。。。

使用特权

评论回复
11
cjh168|  楼主 | 2015-4-2 11:52 | 只看该作者
金则立则翔 发表于 2015-3-31 09:11
怎样修改还要别人帮忙啊?自己动脑筋

哈哈,我也動腦了,可惜,還是轉不過來。

使用特权

评论回复
12
cjh168|  楼主 | 2015-4-2 11:53 | 只看该作者
hnkf118 发表于 2015-3-31 22:17
你把 num 先初始化 另外一点 你这样的写法 可能会冲掉以前收到的一些数据。
建议搞成环形环形 缓存区, 这 ...

謝謝你的建議,我想想吧。

使用特权

评论回复
13
lu50211| | 2015-4-5 19:30 | 只看该作者
可以增加一个帧头,帧尾。如:0Xaa  0x 55 判断帧尾,如果数据正常,那帧尾正确。反之,则出错。那就要关接收中断,请接收计数。

使用特权

评论回复
14
小浣熊| | 2015-4-6 21:24 | 只看该作者

使用特权

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

本版积分规则

2

主题

17

帖子

0

粉丝