将8255的C口接逻辑电平开关K1-K8,A口接LED显示电路D1-D8,注意CS0所接74LS138译码器的管脚,以及A0, A1的接法,确定端口地址。将8255的A口和C口都设置为方式0,编程完成查询方式,不断查询C口状态,如果Ki开关闭合,则让Di发光二极管亮
时间: 2023-10-03 12:09:13 浏览: 163
根据题目描述,我们可以画出以下的连接图:
```
K1-K8 ———— C口(PPI8255)
D1-D8 ———— A口(PPI8255)
CS0 ———— 74LS138
```
其中,K1-K8 为逻辑电平开关,D1-D8 为 LED 显示电路,CS0 连接 74LS138 译码器。
根据数据手册,PPI8255 的地址范围为 0x00-0x03,其中 0x00-0x01 为端口 A,0x02-0x03 为端口 B,我们可以将端口 A 对应到 LED 显示电路 D1-D8,将端口 C 对应到逻辑电平开关 K1-K8。因为我们需要不断查询 C 口状态,所以需要将 A 口和 C 口都设置为方式 0。
接下来是程序的实现。我们需要循环不断地查询 C 口状态,并判断开关的状态,如果开关关闭,就让对应的 LED 发光二极管亮起来。具体实现如下:
```assembly
; 定义端口地址
PORTA EQU 0x00
PORTC EQU 0x02
; 定义常量
MASK EQU 0xFF ; 掩码,用于屏蔽不需要的位
DELAY EQU 0x0FFF ; 延时常量,可以根据实际情况调整
; 设置 PPI8255 的 A 口和 C 口为方式 0
MOV AL, 00000000B
OUT PORTA, AL
OUT PORTC, AL
LOOP:
; 查询 C 口状态
IN AL, PORTC
AND AL, MASK
; 判断 K1 是否开启
TEST AL, 00000001B
JZ K1_OFF
; K1 开启,点亮 D1
MOV AL, 00000001B
OUT PORTA, AL
JMP END_LOOP
K1_OFF:
; K1 关闭,关闭 D1
MOV AL, 00000000B
OUT PORTA, AL
END_LOOP:
; 延时一段时间
MOV CX, DELAY
DELAY_LOOP:
LOOP DELAY_LOOP
; 继续循环
JMP LOOP
```
以上程序只针对一个开关和一个 LED 进行了处理,如果需要控制多个开关和 LED,可以将程序中的 K1 和 D1 分别替换成 K2、D2、K3、D3……以此类推。
阅读全文