打印

STC10F 串口通信 中断接收数组 出错拉

[复制链接]
2323|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lk0623|  楼主 | 2010-12-12 20:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送函数和接收中断
void send_UART(unsigned char i)

{
ES=0;
TI=0;
SBUF=i;
while(TI==0);
TI=0;
ES=1;
}

void UART_one_Interrupt_Receive(void) interrupt 4
{
    if(RI==1)
    {
      for(i=0;i<3;i++)
   {   
    RXDBUFF1[i] = SBUF;
    send_UART(RXDBUFF1[i]);         
   }
    RI  =   0;
    flag=1;      
    }
    else
    {
        TI  =  0;
    }
}

不知道那里错了, 发送01 02 03 返回为00 00 00

相关帖子

沙发
NE5532| | 2010-12-12 21:04 | 只看该作者
在发送那里给RXDBUFF1[i]赋固定值看看出来的结果对不对。

使用特权

评论回复
板凳
lk0623|  楼主 | 2010-12-12 21:07 | 只看该作者
尝试过程序中定义RXDBUFF1[i]为固定值, 发送没有问题

使用特权

评论回复
地板
NE5532| | 2010-12-12 21:24 | 只看该作者
首先得研究下你的这个单片机串口是全双工的不?SBUF边发边收行么?另外接收缓冲是双缓冲么?接收缓冲在什么时候声明可以清空的?会不会在发送查询标志位期间,接收的下一个字节已经发生溢出了?

使用特权

评论回复
5
lk0623|  楼主 | 2010-12-12 22:16 | 只看该作者
型号是STC10F04XE,它是全双工异步通信,支持SBUF边发边收, 之前我不用数组,单字符可以接收发送,

使用特权

评论回复
6
shell.albert| | 2010-12-13 13:07 | 只看该作者
中断时间占用太长了吧。

使用特权

评论回复
7
coody| | 2010-12-13 13:23 | 只看该作者
程序结构不好,你可以用队列做缓冲,中断收发,同时双工。。。。

使用特权

评论回复
8
topfei123| | 2010-12-13 13:56 | 只看该作者
对中断理解不够,一次中断只接收一个数据,你却收发了3次

使用特权

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

本版积分规则

0

主题

109

帖子

0

粉丝