【Proteus/8086】swjtu西南交大微机与接口技术实验:计时器

news2025/1/24 18:03:26

实验内容:

计时器基本功能:
1)CPU必须用8086
2)计时器最小计时单位为秒。
3)以00:00格式显示计时,前2位表示分钟,后2位表示秒。

4)计时器是正计时方式
5)有暂停、继续计时功能

6)有复位计时功能
7)每次按下暂停键,能显示计时间隔时间

参考书籍:

微机原理与接口技术——基于8086和Proteus仿真(第3版)(作者:顾晖等),p273,13.1电子秒表。若有补充内容,放在评论区。

具体实现的功能描述:

1)CPU 使用 8086

2)计时器最小计时单位为秒。

3)按下 START 键,以正计时方式开始计时。以 00:00 格式在数 码管 L1 上显示计时,前 2 位表示分钟,后 2 位表示秒。

4) 数码管 L1 显示正常计时时间,数码管 L2 显示两次按下暂停 的时间间隔。在正常计时情况下,按下 PAUSE/RESUME 键,计时 器暂停计时,数码管 L1 显示暂停时刻,数码管 L2 显示从暂停 时刻从 0 开始计时的时间,直到再次按下暂停,计时器从暂停 时刻开始继续计时, L1 显示对应的计时时间,数码管 L2 开始 显示从继续计时时刻从 0 开始计时的时间,直到再次按下暂 停,回到前述的暂停情况。

5) 按下 RESET 键,计时器复位,数码管 L1 显示 0000,然后按 下 START 键,可以重新从 0000 开始计时。

电路图:

 电路图的绘制和项目创建可以参看专栏的其他文章。如:【Proteus】绘制简单的电路图-CSDN博客

1.I/O 地址译码电路: 

2. 8253 计时电路:

注意: 这里clk0设为了1khz,数码管显示比较接近1s

 3.8255A 显示及中断电路:

 

 4.总览和器件列表(图的左边)

汇编代码(部分):

A8255 EQU 0000H                  ;用于显示正常计时时间8255A各端口地址
B8255 EQU 0002H
C8255 EQU 0004H
CTR8255 EQU 0006H
AA8255 EQU 0300H                 ;用于显示暂停时间间隔8255A各端口地址
BB8255 EQU 0302H
CC8255 EQU 0304H
CCTR8255 EQU 0306H

CH0 EQU 0200H                    ;8253计数器0的端口地址
CTR8253 EQU 0206H                ;8253 控制端口地址
AD245 EQU 0100H                  ;74LS245地址    

CODE SEGMENT 'CODE'
    ASSUME DS:DATA,CS:CODE,SS:SSEG
START: 
    MOV AX,SSEG                       
    MOV SP,AX
    
    CLI                           ;关中断
    MOV AX,0                      ;设中段向量       
    MOV ES,AX
    MOV BX,2*4                    ;NMI为2号中断
    MOV AX,OFFSET INTR_KEY
    MOV WORD PTR ES:[BX],AX
    MOV AX,SEG INTR_KEY
    MOV WORD PTR ES:[BX+2],AX
    STI                           ;开中断

    MOV AX,DATA                   ;初始化数据段
    MOV DS,AX
    MOV AX,DATA
    MOV ES,AX

    MOV AL,10001001B               ;8255A初始化
    MOV DX,CTR8255
    OUT DX,AL
    MOV AL,10001001B               ;8255A初始化
    MOV DX,CCTR8255
    OUT DX,AL
RUN:
    CALL RUNNING                   ;循环等待中断
    JMP RUN    
    
INTR_KEY PROC                      ;中断服务程序
    PUSH AX                        ;现场保护
    PUSH BX
    PUSHF
    CALL KEY                       ;读取按钮状态
    TEST AL,01H                    ;检测启动按钮
    JZ K1
    TEST AL,02H                    ;检测暂停按钮
    JZ K2
    TEST AL,04H                    ;检测复位按钮
    JZ K3
K1:
    MOV KEYST,1                    ;按钮标志位置为1
    JMP FIN
K2:
    MOV KEYST,2                    ;按钮标志位置为 2
    INC PAUSEKEY                   ;记录暂停按钮按下次数
    JMP FIN
K3:
    MOV KEYST,3                    ;按钮标志位置为3
FIN:
    POPF                           ;恢复现场
    POP BX
    POP AX
    IRET
INTR_KEY ENDP  

RUNNING PROC                     ;根据当前的中断触发类型,转入不同的显示
AGAIN: 
    CMP KEYST,1
    JZ T1
    CMP KEYST,2
    JZ T2
    CMP KEYST,3
    JZ T3
    JMP E0
