在复习微机原理硬件考试的时候给本学期的附加题项目写了一下批注,在这里顺便简单分享一下我的思路。

题目如下:用8086、8255、8254(8253)实现电子跑表,分别显示小时、分钟、秒的计数,60秒后分钟进一,60分钟后小时进一。使用按键控制秒表的状态,按下一个键时开始计时,按下另一个键时停止计时,按下又另一个键时退出程序。8255的地址为320H、324H、328H、32CH。8254的地址为300H、304H、308H、30CH。(题目描述可能不太清晰,大致是这样)

我的代码:

.486                 ;软件要求,根据实际情况编写
CODES SEGMENT USE16ASSUME CS:CODESORG 1000H
START:MOV DX,32CH         ;8255MOV AL,10001001B     ;C IN,  A\B OUTOUT DX,ALMOV DX,30CH         ;8254初始化,选用方式3,生成周期为1s的时钟信号MOV AL,00110110BOUT DX,ALMOV DX,300HMOV AX,47000       ;8254收到的频率为47000hzOUT DX,ALMOV AL,AHOUT DX,AL           ;1SK1:  MOV CX,0CALL AGAIN                   CALL CHECK1         ;等待键盘输入信息CMP AL,8EH            ;当键盘0按下时,开始计时JZ BEGIN1CMP AL,8DH         ;当键盘1按下时,停止计时JZ STOPCMP AL,8BH           ;当键盘2按下时,退出 JZ QIUTJMP K1BEGIN1:                 ;计数按键MOV CX,39590D          ;预设值,可以更改
T1: CALL AGAIN          ;显示现在寄存的时间值CALL CHECK1          ;检测键盘情况CMP AL,8DH           ;当键盘1按下时,停止计时JZ STOPCMP AL,8BH           ;当键盘2按下时,退出 JZ QIUTMOV DX,328H           ;C口输入IN  AL,DX              ;时钟信号由c0口输入TEST AL,01JNZ T1             ;判断时钟0信号是否到来
T2: CALL AGAIN          ;显示现在寄存的时间值CALL CHECK1          ;检测键盘情况CMP AL,8DH           ;当键盘1按下时,停止计时JZ STOP             CMP AL,8BH          ;当键盘2按下时,退出 JZ QIUTMOV DX,328H                IN AL,DX                           TEST AL,01          ;c口输入检测时钟1信号是否到来JZ T2               ;时钟仍然为0,保持原计数值并显示,继续下一次检测INC CX               ;时钟1到来,说明1s已经过去,计数值加一,跳转到显示程序      JMP T1STOP:                 ;停止按键CALL AGAIN         ;显示现在寄存的值CALL CHECK1            ;检测键盘输入情况,之后判断是否有功能键被按下CMP AL,8EH           ;当键盘0按下时,重新从预设值开始计时JZ BEGIN1CMP AL,8DH           ;当键盘1按下时,开始计时JZ T1CMP AL,8BH         ;当键盘2按下时,退出 JZ QIUTMOV DX,328H           ;C口输入IN  AL,DX              ;时钟信号由c0口输入TEST AL,01JNZ STOP           ;判断时钟0信号是否到来
STOP1:  CALL AGAINCALL CHECK1CMP AL,8EH          JZ BEGIN1CMP AL,8DHJZ T1CMP AL,8BH         JZ QIUTMOV DX,328H    IN AL,DXTEST AL,01            ;c口输入检测时钟1信号是否到来JZ STOP1            ;时钟仍然为0,保持原计数值并显示,继续下一次检测JMP STOP         ;时钟1到来,说明1s已经过去,计数值加一,跳转到显示程序;理论上来讲STOP1这部分可以不写,但我记得在硬件实操时可能由于延时不够长导致检测到死循环而崩溃QIUT: MOV CX,0H               ;退出按键CALL AGAIN         ;显示寄存的值JMP WT               ;死循环终止程序
WT:   JMP WT        AGAIN PROC              ;时间计算与显示子程序MOV AX,CX            CMP AX,65535D           ;判断是否超寄存器范围 JA QIUT             ;超出则直接退出MOV DX,0H           ;清零DX(原因见下)MOV BX,3600D           ;BX=3600S=1HDIV BX                ;此处DIV的意义为DX:AX/BX,也解释了上面DX清零的原因PUSH DX              ;DX中为计算结果的余数,压栈保存MOV BL,10D         ;BL=10DIV BL               ;此处DIV的意义为AX/BL,AX为前面除法结果的商,运算后AL为商,即小时的十位,AH为余数,即小时的个位PUSH AX              ;压栈保存AXMOV AH,20H           ;AH给数码管位选LED6   CALL DISP           ;显示小时的十位POP AX              ;弹栈AX,根据FILO,弹出的AL为商,即小时的十位,AH为余数,即小时的个位MOV AL,AH           ;个位数字送ALMOV AH,10H          ;位选LED5CALL DISP            ;显示小时个位POP DX               ;弹栈,弹出余数MOV AX,DX                MOV BL,60D          ;BL=60S=1MINDIV BL                ;AX/BL 运算后AL为商,为分钟数,AH为余数,为秒数PUSH AX               ;压栈保存除法结果MOV BL,10D         ;BL=10AND AH,0         DIV BL              ;AX/BL 运算后AL为商,为分钟的十位,AH为余数,为分钟的个位MOV BX,AX        PUSH BX             ;压栈保存分钟数个位MOV AH,08H            ;位选LED4CALL DISP            ;显示分钟十位POP BX               ;弹栈MOV AL,BH            MOV AH,04H          ;位选LED3CALL DISP            ;显示分钟个位POP AX               ;弹栈秒数MOV AL,AH      MOV BL,10D          ;BL=10AND AH,0DIV BL               ;AX/BL AL为商为秒数的十位,AH为余数,为秒数的个位PUSH AX             MOV AH,02H          ;位选LED2CALL DISP            ;显示秒数十位POP AXMOV AL,AHMOV AH,01H            ;位选LED1CALL DISP            ;显示秒数个位RET
AGAIN ENDP          DLY PROC                ;延时程序PUSH CX                ;压栈cxMOV CX,4FH         ;根据硬件情况选择cx的值
DELY:LOOP DELYPOP CXRET
DLY ENDPDISP PROC               ;显示程序LEA BX,SEGPT       ;字型码表首地址给bxXLAT                 ;AX=[BX+AL],执行该操作后AL=原AL数字的字形型码MOV DX,320H           OUT DX,ALMOV DX,324HMOV AL,AHOUT DX,AL          ;位选,字型码输出CALL DLY            ;延时RET
DISP ENDPCHECK1 PROC                ;检测键盘程序MOV AL,00H           MOV DX,328H         ;只用一列键盘所以不用进行扫描,直接读键特征值IN AL,DX       AND AL,0F0H            ;键盘信息输入到c口高四位MOV AH,80HPUSH CXMOV CX,4SHR  AL,CL            ;将AL高四位移到低四位,即键盘信息POP CXOR AL,AH         ;键盘特征值为0:8EH 1:8DH 2:8BHRET
CHECK1 ENDP SEGPT DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH       ;字型码CODES ENDSEND START  

