
DATAS SEGMENT
;此處輸入資料段代碼
IOYO equ 0C400h;對應的端口位址
MY8255_A equ IOYO+00H*4
MY8255_B equ IOYO+01H*4
MY8255_C equ IOYO+02H*4
MY8255_MODE equ IOYO+03H*4
LA DB ?
LB DB ?
DATAS ENDS
STACKS SEGMENT
;此處輸入堆棧段代碼
dw 256 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此處輸入代碼段代碼
mov dx,MY8255_MODE;定義8255工作方式
mov al,80h;工作方式0,a口和b口為輸出
out dx,al
Begin:
mov dx,MY8255_A;寫A口發出的起始資料
mov al,01h;1000 0000
out dx,al
mov LA,al
mov dx,MY8255_B;寫B口發出的起始資料
mov al,80h
out dx,al
mov LB,al
mov cx,7
LOOP1:
call delay
mov al,LA;将a口的起始資料右移再寫入a口
rol al,1;循環右移
mov LA,al
mov dx,MY8255_A
out dx,al
mov al,lb;将b口的起始資料左移再寫入b口
ror al,1;循環左移
mov LB,al
mov dx,my8255_B
out dx,al
loop loop1
mov cx,7
Loop2:
call delay
mov al,la
ror al,1
mov la,al
mov dx,MY8255_A
out dx,al
mov al,lb
rol al,1
mov lb,al
mov dx,MY8255_B
out dx,al
loop loop2
jmp begin
Quit:
MOV AH,4CH;結束程式退出
INT 21H
delay proc near;軟體延時程式
push cx
push ax
mov cx,0fh
D1:
mov ax,0fffh
D2:
dec ax
jnz d2
loop d1
pop ax
pop cx
ret
delay endp
CODES ENDS
END START
這裡隻實作了變化閃爍簡單的功能在這個基礎上可以實作更加複雜的功能,比如通過按鍵選擇輸出不同的流水燈樣式。