T1:
    MOV AL,0                       ;正常计时和继续计时,暂停时间清零
    LEA DI,PAUSEBUF
    MOV CX,4
    CLD
    REP STOSB
    
    CALL TIME                      ;转入计时
    JMP E0
T2:
    TEST PAUSEKEY,1             ;检测暂停按钮按下次数,转入暂停或继续计时
    JZ T1  
    CALL PAUSETIME                 ;调用暂停时间计时子程序
                                   
    MOV AL,0                       ;奇数次,把继续计时时间暂存区清零
    LEA DI,RESUMEBUF
    MOV CX,4
    CLD
    REP STOSB
    JMP E0
T3:
    CALL RESET                     ;系统复位
E0:
    CALL DISP                      ;调用显示子程序
    CMP KEYST,3
    JZ OUT2
    CMP KEYST,1
    JZ OUT2
    TEST PAUSEKEY,1 
    JZ OUT1
    CALL PAUSEDISP                ;调用暂停计时时间显示子程序
    JMP OUT2
OUT1:
     CALL RESUMEDISP              ;调用继续计时时间显示子程序 
OUT2:RET
RUNNING ENDP

TIME PROC                         ;计时子程序,按时间进位规则
    PUSH AX
    PUSH BX
    PUSH SI
    PUSH DI

    LEA SI,TIMEBUF                ;10毫秒
    MOV AH, [SI]
    INC AH

    CMP AH,100
    JZ S1
    MOV [SI],AH
    JMP S5
S1:
    MOV AH,0                      ;秒
    MOV [SI],AH
    MOV AH,[SI+1]
    INC AH
    CMP AH,60
    JZ S2
    MOV [SI+1],AH
    JMP S5
S2:
    MOV AH,0                       ;分
    MOV [SI+1],AH
    MOV AH,[SI+2]
    INC AH
    CMP AH,60
    JZ S3
    MOV [SI+2],AH
    JMP S5
S3:
    MOV AH,0                       ;时
    MOV [SI+2],AH
    MOV AH,[SI+3]
    INC AH
    CMP AH,24
    JZ S4
    MOV [SI+3],AH      
    JMP S5
S4:
    MOV AL,0
    LEA DI,TIMEBUF
    MOV CX,4
    CLD
    REP STOSB
S5:
    CALL DIGIT                      ;将正常计时时间转换为数位值
    CALL RESUMETIME                 ;从继续计时时刻开始的计时
    CALL RESUMEDIGIT                ;将继续计时时间转换为数位值

    CALL DELAY8253                  ;8253计时
    POP DI
    POP SI
    POP BX
    POP AX
    RET
TIME ENDP  

DIGIT PROC                          ;将时间转换为数位值
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH SI
    PUSH DI
    MOV BL,4                        ;4个时间单位,依次转换
    LEA DI,LEDBUF
    LEA SI,TIMEBUF
NEXT: 
    LODSB                           ;从TIMEBUF中依次取出时间值
    MOV AH,0
    MOV CL,10                ;除以10,分离出时间的个位和十位,存入 LEDBUF
    DIV CL
    XCHG AH,AL
    STOSB
    MOV AL,AH
    STOSB
    DEC BL
    JNZ NEXT
    POP DI
    POP SI
    POP CX
    POP BX
    POP AX
    RET
DIGIT ENDP 

DISP PROC                            ;显示 LEDBUF 中的值
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    PUSH SI
    LEA BX,LEDTAB
    LEA SI,LEDBUF
    MOV CX,8
    MOV AH,7FH
LOOP1: 
    MOV AL,[SI]
    XLAT                             ;换码,数位值转换成LED显示段码
    MOV DX,A8255                     ;段码值送8255A端口A
    OUT DX,AL
    CMP AH,7FH
    JZ DIS1
    CMP AH,0BFH
    JZ DIS1   
    
    MOV AL,AH                        ;LED位选送 8255A端口 B
    MOV DX,B8255
    OUT DX,AL
DIS1:    CALL DELAY
    ROR AH,1
    INC SI
    CALL CLRLED                      ;LED清屏
    LOOP LOOP1
    POP SI
    POP DX
    POP CX
    POP BX
    POP AX
    RET
DISP ENDP    

CLRLED PROC                           ;清屏子程序
    PUSH AX
    PUSH DX
    MOV AL,0FFH
    MOV DX,B8255
    OUT DX,AL
    POP DX
    POP AX
    RET
CLRLED ENDP 

