串口1选择定时器2产生波特率
串口1相关寄存器
1.选择串口1所放的管脚
2.串口1配置步骤
3.选择串口工作模式
4.确定定时器2工作速度
代码配置
void Uart1_Tim2_Config(int Baud)
{
//P3.6, P3.7准双向模式
P3M0 &= ~(0x03<<6);
P3M1 &= ~(0x03<<6);
//S1_S0=1 S1_S1=0 RxD_2,TxD_2
ACC = P_SW1;
ACC = ACC&0x3F|(0x01<<6);
P_SW1 = ACC;
//方式1,并允许串口接收中断
SCON = 0x50;
//设置波特率
T2L = (65536 - FOSC/4/Baud);
T2H = (65536 - FOSC/4/Baud) >> 8;
AUXR = 0x15; //T2为1T模式, 选择定时器2作为波特率发生器并启动
ES = 1; //使能串口1中断
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
Uart_Recv_Buf[Uart_Recv_Cnt] = SBUF; //P0显示串口数据
if(Uart_Recv_Buf[Uart_Recv_Cnt++] == '\n')
{
Uart_Recv_Flag = 1;
Uart_Recv_Cnt = 0;
}
}
if (TI)
{
TI = 0; //清除TI位
Uart_Busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
{
while (Uart_Busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
Uart_Busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}