8255流水燈顯示代碼
; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt
org 100h
;T8255-2.asm
;8255流水燈顯示實驗
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 00H ;片選IOY0對應的端口始地址
;*****************************************************************
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控製寄存器地址
DATA SEGMENT
LA DB 1 DUP
LB DB 1 DUP
AXX DW 1 BUP
CXX DW 1 BUP
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE ;定義(yi) 8255工作方式
MOV AL,80H ;工作方式0,A口和B口為(wei) 輸出
OUT DX,AL
BEGIN: MOV DX,MY8255_A ;寫(xie) A口發出的起始數據
MOV AL,01H
OUT DX,AL
MOV LA,AL
MOV DX,MY8255_B ;寫(xie) B口發出的起始數據
MOV AL,80H
OUT DX,AL
MOV LB,AL
MOV CX,7
LOOP1: CALL DALLY
MOV AL,LA ;將A口起始數據左移再寫(xie) 入A口
ROL AL,1
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL
MOV AL,LB ;將B口起始數據右移再寫(xie) 入B口
ROR AL,1
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL
LOOP LOOP1
MOV CX,7
LOOP2: CALL DALLY
MOV AL,LA ;將A口起始數據右移再寫(xie) 入A口
ROR AL,1
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL
MOV AL,LB ;將B口起始數據左移再寫(xie) 入B口
ROL AL,1
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL
LOOP LOOP2
JMP BEGIN ;流水燈重新開始
DALLY PROC ;軟件延時子程序
MOV CXX,CX
MOV AXX,AX ;這裏本應該用堆棧,我用CXX,AXX變量代替了。
MOV CX,0FH
D1: MOV AX,0FFFH
D2: DEC AX
JNZ D2
LOOP D1
MOV AX,AXX
MOV CX,CXX
RET
DALLY ENDP
CODE ENDS
END START
ret
Proteus7.5仿真8255流水燈原理圖

效果圖
