汇编语言与接口技术——期末设计

文章目录

  • XX师范大学计算机科学与工程学院
    • 题目及要求:
      • 考试题目:基于Proteus和MASM的微机接口应用演示系统设计与实现
      • 考试要求:
        • 1. 基于Proteus软件和MASM软件环境实现
        • 2. 基本内容
  • 微机原理与汇编语言课程设计报告
    • 摘 要
    • 目 录
    • 1. 期末考试课程设计
      • 1.1 目的
        • 第一部分:交通灯设计
        • 第二部分:自选模块设计
      • 1.2 设计环境、设备与器材
    • 2. 设计基础与设计方案
      • 2.1 设计基础
      • 2.2 总体思路
      • 2.3 系统设计框架结构
    • 3. 设计实现
      • 3.1 系统硬件部分设计
        • 3.1.1 液晶屏部分
        • 3.1.2 交通灯控制部分
        • 3.1.3 存储模块扩展部分
        • 3.1.4 自选接口模块设计部分
        • 3.1.5 系统总线连接
        • 3.1.6 片选逻辑部分
        • 3.1.7 各功能模块协同工作控制部分
      • 3.2 系统软件部分设计
        • 3.2.1 液晶屏部分
        • 3.2.3 存储模块扩展部分
        • 3.2.4 自选接口模块设计部分
        • 3.2.5 各功能模块协同工作控制部分
    • 3.3 核心数据结构
        • 3.3.1 液晶屏部分
        • 3.3.1 交通灯控制部分
        • 3.3.1 密码锁部分
    • 3.4 关键代码片段分析
    • 4. 设计验证
    • 4.1 测试方案
    • 4.2 测试验证步骤、过程及结果
        • 4.2.1 液晶屏信息显示
        • 4.2.2 交通灯控制
        • 4.2.3 存储扩展模块
        • 4.2.4 自选接口模块设计
        • 4.2.5 各功能模块协同工作控制设计
      • 4.3 测试过程遇到的问题及解决
      • 4.5 测试结论
    • 5. 设计总结
    • 6. 课程学习总结
    • 7. 本课程教学建议
    • 参考文献
    • 附 录
      • 附录A 代码清单
  • 最终实现效果
  • 如有任何问题,请私信联系

XX师范大学计算机科学与工程学院

2021 —2022 学年第 2 学期
《微机原理与汇编语言》期末考试试卷(A卷)
考试形式:综合设计与报告

专业: 计算机科学与技术 班级: 计算机 任课教师: X老师
学号: 209923567896 姓名: 小王 总分: 100分

阅卷人:
全卷得分统计:
毕业要求指标点与课程目标 毕业要求指标点1.2 毕业要求指标点2.3 总分
课程目标1 课程目标2
得分

题目及要求:

考试题目:基于Proteus和MASM的微机接口应用演示系统设计与实现

考试要求:

