微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人求助 串口通信

新人求助 串口通信

时间:10-02 整理:3721RD 点击:
LZ想通过串口通信得到一组数据,用于接下来的控制。如:dat[4]={1000,100,10,1}等;
自己编了个程序,但苦于基础不好,一直不能实现。跪求大神前来指点啊~~~
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,receiveData;
uchar dat[4];
void UsartConfiguration();
void main()
{
uchar k;
UsartConfiguration();
while(1)
{
  if(flag==1)
  {
   ES=0;
   flag=0;
   dat[k]=receiveData;
   SBUF=dat[k];
   while(!TI);    //等待发送数据完成
   TI=0;
   ES=1;     //清除发送完成标志位
   k++;
   if(k==4)k=0;
  }
}
}
void UsartConfiguration()
{
SCON=0X50;   //设置为工作方式1
TMOD=0X20;   //设置计数器工作方式2
PCON=0X80;   //波特率加倍
TH1=0XF3;      //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1;      //打开接收中断
EA=1;      //打开总中断
TR1=1;         //打开计数器
}
void Usart() interrupt 4
{
receiveData=SBUF; //出去接收到的数据
RI = 0;           //清除接收中断标志位
flag=1;
}

出现什么问题了?

将接收到的数据保存到数组这一过程可以放在串口中断函数中,接收一个后数组指针向后移位。当满足接收的数据个数后置标志位为1,在主函数中检测该标志位,再进行相应处理即可。顺便说一下,最好建立一个通信协议确保接收的数据是自己需要的,否则只要接收一个错误,接下来你所有接收就全错了,应该需要加上串口接收自动复位功能。

我也在学串口通信

非常感谢您的细心讲解~3Q

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

网站地图

Top