Proteus中实现单片机双机通信实验

合集下载

两片单片机之间的串行通信(proteus仿真图+程序)

两片单片机之间的串行通信(proteus仿真图+程序)

两片单片机之间的串行通信(proteus仿真图+程序)两片单片机之间的串行通信(仿真图+程序)AT89C51+MAX232功能:(1)甲机P1口的开关控制乙机P1口的发光二级管,开关闭合发光二级管亮,开关断开发光二级管灭。

(2)乙机P2口的开关控制甲机P2口的数码管,按下4*4矩阵键盘,显示对应的键值0~F (3)乙机P0^0口的开关控制甲机P2口的数码管,按下按键,数码管从0~9循环显示;乙机P0^2口的开关控制甲机P2口的数码管,按下按键,数码管清零。

/****************************甲机控制与接收*********************************/ #include#include#define uchar unsigned char#define uint unsigned intsbit K0=P1^0;sbit K1=P1^1;sbit K2=P1^2;sbit K3=P1^3;sbit K4=P1^4;sbit K5=P1^5;sbit K6=P1^6;sbit K7=P1^7;uchar i;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}void main(){ uchar i;P2=0x00;SCON=0x50; //串口模式1TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定6900TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断while(1){ if(K0==0) send('0'); else send('A');if(K1==0) send('1'); else send('B');if(K2==0) send('2'); else send('C');if(K3==0) send('3'); else send('D');if(K4==0) send('4'); else send('E');if(K5==0) send('5'); else send('F');if(K6==0) send('6'); else send('G');if(K7==0) send('7'); else send('H');}}void serial_int() interrupt 4 //甲机串口接收中断函数{ if(RI){ RI=0;if(SBUF>=0 &&SBUF<=15)P2=tab[SBUF];elseP2=0x00;if(SBUF=='x')if(i>=0&&i<9){i=i+1;P2=tab[i];}if(i==9) i=0;if(SBUF=='y'){P2=0x00;i=0;}}}/*****************************乙机控制与接收程序*****************************/ #include#include#define uchar unsigned char#define uint unsigned intsbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L4=P1^4;sbit L5=P1^5;sbit L6=P1^6;sbit L7=P1^7;sbit KEY1=P0^0;sbit KEY2=P0^2;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}uchar key() //按键扫描{ uchar keyon,temp;P2=0x0f;delay(1);temp=P2^0x0f;switch(temp){ case 1:keyon=3;break;case 2:keyon=2;break;case 4:keyon=1;break;case 8:keyon=0;break;default:keyon=16;}P2=0xf0;delay(1);temp=P2>>4^0x0f;switch(temp){ case 1:keyon+=0;break;case 2:keyon+=4;break;case 4:keyon+=8;break;case 8:keyon+=12;break;}return keyon;}void main(){ SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1 工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定: 9600TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断delay(100);while(1){ P2=0xf0; //矩阵键盘if(P2!=0xf0)send(key());if(KEY1==1) //独立按键{ delay(20);if(KEY1==0)send('x');}if(KEY2==0) //清零send('y');}}void serial_int() interrupt 4 //乙机串口接收中断函数{ if(RI) { RI=0;switch(SBUF){ case '0':L0=0;break;case '1':L1=0;break;case '2':L2=0;break;case '3':L3=0;break;case '4':L4=0;break;case '5':L5=0;break;case '6':L6=0;break;case '7':L7=0;break;case 'A':L0=1;break;case 'B':L1=1;break;case 'C':L2=1;break;case 'D':L3=1;break;case 'E':L4=1;break;case 'F':L5=1;break;case 'G':L6=1;break;case 'H':L7=1;break;}}}。

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求1.熟练使用Keil C51 IDE集成开发环境,熟练使用Proteus软件。

2.掌握Keil与Proteus的联调技巧。

3.掌握串行通信在单片机系统中的使用。

4.掌握调度器设计的基础知识:函数指针。

二、实验设备1.PC机一套2.Keil C51开发系统一套3.Proteus 仿真系统一套三、实验容1.甲机通过串口控制乙机LED闪烁(1)要求a.甲单片机的K1按键可通过串口分别控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,关闭所有的LED。

b.两片8051的串口都工作在模式1,甲机对乙机完成以下4项控制。

i.甲机发送“A”,控制乙机LED1闪烁。

ii.甲机发送“B”,控制乙机LED2闪烁。

iii.甲机发送“C”,控制乙机LED1,LED2闪烁。

iv.甲机发送“C”,控制乙机LED1,LED2停止闪烁。

c.甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制LED的动作。

两机的程序要分别编写。

