这个程序哪边的问题?
时间: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;
}
#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
应该就没问题了
我这个软件是只能一次性发送的,而且我其他程序一次性发送好多汉字和字符显示都是正确的。