|
想利用 串口1 向 ESP8266-12F 發(fā)送AT指令連接上阿里云平臺,并且通過串口2轉(zhuǎn)發(fā)串口1接收到的數(shù)據(jù),來查看是否正常工作。 此前已經(jīng)配置好WIFI信息,會自動連接。 用串口調(diào)試助手向WIFI模塊發(fā)送則正常連上平臺。
但現(xiàn)在發(fā)現(xiàn)AT指令只能發(fā)送前兩條,后面的無反應(yīng)。
J3B27~9{{{XXILI1{~2CI`Y.png (7.32 KB, 下載次數(shù): 18)
下載附件
串口1正常發(fā)送
2022-4-5 16:02 上傳
51hei圖片20220405152124.png (8.52 KB, 下載次數(shù): 25)
下載附件
串口2接收顯示只有前兩條
2022-4-5 16:03 上傳
51hei圖片20220405152537.png (12.02 KB, 下載次數(shù): 20)
下載附件
調(diào)換也如此
2022-4-5 16:04 上傳
附上代碼:
#include<stc12c5a60s2.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define S2RI 0x01 //串口2接收中斷中斷請求標(biāo)志位
#define S2TI 0x02 //串口2發(fā)送中斷請求標(biāo)志位
uchar uart1Receive[500]; //串口1的接收數(shù)據(jù)
uchar uart2Receive[500]; //串口2的接收數(shù)據(jù)
uint point1;
uchar temp1;
uint point2;
uchar temp2;
// AT指令
code uchar AT_RST[] = "AT+RST\r\n";
code uchar AT_CWMODE[] = "AT+CWMODE=1\r\n";
code uchar AT_CIPSNTPCFG[] = "AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n";
code uchar AT_MQTTUSERCFG[] = "AT+MQTTUSERCFG=0,1,\"NULL\",\xxxxxxxxx(此處為用戶名)\",\xxxxxxxxxx(此處密碼)\",0,0,\"\"\r\n";
void delay_ms(uint x)
{ uint j;
for(;x>0;x--)
for(j=125;j>0;j--);
}
void uart_init() //串口初始化
{ //fosc=11.059MHZ
SCON = 0x50; //串口方式1
TMOD = 0x20; //T1采用定時(shí)方式2 8-bite 自動重裝
TH1 = TL1 = 0xfd;//9600b/s
PCON = 0; //波特率不加倍
TR1=1; //開啟定時(shí)器T1
EA=1; //打開總中斷
ES=1; //打開串口1中斷
//串口2只能采用獨(dú)立波特率發(fā)生器
S2CON = 0x50; //串口2工作在方式1
BRT = 0xfd; //獨(dú)立波特率發(fā)生器初值
AUXR = 0x10; //BRTR=1 獨(dú)立波特率發(fā)生器開始計(jì)數(shù)
//IE2 = 0x01; //開串口2中斷 ES2=1 接收中斷暫時(shí)不用
}
//串口1 發(fā)送 1byte 數(shù)據(jù)
void uart1_send_byte(uchar byte)
{
SBUF = byte;
while(TI==0); //等待發(fā)送完成
TI=0; //清TI標(biāo)志位
}
//串口1 發(fā)送 字符串
void uart1_send_string(uchar *str)
{
while(*str!='\0')
{
uart1_send_byte(*str);
str++;
}
}
//串口2 發(fā)送 1byte 數(shù)據(jù)
void uart2_send_byte(uchar byte)
{
S2BUF = byte;
while(!(S2CON&S2TI)); //等待發(fā)送完成 等待S2TI=1
S2CON&=~S2TI; //清S2TI標(biāo)志位 令S2TI=0
}
//串口2 發(fā)送 字符串
void uart2_send_string(uchar *str)
{
while(*str!='\0')
{
uart2_send_byte(*str);
str++;
}
}
//串口1中斷函數(shù)
void uart1_Interrupt() interrupt 4
{
if(RI==1)
{
RI=0;
temp1=SBUF;
uart1Receive[point1++]=temp1;
if(temp1=='\0')
{
point1=0;
}
if(point1==500)
{
point1=0;
}
}
}
//串口2中斷函數(shù) 串口2做轉(zhuǎn)發(fā),接收暫時(shí)不啟動
/*void UART_2Interrupt() interrupt 8
{
EA=0; //關(guān)閉總中斷
if(S2CON&S2RI)
{
S2CON&=~S2RI;
temp2=S2BUF;
uart2Receive[point2++]=temp2;
if(temp2=='\0')
{
point2=0;
}
if(point2>=500)
{
point2=0;
}
}
EA=1; //打開總中斷
}*/
//串口2轉(zhuǎn)發(fā)串口1接收的數(shù)據(jù)
void uart1_to_uart2Send()
{ uint i;
uart2_send_string(uart1Receive); // uart1Receive[500];
for(i=0;i<=500;i++)
{
uart1Receive[ i]=0;
}
}
void wifi_init()
{
uart1_send_string(AT_CWMODE);
uart1_to_uart2Send();
delay_ms(500);
uart1_send_string(AT_CIPSNTPCFG);
uart1_to_uart2Send();
delay_ms(500);
uart1_send_string("AT\r\n");
delay_ms(100);
uart1_to_uart2Send();
delay_ms(500);
//uart1_send_string(AT_MQTTUSERCFG);
//delay_ms(100);
//uart1_to_uart2Send();
//delay_ms(500);
}
void main()
{ uint i;
point1=0;
point2=0;
uart_init(); //進(jìn)行串口初始化
delay_ms(100);
uart2_send_string("Uart Init!\r\n");
delay_ms(500);
for(i=0;i<=500;i++) //清空串口1的接收
{
uart1Receive[ i]=0;
}
wifi_init();
while(1);
} |
|