自己编写STC15F2K60S2函数之串口2通信初始化

2025-11-16 19:25:39

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  

    }

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