硬件连接我用proteus简单演示了一下,其中地址译码模块我没有放进去,根据自己需求做就好了(我的Proteus有点问题跑不了仿真就不演示仿真了)

[微机原理]用8086、8255、8254(8253)实现电子秒表相关推荐

  1. 8255交通灯实验的微型计算机,微机原理课程设计——8255,8253交通灯模拟实验.doc...

    文档介绍: 微机原理课程设计 设计任务及要求: 交通信号灯的控制: 通过8255A并口来控制LED发光二极管的亮灭. A口控制红灯,B口控制黄灯,C口控制绿灯. 输出为0则亮,输出为1则灭. 用825 ...

  2. 微机原理—可编程计数器/定时器8253概念详解

    目录 前言 [1]定时处理方法 1.定时的方法: 2.定时和计数器 [2]8253计数/定时器 1.特点: 2.芯片引脚以及电路: 3.连接方式: 4.工作原理: 5.寄存器配置 a.初始化操作(三个 ...

  3. 微型计算机接口技术425页,微机原理与接口技术(修订版高等院校电工电子技术类课程十二五规划教材)...

    导语 内容提要 谢四连.董辉.许岳兵主编的<微机原理与接口技术(修订版)>内容分为两部分:第一部分全面系统地介绍了Intel系列微处理器的工作原理.指令系统以及汇编语言程序设计方法:第二部 ...

  4. 微机原理--8088/8086微处理器详解

    外部引脚及其功能 8088是与8086同时代的微处理器,具有完全相同的指令系统. 两者唯一区别为:在硬件结构上,8088与存储器和I/O接口进行数据传输的外部数据总线宽度为8位,而8086数据总线为1 ...

  5. 【沧海拾昧】微机原理:8086/8088中断系统

    #C0305 沧海茫茫千钟粟,且拾吾昧一微尘 --<沧海拾昧集>@CuPhoenix [阅前敬告] 沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系 如有问题定为本集记录有谬, ...

  6. 微机原理(8086基本知识点)

    一.8086介绍     8086是16位的处理器,数据总线为16位,地址总线为20位,分为BIU(Bus Interface Unit)与EU(Execution Unit),外部引脚总共40个,左 ...

  7. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告...

    微型计算机温度控制系统设计 <微机原理及其应用>课程设计报告 2011年3月2日 一.课程设计题目及系统功能介绍 微型计算机温度控制系统设计,假设工业现场温度范围为 0~75℃,温度值经传 ...

  8. 微型计算机温度控制系统设计,微机原理及其应用微型计算机温度控制系统设计课程设计报告;...

    <微机原理及其应用微型计算机温度控制系统设计课程设计报告;>由会员分享,可在线阅读,更多相关<微机原理及其应用微型计算机温度控制系统设计课程设计报告;(20页珍藏版)>请在人人 ...

  9. 基于8086的电子秒表

    使用 8255 和 8253 等芯片设计秒表,计时精度 0.1 秒,有 3 个 独立按键(开始.暂停/继续.复位),并用 7 位数码管显示小时. 分钟.秒和 0.1 小数秒.可以使用 NMI 中断. ...

最新文章

  1. php超链接访问,怎么给一个PHP密码访问页面加超链接
  2. [vue] 第一次加载页面时会触发哪几个钩子?
  3. stm32 isp下载官方软件android_OpenCanvas免费版下载_OpenCanvas绘图软件官方版下载7.0.25...
  4. 近 5 亿人的隐私,毁于一位程序员之手?
  5. Multi-thread--C++11多线程中std::call_once的使用
  6. VisualStudio安装
  7. linux tcl是什么系统,基于Linux 及Tcl / Tk 的数控系统人机界面的实现
  8. iOS简单实现查看更多/收起的效果[最新]
  9. shell 字符串中是否包含任一字符串
  10. mysql 查看tomcat日志_查看tomcat日志
  11. php商城项目开发视频_ThinkPHP开发大型商城项目实战视频_ThinkPHP商城开发案例
  12. 使用命令启动IOS模拟器
  13. foxmail设置,服务器备份(很实用)
  14. 使用ret2reg攻击绕过地址混淆
  15. 2022东北四省赛 F. Tree Path (树剖 + 线段树维护堆)
  16. 页面首页、上一页、下一页、尾页设置
  17. 夏にありがとう(向夏天致谢)-因幡晃
  18. 【文献阅读】The role of news sentiment in oil futures returns and volatility forecasting
  19. java中的抽象到底是个啥?
  20. 使用Python中的matplotlib将多个图片显示到一张图内

热门文章

  1. ITK-SNAP 安装和使用
  2. Gosu.ai获190万美元,用于自动化游戏培训建议
  3. 金庸一人,带给游戏界的千亿财富 | Mob Insight
  4. python用于工控_python做自动化工控_动漫台
  5. Z-Wave 抓包工具使用说明
  6. Win10系统如何禁用驱动程序强制签名
  7. 用python爬取《龙珠·超次元乱战》漫画并转化成pdf阅读
  8. 麦肯锡发布2019时尚业态报告 自我颠覆、按需生产将成焦点
  9. 2008年度全球50个最佳网站
  10. ios模仿微信的我界面的demo