d.两个单片机都工作在串口模式1下,程序要先进行初始化,具体步骤如下:i.设置串口模式(SCON)ii.设置定时器1的工作模式(TMOD)iii.计算定时器1的初值iv.启动定时器v.如果串口工作在中断方式,还必须设置IE和ES,并编写中断服务程序。

(2)电路原理图Figure 1 甲机通过串口控制乙机LED闪烁的原理图(3)程序设计提示a.模式1下波特率由定时器控制,波特率计算公式参考:b.可以不用使用中断方式,使用查询方式实现发送与接收,通过查询TI和RI标志位完成。

2.单片机与PC串口通讯及函数指针的使用(1)要求:a.编写用单片机求取整数平方的函数。

b.单片机把计算结果向PC机发送字符串。

c.PC机接收计算结果并显示出来。

d.可以调用Keil C51 stdio.h 中的printf来实现字符串的发送。

单片机用proteus仿真双机串口通信总结体会

单片机用proteus仿真双机串口通信总结体会

单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。

下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。

《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。

Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。

本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。

实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。

电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。

2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。

主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。

串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。

3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。

首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。

然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。

总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。

基于Proteus仿真软件实现单片机与PC机多字节串行通信

基于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控件,添加后在工具箱中出现电话机图标,拖入窗体即可使用。

基于单片机的双机通信实训报告

基于单片机的双机通信实训报告

一.设计方案根据题目分析可知硬件电分为主机模块和从机模块。

主机模块中包含单片机子模块、lcd1602显示子模块和矩阵键盘模块,从机模块则包括单片机子模块、LED显示模块。

在主模块中由AT89C51单片机担任主机,LCD1602担任显示设备和由4位独立按键做矩阵键盘。

在整个系统中有一个从机模块,有一片AT89C51单片机担任从机模块的控制模块,串口采用单工及异步通信方式。

整个硬件结构原下图所示。

主机从机二.硬件分析(1)控制模块控制模块采用AT89C51作为主控芯片,11.0592MHZ的晶振频率作为时钟震荡电路。

基本电路图如下所示。

仿真图由于在protues里面,单片机内部默认自带晶振,所以不需要再连接振荡电路。

控制模块原理图(2)显示模块采用LCD1602作为显示模块,LCD1602用来显示当前从机LED的状态。

仿真图如下所示:仿真图在画原理图时,由于没有LCD1602的封装。

所以,本人直接用16跟引脚的排针代替。

然后在给相应的引脚表上网络位口。

但是再画PCB,必须控制好原件之间的距离,以免导致制版时,元件位置冲突。

原理图如下所示:原理图(3)矩阵键盘模块矩阵键盘用来给单片机输入一个电平值,然后再通过主机CPU发送给从机,最后从机CPU接收,并通过LED显示出结果。

当按键按下,相当于给主机CPU 送入一个低电平,主机再把这个电平值发送给从机。

因为LED是采用共阳连接的方式,所以可以点亮LED。

矩阵键盘仿真图,以及原理图如下所示:仿真图原理图(4)LED显示模块LED显示模块,主要用来显示主机送给从机的电平值是高电平还是低电平,同时也可以用来检测,整个通信系统是否能够正常工作。

为了整个电路简化,以及效果更明显,所以决定采用共阳连接的方式。

LED显示模块的仿真图,以及原理图如下所示:仿真图原理图三.软件分析根据题目分析可知硬件电分为主机模块和从机模块。

AT89C51单片机担任主机模块和从机模块的控制模块,串口采用单工及异步通信方式。

Proteus中实现单片机双机通信实验

Proteus中实现单片机双机通信实验