1. 基于Proteus软件和MASM软件环境实现
2. 基本内容
  1. 设有一个十字路口,试设计一个交通灯控制应用系统。假设每个路口都分直行车道、左转-掉头车道和右转车道三种通行方向,用红、黄、绿等发光二极管模拟交通信号灯。另外,路口还有对应的行人通道的信号灯。
  2. 正常情况下,东西向和南北向的车道轮流放行。当东西向的直行车道显示绿灯放行时,东西向的左转-车道和右转车道都是红灯。直行车道通行53秒后,用5秒闪烁绿灯,然后绿灯熄灭;再用2秒显示黄灯,然后黄灯熄灭;此后东西向的直行车道显示红灯停止放行。在东西向的直行车道亮绿灯、绿灯闪烁和黄灯期间,左转-掉头车道和右转车道亮红灯;东西向的行人通道在直行车道亮绿灯期间也亮绿灯,直行车道绿灯闪烁和黄灯期间行人通道绿灯闪烁。等直行车道黄灯转红灯后,左转-掉头车道和右转车道开始亮绿灯,通行33秒后,然后绿灯闪烁5秒再熄灭;这两个车道再用2秒显示黄灯然后熄灭,然后显示红灯停止放行。东西向的左转-掉头车道和右转车道显示绿灯、绿灯闪烁和显示黄灯期间东西向的行人通道一直亮红灯。如前所述东西向各车道通行期间南北向的直行车道、左转-掉头车道和右转车道及行人通道一直是红灯信号。然后南北向的直行车道绿灯放行,左转-掉头车道、右转车道红灯,行人通道绿灯。东西向各车道红灯禁行,行人通道红灯禁行。依前交替。
    交警手中有控制器,按下特定键后,可放行东、西、南、北四个方向中某一个方向的车辆,直行、左转-掉头、右转车道都亮绿灯,其它三个方向禁行。路口各方向的行人通道全部红灯禁行。状态解除后恢复原通行过程。
    每次交通灯放行与否的状态变化保存到 “8.自选模块设计选项” 中设计实现的RAM存储区域中。要求至少保留最近10次的信息。设计实现中所需具体芯片、信息格式、存储量等自行设定,但须在报告中明确说明。
    用LCD液晶显示屏显示学校和学院简称“XX师大计工学院”、课程名“微机原理期末设计”、自己的汉语名字和学号。
    按第二页“8.自选模块设计选项”中提出的要求和抽取到的序号设计实现相应模块。
  3. 考试结果由汇编语言源代码ASM文件、Proteus仿真电路文件、设计报告DOC文件和答辩PPT文件四部分构成。
    • 课程论文要求完成对系统设计实现总体思路的分析,突出具体设计实现思路,完成对系统关键电路和关键代码的分析,具体格式参见后附内容,论文不得少于2500字,不得以截屏、代码代替分析与阐述。
    • 汇编语言代码ASM文件、Proteus的DSN/PDSPRJ仿真电路文件、设计报告DOC文件、答辩PPT文件要求以 个人学号_名字 形式命名。结果以EMAIL附件的形式发送到教师信箱:[email protected]。EMAIL主题: 2020 班 同学的微机原理考试试卷。空白处填提交报告的同学的班级和名字。四种文档分别作为EMAIL附件提交,不要打包为一个压缩文件包。但同类型文件可以打包成一个压缩包文件。
  4. 本页及后续第二页要求必须作为课程论文的封面,不得删除,不得乱改。
  5. 除上述内容外,课程论文要求另外两部分内容:
    • 对本学期该课程学习的总结。
    • 对教师的教学建议。
  6. 所有考试内容独立完成,不得抄袭。存在抄袭现象者期末考试成绩直接计零分。
  7. 设计结果先在指定地点、指定时间内进行演示、讲解,再回答教师提问。教师结合设计实现、演示讲解与答辩情况,根据同学撰写的设计报告进行打分,作为期末考试成绩。不参加答辩不给分,不提交设计报告和相关文档者不得分。
  8. 自选模块设计选项。每个同学必须从老师处在1)中抽题选做一个存储模块,再在2.6)中抽题选做一个接口模块,接口模块也可以根据具体情况在7)和8)中选作。完稿的报告中须将自己抽取到的题目加粗。
    说明:在满足题目最低要求的前提下,器材可自行选择,片选逻辑实现方式等可以自行决定。但自选模块的存储模块和接口模块,与前面的交通灯控制、液晶屏显示必须在同一个CPU的程序控制下。
    存储模块选题:设计实现存储容量分别为16KB的ROM和16KB的RAM,ROM区起始地址、RAM起始地址、ROM保存信息的HEX文件名从老师处抽取。题目要求将ROM中的信息拷贝到RAM中的自选位置开始的区域。ROM中的信息以HEX文件格式提供,默认从ROM的首个单元开始存放,以’$’字符表示结束,其ASCII码为24H,HEX文件CG平台的课程页面下载。另:如之前2.4所述,交通灯每次的状态变化信息需存储在RAM芯片中,要求至少保留最近10次的信息。设计实现中所需具体芯片、信息格式、存储量等自行设定,但须在报告中明确说明。
    抽题标记 ROM区起始地址 RAM区起始地址 ROM用HEX文件名
组号 开始地址 结束地址 hex 文件名
2 A0000H B1000H ASMT2.hex
3 A2000H B3000H ASMT3.hex
4 A4000H B5000H ASMT4.hex
5 A6000H B7000H ASMT5.hex
6 A8000H B9000H ASMT6.hex
7 AA000H BB000H ASMT7.hex
8 AC000H BD000H ASMT8.hex
9 AE000H BF000H ASMT9.hex
  1. 题目范围
  • 设计实现简易电子秒表。最低要求:电子秒表以0.01秒为计时单位,可以显示分、秒、0.01秒。可以按键启动秒表计时,可以按键令秒表清零,可以按键令秒表暂停。所需器件、功能、工作流程等自行设定。电子秒表工作期间交通灯和LCD的工作不受影响,
  • 设计简易电子密码锁。最低要求:可以通过输入装置如按键等设定三位十进制数字密码。客户使用时须输入三位十进制数字编码,如果与预设密码一致则给出开锁信号,否则不给出对应信号。所需器材、功能、工作逻辑等自行设定。密码锁工作期间交通灯和LCD的工作不受影响。
  • 设计实现简易病房呼叫应答器。最低要求:所有病人对应自己的病床,床位有唯一的编号。病人可以用病床前的呼叫器(比如按钮)向护士站发出请求,也可以撤销自己已经发出的请求。护士站接受到病人发出的呼叫后,须显示当前呼叫的病床号。当呼叫的病人不止一位时,可以按提交呼叫的时间先后,逐个显示呼叫床位号。当护士响应病人呼叫,可以用相应病床的呼叫器撤销之前的呼叫以示已处理。要求设计实现的呼叫应答器可以管理至少八张病床。显示内容、工作逻辑、器件、功能等自行设定。呼叫应答器工作期间LCD和交通灯的工作不受影响。
  • 设计实现简易电子门铃。最低要求:该门铃带有按键,访客按动后可以播放电子音乐以提示房主有客来访,访客也可以按键取消音乐播放。房主可以按键取消音乐播放,当音乐播放超过一定时间后,也可以自行取消播放。器材、按键、功能、工作逻辑等自行设定。电子门铃工作期间LCD和交通灯的工作不受影响。
  • 设计实现简易联线通讯模块。该模块利用8251A接口芯片,当交通灯的工作状态发生变化时向Proteus软件提供的串行虚拟终端发送当前交通灯的工作状态。所需器材、通讯信息、格式、工作流程等自行设定。通讯模块工作期间LCD和交通灯的工作不受影响。
  • 学生自行选择其它题目予以设计实现。自选题目必须用到接口技术,用汇编语言编程完成,所选模块的工作不影响交通灯和LCD,必须不与往届同学做过的重复,必须经老师审核同意,在试卷部分必须具体说明要设计实现部分的详细内容和检验要求。
  • 少数民族学生可选做题目:最低要求:以自己民族的文字在第二块LCD上显示一段有意义的信息,通过按键等输入装置可以切换第二块LCD显示的信息,显示另一段民族文字信息。选做该题必须出示本人身份证供老师验证确认。本题计分会低于其它选题。

