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
这里只实现了变化闪烁简单的功能在这个基础上可以实现更加复杂的功能,比如通过按键选择输出不同的流水灯样式。