用过stc12C5A60S2单片机的朋友都知道,该单片机有两个串口可用,看到官网的程序注释的也是比较多,所以自己写了个串口2使用的程序,由于代码相对简单,所以这里只罗列出了串口2的的初始化、发送和接收函数供大家参考。
程序包含了STC12C5A60S2.H的头文件,这个网上都有,大家懂的。
这个是初始化的函数,可以添加到程序中调用就可以了。这里是用了独立波特率发生器产生4800的波特率,晶振是24M,这个是用STC波特率计算机生成后添加了后面红字部分,大家如果用其他晶振或者波特率可以下个重新生成然后修改即可。
void uart_2_Init(void)//4800bps@24MHz
{
AUXR &= 0xf7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
BRT = 0x64; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x10; //启动独立波特率发生器
IE2 = 0x01;
EA = 1;
}
下面就是发送程序代码,不多说了,和串口1使用其实差不多,大家可以看看
/**
* This is the send data methond of serial port two.
*/
void uartSendByte_2(unsigned char recTemp)
{
unsigned char temp=0;
IE2 = 0X00;
S2CON = S2CON&0XFD; //Clear TI flag
S2BUF =recTemp;
do{
temp = S2CON;
temp = temp&0x02;
}while(temp == 0); //Send data until temp`s value is true;
S2CON=S2CON&0XFD; //Clear TI flag after send is over..
IE2=0X01; //Enable uart 2 interrupt.
}
好了,最后一部分就是接收中断了,串口2使用的中断号是8,程序大家看下述代码,如果要获取接收到的数据只需要读取S2BUF就可以了,例如将接收到的数据存到变量c中只需在定义c,然后在红字部分添加c = S2BUF;代码即可。其他其实也和串口1差不多,亲,你懂的。
/**
*This is the receive data methond of serial port two.
*/
void uartReceive_2(void) interrupt 8
{
unsigned char _RI2 = 0;
_RI2 = S2CON;
_RI2 = _RI2&0X01;
if(_RI2) {
S2CON = S2CON&0XFE;
//Add code here!
}
else {
S2CON=S2CON&0XFD; //S2TI=0
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』