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

实验内容:

计时器基本功能:
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文库

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于类电磁机制算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于类电磁机制算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于类电磁机制算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.类电磁机制算法4.实验参数设定5.算法…

【Linux学习】进程间通信

目录 十四:进程间通信 14.1 进程间通信的介绍 进程间通信的概念: 为什么需要进程间通信: 常见的进程间通信方式: 14.2 进程间通信的原理 十五:进程间通信--管道 15.1 管道的介绍 管道的概念: 管道的分类: 15.2 匿名管道 匿名管道的原理: pipe函数创建匿名管道: 匿名管道实现父…

Spring Security:从入门到精通,全方位指南

Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSe…

污水处理厂可视化:让环保与科技共舞

随着科技的飞速发展,我们的生活环境变得越来越美好。然而,随着城市化进程的加快,污水处理问题也日益凸显。如何有效、高效地处理污水,成为了一个亟待解决的问题。而“污水处理厂可视化”技术的出现,为这个问题提供了一…

Python---TCP 客户端程序开发

1. 开发 TCP 客户端程序开发步骤回顾 创建客户端套接字对象和服务端套接字建立连接发送数据接收数据关闭客户端套接字 2. socket 类的介绍 导入 socket 模块 import socket 创建客户端 socket 对象 socket.socket(AddressFamily, Type) 参数说明: AddressFamily 表示IP地…

Debug

0、Debug的步骤 Debug(调试)程序步骤如下: 1、添加断点 2、启动调试 3、单步执行 4、观察变量和执行流程,找到并解决问题 1、添加断点 在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点&…

创建型模式 | 原型模式

一、原型模式 1、原理 原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。原型像是一个模板,可以基于它复制好多…

Matlab论文插图绘制模板第131期—函数等高线图

在之前的文章中,分享了Matlab函数折线图的绘制模板: 函数三维折线图: 函数网格曲面图: 函数曲面图: 进一步,再来分享一下函数等高线图。 先来看一下成品效果: 特别提示:本期内容『数…

Python连接数据库

文章目录 一、安装mysql二、SQLyog可视化操作三、python实现数据库单表类封装1. config 文件——config.py2. 封装类(model)——model.py3. 测试文件——test.py 一、安装mysql 官网安装,或者Windows64位直接在我的资源里面上传了mysql&…

Python: 函数参数是值传递还是引用传递

是引用传递。 Python的设计哲学是一切皆对象,不仅体现在内置数据类型、数据结构是对象,还包括Python编译运行需要的一些设施,比如stackframe、traceback等等。所以,为了更方便的传递数据,cpython内部全部采用指针传递…

如何开发专属花店展示平台小程序?

如今,微信小程序已经成为了花店行业拓展客户资源的重要工具。通过开发一个专属花店小程序,你可以为自己的花店带来更多的曝光和客户资源。那么,如何开发一个专属花店小程序呢?接下来,我们将一步步为你详细讲解。 首先&…

Valentina Studio Pro for Mac:高效数据库管理工具

作为一款强大而高效的数据库管理工具,Valentina Studio Pro for Mac在Mac平台上的表现无疑是令人印象深刻的。无论您是初学者还是专业数据库管理员,Valentina Studio Pro都能够满足您的需要,并提供一流的工具和功能来简化数据库管理的过程。 …

电机(按用途分类)介绍

文章目录 一、前言二、按用途分类1.步进电机1.1 介绍1.2 工作原理1.3 单极性和双极性1.4 驱动方式1.4.1 全步1.4.2 半步1.4.3 微步 1.5 分类1.6 应用 2.伺服电机2.1 介绍2.2 工作原理2.3 分类2.3.1 直流伺服电机2.3.1.1 特性2.3.1.2 有刷和无刷 2.3.2 交流伺服电机2.3.2.1 特性…

PPT怎么做成二维码?扫二维码就能获得文档

在工作中很多的小伙伴可能经常会用到PPT这一种类型的文件,比如做年度总结、项目汇报、产品介绍等等类型的内容。那么需要将做的PPT课件分享给其他人时,将文件制作二维码图片后分享的方法会更加的简单方便,其他人只需要扫描二维码就可以查看或…

Redis基础篇-002 初识Redis

1、认识NoSQL 1.1 概念 NoSQL是一个非关系型数据库。 常见的NoSQL有:Redis、MongoDB 1.2 NoSQL与SQL的区别 类别SQLNoSQL数据结构结构化非结构化数据关联关联非关联查询方式SQL非SQL事务特性ACIDBASE存储方式磁盘内存扩展性垂直水平使用场景1)数据结…

论文润色机构哪个好 PaperBERT

大家好,今天来聊聊论文润色机构哪个好,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:论文润色机构哪个好――专业、高效、可靠的学术支持 一…

什么是大小端?

今天说一下什么是大小端模式? 大小端模式指的是什么?通常我们在存储器当中存储数据的字节顺序,注意这里强调的是“字节的顺序”。因为在计算机系统中,不管是单片机DSP或者是X86,我们说一个地址对应的存储空间大小呢就是…

一款超级给力的弱网测试神器—Qnet(上)

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

yum install net-tools 命令报错,无法安装成功

编辑网卡文件 插入数据,输入: i 保存编辑:输入 Esc 然后:wq

APP测试要点有哪些?本文已经给你梳理好了!

我们日常购物、旅游、支付等活动都离不开手机,由此衍生了很多APP。 比如每天使用频率非常高的微信、支付宝、微博、抖音、王者荣耀等等。 APP测试主要进行功能测试、性能测试、自动化测试、安全性测试、兼容性测试、专项测试。 01 APP测试流程 APP测试流程与web…