微机原理与汇编语言课程设计报告

题 目:基于Proteus和MASM的微机接口应用演示系统设计与实现
学 院: 计算机科学与工程
专 业: 计算机科学与技术
班 级:
姓 名:
学 号:
教师姓名:

摘 要

本设计以8086微处理器为基础,为了研究并行通信的概念,为了研究I\O数字接口芯片,并且掌握可编程接口芯片的应用。选用8253、8255、8259等芯片,集成实现了存储器扩展应用、液晶显示器应用、交通灯控制系统、简易密码锁功能。在 Proteus 中设计出硬件连接及布局,在 EMU 8086 编译环境下编写程序进行仿真,仿真实验结果表明:该电路设计正确,程序编写符合要求,各部分协作运行效果良好。
关键字: 8086微处理器,8086微机设计,交通灯,密码锁

目 录

  1. 期末考试课程设计 1
    1.1 目的 1
    1.2 设计环境、设备与器材 2
  2. 设计基础与设计方案 3
    2.1 设计基础 3
    2.2 总体思路 3
    2.3 系统设计框架结构 4
  3. 设计实现 5
    3.1 系统硬件部分设计 5
    3.1.1 液晶屏部分 6
    3.1.2 交通灯控制部分 8
    3.1.3 存储模块扩展部分 10
    3.1.4 自选接口模块设计部分 14
    3.1.5 系统总线连接 15
    3.1.6 片选逻辑部分 16
    3.1.7 各功能模块协同工作控制部分 17
    3.2 系统软件部分设计 18
    3.2.1 液晶屏部分 18
    3.2.2 交通灯控制部分 19
    3.2.3 存储模块扩展部分 21
    3.2.4 自选接口模块设计部分 22
    3.2.5 各功能模块协同工作控制部分 23
    3.3 核心数据结构 23
    3.4 关键代码片段分析 25
  4. 设计验证 28
    4.1 测试方案 28
    4.2 测试验证步骤、过程及结果 28
    4.2.1 液晶屏信息显示 29
    4.2.2 交通灯控制 29
    4.2.3 存储扩展模块 31
    4.2.4 自选接口模块设计 31
    4.2.5 各功能模块协同工作控制设计 32
    4.3 测试过程遇到的问题及解决 32
    4.4 需要讨论的其它问题 33
    4.5 测试结论 33
  5. 设计总结 34
  6. 课程学习总结 35
  7. 本课程教学建议 36
    参考文献 37
    附 录 38
    附录A 代码清单 38

1. 期末考试课程设计

1.1 目的

第一部分:交通灯设计
  1. 设有一个十字路口,试设计一个交通灯控制应用系统。假设每个路口都分直行车道、左转-掉头车道和右转车道三种通行方向,用红、黄、绿等发光二极管模拟交通信号灯。另外,路口还有对应的行人通道的信号灯。
  2. 正常情况下,东西向和南北向的车道轮流放行。当东西向的直行车道显示绿灯放行时,东西向的左转-车道和右转车道都是红灯。直行车道通行53秒后,用5秒闪烁绿灯,然后绿灯熄灭;再用2秒显示黄灯,然后黄灯熄灭;此后东西向的直行车道显示红灯停止放行。在东西向的直行车道亮绿灯、绿灯闪烁和黄灯期间,左转-掉头车道和右转车道亮红灯;东西向的行人通道在直行车道亮绿灯期间也亮绿灯,直行车道绿灯闪烁和黄灯期间行人通道绿灯闪烁。等直行车道黄灯转红灯后,左转-掉头车道和右转车道开始亮绿灯,通行33秒后,然后绿灯闪烁5秒再熄灭;这两个车道再用2秒显示黄灯然后熄灭,然后显示红灯停止放行。东西向的左转-掉头车道和右转车道显示绿灯、绿灯闪烁和显示黄灯期间东西向的行人通道一直亮红灯。如前所述东西向各车道通行期间南北向的直行车道、左转-掉头车道和右转车道及行人通道一直是红灯信号。然后南北向的直行车道绿灯放行,左转-掉头车道、右转车道红灯,行人通道绿灯。东西向各车道红灯禁行,行人通道红灯禁行。依前交替。
  3. 交警手中有控制器,按下特定键后,可放行东、西、南、北四个方向中某一个方向的车辆,直行、左转-掉头、右转车道都亮绿灯,其它三个方向禁行。路口各方向的行人通道全部红灯禁行。状态解除后恢复原通行过程。
  4. 每次交通灯放行与否的状态变化保存到 “8.自选模块设计选项” 中设计实现的RAM存储区域中。要求至少保留最近10次的信息。设计实现中所需具体芯片、信息格式、存储量等自行设定,但须在报告中明确说明。
  5. 用LCD液晶显示屏显示学校和学院简称“XX师大计工学院”、课程名“微机原理期末设计”、自己的汉语名字和学号。
第二部分:自选模块设计

