/********************************************************
函数功能 : 串口初始化
入口参数 : 波特率 Baud
返 回 值 :
说 明 : 查看有文件是否宏定义串口来决策是否初始化该串口
********************************************************/
void UART_Init(unsigned int Baud) //9600bps@11.0592MHz
{
//串口1
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
//串口2
AUXR &= 0xF7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
//公用部分
AUXR = 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 256-(FOSC/32)/Baud; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
IE2 = 0x01; //使能串口2中断
ES = 1; //使能串口1中断
TI = 0;
EA = 1; //开总中断
}
/********************************************************
函数功能 : 串口1发送数据
入口参数 : dat-一个字节
返 回 值 :
说 明 :
********************************************************/
void Uart1_Send(unsigned char dat)
{
SBUF = dat;
while(TI == 0 );
TI = 0;
}
void UART_Str(unsigned char *s)
{
while(*s)
{
Uart1_Send(*s);
s++;
}
}
/********************************************************
函数功能 : 串口1中断入口函数
入口参数 : 无
返 回 值 : 无
说 明 :
********************************************************/
void Uart1() interrupt 4
{
unsigned char res=0 ;
if(RI)
{
RI=0 ;
}
}
bit busy;
void Uart2_Send(u8 dat)
{
while (busy); //Wait for the completion of the previous data is sent
ACC = dat; //Calculate the even parity bit P (PSW.0)
busy = 1;
S2BUF = ACC; //Send data to UART2 buffer
}
/********************************************************
函数功能 : 串口2中断入口函数
入口参数 : 无
返 回 值 : 无
说 明 :
********************************************************/
void Uart2() interrupt 8
{
if (S2CON & S2RI)
{
S2CON &= ~S2RI; //清除串口2标志位
}
//清除接收标志位
if (S2CON & S2TI)
{
S2CON &= ~S2TI; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}
STC12C5A60S2 双串口
最新推荐文章于 2023-07-25 10:58:34 发布