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