首先hex模式是十六进制模式,当我们用电脑以hex模式给单片机USART口发数据时,发的是十六进制,单片机接收的也是十六进制;
当我们用电脑以文本模式给单片机发数据时,只能发字母(0-9,a-z,A-Z等其他符号),单片机收到的也是字母!
总结:不论你发的是什么,单片机收到的都是ASCII码
注意:蓝牙模块或者WiFi模块和单片机通信也是一样的。
下面有一篇C51的的程序,大家可以试试!
# include <reg52.h>
sbit LED = P2^0;
# define fosc 12000000UL // 使用12MHz晶体
# define bote 9600UL // 波特率为9600
/**************************************************************
* 串口通信初始化子函数
* T1工作在方式2,波特率9600,开串口中断
****************************************************************/
void UART_init()
{
SCON = 0x50; //串口工作在模式1 0101 0000
PCON |= 0x80; //波特率加倍 1000 0000
TMOD = 0x20; // 定时器1工作在模式2,自动装载模式
TL1 = 256-(fosc)/(16*12*bote); //定时器装的值
TH1 = 256-(fosc)/(16*12*bote);
TR1 = 1; // 启动定时器
ES = 1; // 启动串口中断
EA = 1; // 开总中断
}
void main()
{
UART_init(); // 串口初始化
while(1); // 程序原地踏步
}
void interrupt_UART () interrupt 4
{
unsigned int dat; // 用来储存接受的数据
if (RI) // 判断是否接受完数据
{
RI = 0; //清除中断
dat = SBUF;
//dat = dat-0x30;
if (dat == 0x01) //判断
{
LED = 0;
}
else
if(dat == 0x00)
{
LED = 1;
}
}
}