第1个回答 推荐于2018-03-26
;******* 假设8255的基地址为BaseAddress **************************
;******* 则定义其它各个端口地址如下 **************************
#define BaesAddress_8255 BaseAddress
#define Address_A BaesAddress_8255 + 0
#define Address_B BaesAddress_8255 + 1
#define Address_C BaesAddress_8255 + 2
#define Address_Ctrl BaesAddress_8255 + 3
#define Letter_A 65
#define Letter_Z 90
#define L0_ON L0_ON
#define L0_OFF L0_OFF
;******* 假设8255A口为方式0输出,B口为方式0输入
;******* 则芯片初始化程序如下 *********************
init:
push ax
push dx
mov al, 82H
mov dx, Address_Ctrl
out dx, al
pop dx
pop ax
ret
;************** 以下代码可以让程序暂停一小会儿 ****************
Wait_a_while:
push ax
push dx
xor ax,ax
mov dx,ax
Dly1:
dec ax
jnz ax,Dly1
dec dx
jnz dx,Dly1
pop dx
pop ax
ret
;*************** 主程序开始 **********************
start:
call init
start1:
mov dx, Address_B
in al, dx
cmp al, Letter_Z + 1
jb Light_L0 ;读取到的值小于91,为大写字母,转到Light_L0执行点亮L0
;*************** 让L0闪烁3次 ***********************
Flash_L0: ;读取到的值大于91,为小写字母,执行以下代码闪烁L0
mov cx, 0x3
Flash_Loop:
mov dx, Address_A
mov al, L0_ON
out dx, al ;点亮L0
call Wait_a_while ;暂停一下
mov dx, Address_A
mov al, L0_OFF
out dx, al ;关闭L0
call Wait_a_while ;暂停一下
loop Flash_Loop
jmp Function_End ;跳转至程序结束
;**************** 点亮L0 ******************
Light_L0:
mov dx, Address_A
mov al, L0_ON
out dx, al ;点亮L0
Function_End: ;程序结束
ret本回答被提问者和网友采纳