romantics892005
15-03-2011, 04:46 PM
tình hình là em hì hụi viết cả buổi chiều, kiểm tra từng bước, nhưng cuối cùng nó không chạy được ( build succeeded) , em post hình chạy proteus và code các bác xem cho em với, thanks các bác nhiều nhiều ^^
(pm : em chả thấy khung nhập code ở đâu hết, mod edit giùm em )
----------------------------------
list p=16f877a ; list directive to define processor
#include <p16f877a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
ORG 0X00
GOTO MAIN
ORG 0X04
GOTO NGAT
MAIN
;KHOI TAO CAC BIEN
CBLOCK 0X20
HC
HDV
W_SAVE
FSR_SV
STAT_SV
PCH_SV
ENDC
; CAI DAT PORT VA TIMER
BANKSEL TRISD
CLRF TRISD ; PORTD LA OUTPUT
MOVLW b'00000001'
MOVWF TRISB ; RB0 LA INPUT
BANKSEL PORTB
CLRF PORTB
CLRF PORTD
BSF INTCON, GIE ; CAT DAT NGAT TOAN CUC
BSF INTCON, TMR0IE ; CAI DAT NGAT TIMER0
BSF INTCON, INTE ; CAI DAT NGAT RB0
BANKSEL OPTION_REG ;
BCF OPTION_REG, T0CS ; CHON CHE DO TIMER
BCF OPTION_REG, 6 ; NGAT THEO SUON XUONG
BSF OPTION_REG, 2 ;
BSF OPTION_REG, 1 ; CHON BO CHIA 1:256
BSF OPTION_REG, 0 ;
BANKSEL PORTD ;
MOVLW d'180' ; TIMER0 = 180 , 20ms
MOVWF TMR0 ;
CLRF HC
CLRF HDV
; CHUONG TRINH CHINH
MOVLW HC ; HIEN THI HANG CHUC
CALL TABLE
MOVWF PORTD
MOVLW HDV ; HIEN THI HANG DON VI
CALL TABLE
MOVWF PORTD
; CHUONG TRINH NGAT
NGAT
; PHAN KHOI DAU NGAT
MOVWF W_SAVE ;W_SAVE(bank unknown!) = W
SWAPF STATUS, W
CLRF STATUS ; force bank 0 for remainder of handler
MOVWF STAT_SV ; STAT_SV = swap_nibbles( STATUS )
; STATUS = 0
MOVF PCLATH, W
MOVWF PCH_SV ; PCH_SV = PCLATH
CLRF PCLATH ; PCLATH = 0
MOVF FSR, W
MOVWF FSR_SV ; FSR_SV = FSR
; 10 cycles from interrupt to here!
;NOI DUNG CHUONG TRINH NGAT
BTFSC INTCON, TMR0IF
GOTO NGAT_TIMER
GOTO NGAT_RB0
;NGAT TIMER0 SAU 20MS
NGAT_TIMER
BCF INTCON, GIE
BCF INTCON, TMR0IF
BTFSS PORTB, 1
GOTO TATLED2
GOTO TATLED1
TATLED1
BCF PORTB, 1
BSF PORTB, 2
MOVLW d'180'
MOVWF TMR0
GOTO THOATNGAT
TATLED2
BCF PORTB, 2
BSF PORTB, 1
MOVLW d'180'
MOVWF TMR0
GOTO THOATNGAT
; NGAT RB0
NGAT_RB0
BCF INTCON, GIE
BCF INTCON, INTF
INCF HDV,1
MOVLW HDV
XORLW d'10'
BTFSS STATUS, C
GOTO THOATNGAT
CLRF HDV
INCF HC,1
MOVLW HC
XORLW d'10'
BTFSS STATUS, C
GOTO THOATNGAT
CLRF HC
GOTO THOATNGAT
;KET THUC CHUONG TRINH NGAT
THOATNGAT
MOVF FSR_SV, W
MOVWF FSR ; FSR = FSR_SV
MOVF PCH_SV, W
MOVWF PCLATH ; PCLATH = PCH_SV
SWAPF STAT_SV, W
MOVWF STATUS ; STATUS = swap_nibbles( STAT_SV )
SWAPF W_SAVE, F
SWAPF W_SAVE, W ; W = swap(swap( W_SAVE ))(no change Z bit)
BSF INTCON, GIE ; SET LAI NGAT TOAN CUC
RETFIE
TABLE
ADDWF PCL,1 ; sang maõ LED 7 ñoaïn
RETLW 0xC0
RETLW 0xF9
RETLW 0xA4
RETLW 0xB0
RETLW 0x99
RETLW 0x92
RETLW 0x82
RETLW 0xF8
RETLW 0x80
RETLW 0x90
goto $
END ; directive 'end of program'
-----------------------------
(pm : em chả thấy khung nhập code ở đâu hết, mod edit giùm em )
----------------------------------
list p=16f877a ; list directive to define processor
#include <p16f877a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
ORG 0X00
GOTO MAIN
ORG 0X04
GOTO NGAT
MAIN
;KHOI TAO CAC BIEN
CBLOCK 0X20
HC
HDV
W_SAVE
FSR_SV
STAT_SV
PCH_SV
ENDC
; CAI DAT PORT VA TIMER
BANKSEL TRISD
CLRF TRISD ; PORTD LA OUTPUT
MOVLW b'00000001'
MOVWF TRISB ; RB0 LA INPUT
BANKSEL PORTB
CLRF PORTB
CLRF PORTD
BSF INTCON, GIE ; CAT DAT NGAT TOAN CUC
BSF INTCON, TMR0IE ; CAI DAT NGAT TIMER0
BSF INTCON, INTE ; CAI DAT NGAT RB0
BANKSEL OPTION_REG ;
BCF OPTION_REG, T0CS ; CHON CHE DO TIMER
BCF OPTION_REG, 6 ; NGAT THEO SUON XUONG
BSF OPTION_REG, 2 ;
BSF OPTION_REG, 1 ; CHON BO CHIA 1:256
BSF OPTION_REG, 0 ;
BANKSEL PORTD ;
MOVLW d'180' ; TIMER0 = 180 , 20ms
MOVWF TMR0 ;
CLRF HC
CLRF HDV
; CHUONG TRINH CHINH
MOVLW HC ; HIEN THI HANG CHUC
CALL TABLE
MOVWF PORTD
MOVLW HDV ; HIEN THI HANG DON VI
CALL TABLE
MOVWF PORTD
; CHUONG TRINH NGAT
NGAT
; PHAN KHOI DAU NGAT
MOVWF W_SAVE ;W_SAVE(bank unknown!) = W
SWAPF STATUS, W
CLRF STATUS ; force bank 0 for remainder of handler
MOVWF STAT_SV ; STAT_SV = swap_nibbles( STATUS )
; STATUS = 0
MOVF PCLATH, W
MOVWF PCH_SV ; PCH_SV = PCLATH
CLRF PCLATH ; PCLATH = 0
MOVF FSR, W
MOVWF FSR_SV ; FSR_SV = FSR
; 10 cycles from interrupt to here!
;NOI DUNG CHUONG TRINH NGAT
BTFSC INTCON, TMR0IF
GOTO NGAT_TIMER
GOTO NGAT_RB0
;NGAT TIMER0 SAU 20MS
NGAT_TIMER
BCF INTCON, GIE
BCF INTCON, TMR0IF
BTFSS PORTB, 1
GOTO TATLED2
GOTO TATLED1
TATLED1
BCF PORTB, 1
BSF PORTB, 2
MOVLW d'180'
MOVWF TMR0
GOTO THOATNGAT
TATLED2
BCF PORTB, 2
BSF PORTB, 1
MOVLW d'180'
MOVWF TMR0
GOTO THOATNGAT
; NGAT RB0
NGAT_RB0
BCF INTCON, GIE
BCF INTCON, INTF
INCF HDV,1
MOVLW HDV
XORLW d'10'
BTFSS STATUS, C
GOTO THOATNGAT
CLRF HDV
INCF HC,1
MOVLW HC
XORLW d'10'
BTFSS STATUS, C
GOTO THOATNGAT
CLRF HC
GOTO THOATNGAT
;KET THUC CHUONG TRINH NGAT
THOATNGAT
MOVF FSR_SV, W
MOVWF FSR ; FSR = FSR_SV
MOVF PCH_SV, W
MOVWF PCLATH ; PCLATH = PCH_SV
SWAPF STAT_SV, W
MOVWF STATUS ; STATUS = swap_nibbles( STAT_SV )
SWAPF W_SAVE, F
SWAPF W_SAVE, W ; W = swap(swap( W_SAVE ))(no change Z bit)
BSF INTCON, GIE ; SET LAI NGAT TOAN CUC
RETFIE
TABLE
ADDWF PCL,1 ; sang maõ LED 7 ñoaïn
RETLW 0xC0
RETLW 0xF9
RETLW 0xA4
RETLW 0xB0
RETLW 0x99
RETLW 0x92
RETLW 0x82
RETLW 0xF8
RETLW 0x80
RETLW 0x90
goto $
END ; directive 'end of program'
-----------------------------