一、串口1的实现原理
a.查看STC15F2K60S2数据手册:
串口一在590页,此款单片机有两个串口。
串口1相关寄存器:
SCON:串行控制寄存器(可位寻址)
SCON寄存器说明:
需要PCON寄存器的SMOD0/PCON.6为0,使SM0和SM1一起指定工作模式,这里选择工作模式1,REN位置1,允许接受,
TI, R1 在中断里面 调用。
SCON=0X50; 0101 0000
PCON寄存器:
PCON寄存器说明:
SMOD无论0还是1,串口1波特率 都加倍,SMOD0必须为0,才可选择工作模式。所以PCON=0x00(默认也是0X00);
SBUF数据缓冲寄存器:
说明:实际上两个缓冲器,一个是度寄存器,一个是写寄存器。把要发送的数据写到SBUF里面,从SBUF立马接收数据,SBUF大小为1个字节。
AUXR辅助寄存器:
AUXR寄存器说明:控制串口1的速度都为1T,采用定时器1作为串口1的波特率发生器。
由于还用到了定时器1,所以还要 配置 定时器1的工作模式,工作模式为16位自动重装模式,设置定时器1初始值,禁止定时器1中断,开启定时器1.
//定时器1配置代码
{TMOD&=0X0F;TL1=0;TH1=0;ET1=0;TR1=1;
}
串口1中断配置:
说明:可知其中断标志位为ES,可以位寻址,所以可以直接给ES赋值,我们需要开启,ES=1;EA=1;
2 串口1初始化代码:
void Uart1_Init(void) //4800bps@12.000MHz
{SCON = 0x50; //8位数据,可变波特率AUXR |= 0x40; //定时器时钟1T模式AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TL1 = 0x8F; //设置定时初始值TH1 = 0xFD; //设置定时初始值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时//记得开启中断ES=1;EA=1;
}
串口中断函数:
可知 中断号为4
串口1中断代码:
void UART1_Routine(void) interrupt 4
{if(RI){//接受定长字符RI=0;rx_clear_cnt=0;rx_buf[rx_long++] = SBUF;if(rx_long==3){rx_long=0;rx_flag=1;}//接受不定长字符RI=0;rx_clear_cnt=0;rx_buf[rx_long++]=SBUF;if(rx_buf=='\n'){rx_long=0;rx_flag=1;}}if(TI){TI=0;busy=0;//发送忙标志位 }
}
串口1发送函数:
void SendByte(u8 byte)
{while(busy);busy=1;//申请忙碌,进入保护,防止干扰SBUF=byte;
}
void SendString(u8* str)
{while(*str){SendByte(*str++);}
}
定时清除串口接收内容:
void RXClear_Process(void){rx_clear_cnt++;if(rx_clear_cnt>=50){ rx_cleat_cnt=0;rx_long=0;memset(rx_buf,'\0',sizeof(rx_buf);}}
2025蓝桥杯(单片机)备赛--扩展外设之超声波测距原理与应用(十一)-CSDN博客
2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)_ds1302引脚图及功能-CSDN博客
2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--PCF8591(八)-CSDN博客
2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--AT24C02(七)-CSDN博客
2025蓝桥杯(单片机)备赛--扩展外设控制之DS18B20(六)-CSDN博客
2025蓝桥杯(单片机)备赛--基本外设控制之共阳数码管(四)-CSDN博客
2025蓝桥杯(单片机)备赛--基本外设控制之继电器和蜂鸣器(三)-CSDN博客
2025蓝桥杯(单片机)备赛--基本外设控制之LED(二)_2024蓝桥杯单片机资料-CSDN博客
2025蓝桥杯(单片机)备赛--基本框架搭建(一)_蓝桥杯单片机大赛-CSDN博客