设计简易电子密码锁。最低要求:可以通过输入装置如按键等设定三位十进制数字密码。客户使用时须输入三位十进制数字编码,如果与预设密码一致则给出开锁信号,否则不给出对应信号。所需器材、功能、工作逻辑等自行设定。密码锁工作期间交通灯和LCD的工作不受影响。

1.2 设计环境、设备与器材

  • 设备:个人PC机、信号源、8086 CPU。
  • 器材:发光二极管、与门、非门、或门、或非门、时钟源、液晶显示屏、七段数码管、电阻、单刀开关、按钮、74ls138 芯片、2732 ROM 芯片、6116 RAM 芯片、8255A芯片、8253A芯片、8259A芯片、8251A芯片。
  • 设计环境:WINDOWS 11、Proteus 8.9、Visual Studio Code 1.68.1.

2. 设计基础与设计方案

2.1 设计基础

  • 微机原理与接口技术:
    本次设计的主要由硬件部分和软件部分两部分组成。需要有微机的整机概念,建立整体概念,了解和熟悉计算机的结构、特点和工作过程。
    需要运用大量的虚拟物理器件,进行布局连线,搭建起题目要求内容的硬件支撑。不仅仅需要掌握电子技术基础中的逻辑电路,还需要熟悉掌握设计中用到各种接口芯片,同时对微机的工作原理有一定深度的认识。
  • 8086汇编语言:
    由于本次设计要通过8086CPU对各部件发出各种命令,控制各部件完成题目要求的功能,需要了解指令执行的过程,并且熟练使用8086汇编语言作为实现功能的基本要求。
  • Proteus EDA软件:
    本设计全部通过虚拟仿真实现,选择Proteus 8.9 虚拟仿真软件作为本次的仿真平台。
  • 其它相关知识与技术综述:
    本次设计需要书写代码,因此需要曾经学习过程序设计语言,具备基本的程序设计思想;同时此设计还涉及向内存区域写入数据,需要学习过数据结构相关的课程,熟悉基本的数据结构。

2.2 总体思路

在本项目中,只有交通灯需要严格的控制时序,1秒时间要发生一次变化,密码锁、液晶屏对时序的要求不严格,可以将交通灯放在中断,准备随时打断正在执行的密码锁。
由于本设计中只有交通灯这一中断,最简单的方法就是将交通灯当作NMI不可屏蔽中断,将中断向量放在NMI特定的向量区域。另一种方法是使用8255A芯片对中断进行管理。相比于直接使用NMI不可屏蔽中断,8255A使用较为复杂,使用8255A能更好的训练对该芯片的熟悉程度,同时一片8255A芯片可以管理8个可屏蔽中断源,可以便于设计后期需要时进行功能扩展。

2.3 系统设计框架结构

由于单纯的硬件系统能实现的功能十分有限,需要软件配合硬件进行需求实现。编写代码,通过软件控制8086 CPU 向外设芯片发出信号,以到达控制外设的目的。

3. 设计实现

3.1 系统硬件部分设计

系统硬件模块包含:微处理器控制模块,采用8086芯片;存储器扩展模块,由2732 4KB8芯片、6116 2KB8芯片构成;LCD液晶显示模块,采用HDG12864F-3液晶屏;交通灯模块,采用8255A芯片,组合LED和7SEG数码管构成;密码锁模块,键盘输入采用4×4矩阵键盘,开锁模块使用LM016芯片,系统总框架如下图所示。

3.1.1 液晶屏部分

LCD液晶显示模块使用HDG12864F-3液晶屏,仿真元件图为图 3-2 所示。

它是一种专门用来显示字母、数字、符号的点阵型液晶模块,显示能容为16×4即可以显示四行,每行16个字符液晶显示方阵。
屏幕从左到右分成128列,分别是column0 - column127,后面简称c0~c127,每一列对应着屏幕上纵向的一串点,相当于屏幕的x坐标值;同时,屏幕从上到下分成8个Page,每个Page对应着一个字节,恰好8个bit,每个bit对应着屏幕上横向的一串点,8个Page一共8 * 8=64个点,每个bit的位置相当于屏幕的y坐标值。这样,就将屏幕分成了128 * 64个点。如下图 3-4 所示:

因为写数据的时候是从右边开始,所以字模数组的顺序也是从右边开始的。例如右上角8*8点阵形成的数组为:N[0],N[1],N[2],N[3],N[4],N[5],N[6],N[7]。
写完一个Byte后,控制器将列坐标自动加1,因此按0~7的顺序写完这个数组后,在屏幕的右上角就完成了一个汉字右上四分之一的显示。
接着连续写汉字左上四分之一,就是写N[8]~N[15]共8个字节。到这里一个汉字的上半部分就写完了。
接下来就是更改Page了(相当于更改纵向位置)。刚才写汉字的上半部分时,纵坐标是在Page=0的位置,现在需要将纵坐标设置成Page=1;同时,也要将列重新设置为0。这样再连续写N[16]~N[31]共16个Byte后,一个完整的汉字就在屏幕上写好了。

3.1.2 交通灯控制部分

电路如图 3-6 所示,交通灯由8片8255A芯片、24个七段数码管、32个LED灯、1片8253A芯片、4个单刀开关。
S1、S2控制东西方向的数码管,S3、S4控制南北方向的数码管。L1控制东向的LED灯,L2控制西向的LED灯,L3控制北向的LED灯,L4控制南向的LED灯。如下图所示:

