首先代码如下:
初始化
#include <STC15F2K60S2.H>
#define S2_S0 0x01 //P_SW2.0
void UART_Init() //9600bps @11.0592MHz
{
EA = 0;
P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
// P_SW2 |= S2_S0; //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)
S2CON = 0x50; //8位数据,可变波特率
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T
T2L = 0xE8; //设定定时初值
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2
IE2 =0x01; //开串口2中断 ES2=1
EA = 1;
}
当然还要定义几个全局数
#define S2RI 0x01 //S2CON.0
#define S2TI 0x02 //S2CON.1
#define S2RB8 0x04 //S2CON.2
#define S2TB8 0x08 //S2CON.3
这样就完成了初始化。
扩充:
详解:
一、选脚
P_SW2 &= ~S2_S0; //得P_SW2=0x00
P_SW2 |= S2_S0; //得P_SW2=0x00=1 (P4.6/RxD2_2, P4.7/TxD2_2)
二、波特率,工作方式设置:(用串口助手)
S2CON = 0x50; //8位数据,可变波特率(工作方式)
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T
T2L = 0xE8; //设定定时初值
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2
三、开启中断
IE2 =0x01; //开串口2中断 ES2=1
EA = 1;
其中优先级默认为低,不进行操作。
初始化就完成了。
接下来就是中断:
一、中断函数序号;
二、串口接收中断(发送中断可以不写)
最后就是发送数据的代码(接收数据处理自己看情况写)
一、发送一个字节:
void UART_SendByte(u8 dat)
{
IE2 =0x00;
S2CON&=~S2TI;
S2BUF=dat; //发送
while((S2CON&S2TI)==0); //等待发送完毕
S2CON&=~S2TI; //S2TI=0
IE2 =0x01;
}
二、发送一串字符串:
**
* @brief 实现发送指令,并换新行
* @param *cmd
* @retval
**/
void ESP8266_SendCmd(u8 *pbuf)
{
while(*pbuf!='\n') //遇到空格跳出循环
{
UART_SendByte(*pbuf);
delay_10us(5);
pbuf++;
}
delay_10us(5);
UART_SendByte('\n');//换行
}
个人觉得判断这个比较好,可以输出0x00