息 , 并进 行识 别 处 理 ,产 生 相 应 的 键 盘 代 1 2 M H z ,平 衡 电 容采 用 3 3 p F 。复 位 电路 在 系 码 , 然后 通 过 串行 发 送 端T X D / P 3 . 1 发 送 给B 统 上 电或运 行过 程 中对 单 片机 进 行初 始 化操 机; 作。 3 . B 机 收 到A 机 发 送 的键盘 代 码后 ,通 过 处 理 ,从P 0 口输 出七段 数 码管 段 码信 号 ,驱 动共 阳极七 段数码 管显示键 盘代 码 。
引 言
单 片机开发 是一项综合性 、实践性 、 应用 性 很 强 的技 术 。传 统的 单 片机 开发 采用 “ 先 理 论 设计 ,再动 手 实验 ”的开 发模 式 , 该 模 式 造 成 编 程 与 之 实验 结 果 分 离 , 不 便 于 调 试 , 效 果 并 不 理 想 。 鉴 于 此 ,本 文 将 P r o t e u s 和 引入 到单片 机 的项 目式 开发 中 ,通 过 仿 真 的 直观 性和 真 实感 , 不仅 节 约 了硬件 资源 的 投 入 ,而且 提 高 了单 片机 开 发效 率和 产 品 质量 。 P r o t e u s 简介 P r o t e u s 软件是英 国L a b C e nt e r e l e c t r o n i C S 公 司开 发 的 电路分 析 与 实物 仿 真 软件 ,它 除 了具 有 其他 E D A 工 具 的原 理 布 图 、P C B 自动 或 人 工 布线 、 电路 仿 真等 功 能 外 ,P r o t e u s 最 大 的特 点 是基 于 微 控 制器 的 设计 连 同所 有 的外 围电路 一起 仿 真 ,可 直接 在 单 片 机 虚 拟 系 统 上对 M C U 编 程 , 并可 对 软 件 源 代 码进 行 实时 调 试 。同 时 ,它具 有 电路 互 动 仿 真 功 能 , 通 过 动 态 外 设 模 型 , 如 键 盘 、L E D /L C D 等 ,可 实时 显示 系 统输 入 、输 出结 果 , 以实 现 交 互仿 真 , 或 配合 P r o t e u s 配 置 的虚 拟 仪 器如 示波 器 、逻 辑 分析 仪 等 , 使 单片机虚拟 系统实现预 期的实验效果 。 此 处还 需要用K e i 1 软件 来协助 。K e i l 软件 是美 国K e i 1 S o f t w a r e 公司 出品的兼容 单片机C 语言 软 件的开 发系统 ,是 目前世界上最 好的5 1 单片 机 开 发 工 具之 一 。它提 供 了丰 富 的库 函 数和 功 能 强 大 的集 成开 发调 试 工具 ,生成 的 目标 代 码 效 率 高 ,多数 语句 生 成 的汇编 代 码 很紧 凑 ,容 易理 解。 P r o t e u s 和K e i l 各 自都可 以进 行仿 真 调 试 ,但 效果 不 是很 理想 ,如把 两者 结 合起 来 相 互 配合 ,则可 发挥P r o t e u s  ̄ D K e i l 的优 势使 其 在 仿 真过 程 中 的软件 调 试和 硬件 设 计 更加 便 捷 、高效 。 二 、仿真项 目教 学案例 ( 一 )项 目要求 本 项 目要 求用 两 片A T 8 9 C 5 1 单 片机 实 现 A 机 检 测 输 入键 盘信 息 ,并 通 过 串行 通 信 方 式 ,传 送给B 机 ,在B 机 用数码 管显 示A 机 所按 下的对 应按键 代 号 , “ 0 - 9 ”显示对 应数 字 , 其 余按键 显示 “ 一 ”。 ( 二 )任务 分析 项 目开 发 过程 是紧 紧 围绕 一个 或 多个 完 整 的 项 目展 开 的 ,因此 项 目的设计 ,是单 片 机 课 程教 学 成败 的 关键 。按照 本项 目要求 , 通 过 分析 ,该项 目实际 上 是一 个双 机 单 向通 信 项 目,只 要 掌握 了该 项 目,双 向通 信 问题 不难 理解 。具体 思路 是: 1 . A 、B 单 片机 均采 用A T 8 9 C 5 1 ,A 机 须 完 成 矩 阵键 盘扫 描 识 别 、键 盘代 码 串行传 送 两 项任 务 。B 机 须完成 串行 接收代 码 、数码 显示 两 项任 务 。本 项 目程 序 的关 键 就是 串 行通 信 程序 部分 。 2 . A 机通过检 ̄ J , P 2 口外接 的矩 阵 键 盘 信

Proteus单片机仿真实验内容

Proteus单片机仿真实验内容

实验1 PROTUES环境及LED闪烁实验1.实验任务做一个闪烁灯:在P1.0端口上接一个发光二极管D1,使D1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒,重复循环。

2.电路原理图3.程序设计内容(1)延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大多是微秒级。

实验要求的闪烁时间间隔为0.2秒,所以在执行某一指令时,需要插入延时程序,来达到实验的要求。

延时子程序如下:DELAY: MOV R5, #20D1: MOV R6, #20D2: MOV R7, #248DJNZ R7, $DJNZ R6, D2DJNZ R5, D1RET(2)输出控制如上图所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。

实验2 外部中断实验1.实验任务设计一个交通灯正常工作程序,并在有意外情况发生的情况下,能自动中断进入到中断服务程序运行,进行紧急事故处理,处理完成后能回到正常工作程序继续运行。

