![]() |
|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#7 |
Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
: |
Mình thử viết một chương trình chớp tắt led đơn giản, sử dụng ngắt timer1. Chương trình như sau :
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 0XC3 MOVWF TMR1H MOVLW 0X50 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 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 CLRF TMR1H CLRF TMR1L BSF STATUS,RP0 CLRF PIE1 BSF PIE1,TMR1IE BCF STATUS,RP0 CLRF PIR1 MOVLW 0X00 MOVWF T1CON MOVLW 0XC3 MOVWF TMR1H MOVLW 0X50 MOVWF TMR1L BSF T1CON,TMR1ON BSF INTCON,TMR1IE BSF INTCON,PEIE BSF INTCON,GIE BSF PIR1,TMR1IF MOVLW B'00000011' MOVWF PORTC MOVLW B'11111111' MOVWF PORTB GOTO $ delay20 MOVLW d'10' ;nap 20 cho count1 de tao tre 20ms MOVWF count1 lap1 MOVLW d'199' MOVWF counta MOVLW d'1' MOVWF countb delay1 DECFSZ counta,1 GOTO $+2 DECFSZ countb,1 GOTO delay1 DECFSZ count1,1 GOTO lap1 ;het doan chuong trinh delay 100ms RETURN END To Jerry : mình đã thử không dùng lệnh xóa và đặt bit TMR1ON nhưng chương trình ko chạy được. Cho mình hỏi cách khai báo sử dụng cùng một lúc timer0 và timer1 và ngắt của chúng như thế nào? (mình khai báo như bình thường nhưng ko chạy được) Xin cảm ơn. |
![]() |
![]() |
|
|