STC 12C5A60S2串口2通信主要代码示例

用过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
      }
}


                                                                                                                                                                                                                                 《单片机开发笔记     飞应贤    2012-10-12》

你可能感兴趣的:(单片机)