打印

关于pic的uart接收问题

[复制链接]
1936|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
colorful88|  楼主 | 2014-10-25 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在文件里定义了一个extern volatile unsigned char com_rx_buffer[150],但是在接收上位机命令时,却只能接收到101位的字符串,我很想不清楚。坛友们能有个思路吗?
#define COM_RX_BUFFER_SIZE  150
沙发
wuhenyouyu| | 2014-10-26 09:20 | 只看该作者
串口比较慢,你要想办法知道怎么接受完了一针数据!

使用特权

评论回复
板凳
wangch_sh| | 2014-10-26 19:14 | 只看该作者
哪款单片机?RAM多大?

使用特权

评论回复
地板
colorful88|  楼主 | 2014-10-26 21:33 | 只看该作者
wangch_sh 发表于 2014-10-26 19:14
哪款单片机?RAM多大?

16lf1947,mplab编译的时候没有报错

使用特权

评论回复
5
yklstudent| | 2014-10-27 18:19 | 只看该作者
直接上代码

使用特权

评论回复
6
colorful88|  楼主 | 2014-10-27 20:21 | 只看该作者
yklstudent 发表于 2014-10-27 18:19
直接上代码

unsigned char com_rx_buffer[COM_RX_BUFFER_SIZE];
#define COM_RX_BUFFER_SIZE  240;
extern volatile unsigned char com_rx_count;
void interrupt ISR()
{
    if (RCIF)
    {
         RCIF = 0;
         com_rx_byte = RC1REG;
         com_rx_buffer[com_rx_count] = com_rx_byte;
         com_rx_count++;
         if (com_rx_count >= (COM_RX_BUFFER_SIZE - 1))
        {
            com_rx_count = 0;   
        }
    }
}

使用特权

评论回复
7
yklstudent| | 2014-10-27 21:25 | 只看该作者
光看这段代码,还真没有甚么问题

使用特权

评论回复
8
ilikedota| | 2014-10-29 20:24 | 只看该作者
是不是有别的中断?

使用特权

评论回复
9
chen_jhhb| | 2014-10-29 20:44 | 只看该作者
求正解

使用特权

评论回复
10
colorful88|  楼主 | 2014-10-30 13:07 | 只看该作者
ilikedota 发表于 2014-10-29 20:24
是不是有别的中断?

有的,tmr0中断,INT下降沿中断,发送中断

使用特权

评论回复
11
lanmp| | 2014-10-30 16:08 | 只看该作者
101个字节之后发生了什么?不进中断了?Overrun Error了?

使用特权

评论回复
12
colorful88|  楼主 | 2014-10-30 20:11 | 只看该作者
本帖最后由 colorful88 于 2014-10-30 20:15 编辑
lanmp 发表于 2014-10-30 16:08
101个字节之后发生了什么?不进中断了?Overrun Error了?

最近没仔细调,我先把数组定义到240,能够接收完全,先这么用下
我等有空,我再调调,看看是不是有帧错误或者溢出错误
改下程序,确认接收完毕

使用特权

评论回复
13
ilikedota| | 2014-11-1 21:57 | 只看该作者
colorful88 发表于 2014-10-30 13:07
有的,tmr0中断,INT下降沿中断,发送中断

建议你从头理清一下逻辑思路,如果有多种中断共存的话,中断之间可能相互打断,从而影响程序运行的时序,导致出现一些你想象不到的结果,我以前遇到过这样的问题。

使用特权

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

本版积分规则

18

主题

56

帖子

0

粉丝