微原实验三 基本IO口扩展
实验内容本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连到发光二极管显示。具体实验内容如下:1.开关Yi为低电平时对应的发光二极管亮,高电平时对应的发光二极管灭。2.当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。3.当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。4.自主设计控制及显示模式,完成编程调试,演示实验结果。思路1.指定74LS244和
文章共1,041字 · 阅读需要大约4分钟
一键AI生成摘要,助你高效阅读
问答
·
实验内容
本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连到发光二极管显示。具体实验内容如下:
1.开关Yi为低电平时对应的发光二极管亮,高电平时对应的发光二极管灭。
2.当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
3.当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
4.自主设计控制及显示模式,完成编程调试,演示实验结果。
思路
1.指定74LS244和74LS273的地址;
2.进入循环,从74LS244不断读入16个开关的状态,并根据开关状态进行分支跳转:若开关全为高电平,进入处理从右往左依次点亮二极管的分支;若开关全为低电平,进入处理从左往右依次点亮二极管的分支;若不是上述两种情况,则将由74LS244端口读入的开关状态值取反后送至B口,实现开关为低电平时,对应的发光二极管亮,开关为高电平时,对应的发光二极管灭。
3.在每次执行完OUT指令送出数据后,调用delay延时子程序延时一段时间等待硬件处理完毕,之后再进行下一轮的开关状态判断与相应的输出。
4.实现二极管从左往右和从右往左依次点亮的思路是每次OUT后对AX寄存器执行ROL或ROR使其循环左移或者右移一位,便于下一轮的输出。AX寄存器每循环左移一次,就对应了被点亮的发光二极管从右往左移动了一个位置;AX寄存器每循环右移一次,就对应了被点亮的发光二极管从左往右移动了一个位置。
实验源码
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
实验结果
当开关为低电平时对应的发光二极管亮,开关为高电平时对应的发光二极管灭;当16个开关均为高电平时,发光二极管Qi从左至右轮流点亮;当16个开关均为低电平时,发光二极管Qi从右至左轮流点亮。
更多推荐
已为社区贡献8条内容
所有评论(0)