现实中的十字路口由四个方向组成,本次设计中也有四个路口,通过生活经历得知,南北、东西方向交通灯的完全相同,主要是显示的时间不同。

  • (1)正常交通灯变化部分:
    当S1芯片的PA口发出信号时,东西方向左右转的七段数码管会显示数字。(例如:当S1的PA口输出 00010001B 时,数码管会显示11。)整个项目运行时,每到达1秒钟,S1、S2会送出提前在代码段存放的数字,达到倒计时的效果。
    L1、L2的PA口控制LED灯的状态,在每个变化的时刻,相应的端口会输出高电平,点亮对应方向的二极管。
    例:东西方向,左右转红灯,直行、行人绿灯,L1-PA:10001010B、L1-PB:00000010B、L2-PA:10001010B、L2-PA:00000010B;
    东西方向,左右转绿灯,直行、行人红灯,L1-PA:01010001B、L1-PB:00000100B、L2-PA:01010001B、L2-PA:00000100B;
    东西方向,左右转黄灯,直行、行人红灯,L1-PA:00010100B、L1-PB:00000101B、L2-PA:00010100B、L2-PA:00000101B。
  • (2)交警管制部分:
    现实生活中的十字路口情况复杂多变,出现交通事故、堵车情况无法避免,为此特殊时期交警干预信号灯变化也必不可少。
    本设计中使用L1芯片的PC口作为输入口,接入到交警控制开关。开关打开时4个端口输入的全为低电平,当某一个开关闭合时,会往端口输入高电平。检测到输入信号后,所有方向的数码管倒计时全部停止,相应方向的LED变为绿灯,其余三个方向的LED变为红灯。
  • (3)8253A计时部分:
    交通灯倒计时变化周期为1秒中,为此需要8253进行计数时钟脉冲,每秒产生一次高电平。8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。

将8253A的通道1输出口链接到8259A的IR0口,每1秒到达时,发生一次可屏蔽中断,中断发生后对数码管及LED灯的状态进行变化。

3.1.3 存储模块扩展部分

存储器的扩展分为位扩展和字扩展。位扩展是指存储芯片的字数满足要求而位数不够需要对每个存储单元的位数进行扩展,将地址线、控制线并联,数据线对应接到8086的数据线上。字扩展即地址扩展,用于存储芯片的位数满足要求而字数不够的情况,是对存储单元数量的扩展。根据片选信号产生的方法不同,字扩展分为线选法、局部译码法和全译码法。线选法是地址线与存储器的地址线连接,余下的高地址分别作为各个存储器的片选。局部译码法是将高地址的一部分进行译码,产生每个存储器的片选。全译码法是高地址全部进行译码产生各个存储器的片选。

  • (1)存储器连接部分:
    本次设计中要求扩展16KB的ROM、16KB的RAM。2732 ROM芯片的规格为4KB8位,因此需要同时进行字扩展和位扩展,两片2732组成高低位,需要这样的两组,即可完成题目要求。6116 RAM芯片的规格为2KB8位,也需要同时进行为扩展和字扩展,先用两片6116芯片组成高低位完成字扩展,再需要这样的8组完成位扩展。具体的电路图见图 3-8 。

  • (2)存储器译码部分。
    ROM译码部分:
    本次设计中ROM的起始位置为:A2000H – A5FFFH。
    表 3-1 ROM起始地址分析
    ROM A19 A18 A17 A16 A15 A14 A13 A12 A11-A0
    起始 1 0 1 0 0 0 1 0 00H
    结束 1 0 1 0 0 1 0 1 FFH
    对地址进行分析:

上表对芯片2732芯片的地址进行分析,先通过译码电路区分出两组,再通过A0和BHE每组内区分高低位。通过观察得知,第一组的开始地址为:A2000H,第二组的开始地址为:A4000H。
使用门电路进行译码,得到两组,再将两组与A0和(BHE) ̅相或,区分出每组内的高低位。具体的连线如下图 3-9 所示:
RAM译码部分:
本次设计中RAM的起始位置为:B3000H – B6FFFH。
表 3-4 RAM起始地址分析
ROM A19 A18 A17 A16 A15 A14 A13 A12 A11 A10-A0
起始 1 0 1 1 0 0 1 1 0 00H
结束 1 0 1 1 0 1 1 0 1 7FH
对地址进行分析:

上表对芯片2732芯片的地址进行分析,先通过译码电路区分出两组,再通过A0和BHE每组内区分高低位。通过观察得知,第一组的开始地址为:A2000H,第二组的开始地址为:A4000H,第三组的开始地址为:A2000H,第四组的开始地址为:A2000H,

通过对上表的观察,得知每组的A14、A13、A12三位在有规律的变化,所以使用
使用74LS138译码后,得到8组,再将两组与A0和(BHE) ̅相或,区分出每组内的高低位。具体的连线如下图 3-10 所示:

3.1.4 自选接口模块设计部分

为了达到密码锁所需实现的基本要求,矩阵键盘作为输入设备,LCD液晶显示屏、七段数码管作为输出设备,同时也是该模块和用户的一个交互窗口,该锁还提供了密码的输入和报错功能,当使用该产品时,七段数码管会显示6个0,等待密码输入,当密码输入正确时,液晶显示屏会显示“You are right!!!”的提示信息,当密码输入错误时,液晶显示屏会显示“You are wrong!!!”的提示信息。
使用可编程并行I/O接口芯片8255A作为并行I/O接口电路,如下图 3-11 所示。

