微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于stc15系列单片机的串口通信问题。

关于stc15系列单片机的串口通信问题。

时间:10-02 整理:3721RD 点击:
可以直接在串口中断函数里将接收到的数据存进16位数组里吗?请大侠指导一下,不知道下面的代码可不可以实现功能?
void UART1_Rountine(void)                interrupt 4
{
  uint16 i ;
  if(RI == 0)
  {
    RI = 0;
    i = SBUF;
    i = i<<8;
    while(i == 0)
    {
      i |= SBUF;
      RecBuf[j] = i;    /* 串口接收数组 */
    }
  j++;
  }
  
  else
  {
    TI = 0;
  }
}

你还需要再看一看C语言,你把一碗水倒在锅里,肯定是可以称下的,你只是把它放在unsigned int 里,没有什么意义

程序应该可以实现,但是一般人不会这样接收数据。

能解释一下为什么吗   不太明白

每一次接收的数据我把它存进接收数组里了啊,i只是个中间转换的变量而已

那一般你们是怎么处理的呢

一般串口中断里面只是接受数据并保存到缓冲区中,处理是在主程序中做。

如果像这样等待接收到的数据的到来,CPU就不能做其他事情了,只能一直在这里干等着

可以在中断里面做个标志位,接收到想要的数据之后置位。然后在主程序里检测标志位再处理可以吗?

但是我想要把串口接收的前后两个单字节存进一个16位数组里面啊,这种要怎么实现

这个我也清楚,那么我只能把串口接收到的数据存进数组,然后写一个转换程序(8位转16位)在主程序里调用?

通过指针来做。

这个程序不能实现,因为uint16 i是形参,至少你要把它定义成全局变量或者添加一个static关键字。

stc15可以在线仿真了吗?小编?

I<<8 之后肯定为0,代码很多冗余。
j 没有定义,随时可能让数值越界。
小编的C语言基础很差,需要多努力。

i<<8是为了将先传送过来的1字节存进高8位,再接收下一个字节的时候存进低8位组成双字节数据、

这样,我试一下

不错,过来看看,学习学习。

小编,你的whlie语句的判断条件我看不懂,为什么这样写呢?还有j的定义也不明确

不过我感觉你的程序是可以实现这个功能的~只不过会让单片机在一段时间内一直处于接收状态,挺好的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top