DELAY8253 PROC                       ;8253延时子程序
    PUSH AX
    PUSH DX
    MOV DX,CTR8253                   ;设置8253控制字,计数器0,方式0
    MOV AL,00010000B
    OUT DX,AL
    MOV DX,CH0
    MOV AL,06H
    OUT DX,AL
    MOV DX,AD245
W1:
    IN AL,DX
    TEST AL,01H                ;检测8253计时是否结束,计数器0输出高电平
    JZ W1
    POP DX
    POP AX
    RET
DELAY8253 ENDP   

DELAY PROC                            ;软延时
    PUSH CX
    MOV CX,50
WAIT1: 
    LOOP WAIT1
    POP CX
    RET
DELAY ENDP  

RESET PROC                            ;计数复位子程序,数据缓冲区全部清0
    PUSH AX
    PUSH CX
    PUSH DI
    MOV AL,0
    LEA DI,TIMEBUF
    MOV CX,13
    CLD
    REP STOSB
    
    MOV AL,0
    LEA DI,PAUSEBUF
    MOV CX,4
    CLD
    REP STOSB

    MOV AL,0
    LEA DI,RESUMEBUF
    MOV CX,4
    CLD
    REP STOSB
    POP DI
    POP CX
    POP AX
RESET ENDP  

KEY PROC                             ;读开关子程序
    MOV DX,C8255
    IN AL,DX
    RET
KEY ENDP      

更多(源文件、报告)请见:

西南交大swjtu微机与接口技术实验:计时器源文件与报告资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp中使用封装步骤条组件

针对步骤条封装完终于清清楚楚啦 先看效果&#xff1a; 附上代码&#xff1a;使用可直接复用&#xff1a;数据是写在了当前组件中&#xff0c;如有必须&#xff0c;可以使用其中的props传值stepInfos传递相应的数据&#xff0c;根据steps步数就可以控制走到哪一步啦 <temp…

双向数据绑定是什么

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新双向绑定就很容易联想到了&#xff0c;在单向绑定的基础上&#xff0c;用户更新了View&#xff0c;Mo…

在 Windows 中关闭指定端口的方法

方法一&#xff1a;使用命令行&#xff08;Command Prompt&#xff09; 查找端口占用情况 打开命令提示符&#xff08;Command Prompt&#xff09;并输入以下命令来查找占用指定端口的进程&#xff1a; netstat -aon|findstr "<port_number>" 这里的 <p…

【笔记】Spring的循环依赖

Spring的循环依赖 ObjectFactory:函数式接口&#xff0c;可以将lambda表达式作为参数放在方法的实参种&#xff0c;在方法执行的时候&#xff0c;并不会实际的调用当前lambda表达式&#xff0c;只有在调用getObject方法的时候才回去调用lambda表达式 为什么spring要用三级缓存…

一周工作问题总结(2023.12.18-2023.12.22)

一周工作问题总结 1. 接口调用频率2. 汉字在数据库中占用字节问题3. Map在循环中修改自己的key与value4. Group BY5.递归同步数据6.代码移动Idea飘红 1. 接口调用频率 供应商给的接口可以每秒调用5-10次&#xff0c;那么我为了保险每秒调用5次&#xff0c;为了防止过度调用接口…

SpringBoot+SSM项目实战 苍穹外卖(7)(Spring Cache)

继续上一节的内容&#xff0c;本节实现缓存菜品、缓存套餐、添加购物车、查看购物车和清空购物车功能。 目录 缓存菜品缓存套餐(基于Spring Cache)EnableCaching、Cacheable、CachePut和CacheEvictSpring Cache实现缓存套餐 添加购物车查看购物车清空购物车 缓存菜品 用户端小…

nodejs+vue+ElementUi医院预约挂号系统3e3g0

本医院预约挂号系统有管理员&#xff0c;医生和用户。该系统将采用B/S结构模式&#xff0c;使用Vue和ElementUI框架搭建前端页面&#xff0c;后端使用Nodejs来搭建服务器&#xff0c;并使用MySQL&#xff0c;通过axios完成前后端的交互 管理员功能有个人中心&#xff0c;用户管…

使用 Elasticsearch 检测抄袭 (一)

作者&#xff1a;Priscilla Parodi 抄袭可以是直接的&#xff0c;涉及复制部分或全部内容&#xff0c;也可以是释义的&#xff0c;即通过更改一些单词或短语来重新表述作者的作品。 灵感和释义之间是有区别的。 即使你得出类似的结论&#xff0c;也可以阅读内容&#xff0c;获得…

java练习题之多态练习

