微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问AT89C51寄存器SBUF串行通信接收和发送数据时能不能是数组?

请问AT89C51寄存器SBUF串行通信接收和发送数据时能不能是数组?

时间:10-02 整理:3721RD 点击:
外接的甲醛浓度传感器发送命令是7个16进制数,返回10个16进制数
接收数据        for(i=0;i<10;i++)
                {
                        RI=0;               
                        out=SBUF;
                        while(!RI);
                        Delay1ms(1);
                               
                }
发送数据
        for(i=0;i<7;i++)
                {
                        TI=0;                                          //清除数据传送标志       
                        SBUF=in;
                        while(!TI);
                        Delay1ms(1);//等特数据传送

                }

单片机接收和发送都是一个字节,接收时把字节存到数组然后判断接收结尾就可以了

51的不可以吧,有DMA功能的单片机就可以了。指定接收和发送的数组,启动串口和DMA就可以了

请问是这样吗?SBUF能按顺序发出来吗?
                for(i=0;i<10;i++)
                {
                        RI=0;               
                        out=SBUF;
                        while(!RI);
                        Delay1ms(1);
                               
                }

哦?那我查查资料,谢谢提醒!

哦?那我查查资料,谢谢提醒!

接收一串数据不能这样搞的,发送和接收的delayms延时都要去掉。给你个参考,如下:

  1. void USART_Handler(void) interrupt 4
  2. {
  3.         INT8U temp = 0;
  4.         ES = 0;
  5.         if( TRUE == RI)
  6.         {
  7.                 RI = 0;       
  8.                 if( cntRxd < BUF_MAX )//?o3???êy?Y?1??óD?óê?íê±??í?éò??ìD??áè?êy?Y
  9.                 {
  10.                         bufRxd[cntRxd++] = Uart_Rec();
  11.                 }
  12.         }
  13.         ES = 1;
  14.                
  15. }

复制代码


  1. INT8U Uart_Rec(void)
  2. {
  3.         return SBUF;
  4. }

复制代码


以上是接收部分的。数据都存在bufRxd这个数组里,你去处理它,记得清零啊之类的操作以便后续再进行读取。
下面是发送部分的:

  1. void Uart_Send_Byte(BYTE dat)
  2. {
  3.     SBUF = dat;             //Send current data
  4.         while (!TI);            //Wait for the previous data is sent
  5.     TI = 0;                 //Clear TI flag
  6. }

复制代码


  1. void Uart_Write(INT8U *buf, INT8U len)
  2. {
  3.     while (len--)   //循环发送所有字节
  4.     {
  5.         Uart_Send_Byte(*buf++);
  6.     }
  7. }

复制代码


基本上就是这样的。仅供参考。

百度单片机接收字符串,例程一大堆

你看一下STM32的单片机或者M0、M3内核的MCU资料

好的谢谢!那上面这个程序里的这个变量INT8U temp是什么用途?

好的谢谢!

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

网站地图

Top