大家好,
小弟始终搞不懂串口中断与处理问题,是上位机发送数据是按时间一个个发的呢还是我程序中出现错误,下面程序我基于对单片机来说还不太懂,望大家指点指点是什么地方出错了, 程序目的是从上位机发送字符串,回车结束,下位机接受后返回原值!望各位大侠指教指教!!!!!!!!!谢谢
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z)
{
uint a,b;
for (a=z; a>0; a--)
for (b=114; b>0; b--);
}
void uartinit() //初始化子函数
{
TMOD = 0X20;
SCON = 0X50;
TH1 = TL1 = 0XFD; //晶振11.0592MHZ 波特率 9600
TR1 = 1;
ES = 1;
EA = 1;
}
uchar *str; //指针存数据
uchar *cleanstr = "\0"; //清空数据的指针
uint Rflag = 0; //按受数据标志位
uint Tflag = 0; //发送数据标志位
void main()
{
uartinit();
while(1)
{
if(Rflag) //按受数据标志位溢出
{
Rflag = 1; //归零
for (str; *str!='\n'; str++) //从底位开始送数 回车结束
{
*str = SBUF;
}
}
if (Tflag)
{
Tflag = 0;
for (str; *str!= '\0'; str++)
{
SBUF = *str;
}
if ('\0' == *str)
str = cleanstr; //发送完毕后指针清零
}
}
}
void uart() interrupt 4 //串口中断函数
{
ES = 0;
if(RI)
{
Rflag = 1;
RI = 0;
}
if (TI)
{
Tflag = 1;
TI = 0;
}
ES = 1;
} |