在天问block环境下LU-ASR01的软串口与51单片机的简单使用——完成串口通信接收和发送

目录

序言:

一、代码

1、天问block图形编码

 2、51单片机代码

二、问题总结

三、参考博主



序言:

书接上回!在在天问block环境下LU-ASR01与51单片机的基础运用_愈愉的博客-CSDN博客中使用硬件TX口向单片机进行发送消息,但在IO口介绍中并没有硬件RX口,所以LU-ASR01不能通过硬件RX口进行接收数据。那么这篇文章就是要解决51单片机向LU-ASR01发送数据,LU-ASR01能够接收数据。

一、代码

1、天问block图形编码

在天问block环境下LU-ASR01的软串口与51单片机的简单使用——完成串口通信接收和发送_第1张图片

在天问block环境下LU-ASR01的软串口与51单片机的简单使用——完成串口通信接收和发送_第2张图片

在天问block环境下LU-ASR01的软串口与51单片机的简单使用——完成串口通信接收和发送_第3张图片

 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单片机波特率要一致;

三、参考博主

A博主

你可能感兴趣的:(基于51单片机的智能风扇,51单片机,嵌入式硬件,单片机)