Proteus8仿真:51单片机使用串口进行双机通讯

这篇具有很好参考价值的文章主要介绍了Proteus8仿真:51单片机使用串口进行双机通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

元器件

元器件 名称
电阻 RES
51单片机 AT89C51
电容 CAP
晶振 CRYSTAL
BCD数码管 7SEG-BCD

原理图部分

proteus多机通信,Proteus8,单片机,51单片机,嵌入式硬件

串口初始化:
首先根据相关的串口寄存器编写对应的初始化代码:
proteus多机通信,Proteus8,单片机,51单片机,嵌入式硬件
STC89C51单片机设有两个定时器/计数器,因定时器1有4种工作方式,而常选用定时器1的工作方式2(8位自动重装)作为波特率的溢出率。
串口寄存器主要配置SCON寄存器。
proteus多机通信,Proteus8,单片机,51单片机,嵌入式硬件
proteus多机通信,Proteus8,单片机,51单片机,嵌入式硬件
本次采用8为可变,所以SM0=1;SM1=0;REN=1;然后通过波特率的计算,可以计算出波特率和定时器初值的关系,然后编写定时器初始化和串口初始化。

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;//设置定时器初值
}

代码

本次实验由双机进行串口通讯,来核对双方的数据是否是一样的,如果一样的就显示在数码管。

单片机1main.c

代码如下:

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


单片机2main.c

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

运行效果如图:
proteus多机通信,Proteus8,单片机,51单片机,嵌入式硬件

工程文件

工程文件文章来源地址https://www.toymoban.com/news/detail-757971.html

到了这里,关于Proteus8仿真:51单片机使用串口进行双机通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MCU】单片机从 keilC51 编程到 Proteus8.9 仿真再到 STC-ISP 烧录保姆级流程

    ① 安装 USB转串口驱动(CH340) ② 打开文件夹“单片机软件开发板USB转串口CH340驱动” ③ 双击安装程序“CH341SER” ④ “用户账户控制”点击“是” ⑤ 点击“安装” ⑥ 安装成功点击“确定”,然后点击“关闭” 至此,USB转串口驱动安装完毕。 ① 启动程序“Keil uVison5” ②

    2024年02月03日
    浏览(47)
  • 【51单片机Keil+Proteus8.9】门锁控制电路

    二、设计思路 电路设计 1.电源部分:使用BATTERY为整个电路提供电源,可以在电路中加入一个电 源开关,以便控制电源的开启和关闭。 2.处理器部分:使用AT89C51芯片作为主处理器,通过编写程序实现门锁的 控制。AT89C51芯片具有丰富的I/O端口,可以方便地与外部器件进行通信

    2024年01月20日
    浏览(48)
  • 【51单片机Keil+Proteus8.9】温室盆栽灌溉系统

    实验五 实验名称 温室盆栽灌溉系统 软件设计: 1. 定义对应的引脚和端口的别名。 2. 编写延时函数,用于控制程序的执行速度。 3. 编写LCD控制函数,包括发送命令和发送数据两种操作。 4. 编写显示函数,用于在LCD上显示字符串。 5. 编写获取AD转换结果的函数,用于测量环境

    2024年01月20日
    浏览(51)
  • 132、仿真-基于51单片机主从串口通信家用防盗报警器设计(程序+Proteus仿真+流程图等)

    毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图​编辑 三、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号

    2024年02月16日
    浏览(42)
  • 【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态

    步进电机控制 设计思路 电路设计: 选用AT89C51单片机作为电路核心部件,外加LM016L液晶显示屏作为显示,显示步进电机的Fast,Slow,Stop的三个状态 将AT89C51单片机所选引脚与LM016L控制引脚相连,再将数据通过引脚与LCD接收引脚相连。 通过AT89C51单片机P0^0和P0^2两个引脚引出两个

    2024年01月20日
    浏览(57)
  • 【51单片机Keil+Proteus8.9+ADC0804】ADC实验 模拟转数字实验

    一、实验名称 ADC实验 模拟转数字实验 二、设计思路 电路设计 1.选用AT89C51单片机作为电路核心单元,外接8位单通道AD转换器ADC0804芯片和LM016L显示器以及滑动变阻器等其它常用元器件构成电路。 2.将ADC0804芯片的控制引脚RD,WR,INTR接到AT89C51芯片对应引脚,再将ADC0804电压输入引脚

    2024年01月20日
    浏览(42)
  • 二、51单片机 使用Proteus仿真掌握矩阵键盘(仿真及代码)

    学习内容:通过proteus实现对51单片机矩阵的掌握 1 、键盘接口设计。键盘——向单片机输入数据、命令等功能,是人机对话的主要手段。由若干按键按照一定规则组成。每一个按键实质上是一个按键开关,按构造可分为有触点开关按键和无触点按键。有触点开关按键常见的有

    2024年02月11日
    浏览(44)
  • 三、51单片机 使用Proteus仿真实现8位数码管滚动显示(仿真及代码)

    1,目标         使用51单片机控制8位数码管,分别滚动显示单个数字0~7,程序运行之后,单片机先控制最左边的第一位数码管显示0,其他的熄灭,延时一段时间之后,控制左边第二个数码管显示1,其它熄灭,以此类推,反复循环上述过程。 2,设计方式         使用P0输出

    2024年02月13日
    浏览(51)
  • 记录在苹果mac os系统上使用51单片机仿真软件Proteus

    1.安装Wineskin shell 指令 2.安装Wrapper 点击update ​​​​​​​ 首先我们需要安装一个程序: 可以将在Windows系统上才能运行exe文件打包为mac系统可执行的文件。 下载后,可以在启动台或者下载目录看到 Wineskin Winery 的图标,点击启动该软件。  No Wrapper Installed   暂时无法解决

    2024年02月06日
    浏览(62)
  • 【Proteus仿真】【51单片机】贪吃蛇游戏

    本项目使用Proteus8仿真51单片机控制器,使用8*8LED点阵、按键模块等。 主要功能: 系统运行后,可操作4个按键控制小蛇方向。 B站演示视频:https://space.bilibili.com/444388619 视频地址:https://space.bilibili.com/444388619/video 专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包