Đây là toàn bộ chương trình mà em kiếm được.
Code:
;===================================================================================================
;CHUONG TRINH SU DUNG TIMER0 HIEN THI LED 7 DOAN
;===================================================================================================
processor 16f877a
#include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;===================================================================================================
;KHAI BAO BIEN
;===================================================================================================
count1 EQU 0x20 ;Cac thanh ghi su dung trong chuong trinh delay
counta EQU 0x21
countb EQU 0x22
hang_don_vi EQU 0x23 ;Cac thanh ghi chua gia tri can
hang_chuc EQU 0x24 ;hien thi ra led 7 doan
W_save EQU 0x25 ;Cac thanh ghi dung de cat cac
PCLATH_save EQU 0x26 ;thanh ghi quan trong khi thuc thi
STATUS_save EQU 0x27 ;chuong trinh ngat
FSR_save EQU 0x28
;====================================================================================================
;CHUONG TRINH NGAT
;====================================================================================================
ORG 0x0004
GOTO ISR
ISR
;====================================================================================================
;DOAN CHUONG TRINH BAT BUOC DAU CHUONG TRINH NGAT DE LUU CAC THANH GHI QUAN TRONG
;====================================================================================================
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
BTFSS INTCON,TMR0IF ;Kiem tra co ngat Timer0
GOTO exit_int ;Neu co ngat chua duoc set, thoat khoi
;chuong trinh ngat
BCF INTCON,TMR0IF ;Neu co ngat da duoc set, thi tien hanh xoa co ngat de
;nhan biet thoi diem tiep theo xay ra ngat
;====================================================================================================
;CAC THAO TAC CHINH CUA CHUONG TRINH NGAT TRONG TRUONG HOP CO NGAT TIMER0 XAY RA
;====================================================================================================
INCF hang_don_vi ;tang hang don vi
MOVLW 0x0A
XORWF hang_don_vi,0 ;so sanh hang don vi voi 10
BTFSS STATUS,Z ;neu chua bang 10
GOTO exit_int ;thi thoat khoi chuong trinh ngat
CLRF hang_don_vi ;neu bang 10 roi thi xoa hang don vi
INCF hang_chuc,1 ;tang hang chuc len 1
MOVLW 0x0A
XORWF hang_chuc,0 ;so sanh hang chuc voi 10
BTFSS STATUS,Z ;neu chua bang 10
GOTO exit_int ;thi thoat khoi chuong trinh ngat
CLRF hang_chuc ;neu da bang 10 thi xoa hang chuc, bat dau dem lai
GOTO exit_int
;=====================================================================================================
;DOAN CHUONG TRINH BAT BUOC TRUOC KHI ROI KHOI NGAT
;=====================================================================================================
exit_int
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;====================================================================================================
;KET THUC CHUONG TRINH NGAT
;====================================================================================================
ORG 0x0000
GOTO start
ORG 0x050
;====================================================================================================
;BAT DAU CHUONG TRINH CHINH
;====================================================================================================
start
;====================================================================================================
;KHOI TAO CAC PORT
;====================================================================================================
BCF STATUS,RP1
BSF STATUS,RP0 ;Chon bank1
MOVLW 0x00
MOVWF TRISD ;PORTD la port xuat
MOVLW b'11111100'
MOVWF TRISB ;PORTB <1:0> la output
BCF STATUS,RP0 ;Chon bank0
CLRF PORTD
MOVLW b'00000011' ;tat cac led hang chuc va hang don vi
MOVWF PORTB
;====================================================================================================
;KHOI TAO TIMER 0
;====================================================================================================
CLRF TMR0 ;xoa thanh ghi TMR0
CLRF INTCON
BSF STATUS,RP0 ;chon Bank 1
MOVLW b'10000001' ;tat chuc nang keo len o PORTB bit7=RBPU=1
;chon xung dem la xung noi bit6=TOCS=0
;xung clock tac dong canh len bit5=TOSE=0
;toc do dem tac dong len TIMER0 bit3=PSA=0
MOVWF OPTION_REG ;tan so prescaler la 1:4
BCF STATUS,RP0
BSF INTCON,TMR0IE ;cho phep ngat timer0
BSF INTCON,PEIE ;cho phep ngat ngoai vi
BSF INTCON,GIE ;cho phep toan bo cac ngat
;====================================================================================================
;KHOI TAO CAC BIEN
;====================================================================================================
CLRF hang_chuc
CLRF hang_don_vi
;====================================================================================================
;VONG LAP CHINH
;====================================================================================================
main
CALL hien_thi
GOTO main
;====================================================================================================
;CHUONG TRINH CON HIEN THI CAC GIA TRI CHUA TRONG CAC THANH GHI hang_chuc VA hang_don_vi
;HIEN RA CAC LED HANG DON VI VA HANG CHUC
;====================================================================================================
hien_thi
MOVF hang_chuc,0 ;hien thi LED hang chuc
CALL table
MOVWF PORTD
MOVLW b'11111101'
MOVWF PORTB
CALL delay_1ms
MOVF hang_don_vi,0 ;hien thi LED hang don vi
CALL table
MOVWF PORTD
MOVLW b'11111110'
MOVWF PORTB
CALL delay_1ms
RETURN
;======================================================================================================
;CAC CHUONG TRINH CON DUNG CHO CHUONG TRINH CON HIEN_THI
;======================================================================================================
table
ADDWF PCL,1
RETLW 0xC0
RETLW 0xF9
RETLW 0xA4
RETLW 0xB0
RETLW 0x99
RETLW 0x92
RETLW 0x82
RETLW 0xF8
RETLW 0x80
RETLW 0x90
delay_1ms
MOVLW d'100'
MOVWF count1
d2 MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1
DECFSZ counta,1
GOTO $+1
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
END
Em cảm ơn anh Nam rất nhiều. Anh giúp em giải quyết triệt để cái lỗi này luôn nha anh Nam.