STC8C2K32SS2 芯片,初始化串口2和串口3失败
我使用STC8C2K32SS2芯片,串口1初始正常使用,项目使用两个串口,我想初始化串口2,但是不能使用。我想问一下如何使用中断方式串口2,串口2初始化定时器2波特率9600 rkrsnsyy 发表于 2026-1-28 10:26
定时器2波特率9600
定时器2波特率9600
STC8C2K32SS2 芯片如何中断方式串口2初始化
我使用STC8C2K32SS2芯片,串口1初始正常使用,项目使用两个串口,我想初始化串口2,但是不能使用。我想问一下如何使用中断方式串口2,串口2初始化void Uart2Isr() interrupt 8
{
if (S2CON & 0x02)
{
S2CON &= ~0x02;
busy = 0;
}
if (S2CON & 0x01)
{
S2CON &= ~0x01;
buffer = S2BUF;
P54 = !P54;
wptr &= 0x0f;
}
}
void Uart2Init()
{
S2CON = 0x50; // 8位数据,可变波特率
AUXR |= 0x04; // 定时器2时钟为Fosc,即1T
T2L = 0xE0; // 9600波特率
T2H = 0xFE; //9600
AUXR |= 0x10; // 启动定时器2
IE2 = ES2; // 使能串口中断
EA = 1; // 开总中断
}
void Uart2Send(char dat)
{
while (busy);
busy = 1;
S2BUF = dat;
}
void Uart2SendStr(char *p)
{
while (*p)
{
Uart2Send(*p++);
}
} 串口2固定使用定时器2做波特率发生器
可以使用ISP软件的串口波特率计算功能
除生成的代码外,初始化还需要P_SW2|=0x80和EA=1
void Uart2_Isr(void) interrupt 8
{
if (S2CON & 0x02) //检测串口2发送中断
{
S2CON &= ~0x02; //清除串口2发送中断请求位
}
if (S2CON & 0x01) //检测串口2接收中断
{
S2CON &= ~0x01; //清除串口2接收中断请求位
}
}
void Uart2_Init(void) //9600bps@11.0592MHz
{
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xE0; //设置定时初始值
T2H = 0xFE; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x01; //使能串口2中断
}
P_SW2|=0x80和EA=1增加了这两个之后接受数据书正确的,但是不能发送数据 是不是P11脚是不是设置为准双口
页:
[1]