本系统中M1芯片A、B、C组都以工作方式0进行输出。分别连接LCD液晶屏的各个端口。
M2芯片A组以工作方式0输出;B组以工作方式0输出;C组端口高半字节、低半字节全为输入。A组连接七段数码管的8位数据线,B组的低6位连接七段数码管的位选信号,C口连接矩阵键盘,如下图 3-11 所示。

3.1.5 系统总线连接

8086 CPU由于引脚数目的限制,数据地址信号等引脚是分时复用的,构成微型计算机系统必须外接总线配置芯片将复用的信号加以分离。利用74LS373将总线上的地址码暂存起来。在CPU与外部通信时,必须先发送存储器或I/O端口的地址才能正确地发送数据。通过74LS245分离的数据总线实现8086与外部接口芯片的双向数据传输,并行接口具有传送数据速度快、要求传输线较多的特点。

3.1.6 片选逻辑部分

端口及编址方式。端口是指接口电路中能被微处理器直接访问的寄存器的地址。微处理器通过这些地址(端口)向接口电路中的寄存器发送命令、读取状态、和传送数据。
计算机给接口电路中的每一个寄存器都分配一个端口,CPU在访问的时候,只需要指明他们的端口地址,不需要知道是访问什么寄存器。这样,在输入输出程序中访问端口就是访问接口电路的寄存器,通常所说的IO操作就是对IO端口的操作,即CPU所访问的是与IO设备相关的端口,而不是IO设备本身。
因为8086微机系统中,外设的地址为16位(A0 - A15),本次设计中使用两片74LS138译码器,产生16个外设地址以供使用。具体如下图 3-13 所示:

在上图中0000H – 0700H、1000H – 1100H所有的8255A芯片使用;1200H供8253A芯片使用;1300H – 1600H当前空闲,以供其他功能扩展;1700H供8259A芯片使用。

3.1.7 各功能模块协同工作控制部分

本设计中交通灯模块需要通过发生中断进行执行,用8259A芯片对中断进行管理。8259A芯片是一个中断管理芯片,通过8259A可以对单个中断源进行屏蔽。中断的来源除了来自于硬件自身的NMI中断和来自于软件的INT n指令造成的软件中断之外,还有来自于外部硬件设备的中断,这些中断是可屏蔽的。这些中断也都通过PIC进行控制,并传递给CPU。一个8259A芯片最多可以接8个中断源,但由于可以将2个或多个8259A芯片级连(cascade),所以最多可以接64个中断源。

上图中的8253A芯片连接1KHz的时钟源,计数次数为1000次,所以会在一秒钟产生一个周期的高电平,产生的高电平连接到8259A芯片,进而向CPU提交中断申请,实现对中断程序的执行。

3.2 系统软件部分设计

软件设计采用模块化设计方式,包括主程序、交通灯中断、液晶屏初始化子程序、液晶屏显示字符子程序、密码比较子程序、密码置零子程序等设计。整体代码段构成如下图 3-15所示:

上图所示,代码段主要由主程序部分、子程序部分、交通灯中断程序三大部分组成。具体的源代码文件见文件:202.asm。

3.2.1 液晶屏部分

利用8086CPU控制8255芯片,在LCD图形液晶显示器上显示学校名称、学院简称、个人姓名和学号。在LCD上显示汉字、数字时,首先要对需显示的汉字使用特定的软件取模,将字模数据提前定义好对应的一个数据区域,每次在LCD上显示一个数据,就从定义数据区域内获取,显示时在8255的PB口对LCD的状态进行控制,在8255的PA口给出要显示的数据信息。程序流程图如下图 3-16 所示:

执行交通灯控制中断程序时,需要对交警按钮状态判定,当前是第几秒判断,更具判断进行相应的变化。

代码段设置变量transpPOINT,用来记录当前交通的时间。在transpPOINT 0秒、53-57秒、55-59秒、58秒、60秒、93-97秒、98秒时,对需要发光的的交通灯,在对应的8255A控制端口输出高电平,使此交通灯发光。
对于直行、左右转的交通灯闪烁效果,可以通过前一秒送出低电平,后一秒送出1高电平,按照此方法实现功能。

3.2.3 存储模块扩展部分

存储器扩展模块将以A2000H开始的ROM区域数据,转移到以B3000H开始的RAM地址。

使用两个指针寄存器,分别指向ROM、RAM的偏移地址,每移动一个字节数据,指针就向后移动,在判断当前指针是否已经到达数据末尾。到达末尾时,结束此程序。

3.2.4 自选接口模块设计部分

密码锁模块中,先进行矩阵键盘的扫描,等待数据输入。当有按键按下时,程序会检测到端口电平变化,然后遍历行,进而遍历列,再通过行列值计算目前的按键值,将键值保存到 NEWPASS 数组。
若当前输入未够6个数,则继续读键盘;反之,则与正确的密码进行比较,看输入的密码是否正确。如果密码正确,液晶屏显示“You are right !!”,密码错误时,液晶屏显示“You are wrong !!”。

3.2.5 各功能模块协同工作控制部分

