一、实验目的
1. 了解TTL芯片扩展简单I/O口的方法。
2. 掌握数据输入输出程序编制的方法。
二、实验内容说明
本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连到发光二极管显示。具体实验内容如下:
1.开关Yi为低电平时对应的发光二极管亮,Yi为高电平时对应的发光二极管灭。
2.当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
3.当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
4.自主设计控制及显示模式,完成编程调试,演示实验结果。
三、实验原理
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态;
74LS273是一种带清除功能的8D触发器, 1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
74LS244与74LS273扩展I/O口原理图
实验连线图
四、实验步骤
1.按照实验连线图连接:
244的CS接到ISA总线接口模块的0000H,Y7—Y0——开关K1—K8。
273的CS接到ISA总线接口模块的0020H,Q7—Q0——发光二极管L1—L8。
该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0~AD7)连到ISA总线接口模块的数据(LD0~LD7)。
2.编写实验程序,编译链接,运行程序
3. 拨动开关,观察发光二极管的变化。
五、实验源码
IO244 EQU 0230H ;74LS244端口地址
IO273 EQU 0230H ;74LS273端口地址
_STACK SEGMENT STACK
DW 100 DUP(?)
_STACK ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:_DATA, SS:_STACK
START PROC NEAR
MOV AX, _DATA
MOV DS, AX
INPUT:
MOV DX, IO244
IN AX, DX
CMP AX, 0FFFFH ;若开关全为低电平
JZ Q1 ;从右往左依次点亮
CMP AX, 0 ;若开关全为高电平
JZ Q2 ;从左往右依次点亮
MOV DX, IO273
NOT AX ;AX取非送给273,点亮对应的二极管
OUT DX, AX
JMP INPUT
Q1:
MOV AX, 7FFFH
MOV DX, IO273
R2L:
CALL DELAY ;延时
OUT DX, AX ;送给273,点亮对应的二极管
ROL AX, 1
CMP AX, 7FFFH
JNE R2L ;若相等,说明一轮从右往左已经完成,若不等,则继续循环
JMP INPUT
Q2:
MOV AX, 0FFFEH
MOV DX, IO273
L2R:
CALL DELAY
OUT DX, AX
ROR AX, 1
CMP AX, 0FFFEH
JNE L2R ;若相等,说明一轮从左往右已经完成,若不等,则继续循环
JMP INPUT ;继续读入开关状态
Delay PROC NEAR ;延时子程序
Delay1:
XOR CX,CX ;做一个异或操作将CX清零,仅循环一次
LOOP $
RET
Delay ENDP
START ENDP
CODE ENDS
END START