现在,程序是TH1 = 0xF9,手机发送a,应该是返回给手机的数据,却在串口调试工具中显示了。
数据正确应该是 Error。在串口调试小助手上现实的是 舝ror Error 膨騩r 咈蝻r 舝ror E蝌矧 Error
不知道是什么情况。我用的是开发板,上面的晶振是12MHZ。波特率是9600
#include "reg52.h"
unsigned char SenData,Flag=0;
char code str1[]="Success";
char code str2[]="Error";
unsigned char i=0;
void InitUART(void);
void send_str();
void send_str2();
void send_char(unsigned char txd);
void delayms(unsigned char ms);
void delay(unsigned int i);
void InitUART(void)
{
/*******************设定串口**********************/
SCON = 0x50; //设置为工作方式1
TMOD = 0x20; //设置计数器工作方式2
PCON = 0x80; //波特率加倍
TH1 = 0xF9; //计数器初始值设置,注意波特率是9600的
TL1 = TH1;
SM0=0;//8位UART
SM1=1;
REN=1;//开始接收
ES = 1; //打开接收中断
EA = 1; //打开总中断
TR1 = 1; //打开计数器
/******************设定中断**********************/
}
void main() //主函数
{
InitUART();
while(1){
if(Flag==1)
{
ES=0;
delayms(100);
//----------------------该段即对接收的数据进行处理
if(SenData=='a')
{
delayms(30);//延时去抖动
send_str();//发送数据
}
else
{
delayms(30);
send_str2();
}
i=0;
ES=1;
Flag=0;//数据处理完毕后将标志位置0,表示没有新数据要处理
}else{
i=0;
}
}
}
void ser_int()interrupt 4//接收字符串
{
if(RI)//RI接受中断标志
{
RI=0;//清除标志.
SenData=SBUF;
Flag =1;//标志位置1表示有新数据进来
}else //如果是发送中断,将TI清0
TI = 0;
}
/*************************************
成功,返回
*************************************/
void send_str()//发送字串
{
while(str1[i]!='\0'&&i<7)
{
delayms(10);
SBUF=str1[i];
while(TI!=1);//等待数据传送
TI=0;//清除数据传输标志
i++;//下一个字符串 led=1;
//delay(50000); //大约延时450ms
}
}
/*************************************
失败,返回
*************************************/
void send_str2()//发送字串
{
while(str2[i]!='\0' && i<5 )
{
delayms(10);
SBUF=str2[i];
while(TI!=1);//等待数据传送
TI=0;//清除数据传输标志
i++;//下一个字符串
}
}
/*************************************
延时
*************************************/
void delayms( unsigned char ms)//延时子程序
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
/*************************************
延时
50000,大约延时450ms
void delay(unsigned int i)
{
while(i--);
}
*************************************/
|