相关寄存器
SCON:串口控制寄存器(可位寻址)
串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下:
SM0、SM1:
SM2:允许方式2或方式3多机通信控制位;
REN:允许/禁止穿行接收控制位。
○ 由软件置位REN,REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息;
○ 软件复位REN,即REN=0,则禁止接收;
TB8:在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0;
RB8:在方式2或方式3,是接收到的第9位数据;
TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位;
RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1(例外情况见SM2说明),必须由软件复位,即RI=0。
PCON:电源控制寄存器
SMOD:波特率选择位。
○ 当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;
○ SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。
SMOD0:帧错误检测有效控制位。
○ 当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能;
○ 当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行口的工作方式。复位时SMOD0=0
printf重定向
因为在单片机中,printf函数是放在stdio文件中的,需要引用stdio文件;然后printf函数也是需要挨个字节输出的,而输出单字节底层是用的putchar函数,所以就需要将原有putchar函数内部改成串口输出单字节去。
char putchar(char c)//重定向
{
uart_send_byte(c);
return c;
}
代码
uart.c
#