基于Proteus的单片机串口通信仿真
建立Proteus的单片机串口仿真平台
建立Proteus的单片机串口仿真平台本文详细介绍如何建立Proteus和PC机串口通信软件之间,进行通信仿真的平台。
这个平台由三个部分组成。
它们是:Proteus的单片机仿真电路,PC机串口通信软件,连接前两部分的虚拟串口软件。
1.Proteus的单片机仿真电路为了尽量简单明了,仿真电路只包含单片机和Proteus的COMPIM两个器件。
本文的单片机采用AVR M16。
运行Proteus的ISIS。
加入两个器件如下:类别:Microprocessor ICs器件:ATMEGA16库:A VR2描述:-类别:Miscellaneous器件:COMPIM库:ACTIVE描述:COM Port Physical Interface model仿真电路,如图1图1 Proteus串口仿真实例电路这里需要说明两点:首先,不需要串口电平转换电路。
例如:MAX232等;其次,连线不必交叉。
交叉任务交给虚拟串口去完成。
串口功能:中断接收到一个字节(0—255)无符号整数后,立即将收到的数据发送回去。
所以,程序非常简单。
重点在于建立仿真通信平台,因此不厌其烦地叙述建立平台的过程,以尽量避免初学者在某处卡住。
设置ATMEGA16的属性。
单击A TMEGA16变红色,再单击,弹出编辑元件窗口,如图2图2 ATMEGA16编辑元件窗口只要编辑红框圈起来的参数:Program File建议选择.cof文件,这样可以单步调试。
当然,对本项目过于简单没什么可调试的。
也可以选择.hex文件。
千万注意,当文件目录改版后,一定要重新选择文件路径!另一个参数CKSEL Fuses按图上的选择。
注意:程序中,初始化串口时,波特率因子也得按主频8M来选择!设置COMPIM的属性。
单击COMPIM变红色,再单击,弹出编辑元件窗口,如图3图3 COMPIM编辑元件窗口按红框内的选择即可。
当然可以改变。
但是,必须记下这些参数。
PC机的串口通信软件的参数,除了串口号必须和(例如CMO1)不同外,其它4项参数(波特率,数据位数,停止位数,校验码)必须一致。
proteus与keil Cx51的单片机仿真(串行通信口)
proteus 与keil Cx51 的单片机仿真(串行通信口)单片机串行口工作于方式0,通过74LS164 实现串并转换,来控制共阳极数码管的显示,当按下K01 按钮显示2010,按下K02 键显示1987,按下K03键显示0606,按下K04 键显示1988,按下K05 键显示1224。
其中数字显示可由自己设定.电路图:C 程序:#include#include#include#define uchar unsigned char//宏定义sbit P1_1=P1;sb it P1_2=P1 ;sbit P1_3=P1;sb it P1_4=P1;sb it P1_5=P1 ;sbit P2_0=P2;uchar code discode[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//串行方式下共阳极数码管段码表0~9unsigned char leddis[4]={0,1,2,3};//显存,有几个数码管进行定义void display(void)//数码管显示函数{unsigned char count;//数码管个数P2_0=0;//P2.0 引脚输出清零信号,对74LS164 清零_nop_();_nop_();//延时,保证清零完成P2_0=1;//结束对74LS164 清零for(count=4;count>0;count--){SBUF=discode[leddis[count-1]];while(TI==0);TI=0;}}void main(){SCON=0x00;//设定UART 的工作方式为方式0leddis[0]=0;leddis[1]=1;leddis[2]=2;leddis[3]=3;//显示内容初始化display();//显示函数while(1){if(P1_1==0)//K01 按下,即P1_1被按下,显示2010{leddis[0]=2;leddis[1]=0;leddis[2]=1;leddis[3]=0;display();P1_1=1;}if(P1_2==0)//K02 按下,即P1_2 被按下,显示1987{leddis[0]=1;leddis[1]=9;leddis[2]=8;leddis[3]=7;display();P1_2=1;}if(P1_3==0)//K03 按下,即P1_3 被按下,显示0606{leddis[0]=0;leddis[1]=6;leddis[2]=0;leddis[3]=6;display();P1_3=1;}if(P1_4==0)//K04 按下,即P1_4 被按下,显示1988{leddis[0]=1;leddis[1]=9;leddis[2]=8;leddis[3]=8;display();P1_4=1;}if(P1_5==0)/ /K05 按下,即P1_5 被按下,显示1224{leddis[0]=1;leddis[1]=2;leddis[2]。
基于Proteus的单片机系统的仿真设计
如 模 拟 分 析 、 字 分析 、 合 信 号 分 析 、 率 分 析 等 有 各种 虚 拟 数 混 频
仪器 , 如示 波 器 、 辑 分 析 仪 、 号 发 生 器 、 数 器 、 表 等 。 和 可 简 化单 片机 程序 在 目标 硬 件 上 的调 试 工 作 .加 快 工 程 项 目的 逻 信 计 电 能 K i Ma a e , f b等 编 译 软 件 整 合 使 用 。 到 更 好 的 仿 真效 果 。 仿 真 开 发 过 程 , 低 开 发 成 本 。 需 要 注 意 的 是 , 真 不 能 完 全 代 替 实 l l 达 该 降 仿
空航 天 大 学 出版社 . 0 . 2 6 0 3 王锋 . 于 P oe s 数 字 时 钟 设 计 与 仿 真 卟 福 建 电 脑 ,0 91 : 5 . 基 rtu 的 2 0 ,01 - 3
1 6 3 .
4王 瑞 萍 . 于 Poe s 单 片 机 虚 拟 开 发 环 境 o. 代 电 子 技 术 , 0 ,: . 基 rtu 的 】现 2 98 0
16 4
福
建 电
脑
21 0 0年 第 6期
基 于 Po u 的 单 片 机 系统 的仿真 设计 rt s e
刘 艳 ,张 文 超 ,秦 鑫
(新 乡 医 学 院生 命 科 学技 术_ 河 南 新 乡 4 3 0 系 5 0 31 【 摘 要 】 介 绍 了利 用 P o u 开 发 单 片机 系 统 的 仿 真 设 计 方 法 。基 于 Po u 的 单 片 机 虚 拟 开 发 环 境 可 以 完 成 单 片 : rt s e rt s e
l i是 德 国 K i公 司 开发 的单 片机 编译 器 .是 一 种 集 成 化 (l e e l 参考文献: . 沈 郭 8 1单 片机 实 践 与 应 用 [ . 京 : 华 大学 0 M】北 清 的 文 件 管 理 编 译 环 境 , 编 辑 、 译 和 程 序 仿 真 等 于 一 体 。 用 1昊 金 戌 , 庆 阳春 , 庭 吉 . 5 集 编 可
proteus模拟串行口通信
Proteus仿真——51单片机串口转RS232口单片机串口是单片机通信的基本途径,可以进行多单片机间的通信,也可以通过接口转换实现与计算机间的通信。
其中与计算机通信可以通过计算机的串口(232口)或USB口实现。
本文是本人做的一个小实验,内容是在Proteus ISIS中仿真51单片机串口转RS232口,实现单片机通过串行口与计算机通信。
单片机串行口有四种不同的工作方式:方式0:移位寄存器输入/出方式,波特率固定为:f osc/12。
方式1:10位UART(通用异步接口电路),一帧数据包括1位起始位(0),8位数据位和1位停止位(1)。
波特率可变,公式为:其中X为定时器T1的初值,当然我们一般都是先确定波特率然后算初值的,所以我们更想知道X等于多少。
把上面的式子变一下就可以得到初值X了:方式2/3:这两种方式都是11位的UART,它们比方式1多了一个第9位数据。
他们不同的是:方式2波特率固定为f osc/32或f osc/64,由SMOD位决定。
方式3:波特率同方式1;本例中采用方式1,波特率为9600(计算机默认值),根据波特率算出初值X=253(定时器T1工作方式2)。
我们以9600的波特率向计算机循环发送00H;proteus中的接口转换电路如下:计算机端用串口调试软件接收;不过我们要说明一下,为了实现串口的连接,我们要用计算机串口模拟软件模拟出两个232口,模拟出的这两个232口是设计为连接着的。
我们用Virtual Serial Port Driv er这个软件(到网上去搜,很容易找到)。
安装好后打开,界面如下:在上图里可以看出我的机器有一个物理口COM1,现在已经模拟出了两个口COM2和COM3,而且他们是一组是连接着的。
我们在proteus中的compim默认是连到com1的,在我们这边改成com2,然后在串口调试软件中测试com3,如下两个图现在硬件连接已经到位,下面就是软件了:通过串口以波特率为9600的速度发送00H,程序如下:ORG 0000HLJMP STARTORG 0030HSTAR T: SETB EASETB ESSETB ET1CLR SM0;串行口工作于方式1:sm0=0,sm1=1SETB SM1MOV PCON,#00H;波特率不加倍MOV TMOD,#20H;T1定时器方式2MOV TL1,#253MOV TH1,#253SETB TR1MOV A,#00HLOOP: MOV SBUF,A JNB TI,$;等待发送完CLR TI;清除中断标志LJMP LOOP;循环END结果如下:。
单片机用proteus仿真双机串口通信总结体会
单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。
《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。
Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。
本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。
电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。
2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。
主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。
串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。
3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。
首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。
然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。
总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。
《STM32单片机开发—基于Proteus虚拟仿真与HAL_LL》课件4.6 串口通信之单字节通信
4.6.2 单片机与计算机的串口通信
(1)STM32单片机串口
STM32串口通信采用TTL电平,由TxD(发送)、RxD(接收)、GND(信号/电源
地)三条线构成,高电平+3.3V代表逻辑“1”,低电平0V代表逻辑“0”。
(2)计算机RS-232串口 RS-232是一种重要的计算机串口通信技术,有25线与9线(简化)两种常见接口,
异步通信发送端与接收端双方采用不同的时钟信号,一般来说波特率误差相差 不超过1%均可顺利通信。
② 同步通信 (本书不做介绍…)
(4)串行通信的数据传输模式
终 端 发送器
1
终 接收器 端
2
终 发送器 端 1 接收器
发送器 终 端
接收器 2
终 发送器 端 1 接收器
接收器 终 端
发送器 2
单工
半双工
全双工
实际上与单片机做串口通信时经常只用到其中的三条线:TxD(发送)、RxD(接收 )、GND(信号/电源地)。
RS-232标准规定-3~-15V代表逻辑“1”,+3~+15V代表逻辑“0”,通信逻辑与单片机一 致。
(3)单片机与计算机之间的串口通信 单片机与计算机RS-232通信逻辑一致,但逻辑电平不匹配,因此仅需要在计算机
4.6 串口通信之单字节通信
能力目标:
理解并掌握STM32单片机通过串口接收/发送单个字节的方法。
任务要求:
将单片机实验板通过串口数据线与计算机相连,打开计算机上的串口助手,通过串 口助手发送单字节数据,单片机收到该字节数据后,交换高四位与低四位,将新的数
据通过串口发回串口助手。(例如:串口助手发送数据“AB”,单片机返回数据“BA” 。)
基于Proteus仿真软件实现单片机与PC机多字节串行通信
基于Proteus仿真软件实现单片机与PC机多字节串行通信作者:王忠远张凤桐来源:《电脑知识与技术》2016年第36期摘要:Proteus电路设计仿真软件是世界上著名的EDA开发工具,在单片机中嵌入串行通信软件,利用仿真串口COMPIM与PC机通信。
本论文主要利用Proteus仿真软件制作单片机串行通信仿真电路,经过虚拟串口可以实现在同一台计算机上实现下位单片机与上位计算机仿真串行通信,上位计算机采用VB语言编辑界面,在单片机教学和电子产品开发中具有一定的参考价值。
关键词: Proteus;COMPIM;虚拟串口;MSComm中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)36-0261-02在单片机串行教学及电子产品开发时,通常涉及单片机(下位机)与计算机(上位机)的串行通信,利用串行通信上位机发送命令给下位机,下位机将待显示数据传到上位机上显示,本论文设计收发帧定长21个字节的串行通信,一帧包括2字节同步头、2字节结束字、1字节命令字、16字节数据。
上下位机通过一对虚拟串口进行连接实现双机通信。
1 Proteus仿真软件绘制串行通信电路(如图1)2 利用kile c51软件编写下位机程序代码#include#define uchar unsigned charsbit P1_1=P1^1;uchar Fhead=0xA5,Fend=0x5A,shead=0,send=0; //头尾字节,找到头尾标志uchar x,uartbuf,rdata[20]; //接收变量,接收缓冲21字节uchar temp,tdata[21]={0xa5,0xa5,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x5a,0x5a};uchar scount; //接收有效数据main(){ TMOD=0x20; PCON=0x00; SCON=0x50; //设置波特率为9600b/s,10位异步收发,启动定时器1TH1=0xfd; TL1=0xfd; TR1=1;EA=1; ES=1; //开启中断while(1){ if(send==1||P1_1==0) //接收到正确数据或按键按下时下位机发送数据到上位机{ tdata[0]=0xa5;tdata[1]=0xa5;tdata[19]=0x5a;tdata[20]=0x5a;for(temp=0;temp{ SBUF=tdata[temp]; while(TI==0);TI=0; }send=0; scount=0;while(P1_1==0);} } }void uart() interrupt 4 using 1{ if(RI==1){x=SBUF;if(x==Fhead && x==uartbuf) //找同步头{shead=1;scount=0;}if(x==Fend && x==uartbuf) //找结束字{shead=0;;send=1;}if(shead==1) //是同步头非结束字保存数据{rdata[scount]=x;tdata[scount+1]=x;scount++;}uartbuf=x; RI=0;}}3 上位机串行通信界面设计利用VB设计数据收发控制界面如图2,在设计时需要增加外部控件:在工程-部件中选择microsoft comm control 6.0控件,添加后在工具箱中出现电话机图标,拖入窗体即可使用。
8051单片机Proteus仿真实例3(原理图+C程序)
}
}
}
void timer_0() interrupt 1
{
doorbell=~doorbell;
p++;
if(p<400)
{
TH0=(8192-700)/32;
case 1: transmit('B');break;
case 2: transmit('C');break;
}
delay(10);
}
}
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF>=0&&SBUF<=9)
P0=led_code[SBUF];
else P0=0x00;
ET0 = 1;
TR0 = 1;
P2=0x01;
while(1);
}
void timer_0() interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
count++;
if(count==10)
{
P2=_crol_(P2,1);
count=0;
}
}
6.继电器
原理图:
程序:
#include <reg51.h>
1.单片机之间通过串口进行通信
原理图:
程序:
#include <reg51.h>
sbit key=P1^0;
unsigned char code led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
基于PROTEUS的单片机串口通信的实例设计与仿真
【 关键 词】rtu 软件 ; Poes 串口通信 ; 仿真
O
引言
Viul e a P r r a S r l ot XP软 件 是 一 种 高级 的 配置 工 具 。用 于模 拟 RS 3 t i s 22
串 口通 信 , 以使 用 它 为 应 用 程 序 提 供 虚 拟 串 口 . 个 虚 拟 串 口的 功 可 这 Poe s 件 是 由英 国 L bC ne lcrnc 司 开 发 的 E A 工 rtu 软 a etr et i E o s公 D 能 就像 标 准 的硬 件 串 口一 样 , 研 发 人 员 提 供便 利 。 为 具 软件 , 已有 近 2 0年 的 历 史 , 全 球 已得 到广 泛 使 用 。 它不 仅 是模 拟 在 使 用 软件 V r a ei o sX , 开 软 件 后 . 图 2所 示 .OM3 iu l r l r P 打 t S aPt 如 C 电 路 、 字 电路 、 数 混 合 电路 的 设 计 与 仿 真平 台, 是 目前 最 先进 的 数 模, 也 是 电脑 上 实 际 的 物 理 串 口 , 击 “ d ar可 立 即 添加 一 对 虚 拟 串 口 单 A dp i ” 实 现嵌 入 式 系 统 在 计 算 机 上 完 成从 原 理 图设 计 、代 码调 试 与仿 真 、 系 C M1和 C M2 这 样 就 连 接 好 一对 虚 拟 串 口 。 O O , 统 测 试 与 功 能 验 证 到 形 成 P B的完 整 的设 计 、 真 和 研 发 的 平 台 。在 C 仿 22 上位 机 软 件 设 置 . 缺 乏 硬 件 的情 况 下 , 是 一 款 非 常 实用 的仿 真 软 件 , 仿 真 的原 理 图 经 这 其 P C与 单 片 机 的通 信 常 用 V B或 V 中的 MS o C C mm控 件 编写 . 设 本 验证后可直接应用到现实中。 计 使 用 “ 口调 试 助 手 ” 实 现 P 对 Poe s 联 系媒 介 。 如 图 3所 串 来 C rtu 的 目前 , 多 高 校 已引 入 这 套 软 件 , 为理 论 教 学 和 实 践 教 学 的 必 很 作 示 , 类 软件 的使 用 一 定 要 注 意 串 口通 信 的 参 数 的 设 置 ( 串 口 , 特 该 如 波 要补充 , 践证明效果很好 ; 且 , 实 而 在一 些 像 海 尔 等知 名 公 司也 已将 它 率 , 据位 , 验 位 , 止 位 )它 们 必 须 与 单 片 机 程 序 总 的 串 E设 置 相 数 校 停 , l 作 为仿 真 和 研 发 平 台 , 大 提 高 了 工作 效 率 , 短 了研 发 周 期 。 大 缩 对 应 。串 口调 试 助 手 则 可 以 真 实 的模 拟 上 位 机 与 单 片 机 进 行 通 信 。正 本 文 通 过 实 例 , A 8 C 1 片 机 为 核 心 , 计 了一 个 P 以 T9 5 单 设 c与 单 确 地使 用 所 有 的信 号 线 和 模 拟 波 特 率 的 工作 , 以 和 使 用 真 实 串 口一 可 片机 的进 行 串 口通信 的 功 能 , 详 细 说 明 了 在 P O E 并 R T US平 台 下 进 行 样 传输 文 件 、 据 。 数 串 口使 用 和 调 试 的 基 本 方 法 。
基于Proteus的51单片机应用-单片机串口通信设计
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.绪论1.1课题背景及意义目前,单片机的发展速度大约每两、三年要更新一代,集成度增加一倍,功能翻一番。
其发展速度之快、应用范围之广已达到了惊人的地步,它已渗透到生产和生活的各个领域,应用非常广泛。
在汽车、通信、智能仪表、家用电器和军事设备的智能化以及实时过程控制等方面,单片机都扮演着非常重要的角色[1]。
因此单片机的设计开发具有广阔的前景。
所以,对于电气类学生而言,学习一种单片机的开发是十分必要的。
而51系列的单片机,随着半导体技术的发展,其处理速度更快,性能更优越,在工业控制领域上占据十分重要的地位,通过对51系列单片机的学习而掌握单片机开发的过程是一种不错的选择。
然而单片机是一门综合性、实践性都很强的学科,其学习涉及的实验环节比较多,硬件设备投入比较大,对于大多数人而言很难投入大笔资金去购买实验器件。
而且要进行硬件电路测试和调试,必须在电路板制作完成、元器件焊接完毕之后进行,但这些工作费时费力。
因此引入EDA软件仿真系统建立虚拟实验平台,不仅可以大大提高单片机的学习效率,而且大大减少硬件设备的资金投入,同时降低对硬件设备的维护工作。
EDA设计思路是:从元器件的选取到连接、直至电路的调试、分析和软件的编译,都是在计算机中完成,所用的工作都是虚拟的。
虽然现在的电路设计软件已经很多,诸如PROTEL、ORCAD、EWB 、Multisim等,不过这些软件之间的差别都不大:都有原理图和PCB制作功能,都能进行诸如频率响应,噪音分析等电路分析,主要用于模拟电路、数字电路、模数混合电路的性能仿真与分析,但对于单片机设计及软件编程,最重要的是两者的联调,这些软件都无法实现,所以造成了单片机系统设计周期长、设计费用高等缺点[2]。
新款的EDA软件Proteus解决了上述软件的不足,成为目前最好的一款单片机学习仿真软件。
Proteus 软件是由英国Lab Center Electronics 公司开发的EDA 工具软件。
基于51单片机的串口通信proteus仿真电路及代码
1};
void delay(uchar n) {
uchar x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); }
uchar key_putdown() {
P1=0xf0; if(P1!=0xf0) {
delay(5); if(P1!=0xf0) {
return 1; } } else return 0; }
基于 51 单片机的串口通信 proteus 仿真电路 及代码(2014.10.27)
本电路采用晶振为 11.0592MHz,采用串口工作方式 1,波特 率为 9600Bps,双机通信,U1 将 4*4 矩阵键盘送来的 0~f 字 符先用一位共阴数码管显示出来,再通过 P3.0 和 P3.1 两个 引脚送到 U2,U2 再用一位共阴数码管显示出来。
P0=0x00; P0=table[n]; }
void main() {
SCON = 0x50; TMOD = 0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; ES = 1; EA = 1;
//串口方式 1, 8-n-1, 允许接收. //T1 方式 2
//开中断.
P0=0x3f; while(1) {
if(key_putdown()) {
key_scan(); led_disp(key); send();
} } }
这是从机 U2 接收使用的代码:
#include<reg51.h> #define uchar unsigned #define uint unsigned
uchar
code
table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7 1};//7 段共阴数码管 0~f
基于Proteus虚拟终端51单片机仿真:串口发送字符串,数码管显示
先上图:实验程序:/******************************************************************** ************** 【编写时间】: 2016年6月17日* 【作者】:小瓶子* 【实验平台】: Proteus 7* 【外部晶振】: 11.0592mhz* 【主控芯片】: STC89C51* 【编译环境】: Keil μVisio4* 【程序功能】:在虚拟终端发送8个字符,通过数码管和虚拟* 终端显示出来,8个字符发送完毕,显示发送完毕********************************************************************* *************/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar bufr[]="------\r\n";//存放接收数据uchar *prx=&bufr;//接收指针bit str; //接收完毕标志位//段码uchar code leddata[]={0xC0, //"0"0xF9, //"1"0xA4, //"2"0xB0, //"3"0x99, //"4"0x92, //"5"0x82, //"6"0xF8, //"7"0x80, //"8"0x90, //"9"0x88, //"A"0x83, //"B"0xC6, //"C"0xA1, //"D"0x86, //"E"0x8E, //"F"0x89, //"H"0xC7, //"L"0xC8, //"n"0xC1, //"u"0x8C, //"P"0xA3, //"o"0xBF, //"-"0xFF, //熄灭0xFF //自定义};//延时函数void delay( uint i){uint m,n;for(m=i;m>0;m--)for(n=90;n>0;n--);}//数码管显示函数void led_display(){uchar i;P2 = 0x01;for(i=0;i<8;i++){P0=0xff;P2 = _cror_(P2,1);P0 = leddata[bufr[i]-'0'];delay(2);}}//字符发送函数void putchar(uchar data1){SBUF = data1; //将待发送的字符送入发送缓冲器while(!TI); //等待发送完成TI = 0; //发送中断标志请0}//字符串发送函数void putstring(uchar *dat){while(*dat != '\0') //判断字符串是否发送完毕{putchar(*dat); //发送单个字符dat++; //字符地址加1,指向先下一个字符delay(5);}}//串口初始化函数void serial_init(){TMOD = 0x20; //定时器工作方式2SCON = 0x50; //串行口工作方式2PCON = 0x80; //SMOD = 1,波特率加倍TH1 = 0xfa;TL1 = 0xfa; //波特率设置9600ES = 1;EA = 1;//开总中断}void main(){serial_init();TR1 = 1;putstring("Receiving from 8051...\r\n");putstring("----------------------\r\n");delay(50);while(!str);//等待接收完毕while(1){P0=0xff;while(!str);led_display();}}void serial() interrupt 4{if(RI!=1) return;//判断是否接收{str = 0;ES = 0;*prx = SBUF; //接收存放数据putchar(*prx);RI = 0;prx++; //指针自加if(*prx=='\0') //是否接收完成{prx = &bufr;//指针初始化str = 1; //标志位置1putstring("\r\n");putstring("translate over!\r\n");ES = 1;return;}ES = 1;return; //退出中断}}仿真原理图:。
proteus仿真51单片机串口双机通讯
51单片机的串口双机通讯一、什么是串口串口是串行发送数据的接口,是相对于并口来说的,是一个广泛的定义。
本期我们说的串口指的是指UART或是RS232。
二、什么是波特率波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位。
一个字节需要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位。
9600bps用模式1传输时,每秒传输的字节数是9600÷10=960个字节,发送一个字节大概需要1ms时间。
三、51单片机串口相关寄存器1、SCON串口控制寄存器(1)SM0和SM1:方式选择寄存器SM0 SM1 工作方式功能波特率0 0 方式0 8位同步移位寄存器晶振频率/ 120 1 方式1 10位UART 可变1 0 方式2 11位UART 晶振频率/32或晶振频率/64 1 1 方式3 11位UART 可变多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。
当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。
(3)REN:允许接收位REN用于控制是否允许接收数据,REN=1时,允许接收数据,REN=0时,拒绝接收数据。
(4)TB8:要发送的第9位数据位在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址。
(5)RB8:接收到的第9位数据位当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到RB8中。
方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。
(6)TI:发送中断标志位方式0中,不用管他。
基于Proteus的单片机串口通信仿真
Proteus班级:电信13-2姓名:段学亮邓成智崔俊杰邓石磊陈亮高金玉成绩:电子与信息工程学院信息与通信工程系1.设计要求1.1甲单片机向乙单片机机发送控制命令字符,甲单片机同时接收乙单片机机发送的数字,并显示在数码管上。
1.2乙机程序接收甲机发送字符并完成相应动作乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
2. 仿真电路图串口通信仿真电路图如图一图1:串口通信仿真电路图3.串口通信C51程序/* 名称:甲机串口程序说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。
*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1^0;sbit LED2=P1^3;sbit K1=P1^7;uchar Operation_No=0; //操作代码//数码管代码uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//向串口发送字符void Putc_to_SerialPort(uchar c){SBUF=c;while(TI==0);TI=0;}//主程序void main(){LED1=LED2=1;P0=0x00;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90; //允许串口中断while(1){DelayMS(100);if(K1==0) //按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No) //根据操作代码发送A/B/C或停止发送{case 0: Putc_to_SerialPort('X');LED1=LED2=1;break;case 1: Putc_to_SerialPort('A');LED1=~LED1;LED2=1;break;case 2: Putc_to_SerialPort('B');LED2=~LED2;LED1=1;break;case 3: Putc_to_SerialPort('C');LED1=~LED1;LED2=LED1;break;}}}}//甲机串口接收中断函数void Serial_INT() interrupt 4{if(RI){RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];else P0=0x00;}}/* 名称:乙机程序接收甲机发送字符并完成相应动作说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
基于PROTEUS仿真的UART的多级通信
摘要通信技术和通信产业是20世纪80年代以来发展最快的领域之一。
不论是在国际还是在国内都是如此。
这是人类进入信息社会的重要标志之一。
通信包括人与人之间的语言表达,更包括电子产业中的通信。
特别是在在嵌入式行业中,CPU与外设,CPU与CPU之间的信息交换等。
在这些通信中,涉及到各种通信协议以及通信方式。
包括串行通信:I2C,SPI,UART等,并行通信。
本系统是基于PROTEUS软件仿真的UART的多机通信,即实现三个80C51单片机的通信。
关键词: 80C51,UART多机通信,PROTEUS目录第1章系统的设计模块选择 (4)1.1 I2C总线通信 (4)1.2 SPI通信 (4)1.3 UART通信 (5)1.4 模块选取 (5)第2章系统硬件模块概述 (6)2.1单片机80C51简介 (6)2.1.1硬件结构 (7)2.1.280C51中断控制系统 (7)2.1.380C51的串行通信 (8)2.2MAX487串行通信接口简介 (9)2.3DAC0832芯片简介 (9)第3章系统具体设计概述 (11)3.1 系统结构流程图 (11)3.2 系统硬件设计 (12)3.3 系统软件设计 (12)第4 章系统性能测试 (12)4.1主机向从机1发送数据测试 (12)4.2主机向从机2发送数据测试 (13)总结 (14)附录A (15)1主机程序: (15)2从机1程序: (16)3从机2程序: (17)第1章系统的设计模块选择1.1 I2C总线通信I2C总线系统的硬件结构图如图所示。
其中,SDA是数据线,SCL是时钟线。
连接到总线上的器件的输出级必须是集电极或漏极开路,以形成线“与”功能,因此SDA和SCL均需接上拉电阻。
总线处于空闲状态下均保持高电平,连接总线上的任一器件输出的低电平都将使总线的信号变低。
I2C总线支持多主和主从两种工作方式。
通常采用主从工作方式,因为不出现总线竞争和仲裁,所以工作方式简单,在主从工作方式中,主器件启动数据的发送,产生时钟信号,发出停止信号。
基于Proteus虚拟串口通信的设计与仿真
0引言串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
就单片机来说,这种通信方式是实现与PC 机、智能仪器仪表连接的重要手段,常见的通信标准有RS232和RS485,其中RS232有三线制接法和九线制接法,RS-485接口则是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好,这两种方式因接线简单,通信协议灵活而得到广泛的应用[1-2]。
1Proteus 虚拟串口Proteus 软件是英国Lab Center Electronics 公司出版的EDA 工具软件,它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前比较好的仿真单片机及外围器件的工具,是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台[3-4]。
通常情况下,虚拟仿真系统是不能与物理环境交互通信的,但是Proteus 虚拟系统模拟了这种功能,它使Proteus 仿真环境下的系统能与实际的物理环境直接交互,Proteus 的COMPIM 组件是一种串行接口组件,当由CPU 或UART 软件生成的数字信号出现在PC 物理COM 接口时,它能缓冲所接收的数据,并将它们以数字信号的形式发送给Proteus 仿真电路,如果不使用物理串口而使用虚拟串口,使用串口调试助手软件能与Proteus 单片机串口直接交互,此时需要安装虚拟串口驱动软件VSPD 。
2仿真实例选用AT89C52型号单片机,运行在PC 机中的串口调试软件,实现单片机与PC 机双向通信。
2.1硬件电路设计2.1.1安装虚拟串口驱动程序VSPD 并运行在First port 中选择COM3,在Second port 中选择COM4,单击“Add Pair ”按钮,这两个端口立即出现在左边的Virtual Ports 分支下,且用蓝色虚线将它们连接起来,在PC 的设备管理器中,也会出现两个串口的显示[5-6]。
基于Proteus的89C52双机通信仿真
基于Proteus的AT89C52双机通信仿真在一个Proteus工程中,添加两个AT89C52单片机,一个做主机,另一作从机。
现在要实现主机与从机之间的简单通信。
具体功能是:主机不停扫描矩阵键盘,如果有键被按下,则把相应按键的数字发送给从机,从机通过数码管显示它接受到的数据。
主机与从机之间的通信通过串行口实现。
构建Proteus仿真图时,如果感觉图纸不够大,放置元器件比较拥挤,可以通过System 选项 Set Sheet Side…选择A3图纸就合适了。
Proteus中的RS-232C标准接头COMPIM不需要连接MAX232,可以直接和单片机的RXD,TXD连接,因为COMPIM已经把MAX232集成在内部。
这里的串行通讯选择方式1,因为方式1的波特率与定时器T1的溢出率有关,所以可以通过设置定时器T1的初值来确定串行通信的波特率。
这里选择了波特率为9600,T1选择具有自动重装功能的方式2,那么TH1 和TL1 的初值通过计算得到0xfd。
具体的电路连接如下:主机电路:从机电路:要顺利实现双机通信重要的是要保持两机的波特率一致。
所以,下面的一些参数设置很重要。
1.利用虚拟串口软件Virtual Serial Port Driver,建立一对相连的虚拟串口。
如果没有安装这个软件可以网上下载安装。
这是实现仿真必须的。
这里的虚拟串口为COM1和COM4,下图可以看到两个端口是相连的。
2.设置主机RS-232接头P1的参数。
Physical port选择端口COM1,Physical Baud Rate选择9600,Virtual Baud Rate也选择9600。
其他参数默认,设置如下:3.设置从机RS-232接头P2的参数。
Physical port选择端口COM4,Physical Baud Rate选择9600,Virtual Baud Rate也选择9600。
其他参数默认,设置如下:4.晶振频率设置为11.0592MHz,它与上面设置波特率为9600是对应的。
基于Proteus的单片机多机通信的设计与仿真
多机通信是单片机中重要的组成部分之一,在 器,其中 U1 为主机,U2、U3、U4 为从机,通过开关按
智能仪表、工业控制领域得到了广泛的应用,由于其 钮 K1、K2、K3 来控制主机与对应的 3 个从机 1#、2#、
运 行 过 程 较 为 复 杂 且 无 法 直 接 观 察 到 内 部 通 信 情 3#进 行 串 口 通 信 。 当 按 下 主 机 K1 按 键 时 ,从 机 H1
片 AT89C1 单片机、指示电路、故障模拟电路等组成的多机通信电路,使用 Proteus 仿真软件搭建虚
拟仿真平台,联合 Keil 软件实现软硬件协同调试,借助 Proteus 提供的虚拟仪器、仿真图表和探针等
工具对多机通信过程进行实时分析。仿真结果表明:使用 Proteus 软件可对多机通信的过程进行动
多机通信电路由四片 AT89C51 单片机组成控制 令,从机的状态字格式如下:
收稿日期:2018-04-07 稿件编号:201804050
基金项目:2017 年新疆维吾尔自治区大学生创新创业训练计划项目(201710997036);2017 年新疆自治区教育综
合改革试点项目(XJJG201715)
作者简介:谭玉琪(1995—),女,新疆伊犁人。研究方向:单片机设计开发等。 -164-
序变化,可及时解决出现的通信问题,增强分析问题 的功能与 K1 按键类似,电路如图 1 所示。
和解决问题的能力。
图 1 中 ,设 置 从 机 U2、U3、U4 的 地 址 为 01H~
1 硬件电路的设计
03H,主机 U1 发出 0xff 为控制命令,使所有的从机都 处于 SM2=1 的状态,00H 为接收命令,01H 为发送命
况,在加上通信过程中易出现多种异常状况,更增加 灯点亮,表示主机与对应的从机连接成功,之后从机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
}
4.交通灯仿真效果
4.1按下甲单片机的按钮向单片机乙发送数据,再松开甲单片机的按钮,此时甲单片机的LED1和乙单片机的LED3亮如下图4-1。
4-1:甲机的LED1和乙机的LED3分别点亮
4.2再次按下甲单片机的按钮向单片机乙发送数据,再松开甲单片机的按钮,此时甲单片机的LED2和乙单片机的LED4亮如下图4-2。
{
if(RI)//如收到则LED则动作
{
RI=0;
switch(SBUF)//根据所收到的不同命令字符完成不同动作
{
case 'X':LED1=LED2=1;break;//全灭
case 'A':LED1=0;LED2=1;break;//LED1亮
case 'B':LED2=0;LED1=1;break;//LED2亮
2.仿真电路图
串口通信仿真电路图如图一
图1:串口通信仿真电路图
3.串口通信C51程序
/*名称:甲机串口程序
说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
{
LED1=LED2=1;
P0=0x00;
SCON=0x50;//串口模式1,允许接收
TMOD=0x20;//T1工作模式2
PCON=0x00;//波特率不倍增
TH1=0xfd;
TL1=0xfd;
TI=RI=0;
TR1=1;
IE=0x90;//允许串口中断
while(1)
{
DelayMS(100);
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K1=P1^7;
uchar Operation_No=0;//操作代码
//数码管代码
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延时
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//向串口发送字符
void Putc_to_SerialPort(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
//主程序
void main()
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K2=P1^7;
uchar NuБайду номын сангаасX=-1;
//延时
void DelayMS(uint ms)
break;
case 1:Putc_to_SerialPort('A');
LED1=~LED1;LED2=1;
break;
case 2:Putc_to_SerialPort('B');
LED2=~LED2;LED1=1;
break;
case 3:Putc_to_SerialPort('C');
LED1=~LED1;LED2=LED1;
if(K1==0)//按下K1时选择操作代码0,1,2,3
{
while(K1==0);
Operation_No=(Operation_No+1)%4;
switch(Operation_No)//根据操作代码发送A/B/C或停止发送
{
case 0:Putc_to_SerialPort('X');
LED1=LED2=1;
4-4:甲机的数码管点亮,显示‘0’
4.5不停按下和松开乙单片机的按钮向单片机甲发送数据,甲单片机的数码管显示从‘0’到9,以此循环。当数码管显示‘9’时,如下图4-5。
4-4:甲机的数码管点亮,显示‘9’
5.总结
在进行串口通信仿真任务的时候,我们通过在网上查阅单片机串口通信的基本原理,搞懂了其工作原理后,便开始了对串口通信的电路进行了构建,再Proteus设计原理图的过程中也遇到了一些困难和仿真上的错误,不过经过细心检查和网上的查阅最终解决了错误和困难,成功的完成了该次仿真任务。同时提高了对单片机引脚的的应用能力,通过C51编程,也提高了自己对单片机的编程能力。
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
LED1=LED2=1;
SCON=0x50;//串口模式1,允许接收
TMOD=0x20;//T1工作模式2
TH1=0xfd;//波特率9600
TL1=0xfd;
PCON=0x00;//波特率不倍增
4-2:甲机的LED2和乙机的LED4分别点亮
4.3再次按下甲单片机的按钮向单片机乙发送数据,再松开甲单片机的按钮,此时甲单片机的LED1、LED2和乙单片机的LED3、LED4亮如下图4-3。
4-3:甲机的LED1、LED2和乙机的LED3、LED4全部点亮
4.4按下乙单片机的按钮向单片机甲发送数据,再松开乙单片机的按钮,此时甲单片机的数码管显示‘0’如下图4-4。此乙单片机的串口程序可以控制甲单片机的数码管从0显示到9.
Proteus
班级:
电信13-2
姓名:
段学亮
邓成智
崔俊杰
邓石磊
陈亮
高金玉
成绩:
1.设计要求
1.1甲单片机向乙单片机机发送控制命令字符,甲单片机同时接收乙单片机机发送的数字,并显示在数码管上。
1.2乙机程序接收甲机发送字符并完成相应动作乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
break;
}
}
}
}
//甲机串口接收中断函数
void Serial_INT() interrupt4
{
if(RI)
{
RI=0;
if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];
else P0=0x00;
}
}
/*名称:乙机程序接收甲机发送字符并完成相应动作
说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
RI=TI=0;
TR1=1;
IE=0x90;
while(1)
{
DelayMS(100);
if(K2==0)
{
while(K2==0);
NumX=++NumX%11;//产生0~10范围内的数字,其中10表示关闭
SBUF=NumX;
while(TI==0);
TI=0;
}
}
}
void Serial_INT() interrupt 4