8086处理器应用仿真

8086处理器应用仿真


题目要求:
“微机原理及应用”大作业1:8086处理器应用仿真
使用8086,要求系统电路含有4个及以上led灯(或1位以上数码管)和按键(盘),在PROTEUS上仿真实现。要求如下:
1、系统功能自定,要求使用中断功能。
2、汇编语言实现。
3、在PROTEUS上仿真实现。
4、系统功能越复杂,作业得分越高。

一、 系统设计说明

本系统核心部件为8086CPU。
左上方电路由8086微处理器、74273锁存器和74154译码器组成。由于8086CPU地址和数据复用,所以需三片地址锁存器引出稳定的地址信号,经由74154译码器生成端口译码信号。
右上方电路由地址锁存器74LS373、74LS148和7SEG-BCD组成。在系统执行写操作时,AD0-AD7通过锁存器引出稳定的地址信号,由74LS148译码器生成BCD码供给数码管输出。
右下方电路由八个按键和八个锁存器构成。按下按键后,系统执行NMI中断,同时形成数据Q0-Q7。
左下方电路主要由74LS245组成。在系统执行读操作时,将Q0-Q7的数据传输到AD0-AD7。
在这里插入图片描述
在这里插入图片描述

二、系统功能说明

本系统的功能是:通过按一下按键(不是长按),识别按键所代表的数字,锁存,然后输出到数码管上,当再按一下按键,且所代表的数字比原来的高时,锁存,并输出更高的数字。在按下R8对应的按键后,再按下RX(X可取0-7)对应的按键,数码管输出X。
具体说明:未按下按键时,T0-T7为高电平,所有按键通过八输入与门再连上一个非门,接到NMI中断上。通过按下按键,使8086进入NMI中断,同时D锁存器接收到T0-T7中某一个变化,进而更新Q0-Q7。NMI中存在延时电路,因此有足够的时间等待Q0-Q7的数据更新,而后进行读写操作,最后输出到数码管上,数码管显示出所按键的数字。在按下R8对应的按键后,8086CPU的RESET端为高电平,使CPU复位,同时八个D触发器的R端为低电平,使Q0-Q7全为1,及初始化Q0-Q7。
在这里插入图片描述
先按下R8所对应的按键,再按下R0所对应的按键,实现数码管的复位(即数码管显示为0)

三、软件设计说明

软件设计部分利用EMU8086仿真系统实现汇编语言程序的编写和编译。
系统控制程序采用程序段CODE和数据段DATA两段结构组成。程序段包括段寄存器的初始化、中断向量寻址、IO口设置、MAIN主程序、中断程序ints1以及其中的延时子程序NEXT。主程序的功能是循环等待。当按钮被点击时,就触发了NMI中断,CPU执行中断服务子程序。因为硬件电路中存在时序问题,在未加入延时程序之前,D触发器还未更新Q0-Q7,CPU就已经完成了读写操作,导致数据无法传输,因此增加了延时程序NEXT。等到D触发器更新完Q0-Q7,系统再进行读写操作,输出,显示管显示出数字。

四、调试及运行结果

1.数据的锁存问题
在刚刚开始设计电路的时候,写入数据没有使用74LS373锁存器,导致数码管显示器会因为CPU内部AD0-AD7的改变而改变,无法准确的反应按键的数据。在读取数据的时候数据同样需要锁存,这可以用D触发器实现。D触发器的D脚接高电平,把按键的输出信号作为D触发器的CLK,再把D触发器的Q(一)作为锁存后的按键的输出信号。
2.时序问题
在加入了D触发器之后(未使用延时程序NEXT),发现按一次按键后,数码管不会改变,再按下一次按键后,数码管才会改变。通过设置系统的动画选项,减小每帧的时间,观察到:在D触发器还未更新Q0-Q7的数据之前,系统已经完成了读写操作。我通过改变硬件电路,给NMI中断接受到中断信号前,串联了十二个非门,仍然无法解决此问题,且过多的增加非门,会使硬件电路变得庞大且消耗成本。因此我改变了软件,在系统执行读写操作前,执行延时程序NEXT,语句如下:
MOV CX,10000 ;10000→CX
NEXT: ;延时程序
MOV DX,PORT0
IN AX,DX
LOOP NEXT ; CX-1→CX
令CX从10000开始,执行一次后减1,最后解决了这个时序的问题。
3.运行结果
仿真开始
左下角的74LS245的B端全为1,即Q7-Q0为:0000 0000。显示管显示为0,
在这里插入图片描述
按下R1下方的按键
Q1变为0,Q7-Q0为:1111 1101。显示管显示为1
在这里插入图片描述
按下R3下方的按键
Q3也变为0,Q7-Q0为:1111 0101。显示管显示为3
在这里插入图片描述

五、心得体会

1.运用Proteus 进行 8086处理器的应用仿真让我学到了许多,从硬件电路的设计,到软件的编程,再到调试。只有通过理解和掌握接口芯片的引脚和芯片的端口寻址,才能设计出所需的电路图。这不仅让我加深了对8086处理器的使用、理解,也让我学习并且明白汇编语言的重要性。在一次次实验中提高动手能力,把理论知识转化为实践成果。
2.在仿真运行时,通过单步调试,可以观察到每一条指令执行后的效果,也能直观的观察实时仿真的结果,方便对程序的调试。
3.硬件电路的设计可能会存在时序的问题,如果存在问题,就需要运用所学的知识解决,既可以改变硬件电路的设计,也可以想办法通过软件编程解决。

六、结语

作品实际上就是实现一个锁存的功能,明显用个芯片就能完成的,硬是被我做成这样,为了复杂而复杂。这个作品是我刚开始学习的作品,因此有很多地方做得不好,还希望各位批评指正。
附:8086处理器应用仿真Proteus仿真,emu8086代码和分析文档
https://download.csdn.net/download/alongiii/14935363

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alongiii

万分感谢!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值