用汇编语言编程,使用8255

用汇编语言编程,使用8255,输入一个字母,如果字母是大写字母,点亮灯L0,如果字母是小写字母,则让灯L0闪烁3次

第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本回答被提问者和网友采纳
相似回答