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);
}
 

三、仿真实现


总结

相关推荐
sramdram11 小时前
MCU微控制器OA打印机方案
单片机·嵌入式硬件·mcu·mcu微控制器
天天爱吃肉821812 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车
科芯创展16 小时前
3.5A,60VIN,异步降压芯片,XZ1815
单片机·嵌入式硬件
茯苓gao16 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
浅止菌17 小时前
海思回归第二弹:瑞芯微的隐忧与对手的反击
嵌入式硬件
Kuakewei88817 小时前
PW2609A在2.6A负载下压差0.14V,温升较3A工况低11°C
单片机·嵌入式硬件
Zyed17 小时前
[FreeRTOS]Day7项目介绍
stm32·单片机·嵌入式硬件
xuxie9919 小时前
start7 电机闭环控制
单片机·嵌入式硬件
嵌入式-老费19 小时前
esp32开发与应用(播放wav音频文件)
嵌入式硬件
LCG元19 小时前
嵌入式开发踩坑排查实战:从 STM32 外设初始化到 Linux SPI 驱动的 15 类硬件疑难故障深度复盘
linux·stm32·单片机