Code:
;========================================
;Author: NHH
;Date: 02/03/06
;Hardware: PIC16F877A ,Crystal 4MHz
;========================================
PROCESSOR PIC16f877A
INCLUDE<P16f877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
COUNT EQU 0x20
COUNT1 EQU 0x21
COUNT2 EQU 0x22
COUNT3 EQU 0x23
COUNT4 EQU 0x24
COUNT5 EQU 0x25
COUNT6 EQU 0x26
COUNT7 EQU 0x27
w_temp EQU 0x71 ; variable used for context saving
status_temp EQU 0x72 ; variable used for context saving
pclath_temp EQU 0x73 ; variable used for context saving
;=============================================================================
;CHUONG TRINH CHINH
;=============================================================================
ORG 0x00
GOTO MAIN
ORG 0004h
GOTO INTERRUPT
;==============================INTERRUPT PROGRAM===========================
INTERRUPT
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,w ; move pclath register into w register
movwf pclath_temp ; save off contents of PCLATH register
;******************************************************************************
DECFSZ COUNT,F
GOTO CHECK
MOVLW d'1'
MOVWF COUNT
INCF COUNT1,F
GOTO CHECK
BACK BCF INTCON,TMR0IF ;xoa co ngat TMR0
;******************************************************************************
movf pclath_temp,w ; retrieve copy of PCLATH register
movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
CHECK
CALL CHECK1
CALL CHECK2
CALL CHECK3
CALL CHECK4
CALL CHECK5
GOTO BACK
;============== CHUONG TRINH CHINH===============
MAIN
BCF STATUS,RP1
BSF STATUS,RP0 ; chon BANK 1
MOVLW b'11111111' ;PORTA=Input
MOVWF TRISA
MOVLW b'00000001' ;RB0=Input
MOVWF TRISB
CLRF TRISD
;------------------------------
;Khoi tao ngat Timer0
;------------------------------
BSF OPTION_REG,PS0 ;TMR0 rate 1: 64
BSF OPTION_REG,PS1
BCF OPTION_REG,PS2
BCF OPTION_REG,PSA ;Prescaler is assigned to the Timer0 module
BCF OPTION_REG,T0CS
BCF STATUS,RP0 ;select BANK 0
BSF INTCON,GIE
BSF INTCON,TMR0IE
BCF INTCON,TMR0IF
MOVLW d'246'
MOVWF COUNT
CLRF COUNT1
CLRF COUNT2
CLRF COUNT3
CLRF COUNT4
CLRF COUNT5
CLRF COUNT6
CLRF COUNT7
LOOP
CALL DISPLAY1
CALL DISPLAY2
CALL DISPLAY3
CALL DISPLAY4
CALL DISPLAY5
CALL DISPLAY6
BTFSC PORTB,0
GOTO LOOP
GOTO MODIFY
MODIFY
BCF INTCON,GIE
BTFSC PORTA,0
GOTO $+2
CALL LED34
BTFSC PORTA,1
GOTO $+2
CALL LED56
BTFSS PORTB,0
GOTO MODIFY
BSF INTCON,GIE
GOTO LOOP
LED34
INCF COUNT3,F
MOVLW d'10'
SUBWF COUNT3,W
BTFSS STATUS,0
RETURN
CLRF COUNT3
INCF COUNT4,F
MOVLW d'6'
SUBWF COUNT4,W
BTFSS STATUS,0
RETURN
CLRF COUNT4
RETURN
LED56
INCF COUNT5,F
MOVLW d'4'
SUBWF COUNT5,W
BTFSS STATUS,0
RETURN
MOVLW d'2'
SUBWF COUNT6,W
BTFSS STATUS,0
GOTO LED5
CLRF COUNT6
RETURN
LED5
MOVLW d'10'
SUBWF COUNT5,W
BTFSS STATUS,0
GOTO MODIFY
CLRF COUNT5
INCF COUNT6,F
GOTO MODIFY
;============CHUONG TRINH CON===
DISPLAY1
MOVLW b'11111101'
MOVWF PORTB
MOVF COUNT1,W
CALL TABLE
MOVWF PORTD
CALL DECREATE
CLRF PORTB
CLRF PORTD
RETURN
DISPLAY2
MOVLW b'11111011'
MOVWF PORTB
MOVF COUNT2,W
CALL TABLE
MOVWF PORTD
CALL DECREATE
CLRF PORTB
CLRF PORTD
RETURN
DISPLAY3
MOVLW b'11110111'
MOVWF PORTB
MOVF COUNT3,W
CALL TABLE
MOVWF PORTD
CALL DECREATE
CLRF PORTB
CLRF PORTD
RETURN
DISPLAY4
MOVLW b'11101111'
MOVWF PORTB
MOVF COUNT4,W
CALL TABLE
MOVWF PORTD
CALL DECREATE
CLRF PORTB
CLRF PORTD
RETURN
DISPLAY5
MOVLW b'11011111'
MOVWF PORTB
MOVF COUNT5,W
CALL TABLE
MOVWF PORTD
CALL DECREATE
CLRF PORTB
CLRF PORTD
RETURN
DISPLAY6
MOVLW b'10111111'
MOVWF PORTB
MOVF COUNT6,W
CALL TABLE
MOVWF PORTD
CALL DECREATE
CLRF PORTB
CLRF PORTD
RETURN
DECREATE
DECFSZ COUNT7
GOTO DECREATE
RETURN
;........................................................
CHECK1
MOVLW d'10'
SUBWF COUNT1,W
BTFSS STATUS,0
GOTO BACK
CLRF COUNT1
INCF COUNT2,F
RETURN
CHECK2
MOVLW d'6'
SUBWF COUNT2,W
BTFSS STATUS,0
GOTO BACK
CLRF COUNT2
INCF COUNT3,F
RETURN
CHECK3
MOVLW d'10'
SUBWF COUNT3,W
BTFSS STATUS,0
GOTO BACK
CLRF COUNT3
INCF COUNT4,F
RETURN
CHECK4
MOVLW d'6'
SUBWF COUNT4,W
BTFSS STATUS,0
GOTO BACK
CLRF COUNT4
INCF COUNT5,F
RETURN
CHECK5
MOVLW d'10'
SUBWF COUNT5,W
BTFSS STATUS,0
GOTO BACK
CLRF COUNT5
INCF COUNT6,F
RETURN
CHECK6
INCF COUNT5,F
MOVLW d'4'
SUBWF COUNT5,W
BTFSS STATUS,0
RETURN
MOVLW d'2'
SUBWF COUNT6,W
BTFSS STATUS,0
CALL LED_5
CLRF COUNT6
RETURN
LED_5
MOVLW d'10'
SUBWF COUNT5,W
BTFSS STATUS,0
RETURN
CLRF COUNT5
INCF COUNT6,F
RETURN
;----------------------------------------------------------
; Bang tra ve Digital tu 0 den 9 va OFF
; Chi so dau truy cap la 0
; Bang o PAGE 0
ORG 07F0h
TABLE
;----------------------------------------------------------
ADDWF PCL, F ; bat dau tai 0x90
RETLW b'00111111' ; 0
RETLW b'00000110' ; 1
RETLW b'01011011' ; 2
RETLW b'01001111' ; 3
RETLW b'01100110' ; 4
RETLW b'01101101' ; 5
RETLW b'01111101' ; 6
RETLW b'00000111' ; 7
RETLW b'01111111' ; 8
RETLW b'01101111' ; 9
RETLW b'00111111' ; 0
END