彙編繼續,獻上8255 IO控制LED燈實驗代碼
(1)8255 A口輸出控制流水燈,B口輸入,B口最低位控制流水燈流向
;Made by X-Ray龍
;8255流水燈顯示實驗
IOY0 EQU 3000H ;片選IOY0對應的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
LA DB ? ;定義數據變量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,82H ;工作方式0,A口輸出,B口輸入
OUT DX,AL
MOV LA,01H
LOOP1:
MOV DX,MY8255_B
IN AL,DX ;讀B口的一字節數據內存放到AL中
MOV BL,AL
TEST BL,00000001B ;判斷B口最低位0或1,是0則跳C1左循環,是1則跳C2右循環
JZ C1
JMP C2
C1: MOV AL,LA ;左循環,用變量LA來存放上一次移位後的數據
CALL DALLY ;延時,方便人眼觀察出燈的變化
MOV DX,MY8255_A
OUT DX,AL
ROL AL,1
MOV LA,AL
JMP C3
C2: MOV AL,LA ;右循環
CALL DALLY
MOV DX,MY8255_A
OUT DX,AL
ROR AL,1
MOV LA,AL
JMP C3
C3: MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,0FFFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
(2) A口輸出控制LED,B口輸入由開關控制高低電平,實現開關控制LED燈亮滅,同時把八位LED狀態回顯到屏幕
;Made by X-Ray龍
;8255基本輸入輸出實驗
IOY0 EQU 3000H ;片選IOY0對應的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,82H ;工作方式0,A口輸出,B口輸入
OUT DX,AL
LOOP1: MOV DX,MY8255_B ;讀B口
IN AL,DX
MOV DX,MY8255_A ;寫A口
OUT DX,AL
MOV CX,0008H
MOV BL,10000000B
C1: TEST AL,BL
JZ C2
CALL SHOW1 ;顯示1
C2: TEST AL,BL
JNZ C3
CALL SHOW2 ;顯示0
C3: SHR BL,1
LOOP C1
CALL CHANGE ;換行
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
SHOW1 PROC NEAR
PUSH AX
MOV AH,02H
MOV DL,31H
INT 21H
POP AX
RET
SHOW1 ENDP
SHOW2 PROC NEAR
PUSH AX
MOV AH,02H
MOV DL,30H
INT 21H
POP AX
RET
SHOW2 ENDP
CHANGE PROC NEAR
PUSH AX
MOV AH,02H
MOV DL,0AH
INT 21H
MOV AH,02H
MOV DL,0DH
INT 21H
POP AX
RET
CHANGE ENDP
CODE ENDS
END START