本设计中,先执行内存数据转移代码,再液晶显示屏输出个人信息,之后是矩阵键盘代码死循环执行,监控键盘端口。
由于交通灯必须每分钟按时变化,时序不能有任何耽误,所以将交通灯代码作为中断进行执行,交通灯中断发生时会打断死循环的密码锁部分,当本次的交通灯代码结束时,继续返回执行被打断的密码代码。

3.3 核心数据结构

3.3.1 液晶屏部分

xi DB :用于保存液晶屏需要显示的汉字(西)字模码。
RESET EQU 11100010B :用于保存液晶屏复位命令。
LINE0 EQU 01000000B :用于保存液晶屏列号。

3.3.1 交通灯控制部分

对于交通灯直行方向的倒计时效果,提前将需要显示的数字保存到数据段的数组中,每次发生交通灯中断时,指针后移一位,将数字输出到对应8255A芯片的端口,数码管按照输出显示对应的数字,给人交通灯随着时间变化的感觉。
SEGDATA DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
将数码管显示0-9数字的控制信号保存到此数组,需要输出某个阿拉伯数字时,将此阿拉伯数字作为SEGDATA1数组的偏移值,取出SEGDATA中对应的数据,送到七段数码管,以此实现了对阿拉伯数字的数码挂显示。
transpPOINT DB 0
此变量用作指针,用来记录当前的时间,用这个指针进行交通灯当前时间判断,进而在特定的时间对交通灯发光二极管、倒计时进行控制。
WEZXtranspXRtranspS DB ’ W E Z H I X I N G , X I N G R E N I S G R E E N - - - - -’
此变量保存东西方向的交通灯变为绿灯时,需要在内存记录的字符串。由于存储器扩展时,按照就奇偶片进行扩展的,所以在写内存时,方便同一片内存观察写入结果,在字符串之间填充空格,将空格写入到偶内存芯片,将字母写入到奇内存芯片。最终实现的效果是,奇内存芯片保存了连续的字符串。

3.3.1 密码锁部分

以上两个变量保存正确密码、输入的密码。由于键盘每次只能读入一个数字(4位二进制),但8086微机中,最小的存储单位是字节(8位二进制),所以使用一个字节保存一位密码不需要移位操作,更加便利。其次在进行密码正确性比较时需要按字节比较,所以使用一个字节保存一位密码,更容易实现比较功能,不需要额外的移位操作。

3.4 关键代码片段分析

以上程序片段实现输入密码正确性的比较。将正确密码、输入的临时密码取出第一位进行比较,如果二者不相等,就停止比较,直接输出密码错误,如果二者相等,则指针同时加1,再将第二位进行比较,当6位密码全部逐一比较完毕,没有发现错误,就认为密码完全正确。

以上代码片段实现将输入密码显示到6位七段数码管的功能。6位七段数码管中,每位共用8个数据引脚,每位各有一个控制引脚,工作时8个数据引脚将数据送到控制引脚有效的那一位进行显示。可以理解为在一个时刻,6位七段数码管只能显示一个数字,因此通过以上程序先输出第一位阿拉伯数字,紧接着在非常短的时间内,马上转变控制信号,输出第二位,同理输出后面的几位数字,导致人眼的刷新频率跟不上数码管变化的频率,所以就给人一种数码管连贯显示数字的感觉。
以上代码将DS:[SI]的数据按字节移动到ES:[DI]区域,移动的个数为通过寄存器CX进行指定。

4. 设计验证

4.1 测试方案

首先将各部分整体运行,观察各模块间的整体协作运行是否正常,看全局功能是否能够正常运行。观查设计图中各芯片引脚,是否连线完全正确,各引脚输入、输出电平完全正确。
其次将依次详细查看内存数据移动、调试液晶屏显示器、交通灯控模块、密码锁模块,查看各部分具体的功能是否已经实现,是否在特定情况下发生系统奔溃现象,是否存在程序逻辑方面的错误。
图 4-1 项目整体调试思路

4.2 测试验证步骤、过程及结果

运行仿真平台,对全局功能的实现情况进行检查。

4.2.1 液晶屏信息显示

运行仿真设计,LCD液晶显示屏显示学校和学院简称“XX师大计工学院”、课程名“微机原理期末设计”、自己的汉语名字和学号。
液晶屏模块所有功能已完全实现,本模块各部分运行正常。

4.2.2 交通灯控制

运行仿真设计,如图 4-6 所示,数码管倒计时显示正常,四个方向发光二极管显示正常。当按下交警控制按钮时,对应方向的交通灯按照要求变化,松开按钮后,每个方向交通灯恢复之前状态。每次交通灯变化时,成功将变化信息写到内存区域。
交警控制模块所有功能已完全实现,本模块各部分运行正常。

4.2.3 存储扩展模块

运行仿真设计,如图 4-7 所示,已经成功将ROM的数据读到RAM区域,表明存储器扩展部分实现正常。
存储器扩展模块功能已完全实现,本模块各部分运行正常。

4.2.4 自选接口模块设计

运行仿真设计,如图 4-8 所示,密码错误时,会显示“You are wrong !!”,密码正确时,会显示“You are right !!”。表明密码锁部分实现正常。
密码锁模块功能已完全实现,本模块各部分运行正常。

4.2.5 各功能模块协同工作控制设计

