Loading

ESP8266和51单片机的串口通讯

ESP8266和51单片机的串口通讯

运行环境:

操作系统:windows10 x64

IDE:Arduino1.8.15、Keil uVision4

实验板:普中51-单核-A2开发板、ESP8266开发板

仿真器:setup_x64_2.8.exe

实验目的:通过ESP8266的FLASH按键控制51单片机的D1的亮灭

一、串口通讯#

串口通信工作原理请参考...

二、ESP8266和51单片机的接线#

ESP8266 51单片机 备注
RX(即GPIO3 RXD0) P31(即P3.1 TXD)
TX(即GPIO1 TXD0) P30(即P3.0 RXD)

51单片机GPIO原理图

ESP8266GPIO原理图

三、51单片机串口通讯#

51单片机串口通讯代码

/*-----------------------------------------------------------------------------
* 实验说明     : 单片机串口接收数据控制灯亮灭
* 连接方式     : 
* 注    意     : 该试验使用的晶振是11.0592
*******************************************************************************/

#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

uchar PuZh[20] = "This is ok";

//--定义使用的IO--//
sbit LED=P2^0;

void Delay_1ms(uint i)//1ms延时
{
  	uchar x,j;
  	for(j=0;j<i;j++)
    	for(x=0;x<=148;x++);
}

void Com_Int(void) interrupt 4
{
	uchar i;
  	uchar receive_data;
  	EA = 0;
  	if(RI == 1) //当硬件接收到一个数据时,RI会置位
	{ 		
		RI = 0;
		receive_data = SBUF;//接收到的数据
		if(receive_data == '1')	 
		{
			LED =0;//接收到字符'1'亮灯
		}
		else
		{
			LED =1; //其他情况灯灭
		}
		
	}
	for(i=0; i<20; i++)
	{
		SBUF = PuZh[i];   //将要发送的数据放入到发送寄存器
		while(!TI);       //等待发送数据完成
		TI=0;		  //清除发送完成标志位
		Delay_1ms(1);
	}
	EA = 1;
}

void UsartConfiguration()
{	
	SCON=0X50;			//设置为工作方式1,8位数据,可变波特率
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X00;			//波特率不加倍
	TH1=0XFd;		    //计数器初始值设置,9600@11.0592MHz
	TL1=0XFd;
	TR1=1;			    //打开计数器
	ES = 1;             //开串口中断
  	EA = 1;             //开总中断
}
	
void main()
{

	UsartConfiguration();//初始化串口
	while(1);	
}

在Keil uVision4中编译后得到.hex文件,利用烧写工具将其烧录到51单片机

四、ESP8266串口通讯#

ESP8266串口通讯代码

#define buttonPin D3     // 按钮引脚D3


int count = 0;

// the setup function runs once when you press reset or power the board
void setup() 
{
  Serial.begin(9600);   // 启动串口通讯
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);// 熄灭LED
}

// the loop function runs over and over again forever
void loop() 
{
  if(!digitalRead(buttonPin))//检测到按键引脚状态:按下
  {
      //检测到按键按下后,LED灯点亮0.5作为提示
      digitalWrite(LED_BUILTIN, LOW);// 点亮LED
      delay(500);
      digitalWrite(LED_BUILTIN, HIGH);// 熄灭LED
      count++;
      if(0 == count % 2)
      {
           Serial.print("1");
      }
      else
      {
           Serial.print("0");
      }
  }
}

在Arduino中编译、烧写烧写代码到ESP8266

五、实验结果#

操作过程:按下ESP8266的FLASH按键后立马松开,查看情况;再一次按下按键,查看情况

(注意:给ESP8266和51单片机供电,连接ESP8266和51单片机串行接口连线)

实物演示结果:

Auduino中串口监控情况

由实验结果可知,符合实验目的的预期结果,实验成功

作者:caojun97

出处:https://www.cnblogs.com/caojun97/p/16841634.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   eiSouthBoy  阅读(1780)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu