微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求教一个关于单片机RXD接收数据的问题

求教一个关于单片机RXD接收数据的问题

时间:10-02 整理:3721RD 点击:

本人系单片机新手,对这部分不了解,问一下,单片机如何从RXD口接收5个字节的串行数据呢,每个字节间隔10ms-20ms,又如何把这些数据放到一个数组里,(波特率为9600)。这个是我找的一个程序,这个程序能不能实现这个功能,把接收到的5个8位二进制数存到table1[]里。如果不能的话,该怎么改。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define N 5           //2                                            //可一次接收数据量
void rs232_init();
uchar flag,i;                                                       //删除无用变量                           
uchar code table[]="I get ";
uchar table1[N];                                              //接收缓存数组
uchar j=0;                                                             //接收计数器
//sbit led=P1^0;
main()
{
         rs232_init();
         while(1)
         {
                 if(flag==1)
                 {
                         ES=0;                                           //关串口中断
                         for(i=0;i<6;i++)
                         {
                                 SBUF=table;
                                 while(!TI);
                                 TI=0;
                         }
                         for(j=0;j<N;j++)                        //发送接收数组
                                                 {
                                                         SBUF=table1[j];
                                 while(!TI);
                                 TI=0;
                                                }
                         j=0;                                           //清零接收计数器
                         ES=1;
                         flag=0;
                 }               
         }
}
void rs232_init()
{
         TMOD=0x20;                //           10 0000//计数方式,13位定时器最大计数值为2的13次,即8192
         TH1=0xfd;
         TL1=0xfd;                //           计数值515
         TR1=1;
         SM0=0;                        
         SM1=1;                   //工作方式为1,8位异步收发,(由定时器T1设置)
         REN=1;                                                        //先设定号工作方式,在打开允许接收
         EA=1;                  //总中断
         ES=1;        //开串口中断
}
void ser()interrupt 4
{                 
                RI=0;
                table1[j++]=SBUF;                                //存数据到接收缓存
                if(j==N)                                                //数组满时,允许发送
                flag=1;
}


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

网站地图

Top