B站视频 - 串口接收
51单片机接收电脑端发送的一个字符,或一个字符串;
看来电脑端是遵守协议的
换作你是单片机,如何接收这串数据;
串口初始化:
/**
* @brief UART initialization
* @note 8N1, 115200
*/
void UART_Init(void)
{
ES = 0; // 禁止串口中断;
ET1 = 0; // 禁止定时器1中断
RI = 0; // 清零接收中断请求标志
/* UART Config */
SCON = 0x50; // 串口工作模式:8位数据位, 0101 0000
PCON |= 0x80; // 串口波特率加倍;1000 0000
/* Tim1 Config */
TMOD &= 0x0F;
TMOD |= 0x20; // 定时器1工作模式2:8位自动重装载
TH1 = 0x100 - (SYS_CLK / 12 * 2 / 32 / 115200);
TL1 = TH1; // 定时器1初始值
TR1 = 1; // 启动定时器1
ES = 1;
EA = 1;
}
发送一个字符:
/**
* @brief printf() call this function
*/
char putchar (char c)
{
/*----- '\n'处理 --------*/
if (c == '\n') {
ES = 0;
SBUF = '\r'; // windows中换行 \r + \n;
while(!TI); // 因为串口速度较慢,等待发送完成
TI = 0; // 清除发送标志
ES = 1; // 发送完毕,开启串口中断,以响应串口接收
}
/*----- 字符处理 --------*/
ES = 0;
SBUF = c;
while (!TI) {
/* Nothing */ ;
}
TI = 0;
ES = 1;
return 1;
}
接收中断服务函数:
/**
* @brief This function handles UART interrupt
*/
void UART_Handler(void) interrupt 4
{
RI = 0;
P0 = SBUF;
UART_Putchar(SBUF); // 接收的数据回发,回去;
}
1> 51单片机内部,有串口的硬件模块,大概明白工作原来后,重点放在应用上;
2> 实验过程中,用示波器,或逻辑分析仪观察波形,更有feeling;