Hex模式:底层传输的实际数据
文本模式:把数据进行编码,显示ASCII码char字符,带括号的是控制字符,无法显示出来
代码
UART.c
#include <REGX52.H>
/**
* @brief 串口初始化
* @param 无
* @retval 无
*/
void UART_Init()//UART串口用的T1定时器,模式是8位自动重装载,//4800bps@12.000MHz
{
SCON=0x50; //REN置1,允许单片机接收
PCON|= 0x80; //使能波特率倍速位SMOD
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA=1; //开启使能中断
ES=1;
}
/**
* @brief 串口发送一个字节数据
* @param Byte 要发送的一个字节数据
* @retval 无
*/
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);//这里是在等数据发送完,当数据发送完TI由硬件置1就会跳出循环
TI=0; //此时再由软件置0
}
/*串口中断函数模板,一般放在main.c中
void UART_Routine() interrupt 4 //名字随便起,但中断函数号跟在哪个函数后边就是中断服务函数
{
if(RI==1)
{
P2=~SBUF;
UART_SendByte(SBUF);
RI=0;
}
}
*/
main.c
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
void main()
{
UART_Init();
// UART_SendByte('B');//实际等于UART_SendByte(0x42)
while(1)
{
}
}
void UART_Routine() interrupt 4 //名字随便起,但中断函数号跟在哪个函数后边就是中断服务函数
{
if(RI==1)//接收完成中断标志位RI
{
P2=~SBUF;
UART_SendByte(SBUF);
RI=0;
}
}