微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个程序哪边的问题?

这个程序哪边的问题?

时间:10-02 整理:3721RD 点击:
我想请问一下,我向单片机发送ABC,为什么只收到I get A i get B?
#include<reg51.h>
void UsartConfiguration();
unsigned char receiveData,flag,i;
unsigned char table[6]="I get ";
void main()
{
     UsartConfiguration(); //初始化
      while(1)
      {
             if(flag==1)
             {
                    ES=0;      //关闭串口中断   flag=0;
                     for(i=0;i<6;i++) //发送i get
                     {
                            SBUF=table[i]; //将要发送的数据放入到发送寄存器
                            while(!TI);   //等待发送数据完成
                            TI=0;    //清除发送完成标志位
                      }
                    SBUF=receiveData; //将接收到的数据放入到发送寄存器
                   while(!TI);    //等待发送数据完成
                   TI=0;      //清除发送完成标志位
                    ES=1;       //打开串口中断
  }   
}
}
void UsartConfiguration()
{   
TMOD=0X20;    //设置计数器工作方式2
PCON=0X80;    //波特率加倍
TH1=0XF3;    //计数器初始值设置,波特率是4800的,12MHZ
TL1=0XF3;
TR1=1;     //打开定时器

SCON=0X50;    //设置为工作方式1

EA=1;     //打开总中断
ES=1;        //打开接收中断
}
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的数据
RI = 0;    //清除接收中断标志位
flag=1;      
}

你试一下在中断函数中这样写:

if (RI==1)
{
receiveData=SBUF;//出去接收到的数据
RI = 0;    //清除接收中断标志位
flag=1;  
}

没有必要加吧,因为if(flag==1)里面加了ES=0;已经将串口关了。试了下确实没用

你发送ABC是一次发送的吧?试试先发送A,然后有个时间间隔再发送B,然后等下再发送C
应该就没问题了

我这个软件是只能一次性发送的,而且我其他程序一次性发送好多汉字和字符显示都是正确的。

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

网站地图

Top