|
本想要通過(guò)串口2給 ESP8266-12F 發(fā)送AT+RST指令,使其模塊復(fù)位,但是發(fā)送后發(fā)現(xiàn)程序也跟著復(fù)位,重復(fù)執(zhí)行。單片機(jī)程序如下:
#include<stc12c5a60s2.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define S2RI 0x01 //串口2接收中斷中斷請(qǐng)求標(biāo)志位
#define S2TI 0x02 //串口2發(fā)送中斷請(qǐng)求標(biāo)志位
uchar uart1Receive[100]; //串口1的接收數(shù)據(jù)
uchar uart2Receive[100]; //串口2的接收數(shù)據(jù)
//延時(shí)函數(shù)
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
TH1 = TL1 = 0xfd;//9600b/s
PCON = 0; //波特率不加倍
TR1=1; //開(kāi)啟定時(shí)器T1
//串口2只能采用獨(dú)立波特率發(fā)生器 ESP8266波特率設(shè)為9600
S2CON = 0x50; //串口2工作在方式1
BRT = 0xfd; //獨(dú)立波特率發(fā)生器初值
AUXR = 0x10; //BRTR=1 獨(dú)立波特率發(fā)生器開(kāi)始計(jì)數(shù)
}
//串口1 發(fā)送 byte
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++;
}
}
void main()
{
uart_init();
delay_ms(100);
uart1_send_string("Uart Init!\r\n");
delay_ms(500);
uart2_send_string("AT+RST\r\n");
delay_ms(500);
uart1_send_string("ESP RST!\r\n");
while(1);
}
|
|