Trích:
Nguyên văn bởi Jerry
Mạch test đó bạn làm những việc gì? Chương trình viết như thế nào? không ổn định như thế nào? Lúc chạy lúc không hay thế nào? Bây giờ bạn có thể làm như thế này để Test ngắt Timer1: Giả dụ bạn có 1 cái mạch nào đó có gắn LED trên chân cổng, bạn viết chương trình trễ để chớp tắt LED đi. Còn cái ngắt Timer1 thì chỉ có thế, không quá phức tạp. Không có chuyện nó chạy thiếu ổn định, chỉ là do mình quản lý hệ thống chương trình chưa tốt.
|
Cái chương trình test của mình giống y như bạn nói, chỉ nhấp nhấp led ở portB chu kỳ 100ms. Khi nạp chương trình cho PIC, thử ngay trên mạch đó, chương trình chạy tốt. Sau đó mình tháo con PIC ra gắn qua mạch đồ án coi thử trên mạch đồ án nó chạy như thế nào, kết quả là không chạy được nhưng lắc cái dây nguồn vài lần thì lại OK (lần thử nào cũng vậy). Mình lại tháo con PIC từ mạch đồ án ra, gắn lại vào mạch test, cấm nguồn vào mạch test, nó không chạy(có nguồn đàng hoàng mà vẫn ko chạy). Lại phải cấm ra cấm vô cái dây nguồn vài lần, nó lại chạy được.
Những hiện tượng trên chỉ xảy ra khi mình viết ngắt timer1, những chương trình khác như quét phím, đọc xung từ timer0 chạy rất tốt, không việc gì cả. Mình không hiểu tại sao nữa.
Chương trình nhâp nháy led .
Code:
processor 16f877a ;vi dieu khien duoc su dung la PIC16F877A cua Microchip
include <p16f877a.inc> ;header file kem theo
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;===================================================================================================
;NHOM CAC THANH GHI TRONG CHUONG TRINH NGAT
W_save EQU 0x20
PCLATH_save EQU 0x21
STATUS_save EQU 0x22
FSR_save EQU 0x23
DEM EQU 0X24
count1 EQU 0x25
counta EQU 0x26
countb EQU 0x27
;===================================================================================================
ORG 0X004
GOTO ISR
ISR
;===================================================================================================
;DOAN CHUONG TRINH BAT BUOC KHI VAO NGAT
MOVWF W_save
SWAPF STATUS_save,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;===================================================================================================
;CHUONG TRINH CHINH CUA NGAT
;===================================================================================================
BTFSS PIR1,TMR1IF
GOTO exit_int
BCF PIR1,TMR1IF
BCF T1CON,TMR1ON
CLRF T1CON
CLRF TMR1L
CLRF TMR1H
MOVLW 0X00
MOVWF T1CON
MOVLW 0XFC
MOVWF TMR1H
MOVLW 0X17
MOVWF TMR1L
BSF T1CON,TMR1ON
DECFSZ DEM,1
GOTO exit_int
COMF PORTB,1
MOVLW D'100'
MOVWF DEM
GOTO exit_int
;===================================================================================================
;DOAN CHUONG TRINH BAT BUOC KHI KET THUC CHUONG TRINH NGAT
exit_int
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
ORG 0X0000
GOTO start
ORG 0X050
;=================================================================================================
;CHUONG TRINH CHINH
;=================================================================================================
start
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
BCF STATUS, RP0 ; Select Bank 0
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0X00
MOVWF TRISB
BCF STATUS,RP0
MOVLW D'100'
MOVWF DEM
;------------------------------------------------------------------------------------------------
;KHOI TAO TIMER 1
;------------------------------------------------------------------------------------------------
CLRF T1CON
CLRF INTCON
BSF STATUS,RP0
CLRF PIE1
BSF PIE1,TMR1IE
BCF STATUS,RP0
CLRF PIR1
MOVLW 0XFC
MOVWF TMR1H
MOVLW 0X17
MOVWF TMR1L
BSF T1CON,TMR1ON
BSF INTCON,TMR1IE
BSF INTCON,PEIE
BSF INTCON,GIE
MOVLW B'10000110'
MOVWF PORTB
GOTO $
END
Cảm ơn bạn Jerry.