#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
#define led P2
sbit beep=P1^5;
sbit key=P3^2;
sbit oled=P2^2;
u8 recData[10];
u8 ok[10]="\r\nIt's ok!";
u8 cipmux[20]="AT+CIPMUX=1";
u8 cipserver[14]="AT+CIPSERVER=1";
void delay(u16 time){
u16 i,n;
for(i=0;i<time;i++){
for(n=0;n<120;n++);
}
}
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
TI=1;
}
void sendData(u8 dataArr[],u16 num){
u16 i=0;
for(i=0;i<num;i++){
SBUF=dataArr[i];
while(!TI);
}
}
void wifiInit(){
sendData(cipmux,11);
delay(500);
sendData(cipserver,14);
delay(500);
}
void main(){
u8 cNum,i=0;
UsartInit();
while(key);
delay(10);
if(key==0){
wifiInit(); //此行代码能正常发送数据
}
sendData(ok,10); //此行代码能正常发送数据
while(1){
for(i=0;i<10;i++){
while(!RI);
recData[i]=SBUF;
}
sendData(ok,9); //此行代码不能正常发送数据,原本应该发送的“It's ok,结果只发了个 I 之后就没反应了”
}
}
void Usart() interrupt 4
{
if(RI){
RI=0;
}
if(TI){
TI=0;
}
}
找到问题了,是sendData()函数里面的while(!TI),是TI产生了中断之后立马变为TI=0,而while(!TI)还没来得及判断就已经被置0了,所以永远等不到TI=1
for(i=0;i<10;i++){
while(!RI);
RI = 0;加上试试;
void Usart() interrupt 4
{
//if(RI){
//RI=0;
//}
//if(TI){
//TI=0;
//}
}追问
接收数据是没有问题的,是发送数据上面出了问题,不过你们都给了我解决问题的思路哈,谢谢啦
追答解决了就不采纳了?