目录
序言:
书接上回!在在天问block环境下LU-ASR01与51单片机的基础运用_愈愉的博客-CSDN博客中使用硬件TX口向单片机进行发送消息,但在IO口介绍中并没有硬件RX口,所以LU-ASR01不能通过硬件RX口进行接收数据。那么这篇文章就是要解决51单片机向LU-ASR01发送数据,LU-ASR01能够接收数据。
一、代码
1、天问block图形编码
2、51单片机代码
#include "reg52.h" typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; sbit LED1 = P2^0; // LED1配置 sbit LED2 = P2^1; // LED2配置 /******************************************************************************* * 函 数 名 : delay_1ms * 函数功能 : 精确延时1ms * 输 入 : u16 y * 输 出 : 无 *******************************************************************************/ void delay_1ms(u16 y) { u16 x; for(;y>0;y--) { for(x=110;x>0;x--); } } /******************************************************************************* * 函 数 名 : uart_init * 函数功能 : 串口通信中断配置函数,通过设置TH和TL即可确定定时时间 * 输 入 : baud:波特率对应的TH、TL装载值 * 输 出 : 无 *******************************************************************************/ void uart_init(u8 baud) { TMOD|=0X20; //设置计数器工作方式2 SCON=0X50; //设置为工作方式1 PCON=0X80; //波特率加倍 TH1=baud; //计数器初始值设置 TL1=baud; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { uart_init(0XFA);//波特率为9600 while(1) { } } void uart() interrupt 4 //串口通信中断函数 { u8 rec_data; u8 i; RI = 0; //清除接收中断标志位 rec_data=SBUF; //存储接收到的数据 if(rec_data == 0x20) // 两灯闪烁,表示LU-ASR01开启 { for(i=0;i++;i<3) { LED1 = 0; delay_1ms(500); LED1 = ~LED1; LED2 = 0; delay_1ms(500); LED2 = ~LED2; } LED1 = 1; // 灭灯 LED2 = 1; } else if(rec_data == 0x21) { LED1 = 0; LED2 = 0; } else if(rec_data == 0x22) { LED1 = 1; LED2 = 1; } SBUF=rec_data; //将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 }
二、问题总结
1、LU-ASR01的P6口连接51单片机的P3.1口,P5口连接51单片机P3.0口;
2、LU-ASR01与51单片机波特率要一致;