运行仿真设计,如图 4-9 所示,8253A芯片的CLK0时钟信号累计到达1000次,OUT0引脚就会发出一个时钟周期的高电平,将高电平信号发送给8259A芯片的IRO引脚,触发一次不可屏蔽中断,执行一次交通灯代码。表明交通灯与各部分的协作实现正常。
各模块功能已完全整合在一起,整体运行正常。

4.3 测试过程遇到的问题及解决

  1. 指针没有初始化,内存溢出。
    使用变量或寄存器作为指针使用时,需要遵循先赋值、再使用的原则,时刻明确指针的当前位置。
  2. PUSH 和 POP
    各寄存器变量入栈后要记得最后弹栈,弹栈的顺序与入栈的顺序相对应,更不能忘记弹栈。
  3. RET 和 IRET
    RET 为子程序结束标志,IRET为中断程序结束标志。在子程序、中断程序结束时要加上各自的计数标识,否则会造成莫名其妙错误。
  4. 调试技巧
    汇编语言中没有高级语言的控制台打印输出功能,因此可以先将某一变量申明为 PUBLIC,之后配合JMP $语句,打开变量监控调试程序。
    4.4 需要讨论的其它问题
  5. 遇到的硬件问题1:运行仿真时发生奔溃,并输出下边提示,在另一个文件中重新硬件设计后没有报错,目前没有找到发生的具体原因、解决的具体方法。
  6. 遇到的硬件问题2:运行仿真时发生奔溃,提示迭代次数过多。已经找到原因,是因为没有及时的停止中断请求,造成中断嵌套过多。

4.5 测试结论

本次设计实现非常成功,各部分功能已全部实现,整合起来后整体协作运行正常。

5. 设计总结

本次设计全部由本人亲自完成。本次的设计是微机原理与接口技术教程这门课收获最为丰富的一部分。
通过本次设计的实现,将许多课本的理论知识更加的清楚。上课时候由于课程任务重,课时少,对本门课的知识吸收并不是特别的好,在设计中凭着“逢山开路、逢水架桥”的精神,不断的翻书、不断的找资料、不断的模仿别人,不断的犯错、不断的改正,在一次次的报错中,经验不断的丰富,实力慢慢的提升。
在本次设计中,不光完成了自己的设计作业,同时也积极与身边的同学交流、探讨,解决自己问题的同时,帮助身边的同学解决了许多问题。在同学间互相进步的同时锻炼了我的人际交往能力。
通过本次设计,我也深深理解到,在未成为大佬前,先从模仿大佬开始。不管是翻阅课本,还是查找网络资料,都是对大佬的模仿,在不断的模仿中,将知识转化为自己的理解。

6. 课程学习总结

通过对本课程的学习,对计算机的组成部分、工作原理有了更深层次的认识。本次课程从最底层讲解了计算机的物理实现,对各位行业前辈的智慧深深折服,被计算机的精妙设计深深震撼。
通过对本课程的学习,打开了我对计算机硬件方面的一扇门,就像C语言对每个计算机初学的软件方面的启迪一样,已经在我的内心点下星星之火,虽然理想中没有从事硬件行业的想法,但是我相信如果以后迫不得已,从事硬件行业,有了这门课的基础,对于硬件方面更加的有信心。
通过对本课程的学习,使我对汇编语言有了进一步的了解。汇编语言不同于以前学过的任何高级程序语言,在程序结构上没有高级语言那么多的限制,可以自由自在的跳转程序,我认为这就是汇编语言最具有魅力的地方。
以上就是我对这节课的学习总结,向引领学习答疑解惑的老师、向提供帮助的各位同学致以深深的感谢,向推动计算机行业进步的各位行业前辈致以深深的敬佩。

7. 本课程教学建议

我对本学期的教学情况非常满意。
我个人感觉,本课程知识量大,课时紧,很多理论知识很难完全记住,通过针对性的仿真实验,可以加强对理论知识的记忆、理解程度,可以同时加强理论知识和实践动手能力。我认为仿真实验的设计是本门课的一大亮点,可以继续实施下去。

参考文献

[1]江琪.8086接口实验系统设计[J].电子与电脑,1994(02):30-36.
[2]马瑞,高美蓉.基于Proteus和8086的电子时钟设计与仿真[J].办公自动化,2021,26(19):46-47+21.
[3]刘文光,张铭铭.基于Proteus的电子时钟仿真设计调试[J].济南职业学院学报,2020(02):122-124.
[4]顾洁,刘芯言,朱东敏.“微机原理与接口技术”开放性实验建设——8259A硬件中断实验[J].科技促进发展,2011(S1):326+322.
[5]李璨,黄钊.微机交通灯模拟[J].中国科技信息,2013(05):58+61.
[6]项新建.微机交通灯控制系统[J].微型机与应用,1997(09):28-30.
[7]熊佩轩,万在红,贾宇琪,胡伟倩.基于8086微机的多功能密码锁项目分析[J].无线互联科技,2017(01):54-57.

附 录

附录A 代码清单

由于本设计源代码较长,详细源代码见文件:202.asm

最终实现效果

汇编语言与接口技术——期末设计_第1张图片

汇编语言与接口技术——期末设计_第2张图片
汇编语言与接口技术——期末设计_第3张图片
汇编语言与接口技术——期末设计_第4张图片
汇编语言与接口技术——期末设计_第5张图片
汇编语言与接口技术——期末设计_第6张图片

如有任何问题,请私信联系

你可能感兴趣的:(#,汇编语言与接口技术学习,开发语言,proteus,硬件工程)