www.pudn.com > 16bit.rar > PCLAMP.ASM
data segment
pb db ?
mess db 'Enter any key can exit to dos!',0dh,0ah,'$'
data ends
stack segment stack
sta dw 50 dup(?)
top equ length sta
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
start:
mov ax,data
mov ds,ax
mov es,ax
mov ah,09h ;是不是初始化8255呢?
mov dx,offset mess
int 21h
mov dx,21bh
mov al,82h
out dx,al
mov dx,219h
in al,dx
mov pb,al
mov dx,21bh
mov al,80h
out dx,al
mov dx,219h
mov al,pb
or al,0f0h
out dx,al ; turn off yellow
mov dx,21ah
mov al,0f0h ;4 red lights
out dx,al
call delay10
lll:mov al,10100101b ;turn on 1,3 green light
mov dx,21ah
out dx,al
call delay10
call delay10
or al,0f0h ; turn off 1,3 green light
;从开,关灯的操作看出:21a即C口的低四位控制1-4号灯的开和关
out dx,al
mov cx,0008h
ttt:mov dx,219h
mov al,pb
and al,10101111b ;1,3 yellow light turn on
out dx,al
call delay1
or al,01010000b
out dx,al ; 1,3 yellow light turn off
call delay1
loop ttt
mov dx,21ah
mov al,0f0h
out dx,al
call delay1
mov al,01011010b
out dx,al ; 2,4 green 1,3 red
call delay10
call delay10
or al,0f0h ; turn off 2,4 green light
out dx,al
mov cx,0008h
ggg:mov dx,219h
mov al,pb
and al,01011111b
out dx,al ; turn on 2,4 yellow
call delay1
or al,10100000b
out dx,al ; turn off 2,4 yellow
call delay1
loop ggg
mov dx,21ah
mov al,0f0h
out dx,al
call delay1
mov ah,06h
mov dl,0ffh
int 21h
jnz ppp
jmp lll
ppp:mov ax,4c00h
int 21h
delay1 proc near
push cx
mov cx,8000h
ccc:loop ccc
pop cx
ret
delay1 endp
delay10 proc near
push ax
push cx
mov cx,0030
uuu:call delay1
loop uuu
pop cx
pop ax
ret
delay10 endp
code ends
end start