本实验来源于西工大网安学院计算机组成原理课程的第二次实验任务,具体内容为搭建电路并实现对 ROM 和 RAM 存储器的数据读写操作及数据成批导入 ROM 的操作。电路图如下:

 然而,搭建这个复杂的电路需要耗费大量的时间,即使你搭出了这个电路,你也不一定会用,所以今天我们来讲讲这个电路到底该如何使用可以完成实验任务。

 以下是我搭的电路即相关文件(原电路链接已上传,如有问题请私信):
链接: https://pan.baidu.com/s/1kJkyrj8iCW9JcQx-CinH6g?pwd=3131

提取码: 3131

 首先打开压缩包中的project.asm文件(最好用VScode或其他合适软件打开),可以看到一串伪汇编代码,修改该处的值为00+学号后两位H,然后另存。

                                      

 回到Proteus,点击源代码图标:

 如果该项目没有打开过 asm 文件,则打开的标签页为空,需要在菜单栏里选择 Project->新建项目,弹出的对话框如下图所示。此处,在 Family 选项中选择“8051”, Contoller 选项中选择“80C51”,则 Compiler 选项会自动选择“ASEM-51”。“创建快速启动文件”可勾选,也可不勾选。
           
 如果未勾选,直接右键Source Files,选择Add Files,把上面提到的asm文件加进去就可以。
           
 如果未找到Source Files,那么则需重新新建项目,勾选“创建快速启动文件”,然后删除(remove)main文件,再添加asm文件即可。
           

 

 在 project 中已经添加的 asm 文件上双击,右侧会打开 asm 文本内容,如果该 project 之前已经添加且编译过 asm 文件,则弹出的 Source Code 标签页 右侧会直接显示 asm 文本内容,可以直接对 asm 文本内容进行修改和保存,如果要更换 asm 文件,可以右键单击 asm 文件,菜单列表中选择“Remove file”删除当 前 asm 文件,然后选择 Add files(或 Import Existing File)选项,在弹出的视窗中重新选择 新的 asm 文件。
 如下图所示,若第一次编译 asm 文件,则右键单击 asm 文件,在弹出菜单 点击 工程设置,弹出框的控制器选项选择“80C51”。
注:要去掉勾选 嵌入式文件确保编译生成的 hex 文件在 project 当前目录下,最后点击确认。

 然后,右键单击 asm 文件,在弹出框内点击构建工程执行编译。编译成功后, 在下方的显示栏里会出现“Compiled successfully!”字样。此时,在项目当前文件夹的子文件夹 80C51 的孙文件夹Debug 里面,就有编译后生成的 hex 二进制文件(请注意看文件的修 改日期,确认是最近编译的文件)。该 hex 文件默认编译后的文件名为“Debug.hex”。
     
 
 双击 ROM 芯片,弹出如上图 6 的对话框:在 Image File 中选择所需烧写的 hex 文件,点击“OK“,ROM 加载成功,操作结束。
 启动 proteus 仿真,在仿真过程下按“暂停”;点击菜单栏里的 Debug,在弹出的菜单
列表最下方有 Memory Contents-ROM/RAM,点击Memory Contents-ROM,即可查看到存储器ROM的内容。这里建议Memory Contents-RAM也点一下,后面有用。
 
  为便于理解,此处插入上面说过的伪汇编代码的注释,以便于验证 ROM 烧写的数据段是否正确。(这一步和实验操作无关)
        ORG     0000H           ; 程序起始地址 0000H

; 初始化数据块 1 (8字节)
        DB      01010101B       ; 字节 0: 55H
        DB      01010101B       ; 字节 1: 55H
        DB      01010101B       ; 字节 2: 55H
        DB      01010101B       ; 字节 3: 55H
        DB      10101010B       ; 字节 4: AAH
        DB      10101010B       ; 字节 5: AAH
        DB      10101010B       ; 字节 6: AAH
        DB      10101010B       ; 字节 7: AAH

        ORG     0024H           ; 跳转到地址 0024H

; 初始化数据块 2 (16字节)
        DB      0A0H            ; 字节 24H: A0H
        DB      0A1H            ; 字节 25H: A1H
        DB      0A2H            ; 字节 26H: A2H
        DB      0A3H            ; 字节 27H: A3H
        DB      50H             ; 字节 28H: 50H
        DB      51H             ; 字节 29H: 51H
        DB      52H             ; 字节 2AH: 52H
        DB      53H             ; 字节 2BH: 53H
        DB      60H             ; 字节 2CH: 60H
        DB      61H             ; 字节 2DH: 61H
        DB      62H             ; 字节 2EH: 62H
        DB      63H             ; 字节 2FH: 63H
        DB      70H             ; 字节 30H: 70H
        DB      71H             ; 字节 31H: 71H
        DB      72H             ; 字节 32H: 72H
        DB      73H             ; 字节 33H: 73H

        END                     ; 程序结束
 到此为止,我们顺利完成了第一项任务。接下来我们回到电路中,进行下一项任务。
                       
 我们还是从这个全是开关的部分入手,各个开关的作用已经给出。见表1:
 再次强调一下,注意观察选择开关的颜色,红色为高电平,记为1,蓝色为低电平,记为0.将开关置于初始状态(请记住此初始状态):
        
 DSW2和DSW1的作用就是输入数据,用法和运算器中的一样,不知道的同学可以去查看我的上一篇博客,上图给出了085的输入。
 手动拨码开关输入0xxH(xx为学号后两位),然后将ROM_AR置1,将地址打入总线,再将ROM_OE置0,就可以看到存储单元0xx(我的是085)读出的内容。
 暂停仿真,回到source code页面,查看ROM中085对应的数据,发现与输出的对应。
                                
 继续仿真,回到电路,手动拨码开关,向地址锁存器 RAM_AR 打地址 F8xH(x为学号后一位,我的是F85),将RAM_AR置为1,再将RAM_WE置0,把存储单元[085H]的内容写入存储单元[F85H],然后把RAM_WE归回1,结束写入操作。最后将ROM_OE归回1,RAM_OE置为0,就可以看到RAM中地址F85对应的内容。
 暂停仿真,回到source code页面,查看RAM中F85对应的数据,神奇的是,ROM中地址085对应的数据居然进入到了RAM中地址F85的位置。
                                 
 将开关归回初始状态,重复上述过程,把 ROM 存储器单元[0XXH]、[0XX+4H]、[0XX+8H]、[0XX+12H]的内容依次写入 RAM 存储器单元[F8XH]、[F8X+1H]、[F8X+2H]、[F8X+3H],查看写入RAM 的数据是否正确。
扩展知识:
 存储器是用来存储信息的部件,是计算机的重要组成部分,常见的半导体存储器类型主
要有 ROM 和 RAM:ROM 是 Read Only Memory(只读存储器)的缩写,RAM 是 Random
Access Memory(随机存取存储器)的缩写。ROM 存储器一般容量较大,在系统停止供电的
时候仍然可以保持数据;ROM 只能读出数据,不能写入数据。而 RAM 存储器一般容量较
小,在系统掉电之后就丢失数据;RAM 即可读出数据,又可写入数据。
 
 以上就是本次实验的全部内容,你能否在两小时之内完成呢?
 制作不易,如果对你的学习和课业有帮助,本人不胜荣幸;如果我的文章有任何问题,欢迎指出。                           
 

 

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