当前位置:首页 > 利用中断方式设计数字时钟
p8259 equ 20h ;端口首地址 p8255 equ 288h ;端口首地址 p8253 equ 280h ;IO Y1
data segment
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;数码管 sec1 db 0 sec2 db 0 min1 db 0 min2 db 0 mes db 42h
Old_0A DW 0 Old_8259 DB 0 data ends
stacks segment db 64 dup (0) stacks ends
code segment
assume cs:code,ds:data,es:data start:
mov ax,data mov ds,ax cli;关闭中断
mov al,00110110b
mov dx,p8253+3 ;计数器0,工作在模式3 out dx,al
mov ax,2710h mov dx,p8253 out dx,al
mov al,ah ;先赋高八位再赋低八位 out dx,al
mov al,01110110b
mov dx,p8253+3 ;计数器1,工作在模式3 out dx,al mov ax,100
mov dx,p8253+1 out dx,al
mov al,ah ;先赋高八位再赋低八位 out dx,al ; 设置中断向量表 PUSH ES PUSH BX
MOV Al,0BH ;保护原中断向量,0B中断类型号 mov ah,35h
INT 21H ;读中断向量表
MOV Old_0A+2,ES;ES为段地址,BX为段偏移地址 MOV Old_0A,BX POP BX POP ES push ds
原中断向量 ; mov al,0bh ; 写新中断向量
mov ah,25h
mov dx,seg INT_0A mov ds,dx
mov dx,offset INT_0A int 21h pop ds
mov al,10000000b ;对8255进行设置,PB/PC输出 mov dx,p8255+3 out dx,al
in al,p8259+1 ;8259奇地址中断向量屏蔽 mov old_8259,al ;字设置保护原屏蔽字 and al,11110111b ;开IRQ3 out p8259,al
sti ;开中断
play: lea bx,led ;led段码 mov dl,sec1 ;秒个位 mov dh,0 mov si,dx
mov al,[bx][si]
mov dx,p8255+1 ;点亮led out dx,al
mov ah,11111110b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al PUSH CX
MOV CX,00f00h ;延时 delay1:
LOOP delay1 POP CX
mov ah,11111111b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al
mov dl,sec2 ;秒十位 mov dh,0 mov si,dx
mov al,[bx][si]
mov dx,p8255+1 ;点亮led out dx,al
mov ah,11111101b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al PUSH CX
MOV CX,00f00h ;延时 delay2:
LOOP delay2 POP CX
mov ah,11111111b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al
mov dl,min1 ;分个位 mov dh,0 mov si,dx
mov al,[bx][si]
mov dx,p8255+1 ;点亮led out dx,al
mov ah,11111011b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al PUSH CX
MOV CX,00f00h ;延时 delay3:
LOOP delay3 POP CX
mov ah,11111111b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al
mov dl,min2 ;分十位 mov dh,0 mov si,dx
mov al,[bx][si]
mov dx,p8255+1 ;点亮led out dx,al
mov ah,11110111b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al PUSH CX
MOV CX,00f00h ;延时 delay4:
LOOP delay4 POP CX
mov ah,11111111b mov al,ah
mov dx,p8255+2 ;pc输出选通信号 out dx,al jmp play mov ah,4ch int 21h
INT_0A proc near ;中断服务子程序 cmp sec1,9 jz int1 inc sec1 jmp exit int1:
mov sec1,0
inc sec2 cmp sec2,6 jnz exit mov sec2,0 inc min1 cmp min1,10 jnz exit mov min1,0 inc min2 cmp min2,6 jnz exit mov min2,0 exit:
mov al,20h out 20h,al iret
INT_0A endp code ends end start
共分享92篇相关文档