proteus基于使用串口进行两个51单片机之间的直接通信

根据其他大佬的博文和思路进行了模仿,利用keil和proteus联合仿真使用串口进行两个51单片机之间的直接通信

参照代码如下:

单片机1:

#include "reg51.h"

//宏定义
#define uchar unsigned char
#define uint unsigned int
//延时函数
void time(uint ucMs);
//串口初始化
void initUart(unsigned int baud);
//参数定义
uchar ucCounter;

void main(void)
{
	uchar counter=0;
	time(1);
	initUart(9600);//串口进行初始化
	while(1)
	{
		SBUF=counter;//将参数给寄存器
		while(TI==0);//发送中断,发送8位时为1
		TI=0;//软件置0
		while(RI==0);//接受中断,接受8位时为1
		RI=0;//软件置0
		if(SBUF==counter)//如果接受到的等于counter
		{
			P2=counter;//数码管显示counter
			if(++counter>15)counter=0;//大于15清零
			time(500);//延时
		}
	}
}


void initUart(unsigned int baud)
{
	SM0=1;SM1=0;REN=1;//8位波特率可变,允许串口接受信号
	TMOD|=0X20;//定时器1为8位自动重装载
	PCON=0X00;//让SMOD==0
	TR1=1;//打开定时器1
	EA=1;ET1=1;//打开串口中断
	TH1=256-11059200/12/32/baud;//设置定时器初值
	TL1=256-11059200/12/32/baud;//设置定时器初值
}

//延时函数
void time(uint ucMs)
{
	while(ucMs!=0)
	{
		for(ucCounter=0;ucCounter<239;ucCounter++);
		ucMs-=1;
	}
}


单片机2:

#include "reg51.h"

//宏定义
#define uchar unsigned char
#define uint unsigned int
//延时函数
void time(uint ucMs);
//串口初始化
void initUart(unsigned int baud);
//参数定义
uchar ucCounter;

void main(void)
{
	uchar receive;
	time(1);
	initUart(9600);//串口初始化
	while(1)
	{
		while(RI==0);//接受8为置1
		RI=0;
		receive=SBUF; //接受信号
		SBUF=receive;//将接受的发出去
		while(TI==0);//发送8位置1
		TI=0;
		P2=receive;//数码管显示信号
	}
}

//串口初始化
void initUart(unsigned int baud)
{
	SM0=1;SM1=0;REN=1;//8位波特率可变,允许串口接受信号
	TMOD|=0X20;//定时器1为8位自动重装载
	PCON=0X00;//让SMOD==0
	TR1=1;//打开定时器1
	EA=1;ET1=1;//打开串口中断
	TH1=256-11059200/12/32/baud;//设置定时器初值
	TL1=256-11059200/12/32/baud;//设置定时器初值
}

//延时函数
void time(uint ucMs)
{
	while(ucMs!=0)
	{
		for(ucCounter=0;ucCounter<239;ucCounter++);
		ucMs-=1;
	}
}

其仿真结果图如下:

仿真结果有误,但是几经排查尝试几种方法都找不出其错误原因,甚至直接利用代码来源的博主的工程文件其数码管的结果依旧如图所示,希望有大佬可以之处我的错误之处QAQ

侵删

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值