#基于Protues的仿真实验.docx
《#基于Protues的仿真实验.docx》由会员分享,可在线阅读,更多相关《#基于Protues的仿真实验.docx(36页珍藏版)》请在冰豆网上搜索。
![#基于Protues的仿真实验.docx](https://file1.bdocx.com/fileroot1/2023-2/4/5b4739c8-3be0-49f2-ae37-09b41db938ba/5b4739c8-3be0-49f2-ae37-09b41db938ba1.gif)
#基于Protues的仿真实验
Proteus基本操作和8051最小系统
利用Proteus平台搭建一个“8051最小系统”的仿真电路(流水灯为例)
一、Proteus基本操作
(一)启动Proteus仿真软件:
双击“isis”图标,出现isis操作页面。
(二)搭建单片机系统仿真电路:
分“器件选取”、“器件放置”和“电路连接”三大步来操作。
〖第一步器件选取〗:
isis操作页面的左侧中下部分是电路和器件操作的导航区域,器件选取前“Devices”栏目下为空,器件选取操作的目的是将从器件库中分拣出需要的器件,这些器件排列在“Devices”栏目下。
A:
先选择“器件和仪器工具栏”的“放大器符号样”图标(该工具栏的第一个图标),再单击“P”键即弹出“PickDevices”窗口。
PickDevices窗口左侧可以输入器件类型名称,或者选择器件类型,窗口中部即出现相应类型的器件,若鼠标选中器件,窗口右侧会出现该器件的引脚图和封装图。
B:
在PickDevices窗口中,先选中器件,后点击窗口右下脚的“确定”按钮,即将器件排列在“Devices”栏目下了。
或者直接双击被选的器件,也能收到同样的操作结果。
C:
对于电源、地、输入和输出端等特殊器件,不在“PickDevices”窗口中选取而在“PickTerminals”窗口中选取。
只要选择“器件和仪器工具栏”的“输入输出符号样”图标(该工具栏的第八个图标),即变“Devices”栏目为“Terminals”栏目,“Terminals”栏目下已经将电源、地、输入和输出端等特殊器件列出了一部分,如还要增加时,单击“P”键即弹出“PickTerminals”窗口供选取。
〖第二步器件放置〗:
isis操作页面的中右侧是搭建硬件电路系统原理图和显示系统运行状态的区域。
器件放置前或选择“NewDesign”文件后,器件放置区域同导航区一样栏目内容为空,器件放置操作是把导航区的器件排列在放置区的适当位置,以便于搭建硬件电路系统原理图。
A:
器件放置的基本操作:
是将导航区的器件选中(左键),然后把鼠标移到放置区中适当位置,再点击左键,即放置了器件。
若多次点击左键,则会放置多个相同的器件。
B:
器件的移动、翻转和删除操作:
在放置区中选中器件的方法是用右键点击一次,被选中的器件变成红色,然后用鼠标选中红色的器件再按住左键移动鼠标即移动了器件位置,移动后器件仍然是红色,移动完成后将鼠标移开器件至空白处再点击右键,红色器件变回黑色。
器件翻转的方法是右键选中器件使之变红,然后将鼠标移至导航区下方,点击红色的翻转图标,即可实现器件的翻转,完成后将鼠标移回放置区空白处再点击右键,红色器件变回黑色。
器件删除的的方法是右键选中器件使之变红,再对变红的器件点击右键,即删除了相应的器件。
C:
器件和图形的复制操作:
在放置区中,按住鼠标右键适当移动鼠标即画出一个矩形方框,方框内部的器件和图形变成红色,这时再点击菜单下的复制图标和粘贴图标,即会复制出一个相同的方框图形,移动鼠标即可将复制的图形移到适当的位置,再点击左键定位,若定位之前点击右键即删除复制的图形。
D:
器件属性的设置:
在放置区中右键选中器件后器件变红,再点击左键即弹出“EditComponent”对话框,该对话框内容即器件的属性,其中的一些内容可以选择隐藏不被显示出来。
〖第三步电路连接〗:
搭建硬件电路系统原理图需要把器件的引脚连接起来,其操作比较简单。
A:
电路连接操作方法:
将鼠标移至一个引脚或一条连线上点击左键,再移动鼠标即拉出一条红色导线,导线要拐弯时,则点击左键再移动鼠标即拉出拐弯的导线,最后导线的另一端通常要接到另一个引脚或另一条连线上,再点击左键导线变回黑色完成连接。
若只对导线两端要求正确连接,对导线路由不作要求,则鼠标只需对连接导线始端和末端的引脚进行点击左键,便自动完成布线。
B:
电路连接快速操作方法:
若需要连接的两个器件的引脚都按照一个方向的顺序、等距离地排列,那么只需对第一条导线进行人工布线,从第二条导线开始顺序双击连接导线始端的引脚即可完成对应的导线连接。
C:
导线的删除操作:
右键选中导线后导线变红,再对变红的导线点击右键即删除了导线。
D:
导线属性的设置:
右键选中导线后导线变红,再点击左键即弹出“EditWireStyle”对话框,即可对导线的属性进行设置。
(三)创建和导入ASM源文件
进入菜单栏,选择“Source”下“Add/RemoveSourcefiles…”,即弹出“Add/RemoveSourceCodeFiles”对话框。
再点击“New”按键,弹出“NewSourceFiles”对话框,即可以创建(只在文件名栏目输入一个文件名,后缀为ASM)或导入ASM源文件。
确定后,“Add/RemoveSourceCodeFiles”对话框中“SourceCodeFilename”栏目即有ASM源文件名及路径,然后在“CodeGenerationTool”栏目中选择“ASEM51”,最后点击“OK”按键,即完成了创建和导入ASM源文件。
此后“Source”下即可以看到相应的ASM源文件。
(四)编译ASM和导入HEX文件
编译ASM文件的前提是已导入ASM文件,启动编译的方法有两种:
方法一:
进入菜单栏,选择“Source”下“BuildAll”,即弹出“BUILDLOG”提示框,提示编译ASM文件的结果。
方法二:
直接点击器件放置和运行区下方的“运行”按键,若ASM文件内容有变化,即自动对其编译,若问题即弹出“SOURCECODEBUILDERRORS”提示框,提示编译ASM文件的结果。
编译ASM文件成功后即生成HEX文件,单片机导入HEX文件的方法是,打开单片机器件属性对话框,在“ProgramFiles”栏目里打开文件目录,选择装入HEX文件即可。
单片机此后按照该HEX文件的代码运行程序。
【特别注意】单片机运行速度和晶振频率有关,目前PROTEUS的版本不支持晶振器属性里所设置的频率值,单片机晶振频率必须在单片机器件本身的属性里设置,即打开单片机器件属性对话框,在其“ClockFrequency”栏目里输入频率值。
(五)软件调试菜单
进入菜单栏,选择“Debug”下“Start/ResartDebugging”,即进入调试状态,此后可以进行单步运行、全速运行、断点设置等功能。
【特别提示】:
调试期间,即可看到电路系统的运行结果和状态细节。
可在电路中进行电压、电流和波形测试,其测试操作基本方法是选择“器件和仪器工具栏”的测试工具或测试信号图标,将测试工具和测试信号放置到电路的相应位置,并和测试点连接起来(放置和连接方法同电路器件一样),然后再调试运行即可看到测试结果。
二、参考硬件电路
三、参考汇编程序
ORG00H
LJMPMAIN
ORG100H
MAIN:
MOVA,#7FH
LOOP:
RLA
MOVP0,A
LCALLDEL
LJMPLOOP
DEL:
MOVR0,#4
DL3:
MOVR2,#250
DL2:
MOVR3,#250
NOP
DEL1:
DJNZR3,DEL1
NOP
DJNZR2,DL2
DJNZR0,DL3
RET
END
四、思考练习题
(一)单片机最小系统由哪几个基本部分组成?
(二)修改硬件电路及晶振频率,使流水灯通过P2口运行,并加快流水速度。
(三)修改程序,改变流水灯流向和流水灯花样。
基础实验一查表指令及基本IO实验
一、实验内容
(1)先搭建一个“8051基本IO实验”的仿真电路,该单片机系统功能是一个开关闭合后,有一个对应的LED指示灯亮。
(2)利用已搭建的电路运行“查表指令程序”,实验要求输出的花样按照一个常数表的数值改变。
二、.参考硬件电路
.
三、参考汇编程序
(1)基本IO实验
ORG0000H
LJMPSTART;P2输入P0输出
ORG0100H
START:
NOP
LOOP:
MOVP2,#0FFH;复位P1口为输入状态
MOVA,P2;
MOVP0,A
AJMPLOOP
END
(2)查表指令实验
ORG0000H
LJMPSTART;流水灯程序,查表P1输出
ORG0100H
START:
MOVDPTR,#TAB
LOOP:
CLRA
MOVCA,@A+DPTR;
CJNEA,#0FFH,NEXT
AJMPSTART
NEXT:
CPLA
MOVP0,A
LCALLDELAY
INCDPTR
AJMPLOOP
DELAY:
MOVR5,#250
DELAY1:
MOVR6,#250
NOP
DELAY0:
DJNZR6,DELAY0
DJNZR5,DELAY1
RET
TAB:
DB01H,02H,04H,08H,10H,20H,40H,80H
DB80H,40H,20H,10H,08H,04H,02H,01H,0FFH
END
四、思考练习题
(一)运行基本IO程序后,设置不同的开关状态,查看运行结果.。
设置好开关状态后,标出每一条指令的功能和执行结果
(二)将基本IO程序的指令AJMPLOOP句改成LOOP1:
AJMPLOOP1,分析和验证运行结果。
(三)对于查表指令程序,若DPTR的内容分别是TAB+5和TAB+16,分别写出上述程序中指令MOVCA,@A+DPTR的执行结果。
(四)分析查表指令程序执行的大致过程。
将程序的常数表加以修改,使显示的花样改变。
之后又修改延时子程序DELAY,使显示变化的速度加快。
基础实验二外部中断和堆栈指令实验
一、实验内容
搭建一个“外部中断和堆栈指令实验”的仿真电路,该单片机系统功能是,系统运行后,LED灯显示一个加法计数。
中断开关闭合后,显示的内容是插入一个流水灯扫描,流水灯扫描结束后继续显示加法计数。
二、.参考硬件电路
三、参考汇编程序
ORG00H
LJMPSTART;加法计数显示中断循环两次,现场保护
ORG003H
LJMPI001
ORG100H
START:
SETBIT0
SETBEX0
SETBEA
CLRA
ST0:
CPLA
MOVP0,A
LCALLDL0
CPLA
INCA
AJMPST0
I001:
PUSHACC;NOP;PUSHACC保护现场
SETBRS1
MOVP0,#0FFH
MOVA,#0FFH
LCALLDL0
MOVR3,#8
LCALLDL0
LOOP:
CLRC
RLCA
MOVP0,A
LCALLDL0
DJNZR3,LOOP
MOVR3,#8
LOOP1:
SETBC
RRCA
MOVP0,A
LCALLDL0
DJNZR3,LOOP1
CLRRS1
POPACC;NOP;POPACC恢复现场
RETI
DL0:
MOVR0,#4
DL1:
MOVR1,#255
DL2:
MOVR2,#255
DJNZR2,$
DJNZR1,DL2
DJNZR0,DL1
RET
END
四、思考练习题
(一)分析程序结构,运行程序后,随时将开关闭合一下,查看运行结果.。
(二)分析程序的中断响应的执行过程。
若将指令SETBIT0改为CLRIT0,分析和验证运行结果。
(三)将程序的指令PUSHACC和POPACC同时改成NOP指令,分析和验证运行结果。
基础实验三定时器和静态显示实验
一、实验内容
(1)搭建一个“定时器和静态显示实验”的仿真电路,该单片机系统功能是,系统运行后,LED数码管显示器相当于秒计数器。
(2)搭建一个类似电路,能够记录中断开关闭合时长,LED数码管显示器相当于秒表。
二、.参考硬件电路
(1)秒计数器电路
(2)秒表电路
【提示】:
图中的BCD数码管,相当于上面秒计数器电路中“4511加七段数码管”的功能,这样做的目的只是为了简化电路而已。
后续的实验电路有类似的做法,不再一一加以说明。
三、参考汇编程序
(1)秒计数器程序
ORG0000H
LJMPSTART
ORG0013H
LJMPT0INT
START:
MOVP0,#00H
MOVTMOD,#01H;G=0,C=0,M1M0=01
MOVTH0,#4CH;11.0592m,50ms中断计B400H次
MOVTL0,#00H
SETBTR0
SETBEA
SETBET0
MOVSP,#60H;30H改成60
MOV30H,#00H;中断计数器初值
MOV31H,#00H;秒计数器初值
CLR00H;秒刷新标志
LOOP:
JNB00H,LOOP
setbp2.0;clrp2.0
MOVP0,31H
clrp2.0;setbp2.0
CLR00H
AJMPLOOP
T0INT:
MOVTH0,#4CH;11.0592m,50ms中断计B400H次
MOVTL0,#00H
PUSHACC
INC30H
MOVA,30H
CJNEA,#20,REL0;中断20次1秒
REL0:
JCNEXT0
MOV30H,#00H
MOVA,31H
ADDA,#1
DAA
MOV31H,A
SETB00H
CJNEA,#60H,REL1
REL1:
JCNEXT0
MOV31H,#00H;0~59
NEXT0:
POPACC
RETI
END
(2)秒表程序
ORG0000H
LJMPSTART
ORG0013H
LJMPT0INT
START:
MOVP0,#00H
MOVTMOD,#01H;G=0,C/T=0,M1M0=01
MOVTH0,#4CH;11.0592m,50ms中断计B400H次
MOVTL0,#00H
;SETBTR0
SETBEA
SETBET0
MOVSP,#60H;30H改成60
MOV30H,#00H;中断计数器初值
MOV31H,#00H;0.1秒计数器初值
LOOP:
JBP3.2,LOOP
SETBTR0;启动计数
MOV31H,#00H
MOVP0,31H;显示00初值
LOOP1:
JNBP3.2,LOOP1
CLRTR0;停止计数
MOVTH0,#4CH;11.0592m,50ms中断计B400H次
MOVTL0,#00H
AJMPLOOP
T0INT:
MOVTH0,#4CH;11.0592m,50ms中断计B400H次
MOVTL0,#00H
PUSHACC
INC30H
MOVA,30H
CJNEA,#2,REL0;中断2次0.1秒
REL0:
JCNEXT0
MOV30H,#00H
MOVA,31H
ADDA,#1
DAA
MOV31H,A;0.0~9.9秒
NEXT0:
MOVP0,31H
POPACC
RETI
END
四、思考练习题
(一)分析秒计数器程序结构,查看运行结果.。
(二)分析秒表程序的中断响应的执行过程。
随时按一下按键,分析和验证运行结果。
扩展实验一并行扩展8255实验
一、实验内容
搭建一个“并行扩展8255实验”的仿真电路,该单片机系统功能是,系统运行后,点阵LED流水灯显示,显示位置受8255的C口的波论开关控制。
二、.参考硬件电路
三、参考汇编程序
PAEQU7CFFH
PBEQU7DFFH
PPCEQU7EFFH
PKEQU7FFFH
ORG0000H
LJMPSTART;流水灯程序,查表P1输出
ORG0100H
START:
nop
;LCALLDELAY
MOVDPTR,#PK;
MOVA,#89H;10001001,AB方式0,输出,C输入
MOVX@DPTR,A
MOVDPTR,#PPC;
MOVXA,@DPTR
NEXT:
MOVB,A
MOVDPTR,#PA;
cpla
MOVX@DPTR,A
MOVDPTR,#PB;
MOVA,#7FH
LOOP:
RLA
movr0,a
MOVDPTR,#PB;
MOVX@DPTR,A;
LCALLDELAY
MOVDPTR,#PPC;
MOVXA,@DPTR
CJNEA,B,NEXT
mova,r0
AJMPLOOP
DELAY:
MOVR5,#2
DELAY1:
MOVR6,#250
DELAY0:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY0
DJNZR5,DELAY1
RET
END
;(提示:
控制字格式为:
D7-方式有效标志,D6D5-PA组方式选择,D4-PA口输入输出选择,D3-PC口高半字节输入输出选择,D2-PB组方式选择,D1-PB口输入输出选择,D0-PC口低半字节输入输出选择,1-输入,0-输出。
8255A的初始化时间较长)
四、思考练习题
(1)结合硬件电路说明,PA/PB/PC/控制口地址为何这样赋值?
PAEQU7CFFH
PBEQU7DFFH
PPCEQU7EFFH
PKEQU7FFFH
(2)结合系统功能说明,控制字为何这样赋值?
MOVDPTR,#PK;
MOVA,#89H;10001001,AB方式0,输出,C输入
MOVX@DPTR,A
(3)分析程序结构,运行程序拨动开关,分析运行结果,实验如何修改程序改变流水灯方向?
扩展实验二串行通信实验
一、实验内容
(1)搭建一个“8051双机通信的实验”的仿真电路,该单片机系统功能是,系统运行后,两个单片机各作加法、减法计数,在外部中断的控制下,能向对方发送数据。
(2)搭建一个“51单片机和PC机通信的实验”的仿真电路,该单片机系统功能是,系统运行后,PC机串口向单片机发“U”,单片机回发问候信息,单片机每这么完成收发一次,计数器加一显示出来。
二、.参考硬件电路
(1)8051双机通信的电路
(2)51单片机和PC机通信的电路
三、参考汇编程序
(1)8051双机通信的两个程序
A:
加法计数程序
ORG0000H
LJMPMAIN
ORG003H
LJMPINT
ORG023H
LJMPSPT
ORG130H
MAIN:
MOVSCON,#50H;串口方式1
MOVPCON,#00H;SMOD=0
MOVTMOD,#20H;T1方式2(重装方式)
MOVTH1,#0FDH;11MHz晶振条件
MOVTL1,#0FDH;波特率为9600bps
SETBTR1
SETBEA
SETBEX0
SETBIT0
SETBES;CLRES
SETBPS
MOVR0,#00H
LOOP:
MOVP1,R0
LCALLDEL
INCR0
SJMPLOOP
INT:
MOVSBUF,R0
JNBTI,$
CLRTI
RETI
SPT:
JBTI,RSPT
CLRRI;
MOVA,SBUF
MOVP1,A
RSPT:
RETI
DEL:
MOVR7,#20
DL3:
MOVR6,#250
DL2:
MOVR5,#250
DJNZR5,$
DJNZR6,DL2
DJNZR7,DL3
RET
END
B:
减法计数程序
ORG0000H
LJMPMAIN
ORG003H
LJMPINT
ORG023H
LJMPSPT
ORG130H
MAIN:
MOVSCON,#50H;串口方式1
MOVPCON,#00H;SMOD=0
MOVTMOD,#20H;T1方式2(重装方式)
MOVTH1,#0FDH;11MHz晶振条件
MOVTL1,#0FDH;波特率为9600bps
SETBTR1
SETBEA
SETBEX0
SETBIT0
SETBES;CLRES
SETBPS
MOVR0,#00H
LOOP:
MOVP1,R0
LCALLDEL
DECR0
SJMPLOOP
INT:
MOVSBUF,R0
JNBTI,$
CLRTI
RETI
SPT:
JBTI,RSPT
CLRRI;
MOVA,SBUF
MOVP1,A
RSPT:
RETI
DEL:
MOVR7,#20
DL3:
MOVR6,#250
DL2:
MOVR5,#250
DJNZR5,$
DJNZR6,DL2
DJNZR7,DL3
RET
END
(2)51单片机和PC机通信程序
ORG0000H
LJMPMAIN
ORG23H
LJMPSPT
ORG30H
MAIN:
MOVSCON,#50H;串口方式1
MOVPCON,#00H;SMOD=0
MOVTMOD,#20H;T1方式2(重装方式)
MOVTH1,#0FDH;11MHz晶振条件
MOVTL1,#0FDH;波特率为9600bps
SETBTR1
SETBES
SETBEA
MOVR2,#00H;R2放显示次数
DISP:
MOVP1,R2
SJMPDISP
SPT:
CLRRI;
MOVA,SBUF
CJNEA,#'U',KK
CLRES
INCR2
MOVDPTR,#TBL
LOOP:
MOVA,#00H
MOVCA,@A+DPTR
CJNEA,#0FFH,GOON
SETBES
AJMPKK
GOON:
MOVSBUF,A
JNBTI,$
CLRTI
INCDPTR
AJMPLOOP
KK:
RETI
TBL:
DB"-",'H','e','l','l','o','!
',0FFH
END
四、思考练习题
(1)双机通信时,晶振频率能否一个使用12M,另一个使用11.0592M晶振?
双机通信程序中设置了外部中断和串行中断,哪一个中断优先级高?
是否允许串行发中断和串行收中断?
串行中断子程序里如何识别处理这两种中断?
(2)