stc8a8k64d4串口1和串口2同时工作的代码
时间: 2023-12-31 07:06:58 浏览: 93
以下是 STC8A8K64D4 单片机串口1和串口2同时工作的代码:
```c
#include <STC8.H>
#define FOSC 24000000UL //系统频率
#define BAUD 9600 //串口波特率
void InitUART1() //初始化串口1
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即12MHz
TMOD &= 0x0F; //设定定时器1为16位自动重载模式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void InitUART2() //初始化串口2
{
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //定时器2时钟为Fosc,即24MHz
T2L = 0xFD; //设定定时初值
T2H = 0xFD; //设定定时初值
IE2 |= 0x08; //使能串口2中断
}
void SendData1(unsigned char dat) //串口1发送数据
{
SBUF = dat;
while (!TI);
TI = 0;
}
void SendData2(unsigned char dat) //串口2发送数据
{
S2BUF = dat;
while (!S2TI);
S2TI = 0;
}
void main()
{
InitUART1(); //初始化串口1
InitUART2(); //初始化串口2
while (1)
{
SendData1('A'); //串口1发送字符A
SendData2('B'); //串口2发送字符B
}
}
void UART2() interrupt 8 using 1 //串口2中断服务函数
{
if (S2CON & 0x01)
{
S2CON &= ~0x01; //清除RI2标志位
P0 = S2BUF; //将接收到的数据输出到P0口
}
}
```
以上代码中,串口1使用定时器1作为波特率发生器,串口2使用定时器2作为波特率发生器。同时在串口2接收到数据时,会触发串口2中断服务函数,将接收到的数据输出到 P0 口。
阅读全文