www.pudn.com > 16bit.rar > PCLED.ASM


TIM_CTL  EQU       203H 
TIMER0   EQU       200H 
TIMER1   EQU       201H 
MODE03   EQU       36H 
MODE12   EQU       74H 
 
INTA00   EQU       20H 
INTA01   EQU       21H 
PORTSEG  EQU       211H 
PORTBIT  EQU       210H 
 
STACK    SEGMENT   STACK 
STA      DW        512 DUP (?) 
TOP      EQU       LENGTH STA 
STACK    ENDS 
   
DATA     SEGMENT 
MIN1     DB        0 
MIN2     DB        0 
GAP1     DB        10 
GAP2     DB        10 
SEC1     DB        0 
SEC2     DB        0 
INTMASK  DB        ? 
CSREG    DW        ? 
IPREG    DW        ? 
COUNT    DB        0 
LED      DB        3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,40H 
MES      DB        'DISPLAY THE LEDS,PRESS ANY KEY TO DOS!' 
	 DB        0AH,0DH,'$' 
DATA     ENDS 
  
CODE     SEGMENT 
	 ASSUME    CS:CODE,DS:DATA,SS:STACK 
 
START:   PUSH      DS 
	 MOV       AX,0 
	 PUSH      AX 
	 MOV       AX,DATA 
	 MOV       DS,AX 
	 CLI 
	 MOV       DX,TIM_CTL 
	 MOV       AL,MODE03 
	 OUT       DX,AL 
	 MOV       DX,TIMER0 
	 MOV       AL,00h 
	 OUT       DX,AL 
	 MOV       AL,02H 
	 OUT       DX,AL 
	 MOV       DX,TIM_CTL 
	 MOV       AL,MODE12 
	 OUT       DX,AL 
	 MOV       DX,TIMER1 
	 MOV       AL,0aH 
	 OUT       DX,AL 
	 MOV       AL,00 
	 OUT       DX,AL 
	  
	 MOV       AX,STACK 
	 MOV       SS,AX 
	 MOV       SP,TOP 
	 MOV       AX,DATA 
	 MOV       DS,AX 
	 MOV       DX,OFFSET MES 
	 MOV       AH,09 
	 INT       21H 
	 MOV       AX,350AH 
	 INT       21H 
	 MOV       AX,ES 
	 MOV       CSREG,AX 
	 MOV       IPREG,BX 
	 PUSH      BX 
	 PUSH      DS 
	 MOV       AX,CS 
	 MOV       DS,AX 
	 MOV       DX,OFFSET INT_PROC 
	 MOV       AX,250AH 
	 INT       21H 
	 POP       DS 
	 MOV       DX,INTA01 
	 IN        AL,DX 
	 MOV       INTMASK,AL 
	 AND       AL,0FBH 
	 OUT       DX,AL 
AGAIN:   IN        AL,21H 
	 OR        AL,04H 
	 OUT       21H,AL 
	 STI 
	 MOV       AH,01 
	 INT       16H 
	 PUSHF 
	 IN        AL,21H 
	 AND       AL,0FBH 
	 OUT       21H,AL 
	 POPF 
	 JZ        AGAIN 
	 CLI 
	 POP       BX 
	 MOV       DX,INTA01 
	 MOV       AL,INTMASK 
	 OUT       DX,AL 
	 MOV       DX,IPREG 
	 MOV       AX,CSREG 
	 MOV       DS,AX 
	 MOV       AX,250AH 
	 INT       21H 
	 STI 
	 MOV       AX,4C00H 
	 INT       21H 
				      
INT_PROC:PUSH      AX 
	 PUSH      CX 
	 PUSH      DX 
	 PUSH      DI 
	 MOV       AX,DATA 
	 MOV       DS,AX 
	 MOV       DI,OFFSET MIN1 
	 MOV       CL,01 
DIS1:    MOV       AL,[DI] 
	 MOV       BX,OFFSET LED 
	 XLAT 
	 MOV       DX,PORTSEG 
	 OUT       DX,AL 
	 MOV       AL,CL 
	 MOV       DX,PORTBIT 
	 OUT       DX,AL 
	 PUSH      CX 
	 MOV       CX,350H 
DELAY:   LOOP      DELAY 
	 POP       CX 
	 CMP       CL,20H   
	 JZ        CHG 
	 INC       DI 
	 SHL       CL,1     
	 MOV       AL,00 
	 OUT       DX,AL 
	 JMP       DIS1 
CHG:     INC       COUNT        
	 CMP       COUNT,50 
	 JL        QUIT 
	 MOV       COUNT,0 
	 INC       SEC2 
	 CMP       SEC2,10 
	 JL        QUIT 
	 MOV       SEC2,0 
	 INC       SEC1 
	 CMP       SEC1,6 
	 JL        QUIT 
	 MOV       SEC1,0 
	 INC       MIN2 
	 CMP       MIN2,10 
	 JL        QUIT 
	 MOV       MIN2,0 
	 INC       MIN1 
	 CMP       MIN1,6 
	 JL        QUIT 
	 MOV       MIN1,0 
QUIT:    MOV       DX,PORTBIT 
	 MOV       AL,00 
	 OUT       DX,AL 
	 MOV       DX,INTA00 
	 MOV       AL,20H 
	 OUT       DX,AL 
	 POP       DI 
	 POP       DX 
	 POP       CX 
	 POP       AX 
	 IRET 
CODE     ENDS 
END      START