Use UART at STC15W204S
STC15W204S 串口 例子

由于STC15W204S没有定时器1,所以要将示例代码中的定时器1改为定时器2才能正常工作。

#include "STC15.h"
#include "intrins.h"
 
#define FOSC 11059200L          //系统频率
#define BAUD 115200             //串口波特率
#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7

bit busy;
 
void SendData(unsigned char dat);
void SendString(char *s);
 
void main()
{
    P3M0 = 0x00;
    P3M1 = 0x00;

    ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
    P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)

    SCON = 0x50;                //8位可变波特率
    AUXR |= 0x01;        //串口1选择定时器2为波特率发生器
    AUXR |= 0x04;        //定时器2时钟为Fosc,即1T
    T2L = 0xE8;        //设定定时初值
    T2H = 0xFF;        //设定定时初值
    AUXR |= 0x10;        //启动定时器2
    ES = 1;                      //使能串口中断
    EA = 1;

    SendString("STC15W204S\r\nUart Test !\r\n");
    while(1);
}

void Uart() interrupt 4
{
    if (RI)
    {
        RI = 0;                 //清除RI位
        P0 = SBUF;              //P0显示串口数据
        P22 = RB8;              //P2.2显示校验位
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
        busy = 0;               //清忙标志
    }
}

void SendData(unsigned char dat)
{
    while (busy);               //等待前面的数据发送完成
    ACC = dat;                  //获取校验位P (PSW.0)
    busy = 1;
    SBUF = ACC;                 //写数据到UART数据寄存器
}

void SendString(char *s)
{
    while (*s)                  //检测字符串结束标志
    {
        SendData(*s++);         //发送当前字符
    }
}

测试:

Connecting to COM3...
Connected.

STC15W204S
Uart Test !

Connection closed.

最后修改于 Sun, 27 Oct 2019