add di,2 mov ax,offset int2 mov ds:[di],ax add di,2 mov ds:[di],100h add di,2 mov ax,offset int3 mov ds:[di],ax add di,2 mov ds:[di],100h add di,2 mov ax,offset int4 mov ds:[di],ax add di,2 mov ds:[di],100h add di,2 mov ax,offset int5 mov ds:[di],ax add di,2 mov ds:[di],100h add di,2 mov ax,offset int6 mov ds:[di],ax add di,2 mov ds:[di],100h add di,2 mov ax,offset int7 mov ds:[di],ax add di,2 mov ds:[di],100h ;上述程序为芯片8259的初始化程序 ;建议不熟练者不要修改。 main: mov bx,0 sti ;开中断。 waiting: cmp bx,0h je waiting ;没发生中断,则循环等待 mov dx,04b0h ;8237基本输出口片选接CS2 mov ax,bx out dx,ax ;对应LED灯点亮 mov cx,0
delay: loop delay ;数字滤波,按键去抖 mov dx,04b0h mov ax,0ffh out dx,ax jmp main
6
int0: nop ;IR0的中断服务程序 mov ax,0feh ;值为0的位对应的灯点亮,用户可修改。 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret ;中断返回,以下类推。 int1: nop ;IR1的中断服务程序, mov ax,0fdh ;D1号灯 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret int2: nop ;IR2的中断服务程序, mov ax,0fbh ;D2 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret int3: nop ;IR3的中断服务程序, mov ax,0f7h ;D3 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret int4: nop ;IR4的中断服务程序, mov ax,0efh ;D4 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret int5: nop ;此两行为IR5的中断服务程序, mov ax,0dfh ;D5 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret int6: nop ;IR6的中断服务程序, mov ax,0bfh ;D6 mov dx,04a0h ;清ISR,结束中断 mov ax,20h out dx,ax iret int7: nop ;IR7的中断服务程序, mov ax,07fh ;D7 mov dx,04a0h ;清ISR,结束中断
7
mov ax,20h out dx,ax iret
code ends end start
8