自己编写STC15F2K60S2函数之串口2通信初始化
1、#include <STC15F2K60S2.H>
2、/*****
函数名:串行口2初始化
调用:Serial2Ini();
参数:无
备注:串行口2只有8位可变波特率和9位可变波特率2种方式,而且只能使用定时器2作为波特率发生器,而定时/计数器2只有一种工作方式——16位自动重装方式。
*****/
void Serial2Ini(){
S2CON = 0x10; //S2SM0 | 空 | S2SM2 | S2REN | S2TB8 | S2RB8 | S2TI | S2RI(方式0即8位可变波特率方式;允许接收)
T2L = 0xE8; //此时,波特率=定时器2的溢出率/4
T2H = 0xFF; //通过T2L和T2H的值设置波特率为9600
AUXR &= 0xE3; //先对需要设置的位进行清零 1110 0011
AUXR |= 0x10; //T0x12 | T1x12 | UART_M0x6 | T2R | T2_C/T(T上画) | T2x12 | EXTRAM | S1ST2 启动定时器2,即T2R=1;12T
IE2 &= 0xFE; //先对需要设置的位进行清零 1111 1110
IE2 |= 0x01; //- - - - - - - | ESPI | ES2 允许UART2中断
EA = 1; //允许总中断
}
3、void main(void)
{
Serial2Ini(); //运行串口2初始化函数
while(1){
} //等待中断()
}
4、oid Uart2(void) interrupt 8 using 2
{
unsigned char mydata;
if(S2CON & 0x01) //如果是接收中断
{
S2CON &= 0xFE; //接收中断标志位清0
mydata = S2BUF; //将接收缓冲区的数据保存到mydata变量中
S2BUF = ~mydata; //将接收到的数据按位取反后发回
}
if(S2CON & 0x02) //如果是发送中断
{
S2CON &= 0xFD; //发送中断标志清0
}
}