www.pudn.com > 8253-2.rar > 8253-2.asm


;利用PC机的硬件定时8253, 编制秒表延时(0~9秒)程序.要求: 
;按任意键,开始计时, 在屏幕上以1秒间隔从0到9显示;按ESC键,计时停止. 
 
data segment 
     BCD1  db '0' 
     STR   DB 0dh,0ah,'$' 
data ends 
STACK  SEGMENT 
       DW 16 DUP(0) 
STACK  ENDS	 
code segment 
 assume  cs:code,ds:data,SS:STACK 
 start:mov      ax,data 
       mov      ds,ax 
       MOV      DL,BCD1 
W1:    MOV      AH,0BH          ;有键按下? 
       INT      21H 
       CMP      AL,00H          ;无键按下,转W1,否则,调用1S延时子程序  
       JZ       W1              
LOP:   CALL     SECOND 
       CALL     DISP            ;调显示  
       MOV      AH,0BH          ;检测有键按下否? 
       INT      21H 
       CMP      AL,00H          ;AL=0,无键按下 
       JZ       LOP             ;无键按下,转LOP  
       MOV      AH,08H          ;有键,读键值AL 
       INT      21H 
       CMP      AL,1BH          ;是ESC键? 
       JNZ      LOP             ;是,退出,否,转LOP 
       MOV      ah,4ch 
       INT      21h 
;------------------------------- 
  SECOND   PROC  NEAR            ;1秒延时子程序 
                  PUSH  AX 
                  PUSH  BX 
                  PUSH  DX 
            MOV   AH,00H 
            INT     1AH          ;读计时单位         
            ADD    DX,18          
            MOV    BX,DX 
    L1:     MOV    AH,00H 
            INT     1AH 
            CMP    DX,BX          ;满1秒?,否,继续累计 
            JNZ     L1 
                    POP    DX 
                    POP    BX 
                    POP    AX    
            RET 
  SECOND    ENDP 
;-------------------------------- 
   DISP    PROC      NEAR               ;入口:BCD1=DL=字符 
             PUSH    AX  
             MOV     DL,BCD1         
             MOV     AH,02H            ;DOS调用,显示一个字符 
             INT     21H         
             INC     BCD1 
             CMP     BCD1,'9' 
             JBE      EXIT  
             MOV     BCD1,'0' 
             MOV     DL,0DH 
             INT     21H 
             MOV     DL,0AH 
             INT     21H 
     EXIT:   POP     AX 
             RET  
    DISP    ENDP   
code   ends 
       end start