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

三、仿真实现


总结

相关推荐
析木不会编程1 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉5 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6775 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣6 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室6 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费6 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_397562318 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
liyinuo20178 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
艺术家天选9 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件
向阳逐梦9 小时前
基于STM32F4单片机实现ROS机器人主板
stm32·单片机·机器人