当前位置: 首页 > news >正文

实验三 I/O地址译码

一、实验目的               

掌握I/O地址译码电路的工作原理。

二、实验电路

实验电路如图1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器, Y0:280H~287H,Y1:288H~28FH,Y2:290H~297H,Y3:298H~29FH,Y4:2A0H~2A7H,Y5:2A8H~2AFH,Y6:2B0H~2B7H,Y7:2B8H~2BFH。

三、实验内容

CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。利用这个负脉冲控制L7发光二极管闪烁发光(亮、灭、亮、灭…),时间间隔通过软件延时实现。

四、编程提示

1.实验电路中D触发器CLK端输入脉冲Y4,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。

2. 执行下面两条指令

           MOV  DX,2A0H

           OUT  DX,AL(或IN  AL,DX)

Y4输出一个负脉冲。

执行下面两条指令

           MOV  DX,2A8H

           OUT  DX,AL(或IN  AL,DX)

Y5输出一个负脉冲。

五、实验程序(必须加注释)和结果

; 定义输出端口1的地址

outport1 equ 2a0h

; 定义输出端口2的地址

outport2 equ 2a8h

; 数据段定义

DATAS SEGMENT

    ; 定义字符串mess1

    mess1 DB 'Kruanjian221  Liuxijing 2022900616 AND HuTiaWen2022900615',0DH,0AH,'$'

    ; 定义字符串mess2

    mess2 DB 'end with any key',0DH,0AH,'$'

    ; 定义字符串mess3

    mess3 DB 'over',0DH,0AH,'$'

DATAS ENDS

; 代码段定义

code segment

    assume cs:code

start:

    ; 将数据段地址赋给ax

    MOV ax,DATAS

    ; 将ax的值赋给ds

    MOV ds,ax

    ; 设置ah为9,准备调用21h中断显示字符串

    MOV ah,9

    ; 将mess1的偏移地址赋给dx

    MOV dx,offset mess1

    ; 调用21h中断显示字符串

    int 21h

    ; 设置ah为9,准备调用21h中断显示字符串

    MOV ah,9

    ; 将mess2的偏移地址赋给dx

    MOV dx,offset mess2

    ; 调用21h中断显示字符串

    int 21h

AG:

    ; 将outport1的地址赋给dx

    mov dx,outport1

    ; 将al的值输出到dx指定的端口

    out dx,al

    ; 调用延时子程序

    call delay        ;调延时子程序

    ; 将outport2的地址赋给dx

    mov dx,outport2

    ; 将al的值输出到dx指定的端口

    out dx,al

    ; 调用延时子程序

    call delay        ;调延时子程序

    ; 设置ah为1,准备调用16h中断读取键盘输入

    mov ah,1

    ; 调用16h中断读取键盘输入

    int 16h

    ; 如果没有键盘输入,跳转到AG标签处继续循环

    je AG

    ; 设置ah为4ch,准备调用21h中断结束程序

    mov ah,4ch

    ; 调用21h中断结束程序

    int 21h

; 延时子程序定义

delay proc near        ;延时子程序

    ; 将5000赋给bx

    mov bx,5000

lll:

    ; 将0赋给cx

    mov cx,0

ll:

    ; 循环cx次

     loop ll

    ; bx减1

    dec bx

    ; 如果bx不等于0,跳转到lll标签处继续循环

    jne lll

    ; 子程序返回

    ret

delay endp

code ends

; 程序结束

end start

设计思路:

  1. 数据段定义(DATAS SEGMENT)

定义了三个字符串:mess1、mess2和mess3。这些字符串用于在屏幕上显示信息。

  1. 代码段定义(code segment)

程序的主体部分,包含了初始化数据段、显示消息、循环输出数据和延时的逻辑。

  1. 初始化数据段(MOV ax,DATAS / MOV ds,ax)

将数据段的地址加载到ax寄存器,然后将ax的值赋给ds寄存器,以便程序可以访问数据段中的数据。

  1. 显示消息(MOV ah,9 / MOV dx,offset mess1 / int 21h)

使用int 21h中断的功能9来显示字符串。首先设置ah为9,然后将字符串的偏移地址赋给dx,最后调用int 21h中断。

  1. 循环输出数据(AG:...)

程序的主要循环部分,通过两个指定的端口(outport1和outport2)输出数据,并在每次输出后调用延时子程序。

  1. 延时子程序(delay proc near)

一个简单的延时子程序,。

  1. 检测键盘输入(mov ah,1 / int 16h)

使用int 16h中断的功能1来检测键盘输入。如果没有键盘输入,程序将继续循环;如果有键盘输入,程序将结束。

  1. 结束程序(mov ah,4ch / int 21h)

使用int 21h中断的功能4ch来结束程序。

相关文章:

  • c++原子操作
  • Day09 【基于LSTM实现文本加标点的任务】
  • # 手写数字识别:使用PyTorch构建MNIST分类器
  • AI赋能智能经营:全球关税战下的可持续发展之道
  • 2000-2019年各省城市液化石油气用气人口数据
  • 人工智能概念股投资:10大潜力标的深度研究
  • AutoDL上Xinference安装
  • JVM-基于Hotspot
  • JVM 调优不再难:AI 工具自动生成内存优化方案
  • 【bash】.bashrc
  • PhotoShop学习10
  • 分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案
  • 数据库ALGORITHM = INSTANT研究过程
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——A35M33异核通信测试
  • 驱动学习专栏--字符设备驱动篇--2_字符设备注册与注销
  • 《What Are Step-Level Reward Models Rewarding?》全文翻译
  • Tecnomatix Plant Simulation 2302安装教程
  • 大模型微调新阵地:魔塔社区(Swift框架) 的探索与使用
  • 基于LLVM设计领域专用语言(DSL)的步骤——以激光微加工为例
  • 制作一款打飞机游戏教程7:爆炸
  • 不同用户入口的网站样板/宁波seo外包方案
  • 做a暧小视频在线观看网站/万网注册域名查询
  • 网站没有权重/百度手机极速版
  • 国药控股cms系统/windows优化大师怎么卸载
  • 网站架构设计师面试技巧/百度号码认证平台官网首页
  • 现在什么网站做外贸的最好/免费的html网站