İlk önce herkese iyi günler dilerim,mikroişlemciler dersimizde p16f877 kullaniyoruz.
Yapmak istediğim şey timer1 kesmesi kullanarak 1 saniye yanip 1 saniye sönen led yapmak.
MPLAB programinda portb ye 1 gönderdiğim gözükmesine rağmen,PROTEUS da led yanmiyor,3 gündür uğraşmama rağmen sorunu çözemedim.
Kesme oluşmadan önce istediğim ledi yakip söndürebiliyorum,ancak program kesmeye girdikten sonra port müdahalesi kapaniyor.
Datasheeti kurcaliyorum ancak pic programlamada tecrübem olmadığı için datasheetin tam olarak nasil kullanilmasi gerektiğini de tam bilmiyorum.
Kodum şudur:
#INCLUDE<P16F877A.INC>
org 0x0000
goto setup
org 0x0004
goto kesme
loop
goto loop
setup
banksel PIR1
bcf PIR1,7
banksel INTCON
bsf INTCON,7
bsf INTCON,6
bcf INTCON,4
bcf INTCON,3
bcf INTCON,1
bcf INTCON,0
banksel PORTB
clrf PORTB
banksel TRISB
bcf TRISB,0
banksel tmr1if
clrf 0x22
int200 equ 0x22
clrf 0x23
int100 equ 0x23
clrw
movlw d'2'
movwf int200
clrw
movlw d'1'
movwf int100
clrw
interrupt equ 8Ch
tmr1if equ 0Ch
banksel T1CON
bcf T1CON,5
bcf T1CON,4
bsf T1CON,3
bcf T1CON,2
bcf T1CON,1
banksel TMR1H
clrf TMR1H
clrf TMR1L
clrw
movlw b'11111110'
movwf TMR1L
clrw
movlw b'11111110'
movwf TMR1H
clrw
banksel interrupt
bsf interrupt,0
banksel INTCON
bsf INTCON,7
bsf INTCON,6
banksel T1CON
bsf T1CON,7
bsf T1CON,6
bsf T1CON,0
goto loop
kesme
bsf PORTB,0
banksel T1CON
bcf T1CON,0
bcf interrupt,0
banksel PORTB
clrf PORTB
banksel tmr1if
bcf tmr1if,0
banksel INTCON
bcf INTCON,INTF
banksel TMR1H
clrf TMR1H
clrf TMR1L
clrw
movlw b'11111110'
movwf TMR1L
clrw
movlw b'11111110'
movwf TMR1H
clrw
banksel T1CON
bsf T1CON,0
banksel int200
decfsz int200,1
retfie
incf int200,1
decfsz int100,1
retfie
incf int100,1
goto led_yak
led_yak
call setup2
call portbyak
retfie
portbyak
banksel PORTB
movfw PORTB
xorlw d'1'
movwf PORTB
return
setup2
clrw
movlw d'2'
movwf int200
clrw
movlw d'1'
movwf int100
clrw
return
end
Timerlere ledi rahat görmem için küçük değerler verdim,dediğim gibi portb ye 1 gönderdiği gözüküyor ancak led yanmiyor.
Saçlarimi yolmak üzereyim.