如原理图所示,P1接一位数码管用于显示时间,P2端口接东西方向和南北方向红绿灯,P3.2接一个按钮用于模拟一个外部中断源,当正常工作时,东西方向绿灯亮8秒,然后南北方向绿灯亮9秒;当模拟中断源发出中断信号时,东西和南北红灯亮5秒后返回正常工作程序。

(注:这里数码管选用了共阳极的数码管)数码管的段选码如下表所示:2.电路原理图3.程序设计内容(1)从proteus库中选取元器件:单片机AT89C51、磁片电容CAP、电解电容CAP-ELEC,晶振CRYSTAL、电阻RES、数码管7SEG-COM-CAT-GRN,按钮BUTTON,发光二极管等。

(2)设计延时程序。

实验3 T0波形发生器实验1.实验任务(1)首先用AT89C51单片机定时器/计数器0的定时功能构成一方波发生器,实现周期为400us的方波输出,如图所示,P3.5,p3.7是两个波形输出端,分别输出反相波形,两路波形输入虚拟示波器的A通道和B通道,用示波器观察方波的周期是否是400us。

两个单片机之间的简单异步串行通信

两个单片机之间的简单异步串行通信

两个单片机之间的简单异步串行通信2009-9-1 21:13提问者:feitian_001|悬赏分:10|浏览次数:898次我在proteus中用两个AT89C52单片机做了一个小设计,想以来来验证两个单片之间异步串行通信功能的实现。

下位机的TXD和上位机的RXD相连。

下位机发送0x07给上位机,然后上位机接受0x07这个数,并将收到的这个数赋给P1口(P1口连着八个发光二极管(共阴极)),按理说如果是正常通信的话,上位机收到下位机的数据应该是0x07,也就是说P1口连接着的八个发光二极管会点亮后三个,但是我编写程序加载到proteus中的单片机中运行程序,发现数码管亮的很乱,不是预期的那种亮法,实在是找不到问题出在了哪里。

下面我把程序贴一下,希望大家对异步串行通信比较懂的给我指点一下。

下位机(发送数据的单片机):#include <reg52.h>#define uchar unsigned char#define uint unsigned intvoiduart_init(){TMOD=0x20; //T1 方式2TH1=0xFD; //baud rate 9600bit/sTL1=0xFD;TR1=1;REN=1; //允许接收SM0=0; //串口方式1SM1=1;TI=0;}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}void main(){uart_init();while(1){SBUF=0x07;while(!TI);TI=0;delay(5000);}}上位机(接收发过来的数据的单片机):#include <reg52.h>#define uchar unsigned char#define uint unsigned intvoiduart_init(){TMOD=0x20;TH1=0xFD; //baud rate 9600bit/sTL1=0xFD;TR1=1;REN=1;SM0=0; //串口方式1SM1=1;}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}void main(){uart_init();while(1){if (RI){RI=0;P1=SBUF;delay(3000);}}}问题补充:我的这个设计很简单的,就是两个AT89C52单片机异步串行端口交叉相连,然后上位机P1口接八个发光二极管,就这些东西最佳答案因为你是用查询方式进行通信的,而程序没有中没有设置两机通信的联络信号,即接受机接收到的第一位数据不一定是发送机发送的第一位数据,而有可能是第二、第三位数据,这样接受到的八位数据就可能是发送机发送多次数据中截取的八位数据,又因两机延时时间不同,因此接受到的第一位数据不可能固定不变的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Proteus中实现单片机双机通信实验
【摘要】本文针对单片机项目设计中出现的问题和基本方法,提出了将Proteus仿真软件和Keil软件引入到单片机项目式开发中。

以“单片机双机通信实验”项目为例,详细阐述Proteus软件在单片机课程教学中的使用方法和仿真调试过程。

实践证明,该方法能激发开发热情,锻炼创新能力和单片机软硬件综合开发能力,是提高单片机开发效率和设计产品质量的一种有效方法。

【关键词】单片机开发;Proteus软件;仿真调试
引言
单片机开发是一项综合性、实践性、应用性很强的技术。

传统的单片机开发采用“先理论设计,再动手实验”的开发模式,该模式造成编程与之实验结果分离,不便于调试,效果并不理想。

鉴于此,本文将Proteus和引入到单片机的项目式开发中,通过仿真的直观性和真实感,不仅节约了硬件资源的投入,而且提高了单片机开发效率和产品质量。

