Merhabalar..
Hobi amaçlı yaptığım bir devre var. Devrede P16F873 in portb uçlarına Tuş takımını bağlıyorum. Kesme olarakta RB port kesmesini kullanıyorum. TMR1 kesmesiylede belli aralıklarla RB1, RB2 ve RB3 uçlarından çıkışlar almaktayım. RB1 ucu aktif olduğu sırada ben tuş takımında "1" nolu tuşa bastığımda tuş takımının ilgili çıkışı aktif olacak. ben bu çıkışıda normal olarak PIC in RB4 ucuna takıyorum. Ben böle yaparak, tuş takımından herhangibir tuşa bastığımda, bastğım tuşun decimal değerini PortA ya yazdırmak istiyorum. Programa ait asm kodları aşağıdaki gibi;
LIST P=16F873
INCLUDE "P16F873.INC"
;----------------------------------------------------------------
ORG H'000'
GOTO MAIN
ORG H'004'
GOTO KESME
;--------------------------------------------------------------
DURUM EQU H'A0'
;--------------------------------------------------------------
MAIN
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF DURUM
BSF DURUM,0 ;DURUM,0=1
;..............................................................
BSF STATUS,5 ;BANK1 E GEC
CLRF TRISA ;PORTA OUTPUT
MOVLW H'F0'
MOVWF TRISB ;PORTB0_3=OUTPUT, PORTB4_7=INPUT
CLRF TRISC ;PORTC OUTPUT
BCF STATUS,5 ;BANK0 A GEC
;..............................................................
MOVLW H'00'
MOVWF TMR1L
MOVLW H'F0'
MOVWF TMR1H
MOVLW B'00110001'
MOVWF T1CON ;TMR1_ON=1
BCF PIR1,0 ;TMR1IF=0
;..............................................................
BSF STATUS,5 ;BANK1
BSF PIE1,TMR1IE ;TMR1IE=1
BCF STATUS,5 ;BANK0
;..............................................................
MOVLW B'11001000' ;GIE=1 , PEIE=1
MOVWF INTCON ;KESME AKTIF
LOOP
GOTO LOOP
;-----------------------------------------------------------------------
KESME
BTFSC PIR1,TMR1IF ;TMR1IF=?0
GOTO KESME_TMR1 ;HAYIR TMR1IF=1
BTFSC INTCON,RBIF ;RBIF=?0
GOTO KESME_RB ;HAYIR RBIF=1
;-----------------------------------------------------------------------
KESME_RB
BCF INTCON,RBIF
BTFSC PORTB,4 ;PORTB_4=?0
GOTO DURUM_1 ;HAYIR, DURUM_1 E GIT
BTFSC PORTB,5 ;PORTB_5=?0
GOTO DURUM_2 ;HAYIR, DURUM_1 E GIT
BTFSC PORTB,6 ;PORTB_6=?0
GOTO DURUM_3 ;HAYIR, DURUM_1 E GIT
BTFSC PORTB,7 ;PORTB_7=?0
GOTO DURUM_4 ;HAYIR, DURUM_1 E GIT
GOTO CIKIS_KESME_RB ;CIKIS_KESME_RB GIT
DURUM_1
MOVLW H'01'
MOVWF PORTA
DURUM_1_A
BTFSC PORTB,4 ;PORTB,4=?0
GOTO DURUM_1_A
GOTO CIKIS_KESME_RB
DURUM_2
MOVLW H'02'
MOVWF PORTA
DURUM_2_A
BTFSC PORTB,5 ;PORTB,5=?0
GOTO DURUM_2_A
GOTO CIKIS_KESME_RB
DURUM_3
MOVLW H'04'
MOVWF PORTA
DURUM_3_A
BTFSC PORTB,6 ;PORTB,6=?0
GOTO DURUM_3_A
GOTO CIKIS_KESME_RB
DURUM_4
MOVLW H'08'
MOVWF PORTA
DURUM_4_A
BTFSC PORTB,7 ;PORTB,7=?0
GOTO DURUM_4_A
GOTO CIKIS_KESME_RB
CIKIS_KESME_RB:
BSF INTCON,RBIE
RETFIE
;-----------------------------------------------------------------------
KESME_TMR1
BCF PIR1,0 ;TMR1IF=0
BTFSC DURUM,0 ;DURUM_0=?0
GOTO A1
BTFSC DURUM,1 ;DURUM_1=?0
GOTO A2
BTFSC DURUM,2 ;DURUM_2=?0
GOTO A3
GOTO CIKIS
A1
BCF PORTB,3
BSF PORTB,1
BCF DURUM,0
BSF DURUM,1
GOTO CIKIS
A2
BCF PORTB,1
BSF PORTB,2
BCF DURUM,1
BSF DURUM,2
GOTO CIKIS
A3
BCF PORTB,2
BSF PORTB,3
BCF DURUM,2
BSF DURUM,0
GOTO CIKIS
CIKIS
MOVLW H'00'
MOVWF TMR1L
MOVLW H'F0'
MOVWF TMR1H ;(TMR1H:TMR1L)=(85ED)
RETFIE
;-----------------------------------------------------------------------
END
bu programı proteus da simüle ettiğimde normal olarak çalışıyor. Fakat devreyi boardda kurup denediğimde Porta dan abuk subuk çıkışlar alıyorum. PortB girişlerine ve PortA çıkışlarına kondansatör ve direnç çiftini bağlamama rağmen durum aynı. Şu an için tıkandım kaldım. Bana yardımcı olursanız teşekkür ederim.
kullandığın güç kaynağı yetersiz gelebilir veya iyi regüle edilmemiş olabilir verdiğin voltajı iyice kontrol etmende bir sakınca yok simülasyonda çalışıyorsa besleme sorunun vardır derim
proteus simulasyonun çalıştı ise tereddüt etme sadece yaptığın devreyi kontrol et.
P16F873 in voltaj bacaklarına ( + - ) en yakın noktadan 100nF ve 1uF kondansatörleri bağlamadıysan , kondansatörleri bağlayıp devreyi tekrar dene düzgün çalışacaktır.
kolay gelsin
nurim