現(xiàn)在,程序是TH1 = 0xF9,手機發(fā)送a,應該是返回給手機的數(shù)據(jù),卻在串口調(diào)試工具中顯示了。
數(shù)據(jù)正確應該是 Error。在串口調(diào)試小助手上現(xiàn)實的是 舝ror Error 膨騩r 咈蝻r 舝ror E蝌矧 Error
不知道是什么情況。我用的是開發(fā)板,上面的晶振是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)
{
/*******************設(shè)定串口**********************/
SCON = 0x50; //設(shè)置為工作方式1
TMOD = 0x20; //設(shè)置計數(shù)器工作方式2
PCON = 0x80; //波特率加倍
TH1 = 0xF9; //計數(shù)器初始值設(shè)置,注意波特率是9600的
TL1 = TH1;
SM0=0;//8位UART
SM1=1;
REN=1;//開始接收
ES = 1; //打開接收中斷
EA = 1; //打開總中斷
TR1 = 1; //打開計數(shù)器
/******************設(shè)定中斷**********************/
}
void main() //主函數(shù)
{
InitUART();
while(1){
if(Flag==1)
{
ES=0;
delayms(100);
//----------------------該段即對接收的數(shù)據(jù)進行處理
if(SenData=='a')
{
delayms(30);//延時去抖動
send_str();//發(fā)送數(shù)據(jù)
}
else
{
delayms(30);
send_str2();
}
i=0;
ES=1;
Flag=0;//數(shù)據(jù)處理完畢后將標志位置0,表示沒有新數(shù)據(jù)要處理
}else{
i=0;
}
}
}
void ser_int()interrupt 4//接收字符串
{
if(RI)//RI接受中斷標志
{
RI=0;//清除標志.
SenData=SBUF;
Flag =1;//標志位置1表示有新數(shù)據(jù)進來
}else //如果是發(fā)送中斷,將TI清0
TI = 0;
}
/*************************************
成功,返回
*************************************/
void send_str()//發(fā)送字串
{
while(str1[i]!='\0'&&i<7)
{
delayms(10);
SBUF=str1[i];
while(TI!=1);//等待數(shù)據(jù)傳送
TI=0;//清除數(shù)據(jù)傳輸標志
i++;//下一個字符串 led=1;
//delay(50000); //大約延時450ms
}
}
/*************************************
失敗,返回
*************************************/
void send_str2()//發(fā)送字串
{
while(str2[i]!='\0' && i<5 )
{
delayms(10);
SBUF=str2[i];
while(TI!=1);//等待數(shù)據(jù)傳送
TI=0;//清除數(shù)據(jù)傳輸標志
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--);
}
*************************************/
|