STC15 串口通信

串口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++);         //发送当前字符
    }
}


posted @ 2020-03-01 14:32  D·Kingson.Mo  阅读(1083)  评论(0编辑  收藏  举报