STCF2K08S2的双串口配置
1、串口一与串口二的配置如下:
/************* 串口一初始化 **************/
void Uart1_Init()
{
u8 i;
SCON = 0x50; // 8位数据,可变波特率
TMOD = 0x00; // 设定定时器1为模式0
TL1 = BRT1; // 设定定时初值
TH1 = BRT1 >> 8; // 设定定时初值
TR1 = 1; // 启动定时器1
AUXR = 0x40; // 串口1选择定时器1为波特率发生器,定时器1时钟为Fosc,即1T
ES = 1; //中断使能
P_SW1 = P_SW1 & 0x3f; //锁定引脚
for(i=0; i<RX1_Length; i++)
RX1_Buffer[i] = 0;
TX1_Busy = 0;
TX1_read = 0;
RX1_write = 0;
}
/************* 串口二初始化 **************/
void Uart2_Init()
{
u8 i;
S2CON = 0x50; // 8位数据,可变波特率
AUXR |= 0x04; // 定时器2时钟为Fosc,即1T
T2L = BRT2; // 65536-12000000/9600/4 = FEC7H
T2H = BRT2 >> 8;; // 设定定时初值
AUXR |= 0x10; // 启动定时器2
IE2 |= 1; ; // 使能串口中断
P_SW2 &= ~1; //锁定引脚
for(i=0; i<RX2_Length; i++)
RX2_Buffer[i] = 0;
TX2_Busy = 0;
TX2_read = 0;
RX2_write = 0;
}
2、中断部分如下:
/************* 串口一发送函数 **************/
void Uart1_SendStr(u8 *puts)
{
for (; *puts != 0; puts++)
{
TX1_Busy = 1; //标志发送忙
SBUF = *puts; //发一个字节
while(TX1_Busy); //等待发送完成
}
}
/************* 串口二发送函数 **************/
void Uart2_SendStr(u8 *puts)
{
for (; *puts != 0; puts++)
{
TX2_Busy = 1; //标志发送忙
S2BUF = *puts; //发一个字节
while(TX2_Busy); //等待发送完成
}
}
3、点H文件:
///
//自定义部分
///
#define TI2 (S2CON & 2) // 判断TI2是否发送完成
#define RI2 (S2CON & 1) // 判断RI2是否接收完成
#define CLR_TI2() S2CON &= ~(1<<1) // 清除TI2 */
#define CLR_RI2() S2CON &= ~1 // 清除RI2
#define UART1_VECTOR 4 //串口1中断号
#define UART2_VECTOR 8 //串口2中断号