PDA

View Full Version : chương trình ngắt cho led


ductantruong
25-12-2010, 09:05 PM
em đang viết chương trình ngắt cho 8 led chạy sáng đuổi nhau,khi ta ngắt chân RP7 hoặc RP6 hoặc RP5,RP4 thì chương trình sẽ thực hiện ngắt,em mới học nên loay hoay viết không được,mong các anh giúp đỡ em!!!

;================================================= =======
; Ten chuong trinh : Mach chay led sang duoi
; Nguoi thuc hien : ductan
; Ngay thuc hien : 22/12/2010
; Phien ban : 1.0
; Mo ta phan cung : Dung PIC16F628A - thach anh 4MHz
; : LED giao tiep voi PORTB
; : Cuc am cua LED noi voi GND
; : RB0 - RB7 la cac chan output
;----------------------------------------------------------------
; Ngay hoan thanh :
; Ngay kiem tra :
; Nguoi kiem tra :
;----------------------------------------------------------------
; Chu thich :
; :
; :
; :
; :
; :
;================================================= =======

processor 16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF

count1 equ 0x20
counta equ 0x21
countb equ 0x22
count equ 0x23

W_SAVE EQU 0X24
PCLATH_SAVE EQU 0X25
STATUS_SAVE EQU 0X26
FSR_SAVE EQU 0X28


ORG 0X0004
GOTO ISR
ISR

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
;-------------------------------------------
;chuong trinh chinh
;-------------------------------------------------
BTFSS INTCON,INTE
GOTO exit_int
BCF INTCON,INTE
BSF INTCON,7
BSF INTCON,6












exit_int

MOVF FSR_SAVE,W
MOVWF FSR
MOVF PCLATH_SAVE,W
MOVWF PCLATH
SWAPF STATUS_SAVE,W
MOVWF STATUS
SWAPF W_SAVE,F
SWAPF W_SAVE,W

RETFIE


org 0x0000
goto start
ORG 0X0050
start
bcf STATUS,RP1
bcf STATUS,RP0
clrf PORTB
bsf STATUS,RP0
movlw 0X00
movwf TRISB
bcf STATUS,RP0
loop1
clrf count
loop2
movf count,0
call table
movwf PORTB
call delay100ms
incf count,0
xorlw d'8'
btfsc STATUS,Z
goto loop1
incf count,1
goto loop2
table
ADDWF PCL,1
retlw b'10000000'
retlw b'01000000'
retlw b'00100000'
retlw b'00010000'
retlw b'00001000'
retlw b'00000100'
retlw b'00000010'
retlw b'00000001'
delay100ms
movlw d'100'
movwf count1
d1 movlw 0xc7
movwf counta
movlw 0x01
movwf countb
delay_0
decfsz counta,1
goto $+2
decfsz countb,1
goto delay_0
decfsz count1,1
goto d1
return
end