单片机双机通信之c语言

1.单片机A代码块

/*发送程序*/
#include
#define uchar unsigned char
char code map[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//'0'~'9'

void delay(unsigned int time){ 
	unsigned int j = 0;
	for(;time>0;time--)
		for(j=0;j<125;j++);
}

void main(void){
   	uchar counter=0;	 	//定义计数器
   	PCON = 0x80;			//波特率加倍
   	SCON = 0x90;			//方式2,SM2=TI=RI=0,允许接收
   	while(1){   				
		ACC = counter;		//提取奇偶标志位值
		TB8 = P;			//组装奇偶标志
       	SBUF = counter;		//发送数据
       	while(TI==0);		//等待发送完成
       	TI = 0;				//清TI标志位
       	while(RI==0);		//等待乙机回答
       	RI = 0;
		if(RB8 ==0){		//判断RB8=0?
			P2 = map[counter];	//若为0,则显示已发送值
			if(++counter>9) counter=0;//刷新发送数据
			delay(500);		//调整程序节奏
		}
	}
}

2.单片机B代码块

/*接收程序*/
#include
#define uchar unsigned char
char code map[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//'0'~'9'
void main(void){
   uchar receive;		    	//定义接收器
   PCON = 0x80;					//波特率加倍
   SCON = 0x90;					//串口方式2,TI和RI清零,允许接收
   while(1){  
		while(RI==1){			//等待接收完成
			RI = 0;				//清RI标志位
			receive = SBUF;		//取得接收值
			ACC = receive;		//提取奇偶标志位
			if (P == RB8) TB8=0;//将标志位值装入第9位
			  else TB8 = 1;
			SBUF = receive;		//接收的结果返回主机
			while(TI == 0);		//等待发送结束
			TI = 0;		   		//清TI标志位
			P2 = map[receive];  //显示接收值
		}
    }
}

3.仿真图

3.1 仿真环境

Proteus 8 Professional(微信公众号:软件安装管家)

3.2 仿真器件

需要用到的仿真器件:7SEG-COM-CAT-G、80C51、CAP、CAP-ELEC、CRYSTAL、RES
单片机双机通信之c语言_第1张图片

3.2原理图绘制

单片机双机通信之c语言_第2张图片
PS:咱们有货再见!

你可能感兴趣的:(51单片机,c语言程序,串口通信,单片机)