Proteus与emu8086实现流水灯联调

Poteus与emu8086联调实现流水灯

这个大家看着玩玩就行了,其实就是自己的笔记吧

虽然是老师留的作业,毕竟调试了那么久,写一下吧,
这一部分或许是我要写的很多的地方了。调试中会遇到各种各样奇奇怪怪的错误,有的别人可以解决的,他的方法在你这里不能成功解决;还有一些问题,百度上可以说是答非所问。除了这些还发现了一些和我们课本上感觉不一样的东西。调试过程可以说很痛苦了,不过也正是因此,解决了问题时的喜悦才更加甜美。一下是我在程序中遇到的一下问题,有些已经解决的会附上解决方案,没有解决的,希望再深入探讨。

一、出现“Logic contention detected on net xx”的错误。如图所示:

在这里插入图片描述
这个问题翻译过来叫做:在网络xx上发生逻辑冲突。开始我去百度上进行搜索,很多人的方法是改高低电平,但我想到:我的AD0~AD7压根就没接高低电平呀,所以这个解决方法被我pass掉了。然后,我又请教了几位同学,他们似乎没有出现过这样的问题。我又把总线网络重新连了一遍。结果还是不行。然后就考虑是不是程序问题,我用的是老师的原理图画的电路,所以找了原理图相似的同学借用了一下程序,结果还是不行。后来随意之间改了一个Internal Memory Size,如下图红框中所示,我将这个值改大了些,然后这个问题就解决了。不过还可能有一种原因是:最开始我的端口号没找对。所以我给出的解决办法包括两条:
①程序中地址要写正确;
②点击Proteus 中emu8086,弹出下图所示的框框,然后将Internal Memory Size改大一些,不过要注意,这个只是有范围的,最大只能写入100000H;

二、IO端口地址

按我们的原理图可以看到IO端口是通过地址线进行直接编址,但我们最开始仍然用僵化的思维想问题,觉得端口嘛,肯定是按书上的写吧!然后什么303H、304H最常见的这些书上常用的8255和8253的地址就写进程序里了。其实写的时候我心里就比较悬,所以最后结果没出来,也算是在意料之中吧。后来我和组员特意把这个端口地址给研究了研究,做了以下这个表格:
Proteus与emu8086实现流水灯联调_第1张图片
其中还特别注意了8255A与8253A不可以同时选中,所以控制8253时把8255的片选线CS置1;控制8255时把8253的片选线CS置1;最后形成了上面这个表格。

三、用.bin文件还是.com文件进行联调?

这个我看群里面有好多同学在说这个问题,老师给的例程中也用的是.bin文件。开始做不出来的时候也以为是这个问题。后来程序调的比较好的时候发现这个其实关系不大,调不出来,怎么说呢?可能还是程序的问题,回去改程序吧!

四、出现“simulation is not running in real time due to excessive cpu load”

这句话呢翻译过来是:“由于CPU负载过大,模拟无法实时运行 ”,然后我就想,是不是CPU速度不够快带不动?这个地方我尝试了1M、5M、8M、12M等的CPU时钟,后来发现不是这个问题,百度上找了一下,这个问题倒是很多人都遇到过,还有一个人和我的问题几乎一模一样,其实是我们的LED灯选择的是Analog(模拟)模式,模拟量的信息太大啦,于是CPU就处理不过来了,所以解决方法也很简单:点击proteus中的LED,弹出如下对话框:点击红色框框中的选项,选择Digital就可以啦!
Proteus与emu8086实现流水灯联调_第2张图片

五、8253计数器写不进去这个问题我们最后是没有解决的,所以拖到后面才写。

至于流水灯的实现,我最后是采用了软件延时的方法,实现了1s切换一次这个功能,软件延时程序如下(也是没办法了):
Proteus与emu8086实现流水灯联调_第3张图片以下是我尝试解决这个问题所进行的工作:我用了单步运行,看8253的地址有没有选中,发现是选中了8253的,单步调试截图如下(附上此时执行到的程序):
Proteus与emu8086实现流水灯联调_第4张图片

Proteus与emu8086实现流水灯联调_第5张图片
可以由截图看到,此时应该是已经选中8253,但是发现WR始终为高电平,正常来说应该WR处于低电平才可以;所以我在考虑是不是要加一个非门,后来我用了74LS00作为非门给cpu的WR 输出加了一个非门,但out0始终没有反应。这个地方我问了一个成功解决了的同学,他们的原理图是加了一个74LS138译码,我也尝试过,不过还是和他们的电路不太一样,因此最后也没有成功,所以我们最后还是用了软件延时的方法,将这一步跳过了。

六、最后都是一些杂七杂八的东西了:

比如说,可以看到我的电路里面有总线连接;有网络标号进行连接;还有用的输入输出进行连接的。
我拿原理图去请教一些同学的时候,也有人跟我说:“你这原理图也太乱了吧”。但我最后还是没有改回来,这其实是我探索的一个过程。从最开始总线都不知道怎么画,到现在Proteus中的很多快捷键都弄熟了;从最开始走一步停一步地到处找人请教问题,到现在也“久病成医”,可以帮别人解决一些遇到的问题。一步步探索最终是把这个设计完成了,写到这,倒回去看看自己写下的,仿佛就是看到了这几个星期的努力,真的是很有收获,其他的一些小问题就不赘述啦。

你可能感兴趣的:(Proteus与emu8086实现流水灯联调)