現在,程序是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--);
}
*************************************/
|