微机原理基于proteus的跑马灯系统设计及仿真文档格式.docx
《微机原理基于proteus的跑马灯系统设计及仿真文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理基于proteus的跑马灯系统设计及仿真文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
具体要求为:
〔1〕、输入设备三个启动按钮、一个停顿按钮,输出设备为八个跑马灯;
〔2〕、三个启动按钮对应三种跑马灯显示效果,按下任意一个启动按钮,跑马灯显示对应的效果,按下停顿按钮则跑马灯全部熄灭。
由上分析可知,我们的硬件的电路需要另行搭建,电路中需包含四个按钮和八个跑马灯以及相关芯片,既有输入设备又有输出设备,经过分析可以使用芯片8255A来实现输入与输出,再加上锁存地址芯片74LS273、译码芯片74LS154以及相关门电路即可构本钱设计的硬件电路根底。
进一步分析最终决定用8255A的A口作为输出去控制跑马灯,B口作为按钮信号输入,CPU通过接收输入信号从而发出对应命令去控制8255A芯片A口输出,从而A口输出相应电平控制跑马灯有规律的亮灭。
连接好硬件电路后的主要任务就是编写相应程序,通过程序去控制和调度硬件电路的输入与输出。
1.2系统连接图设计
8255A是一种通过可编程并行I/O接口芯片。
广泛用于几乎所有系列的微机系统中,8255A具有三个带锁存或缓冲的数据端口,可与外设并行进展数据交换,8255A有多种操作方式,通用性较强,可为CPU与外设之间提供输入/输出通道。
8255A和各端口内具有中断控制逻辑,在外设与CPU之间可用中断方式进展信息交换,使用条件传输方式时可用"
联络〞线进展控制。
在本次课程设计中,我们运用8255A为CPU与外设之间提供输入输出输出通道来实现对跑马灯把戏变换的控制。
8086微处理器,选择最小工作模式,所有的总线控制信号均由8086产生;
8086CPU的地址\数据总线AD15-AD0和地址\状态总线A16/S3-A19/S6是复用的,必须通过地址锁存器把地址总线和数据总线别离。
跑马灯硬件电路如图1所示。
电路包括8个LED彩灯、三片74LS273、一片74LS154、一片8086CPU、一片8255A以及假设干导线和电阻。
用LED可以观测在不同按键输入下,跑马灯把戏的变化效果。
如图1所示我们利用启动按钮作为输入信号,通过8255A端口扩展芯片,调节输出端口的电平变化,来控制共阳极的LED灯的亮与灭,实现跑马灯不同的把戏变化。
图1跑马灯硬件电路图
1.2.1锁存控制电路
锁存控制电路电路如图2所示,在微控制器单元〔MCU〕中,存放器是十分重要的资源。
存放器的主要作用是快速存放算术逻辑运算单元〔ALU〕运算过程中的数据,其锁存功能利用74LS273来实现,74LS273是一种带去除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平去除,常用作数据锁存器,地址锁存器。
D0~D7:
输入,Q0~Q7:
输出;
第一脚WR:
主去除端,低电平触发,即当为低电平时,芯片被去除,输出全为0〔低电平〕;
CP〔CLK〕:
触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,D0~D7的数据不变。
CPU向外部发出地址锁存允许信号,从而使74LS273锁存地址信号,在通过译码芯片74LS154控制接口芯片8255A,在此系统中充当一个桥梁的作用。
这局部电路将相应信号传送给8255A的A0、A1和CS片选,进而CPU开场控制8255A从而驱动发光二极管显示不同的样式。
图2锁存控制电路
1.2.2可编程并行通信接口芯片8255A
芯片8255A有三种工作方式,他们分别是方式0、方式1、方式2,电路如图3所示。
方式0为简单I/O,查询方式,端口A、端口B、端口C均可使用;
方式1为选通I/O,中断方式,端口A、端口B可以使用,选通的输入/输出方式;
方式2为双向I/O,中断方式,只有端口A可以使用,双向的传输方式。
方式0也叫根本输入/输出方式。
一种方式,不需要应答联络信号,端口A、端口B和端口C的高4位及低4位都可以作为输入或输出端口。
方式0的应用场合有无条件传送和查询传送2种;
故根据我们系统设计的要求,综上可知,选择8255A为工作方式0,A口作为输出、B口作为输入。
8255A的3种根本工作方式由方式控制字来决定,D7=1〔特征位〕说明是设定方式选择控制字;
D7=0,则表示是端口C按位置位/复位控制字。
端口C分成高4位(PC7~PC4)和低4位(PC3~PC0),可分别设置成输入端口或输出端口;
端口C的高4位与端口A配合组成A组,端口C的低4位与端口B配合组成B组。
综上可得此系统需要满足A端口为输出,输出数据给到8个LED彩灯;
端口B为输入,需要检测按键的输入情况。
图3芯片8255A接口电路
1.3算法说明
本程序涉及芯片8255A的初始化,因此首先需要确定端口地址,CPU向8255A送出方式控制字,进而8255A的A口作为输出、B口作为输入;
定义控制LED灯的相应数据段,由于需要LED亮后持续一段时间这就需要一个相应的延时程序片段,需要确定B口那个按钮开关按下,这就需要一个扫描B口开关按下的子程序,从而CPU发出相应控制等操作给A口送出相应电平,LED显示相应的亮灭。
因此,主要要点就是找对端口地址,这个是程序能够运行的必需品,通过分析硬件线路可以正确找到A口、B口以及控制口的地址。
2程序流程图设计及其说明
主程序流程图如图4所示:
图4主程序流程图
检测按键延时控制LED子程序流程图如图5所示:
图5子程序流程图
3关键程序段落说明
3.1数据段定义
dsegsegment
numdw0
data1db0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,7Fh
data2db7Fh,0BFh,0DFh,0EFh,0F7h,0FBh,0FDh,0FEh
data3db7Eh,0BDh,0DBh,0E7h,0E7h,0DBh,0BDh,7Eh
dsegends
三种灯光变幻组合为:
第一种为L1→L2→L3→L4→L5→L6→L7→L8;
第二种为L8→L7→L6→L5→L4→L3→L2→L1;
第三种为L1L8→L2L7→L3L6→L4L5→L3L6→L2L7→L1L8。
dw为灯光循环的控制次数。
3.2程序初始化
csegsegmentparapublic'
code'
assumess:
sseg,cs:
cseg,ds:
dseg
start:
mova*,dseg
movds,a*
初始化程序。
3.3芯片初始化
movd*,0206h;
取8255A的控制端口的地址
moval,82h;
初始化8255A的A口为输出模式,B口为输入模式
outd*,al
82h即为10000010b,也就是说将A口定义在方式0下并且作为输出,B口定义在方式0下并且作为输入,因此这个方式控制字不是唯一的,其通用形式为1000*01*,C口没有定义故可以为任意二进制数。
movd*,0200h;
取8255的端口A的地址
moval,0FFh;
使8255的PA0-PA7全为1
上边这个程序段是往外送数据置LED亮灭的。
movd*,0202h;
取8255的端口B的地址
inal,d*;
检测B口输入信号
这个是将B口开关闭合信息读回来的,从而发出相应控制命令。
3.4初始LED亮灭状态
outd*,al;
使所有的灯LED全灭
电路上电工作后首先要使所有的LED灯全灭,防止对后面的显示造成影响。
3.5检测按键开关子程序
ledflashproc;
检测开关闭合,以便确定哪种闪烁方式
取8255A的端口B的地址
choice1:
cmpal,0feh
jnechoice2
movsi,offsetdata1;
置第一种灯光变幻组合
jmphere
choice2:
cmpal,0fdh
jnechoice3
movsi,offsetdata2;
置第二种灯光变幻组合
choice3:
cmpal,0fbh
jnechoice4
movsi,offsetdata3;
置第三种灯光变幻组合
jmphere
choice4:
;
每盏灯亮完检测开关,如果停顿开关没有按下跳到choice5,如果停顿开关按下灯全灭
cmpal,0f7h
jnechoice5
jmpe*ut
choice5:
cmpnum,0h;
检测num是否为0,假设为0扫描开关,假设不为0继续执行
jnehere
jmpledflash
here:
movb*,num
moval,[si+b*]
movd*,0200h;
取8255的端口A的地址
outd*,al;
输出加电数据到端口A
incnum;
改变数字变量的值
cmpnum,09h
jee*it
movc*,005fh
dl4:
movb*,00ffh
dl3:
decb*
jnzdl3
decc*
jnzdl4
jmpledflash
e*it:
movnum,0
ret
ledflashendp
检测到开关闭合置相应灯光变换。
3.6延时程序片段
movc*,04c9h
movb*,04c9h
通过双层循环从而实现软件延时,延时计算公式为((c*)*(b*))/f,f为CPU的频率,CPU频率为1500kHz,可以计算得到程序大致延时为1s。
3.7灯光变换控制
通过指针移动,逐个选中相应的数据置相应的灯光变换,共八种即一轮LED显示完成。
4程序调试说明
〔1〕、内存空间分配,汇编语言的重要特点之一是能够直接利用机器指令或者伪指令为数据或者代码程序分配内存空间,86系列〔如8086微处理器〕的存储器构造是分段的,有代码段,数据段,堆栈段或附加段,在程序设计时要充分考虑分段构造,要执行的程序段应设在当前段〔活动段〕中;
分配内存空间:
直接在proteus里面将8086CPU的internalmemorysize设置成一个足够用的空间大小,如0*1000,默认的空间大小是0*00000,如不改则仿真不成功。
程序在运行时所需要的工作单元应尽可能的设在CPU存放器中,这样存取速度快,而且操作方便;
在此系统源程序中都采用8086CPU的全部通用存放器:
累加器A*,基数存放器B*,基数存放器C*,数据存放器D*;
和堆栈指针存放器SI。
〔2〕、unknow1-byteopcodeatB900:
7056!
61
[SPICE]error---toomanyiterationswithoutconvergence
在仿真过程中,出现以上两行的错误,太多的迭代没有收敛性,和*个汇编语言在编码过程中的地址不正确,经过排查程序去除无用代码,proteus不再报错。
〔3〕、8255A隐藏引脚问题,需要设置芯片HiddenPins里的GND改为VSS,VCC改为VDD。
〔4〕、程序一开场是将延时环节作为一个独立子程序,运行过程中由于局部情况下不满足题设,故将延时子程序改为程序段落写到检测按键的子程序中问题得以解决。
5结果记录及分析
第一种灯光变换效果:
L1→L2→L3→L4→L5→L6→L7→L8,如图6所示。
图6LED第一种变换效果
第二种灯光变换效果:
L8→L7→L6→L5→L4→L3→L2→L1;
第一种变换效果反向即为第二种效果。
第三种灯光变换效果:
L1L8→L2L7→L3L6→L4L5→L3L6→L2L7→L1L8,如图7所示。
图7LED第三种变换效果
心得体会
通过本次课程设计,学到了很多使用的东西,使我受益匪浅,将课堂上所学的知识运用到实际,体会到了理论与实际联系的重要性,同时进一步学习了PROTEUS这款软件。
第一,在做这次课程设计的一开场可以说是难度重重,接口电路设计出了问题,一开场由于电路没有参加锁存器,导致地址和数据冲突,从而电路不能正常工作,最后在电路里参加了锁存器74LS273和译码器74LS154后解决了地址和数据冲突的问题。
第二,由于对软件PROTEUS运用不是很熟练,导致一些问题,比方说分配内存空间:
直接在proteus里面将8086CPU的internalmemorysize设置成一个足够用的空间大小,如0*1000,默认的空间大小是0*00000,如不改则仿真不能成功。
还有在运行期间PROTEUS仿真报错,由于不太懂报错信息就一步加大了设计的难度,还有一些其他小细节上的问题,可以说是细节决定成败。
第三,由于汇编语言运用的不太熟练,对程序反复进展修改,发现汇编语言由于语句在程序中放置的位置不同也会是不同的效果,对汇编语言有了进一步的认识。
综上所述,这次微机原理与接口技术的课程设计让我学到了很多东西,不是课堂上能够学到的东西,通过仿真可以实实在在的看到成果,从而提高了对电子设计的兴趣,我想这是一个很好的锻炼时机,通过这样的锻炼不仅稳固了课堂上学习的相关知识,而且学到了一些课外知识,比方说在网络上怎样去搜索你想要的信息等等,这些东西将使我终身获益。
附录
程序清单
ssegsegment
dw200dup("
)
ssegends
numdw0;
初始化数字变量为0
;
3种不同的灯光变幻组合
movds,a*
movd*,0206h;
取8255的控制端口的地址
moval,82h;
初始化8255的A口为输出模式,B口为输入模式
outd*,al
e*ut:
movnum,0h
moval,0FFh;
使所有的灯LED全灭
begin:
callledflash;
调用灯光变幻过程
jmpe*ut
movd*,0202h;
inal,d*;
检测num是否为0,假设为0扫描开关,假设不为0继续执行
cmpnum,0h
movb*·
num
csegends
endstart
成绩评分表
工程
评分标准
得分
课
程
设
计
说
明
书
撰
写
60
分
方案
论证
15分
能正确分析设计内容,系统连接图设计正确或算法选择合理,并有详细的说明、论证。
15≥*≥11
能分析设计内容,硬件选型及连接或算法选择满足设计要求,有简单说明
10≥*≥6
设计方案不太满足设计内容及要求,无说明
5≥*≥0
程序
设计
流程图设计正确、绘制标准,并有详细的说明;
程序设计关键问题或段落有详细说明,程序代码正确
流程图设计符合设计内容及要求、绘制正确,并有一定说明;
程序设计关键问题或段落有说明,程序代码根本正确
流程图设计不太满足设计要求,绘制不标准,无必要说明,程序代码不完整或不太满足设计要求
结果
分析
10分
能正确记录调试结果,并能分析结果,给出合理的建议
10≥*≥8
能记录调试结果,并加以分析
7≥*≥4
记录调试结果,但无分析
3≥*≥0
心得
体会
根本上真实、客观地反映了本人课程设计的收获、心得
无感而发,空洞,套话。
报告
标准
完全按照报告格式要求,内容充实、详细,完全符合标准
根本按报告格式要求,内容完整,根本符合标准
未按报告格式要求,不太符合标准
程序调试
程序上机调试运行结果完全正确
程序上机调试运行结果根本满足设计要求
程序上机调试运行结果不太满足设计要求
设计辩论
能详细完整地表述设计内容,并能正确答复下列问题
能完整地表述设计内容,并能答复相关问题
根本表述设计内容,但不能答复相关问题
难度分值
1~4题:
7分5~7题:
8分
8、9、14~16题:
9分10~13、17~18题:
纪律及考勤
按照课程设计进度安排完成课程设计任务,按时参加选题说明、程序演示及辩论环节。
缺席一次扣5分。
总评分数
优秀〔100~90〕
良好〔89~80〕
中等〔79~70〕
及格〔69~60〕
不及格〔60以下〕