一、Proteus简介
Proteus软件是英国Labcenter electronics公司开发的电路分析与实物仿真软件,它除了具有其他EDA工具的原理布图、PCB自动或人工布线、电路仿真等功能外,Proteus最大的特点是基于微控制器的设计连同所有的外围电路一起仿真,可直接在单片机虚拟系统上对MCU编程,并可对软件源代码进行实时调试。

同时,它具有电路互动仿真功能,通过动态外设模型,如键盘、LED/LCD等,可实时显示系统输入、输出结果,以实现交互仿真,或配合Proteus配置的虚拟仪器如示波器、逻辑分析仪等,使单片机虚拟系统实现预期的实验效果。

此处还需要用Keil软件来协助。

Keil软件是美国Keil Software公司出品的兼容单片机C语言软件的开发系统,是目前世界上最好的51单片机开发工具之一。

它提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率高,多数语句生成的汇编代码很紧凑,容易理解。

Proteus和Keil各自都可以进行仿真调试,但效果不是很理想,如把两者结合起来相互配合,则可发挥Proteus和Keil的优势使其在仿真过程中的软件调试和硬件设计更加便捷、高效。

二、仿真项目教学案例
(一)项目要求
本项目要求用两片AT89C51单片机实现A机检测输入键盘信息,并通过串行通信方式,传送给B机,在B机用数码管显示A机所按下的对应按键代号,“0-9”
显示对应数字,其余按键显示“-”。

(二)任务分析
项目开发过程是紧紧围绕一个或多个完整的项目展开的,因此项目的设计,是单片机课程教学成败的关键。

按照本项目要求,通过分析,该项目实际上是一个双机单向通信项目,只要掌握了该项目,双向通信问题不难理解。

具体思路是:
1.A、B单片机均采用AT89C51,A机须完成矩阵键盘扫描识别、键盘代码串行传送两项任务。

B机须完成串行接收代码、数码显示两项任务。

本项目程序的关键就是串行通信程序部分。

2.A机通过检测P2口外接的矩阵键盘信息,并进行识别处理,产生相应的键盘代码,然后通过串行发送端TXD/P
3.1发送给B机;
3.B机收到A机发送的键盘代码后,通过处理,从P0口输出七段数码管段码信号,驱动共阳极七段数码管显示键盘代码。

图1
图2
图3
(三)硬件仿真图绘制
通过以上的任务分析,我们先设计出硬件电路,并将电路在Proteus中绘制出来。

电源电路用5V,具体电路省略。

时钟电路用来产生时钟信号供单片机工作,晶振采用12MHz,平衡电容采用33pF。

复位电路在系统上电或运行过程中对单片机进行初始化操作。

图4
图5
1.单片机最小系统
本案例所用单片机型号为AT89C51,其结构简单,控制灵活。

其最小系统主要包括主芯片、电源电路、时钟电路、复位电路。

2.本例单片机最小系统
在这里要特别说明的是,在Proteus中单片机可以默认以最小系统工作。

即可以不加上电源电路、复位电路、时钟电路也可以工作。

不过为了便于直观观察,
我们还是画出这些路。

在绘制时,双机只画出单机的这些电路,另一个不画。

并且为了不产生标号冲突,B机的引脚标号用数字表示。

本例中A机的主电路、电源电路、时钟电路、复位电路见附图。

B机的系统图和A机系统大同小异。

3.本例输入、输出系统及通信连接
本例中的输入系统是矩阵键盘电路,从A机输入。

利用P2口作为键盘检测口,P2.0-P2.3为行线扫描,P2.4-P2.7为列线检测。

本例中的通信连接是将双机的RXD和TXD两脚,即P3.0和P3.1交叉相边即可。

B机的这两脚标号和A机对应。

本例中的输出系统是单个LED共阳数码管显示电路,从B机P0输出段码控制信号。

4.本例硬件仿真总图见附1。

(四)软件系统流程图
A机主程序流程图如图1所示,键盘扫描检测程序流程图如图2所示,B机主程序流程图如图3所示。

具体的程序见附3。

编程输入Kei uVsion4软件并生成A机和B机的”.hex”格式可执行文件。

图6
图7
图8
附1 双机通信实验仿真电路原理图
附2 电源原理图
(五)Proteus ISIS载入仿真
1.加加载源程序和目标程序文件、目标代码文件、设置时钟频率
在ISIS菜单中单击Source(源程序),弹出下拉菜单,点击“Add/Remove Source File…”,弹出如图1.9所示的对话框,选取A机芯片,点击,加入源程序“双机通信实验A机发送程序.C”,如图4所示;选取B机芯片,点击,加入源程序“双机通信实验B机接收程序.C”,如图5所示。

点击确定。

相关文档
最新文档