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

三、仿真实现


总结

相关推荐
微信1532379424315 小时前
离线语音识别 ( 小语种国家都支持)可定制词组
嵌入式硬件
weixin_5088216516 小时前
1ms软延时,不用定时器,stm32
stm32·单片机·嵌入式硬件
月阳羊16 小时前
【无人机】无人机PX4飞控系统高级软件架构
嵌入式硬件·架构·系统架构·无人机
weixin_5088216517 小时前
stm32 主频216MHz,写个ms延时函数,us延时函数
stm32·单片机·嵌入式硬件
华清远见IT开放实验室17 小时前
【新书上市】《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》,高校教学推荐,STM32入门必读书籍!
stm32·单片机·嵌入式硬件·虚拟仿真·必读书籍·高校教学
智木芯语17 小时前
【58】编程技巧:单片机编程命名规范
单片机·嵌入式硬件·嵌入式·#stm32·#stc8
捷配datasheet18 小时前
OP2177运算放大器:高性能模拟信号处理的关键元件
嵌入式硬件·信号处理
逼子格19 小时前
五种音频器件综合对比——《器件手册--音频器件》
嵌入式硬件·音视频·硬件工程师·硬件测试·电子器件·硬件笔试真题·音频器件
niuTaylor21 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件