PIC ve tuş takımı problemi

Başlatan sonerss, 11 Eylül 2005, 18:28:11

sonerss

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.

kartel

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
"BAŞARININ ORANI" Konuya Ayrılmış  "ZAMAN" "BİLGİ" "AZİM" ve "İMKAN" Kavramlarının "ETKİSİ" ile orantılıdır.

mustafacan

proteus simulasyonun çalıştı ise  tereddüt etme sadece yaptığın devreyi kontrol et.
Keşfedilecek çok teknoloji var. Boş Vaktim Yok!

nurim

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
"Bilgi paylaştıkça artar ,acı ve keder paylaştıkça azalır"