Principios de microcomputadoras 8255 Programación
;;8255 conexión de hardware y configuración de software:
;;entrada del modo 0 del puerto B, PB0~PB3 están conectados a K1~K4 respectivamente;
; ;Una salida de modo de puerto 0, el circuito de control externo PA0~PA3 controla las 4 acciones de la luz;
;;El circuito de control puede estar compuesto por 74LS06, ULN2003 como un relé de control de amplificación de corriente invertida o un sólido relé;
;;El puerto C está inactivo;
;;De acuerdo con la configuración anterior, la palabra de control del modo 8255 es 82H;
;;En un sistema donde se utiliza la PC como host, el 4 de 8255 Las direcciones de registro son:
;; el puerto A es 60H, el puerto B es 61H y el registro de control de modo es 63H.
;;El programa de montaje es el siguiente:
SSEG SEGMENT PARA STACK ;Definición del segmento de pila
DW 30H DUP(?)
SSEG ENDS
CSEG SEGMENT; Definición del segmento de código
ASSUME CS:CSEG,DS:CSEG
ORG 200h Primera dirección del programa principal
INICIO: MOV AL, 82H; Palabra de control de modo
MOV DX, 63H
OUT DX, AL La palabra de control de modo se envía al registro de control de modo
Escanear: IN AL,61H ;Escanear el estado K1~K4 leído desde el puerto B
LLAMADA PRC1 ;Encender y apagar luces
LLAMADA PRC2 ;Si pausar
CALL PRC3 ; Si se debe invertir la dirección
CALL PRC3 ; Si se debe mover
JMP Scan ; Subrutina de operación /luz apagada" Definición
PUSH AX ;El estado del puerto B se inserta en la pila y se almacena temporalmente
TEST AL,00000001B ;Detecta el estado de entrada PB0
JZ CloseL ;Si PB0 tiene un nivel bajo, indica que K1 está apagado, gire a CloseL para ejecutar
OpenL: OUT 60H,AL Si PB0 tiene un nivel alto, indica que K1 está encendido, salidas PA0; nivel alto y la luz se enciende
JMP RT1 Volver al comando en RT1
CerrarL: MOV AL,00000000B ;PA0 emite nivel bajo
OUT 60H,AL ;Apagar la luz
RT1: POP AX ; Recuperar el estado del puerto B de la pila
RET ;Volver al programa principal
PRC1 ENDP ;Definición de subrutina completada
PRC2 PROC NEAR ;Definición de subrutina de operación "Pausar"
PUSH AX ;El estado del puerto B se inserta en la pila y se almacena temporalmente
TEST AL,00000010B ;Detecta el estado de entrada PB1
JZ RT2 ;Si PB1 está bajo, significa interrupción K2, sin pausa
PAUS: OUT 60H,AL
;Si PB1 está alto, significa que se pasó K2, PA1 sale alto, pausa
RT2: POP AX ;El estado del puerto B sale de la pila
RET ;Regresa al programa principal
PRC2 ENDP ;Definición de subrutina completada
PRC3 PROC NEAR ;Definición de subrutina de operación "inversa"
PUSH AX ;El estado del puerto B se inserta en la pila y se guarda temporalmente almacenado
TEST AL,00000100B; Detecta el estado de entrada de PB2
JZ RT3; si PB2 está bajo, significa que K3 está apagado y no invierte la dirección
CHG; : MOV AL,00000101B; si PB2 tiene un nivel alto, significa que K3 pasa
OUT 60H,AL; PA2 y PA0 emiten un nivel alto, invierte la dirección y la luz permanece encendida
RT3: POP AX; estado del puerto B Salir de la pila
RET Volver al programa principal
PRC3 ENDP; Definición del subprograma completada
PRC4 PROC NEAR; ; Definición del subprograma de operación "Mover"
TEST AL,00001000B; Detectar estado de entrada PB3
JZ RT4 es bajo, significa que K4 está apagado y no se mueve
MOVER: MOV AL,00001001B; si PB3 tiene un nivel alto, indica que K4 pasa
OUT 60H, AL; PA3 y PA0 emiten un nivel alto y se mueven, la luz permanece encendida
RT4: RET; volver al programa principal
PRC4 ENDP; se completa la definición del subprograma
CSEG ENDS; se completa la definición del segmento de código
END START;Principal el programa termina