51单片机应用开发(进阶)---串口应用(51单片机双机通信)

实现目标

1、巩固串口收发;

2、具体实现目标:(1)单片机A按下K1发送0x55给单片机B,单片机B收到后,点亮LED1;单片机B按下K2发送0x66给单片机A,单片机A收到后,点亮LED2.


一、硬件连接

二、程序设计

2.1 单片机A程序

cpp 复制代码
#include <REGX52.H>
 
#define FOSC 11059200L      //System frequency
#define BAUD 9600           //UART baudrate
 
sbit LED1 = P2^0;
sbit K1   = P1^0;
 
int num;

void Uart_send(unsigned char dat);
void Uart_send_str(unsigned char *p);
void Delay500ms();
 
void  main()
{
    PCON &= 0x7F;		    //波特率不倍速
    SCON = 0x50;            //8-bit variable UART
    TMOD = 0x20;//0010 0000 //Set Timer1 as 8-bit auto reload mode
    TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
    TR1 = 1;                //Timer1 start run
    ES = 1;                 //Enable UART interrupt
    EA = 1;                 //Open master interrupt switch
    while(1)
	{
		if(K1 ==0)
		{
		   while(!K1);
		   Uart_send(0x55);
		}
		if(num == 0x66)
		{
            LED1 = 0;
		}		
		
	}
}
void Uart_send(unsigned char dat)
{
     SBUF = dat;
	 while(!TI);
	 TI = 0;
}
 
void Uart_send_str(unsigned char *p)
{
    while(*p!='\0')
    {
       Uart_send(*p);	
       p++;	
    }
}
 
void Uart_Isr() interrupt 4 
{
    if (RI == 1)
    {
        RI = 0;             //Clear receive interrupt flag    
        num = SBUF;          //
    }
}
 
void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
 

2.2 单片机B程序

cpp 复制代码
#include <REGX52.H>
 
#define FOSC 11059200L      //System frequency
#define BAUD 9600           //UART baudrate
 
sbit LED2 = P2^0;
sbit K2   = P1^0;
 
int num;

void Uart_send(unsigned char dat);
void Uart_send_str(unsigned char *p);
void Delay500ms();
 
void  main()
{
    PCON &= 0x7F;		    //波特率不倍速
    SCON = 0x50;            //8-bit variable UART
    TMOD = 0x20;//0010 0000 //Set Timer1 as 8-bit auto reload mode
    TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
    TR1 = 1;                //Timer1 start run
    ES = 1;                 //Enable UART interrupt
    EA = 1;                 //Open master interrupt switch
    while(1)
	{
		if(K2 ==0)
		{
		   while(!K2);
		   Uart_send(0x66);
		}
		if(num == 0x55)
		{
            LED2 = 0;
		}		
		
	}
}
void Uart_send(unsigned char dat)
{
     SBUF = dat;
	 while(!TI);
	 TI = 0;
}
 
void Uart_send_str(unsigned char *p)
{
    while(*p!='\0')
    {
       Uart_send(*p);	
       p++;	
    }
}
 
void Uart_Isr() interrupt 4 
{
    if (RI == 1)
    {
        RI = 0;             //Clear receive interrupt flag    
        num = SBUF;          //
    }
}
 
void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
 

三、仿真实现


总结

相关推荐
苏慕TRYACE2 小时前
RT-Thread+STM32L475VET6——USB鼠标模拟
stm32·单片机·嵌入式硬件·计算机外设·rt_thread
楼台的春风8 小时前
【MCU驱动开发概述】
c语言·驱动开发·单片机·嵌入式硬件·mcu·自动驾驶·嵌入式
Moonnnn.8 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
LS_learner9 小时前
小智机器人CMakeLists编译文件解析
嵌入式硬件·机器人
暗碳11 小时前
stm32 74hc238流水灯
stm32·单片机·嵌入式硬件
1101 110111 小时前
STM32-温湿度上传OneNET项目
stm32·单片机·嵌入式硬件
余衫马11 小时前
ESP32-S3 实战指南:BOOT-KEY 按键驱动开发全解析
驱动开发·单片机·嵌入式硬件
文军的烹饪实验室14 小时前
处理器架构、单片机、芯片、光刻机之间的关系
单片机·嵌入式硬件·架构
Leiditech__15 小时前
人工智能时代电子机器人静电问题及电路设计防范措施
人工智能·嵌入式硬件·机器人·硬件工程
jmlinux15 小时前
STM32 HAL库USART串口DMA IDLE中断编程:避坑指南
stm32·单片机·嵌入式硬件