1&#xff1a;关于多态描述错误的是(D) A. 父类型的引用指向不同的子类对象 B. 用引用调用方法&#xff0c;只能调用引用中声明的方法 C. 如果子类覆盖了父类中方法&#xff0c;则调用子类覆盖后的方法 D. 子类对象类型会随着引用类型的改变而改变 2&#xff1a;class Supe…

【ONE·MySQL || 基础介绍】

总言 主要内容&#xff1a;MySQL在Centos 7下的安装&#xff08;主要学习相关指令语句&#xff0c;理解安装操作是在做什么&#xff09;、对MySQL数据库有一个基础认识。 文章目录 总言0、MySQL的安装与卸载&#xff08;Centos 7&#xff09;0.1、MySQL的卸载0.1.1、卸载不必要…

C练习题13答案

单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.结构化程序由三种基本结构组成、三种基本结构组成的算法是(A) A.可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完…

没通知就降公积金的脉脉,面试考什么?

写在前面 刚过去的周末&#xff0c;又一家神奇公司映入眼帘&#xff1a; 怎么说呢&#xff1f;自家的瓜出现在自家&#xff0c;至少说明脉脉没有跟微博似的限流。 自家做职场社交&#xff0c;就用自家帖子做全员通知&#xff0c;脉脉你就这么“降本”的吗&#xff1f;&#x1f…

【OCR识别】PaddleHub实现验证码识别

文章目录 前言无脑安装使用PaddleHub寻找预训练模型库完整代码效果图 前言 前面有篇文章介绍了 【网站验证码识别】 &#xff0c;但是其是利用 tesseract 工具的命令行来实现图片内容的识别。 这几天我突然想起&#xff0c;大学时参加百度 AI 比赛用过其 PaddleHub 框架&…

计算机网络 应用层上 | 域名解析系统DNS 文件传输协议FTP,NFS 万维网URL HTTP HTML

文章目录 1 域名系统DNS1.1 域名vsIP&#xff1f;1.2 域名结构1.3 域名到IP的解析过程域名服务器类型 2 文件传送协议2.1 FTP 文件传输协议2.2 NFS 协议2.3 简单文件传送协议 TFTP 3 万维网WWW3.1 统一资源定位符URL3.2 超文本传送协议HTTP3.2.1 HTTP工作流程3.2.2 HTTP报文结构…

flask之文件管理网页(上传,下载,搜索,登录,注册) -- 翔山 第一版

前面说要做一个可以注册&#xff0c;登录&#xff0c;搜索&#xff0c;上传下载的网页&#xff0c;初版来了 第一版主代码 from flask import request, Flask, render_template, redirect, url_for, send_from_directory import bcrypt import ossavePath os.path.join(os.ge…

17个常用经典数据可视化图表与冷门图表

数据可视化是创建信息图形表示的过程。随着可视化技术的飞速发展&#xff0c;可以利用强大的可视化工具选择合适的数据可视化图表来展示数据。以下专业人士都应该知道的一些最重要的数据可视化图表。 常见数据可视化图表 饼图 饼图是最常见和最基本的数据可视化图表之一。饼图…

VM进行TCP/IP通信

OK就变成这样 vm充当服务端的话也是差不多的操作 点击连接 这里我把端口号换掉了因为可能被占用报错了&#xff0c;如果有报错可以尝试尝试换个端口号 注&#xff1a; 还有一个点在工作中要是充当服务器&#xff0c;要去网络这边看下他的ip地址 拉到最后面

DRF从入门到精通三(反序列化数据校验源码分析、断言Assert、DRF之请求、响应)

文章目录 一、反序列化数据校验源码分析二、断言Assert三、DRF之请求、响应Request类和Response类请求中的Request 能够解析前端传入的编码格式响应中的Response能够响应的编码格式 一、反序列化数据校验源码分析 反序列化数据校验&#xff0c;校验顺序为&#xff1a;先校验字段…

动物分类识别教程+分类释义+界面展示

1.项目简介 动物分类教程分类释义界面展示 动物分类是生物学中的一个基础知识&#xff0c;它是对动物进行分类、命名和描述的科学方法。本教程将向您介绍动物分类的基本原则和方法&#xff0c;并提供一些常见的动物分类释义。 动物分类的基本原则 动物分类根据动物的形态、…

redis主从复制(在虚拟机centos的docker下)

1.安装docker Docker安装(CentOS)简单使用-CSDN博客 2.编辑3个redis配置 cd /etc mkdir redis-ms cd redis-ms/ vim redis6379.conf vim redis6380.conf vim redis6381.conf# master #端口号 port 6379#设置客户端连接后进行任何其他指定前需要使用的密码 requirepass 12345…