Hakan KARAKAŞ'ın İleriPIC16F84 Uygulamaları Kitabı,klavye kontrollü sayıcı sorun

Başlatan sorridente, 20 Nisan 2011, 15:05:46

sorridente

Merhaba arkadaşlar ben Hakan Karakaş'ın kitabından klavye kontrollü sayıcı programını denedim fakat bi sorun yaşadım. Programı çalıştırdığımda displaylerde çok hızlı bir şekilde 0 yanıp sönüyor.Daha önce bu programı denemiş arkadaşlar varsa yardım edebilir misiniz?

fatihkuzucu

kristali kontrol et. 4 mhzde yazıldıysa sende 20 mhz kullandıysan cok hızlı calısıyor olabilir program.
Exp.Kits http://tinyurl.com/3qhs8pm   Küçük adamların, küçük fikirleri... Büyük adamların, büyük hayalleri...

sorridente

kristal 4 mhz de.programla biraz daha uğraştım şu anda da sadece 1 sayısını gösteriyor.butonlar etki etmiyor.

ferit06

Daha fazla cevap almak için;

Devreyi, programı mesajınıza  eklemeniz gerekir. Herkeste bahsettiğiniz kitabın olması veye o kitaba sahip olanların bu forumda bulunması olanaklı olmayabilir.


sorridente


   list      p=16F84             ; list directive to define processor
       radix       hex
     #include <p16F84.inc>         ; processor specific variable definitions
       
   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


i              equ       0x0C
_status   equ       0x0D
_w          equ       0x0E
sayi         equ       0x10
sn           equ       0x1C
count      equ       0x1D
int2         equ       0x1E
tus          equ       0x1F
RA4         equ       0x1B
           
            org       0x00
            goto      basla
            org       0x04
            goto      interrupt
basla;...........................................
            clrwdt
            call      initial
            call      clear
tekrar   call      display
            goto      tekrar
initial;............................................
            bsf       STATUS,RP0
            movlw     0xF0
            movwf     TRISB     
            movlw     0x00
            movwf     TRISA
            movlw     b'10001000'
            movwf     INTCON
            movlw     b'10000100'
            movwf     OPTION_REG
            bcf       STATUS,RP0
            clrf      PORTA
            return
clear;.................................................
            movlw     sayi
            movwf     FSR
            movlw     0x0F
            movwf     i
sifir       clrf      INDF
            incf      FSR
            decfsz    i
            goto      sifir
            return
display;.........................................
            movlw     4
            movwf     i
            movlw     sayi
            movwf     FSR
            movlw     b'11111110'
            movwf     PORTB
tara      movf      INDF,W
            iorwf     RA4,W
            movwf     PORTA
            call      timer_low
            incf      FSR
            bsf       STATUS,C
            rlf       PORTB,F
            decfsz    i
            goto      tara
            return
timer_low;........................................
            movlw     0xFF
            movwf     count
next     decfsz    count,F
            goto      next
            return
interrupt;........................................
            movwf     _w
            movf      STATUS,W
            movwf     _status
            btfss     INTCON,RBIF
            goto      $+3
            call      klavye_interrupt
            goto      int_son
            btfsc     INTCON,T0IF
            call      timer_interrupt
int_son     movf      _status,W
            movwf     STATUS
            movf      _w,W
            retfie
timer_interrupt;................................
            bcf       INTCON,T0IF
            incf      sn
            movlw     .125
            subwf     sn,W
            btfss     STATUS,Z
            goto      int_son
            clrf      sn
            decf      sayi
            call      test_FF
            call      test_0000
            return
klavye_interrupt;................................
            bcf       INTCON,RBIF
            bcf       INTCON,T0IF
            bcf       RA4,4
            incf      int2,F
            btfsc     int2,1
            goto      kly_cik
            swapf     PORTB,W
            andlw     0x0F
            sublw     0x0F
            btfsc     STATUS,Z
            goto      kly_son
            bcf       INTCON,T0IE
            swapf     PORTB,w
            andlw     0x0F
            movwf     tus
            sublw     0x0A
            btfss     STATUS,Z
            goto      rakam
            clrf      sn
            bsf       INTCON,T0IE
            goto      kly_son
rakam       movf      sayi+2,W
            movwf     sayi+3
            movf      sayi+1,W
            movwf     sayi+2
            movf      sayi,W
            movwf     sayi+1
            movf      tus,W
            movwf     sayi
            goto      $+2
kly_cik     clrf      int2
kly_son     return   
test_FF;...........................................
            movlw     0xFF
            subwf     sayi,W
            btfss     STATUS,Z
            goto      a_son
            movlw     9
            movwf     sayi
            decf      sayi+1
            movlw     0xFF
            subwf     sayi+1,W
            btfss     STATUS,Z
            goto      a_son
            movlw     9
            movwf     sayi+1
            decf      sayi+2
            movlw     0xFF
            subwf     sayi+2,W
            btfss     STATUS,Z
            goto      a_son
            movlw     9
            movwf     sayi+2
            decf      sayi+3
            movlw     0xFF
            subwf     sayi+3,W
            btfss     STATUS,Z
            goto      a_son
            movlw     9
            movwf     sayi+3
a_son       return
test_0000;.......................................
            movf      sayi,W
            btfss     STATUS,Z
            goto      t_end
            movf      sayi+1,W
            btfss     STATUS,Z
            goto      t_end
            movf      sayi+2,W
            btfss     STATUS,Z
            goto      t_end
            movf      sayi+3,W
            btfss     STATUS,Z
            goto      t_end
            bsf       RA4,4
            bcf       INTCON,T0IE
t_end       return
            end


Programı tekrar yükledim uzun zamandır uğraşıyorum ama hala yanlışımı göremedim bir başkasının bakmasında da fayda olduğunu düşünüyorum.Rica etsem nerede hata yaptığımı söyleyebilir misiniz.

Andromeda

kitaptaki devre ve programlar çalışır ...
bence gerçek bir devrede deneyin..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

jimraynor

Proteusta özellikle

btfss     INTCON,RBIF

gibi IF bitlerini kontrol eden komutlar çalışmıyor. TMR0IF, INTIF, vb. hiç birinin çalıştığını görmedim. En güzeli direk pic üzerinde çalışmaları yapmak.

sorridente

Teşekkür ederim jimraynor hemen board üzerinde denemeye başlayacağım.

sorridente

İyi akşamlar,devreyi board üzerine kurmaya başladım fakat malzeme eksiğim var 74c922'yi hiç bir yerde bulamıyorum istanbulda karaköye sordum, etrafımdaki elektronikçilere sordum bulamadım internetten araştırdım birşey çıkmadı acaba nasıl tedarik edebilirim yardımcı olabilir misiniz

jimraynor

zamanında araştırmıştım. Çok pahadıydı. Zaten gereksiz bir entegre. Kitabın başka bir bölümünde PIC ile taramalı klavye kullanımı anlatılmış, ordaki kodları yapmak istediğiniz uygulamaya entegre ederek işi çözebilirsiniz.

Maxim

Alıntı yapılan: sorridente - 03 Mayıs 2011, 21:11:35
İyi akşamlar,devreyi board üzerine kurmaya başladım fakat malzeme eksiğim var 74c922'yi hiç bir yerde bulamıyorum istanbulda karaköye sordum, etrafımdaki elektronikçilere sordum bulamadım internetten araştırdım birşey çıkmadı acaba nasıl tedarik edebilirim yardımcı olabilir misiniz

http://www.direnc.net/main/74c922_dip16-997-259-401.html

muratyamak10

ben yaptım saat vede ileri sayıcı geri sayıcı kodunu veriyim arakadaşlar
ayrıca proteustaki transistörleri iptal edin direk bağlayın displayleri
           title        "upcount.asm Klavyeden girilen değere kadar artan sayıcıi"
                   list         p=16f84A
                   radix        hex
                   #include     "p16f84A.inc"
                   __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
i                  equ          0x0C
_status            equ          0x0D
_w                 equ          0x0E
sayi               equ          0x10
sayi1              equ          0x14
sn                 equ          0x1C
count              equ          0x1D
int2               equ          0x1E
tus                equ          0x1F
RA5                equ          0x1B
                   org          0x00
                   goto         basla
                   org          0x04
                   goto         interrupt
basla
                   clrwdt
                   call         initial
                   call         clear
tekrar             call         display
                   goto         tekrar
initial
                   bsf          STATUS,RP0
                   movlw        0xF0
                   movwf        TRISB
                   movlw        0x00
                   movwf        TRISA
                   movlw        b'10001000'
                   movwf        INTCON
                   movlw        b'10000100'
                   movwf        OPTION_REG
                   bcf          STATUS,RP0
                   clrf         PORTA
                   return
clear
                   movlw        sayi
                   movwf        FSR
                   movlw        0x0F
                   movwf        i
sifir              clrf         INDF
                   incf         FSR
                   decfsz       i,F
                   goto         sifir
                   return
display
                   movlw        4
                   movwf        i
                   movlw        sayi
                   movwf        FSR
                   movlw        b'00000001'
                   movwf        PORTB
tara               movf         INDF,W
                   iorwf        RA5,W
                   movwf        PORTA
                   call         timer_low
                   incf         FSR
                   bcf          STATUS,C
                   rlf          PORTB,F
                   decfsz       i,F
                   goto         tara
                   return
timer_low
                   movlw        0xFF
                   movwf        count
next               decfsz       count,F
                   goto         next
                   return
interrupt
                   movwf        _w
                   movf         STATUS,W
                   movwf        _status
                   btfss        INTCON,RBIF
                   goto         $+3
                   call         klavye_interrupt
                   goto         int_son
                   btfsc        INTCON,T0IF
                   call         timer_interrupt
int_son            movf         _status,W
                   movwf        STATUS
                   movf         _w,W
                   retfie
timer_interrupt
                   bcf          INTCON,T0IF
                   incf         sn
                   movlw        .125
                   subwf        sn,W
                   btfss        STATUS,Z
                   goto         tintson
                   clrf         sn
                   incf         sayi
                   call         test_10
                   call         test_xxxx
tintson            return
klavye_interrupt
                   bcf          INTCON,RBIF
                   bcf          INTCON,T0IF
                   bcf          RA5,4
                   incf         int2
                   btfsc        int2,1
                   goto         kly_cik
                   swapf        PORTB,W
                   andlw        0x0F
                   sublw        0x0F
                   btfsc        STATUS,Z
                   goto         kly_son
                   bcf          INTCON,T0IE
                   swapf        PORTB,W
                   andlw        0x0F
                   movwf        tus
                   movf         tus,W
                   sublw        0x0A
                   btfss        STATUS,Z
                   goto         rakam
                   movf         sayi,W
                   movwf        sayi1
                   movf         sayi+1,W
                   movwf        sayi1+1
                   movf         sayi+2,W
                   movwf        sayi1+2
                   movf         sayi+3,W
                   movwf        sayi1+3
                   clrf         sayi
                   clrf         sayi+1
                   clrf         sayi+2
                   clrf         sayi+3
                   clrf         sn
                   bsf          INTCON,T0IE
                   goto         kly_son
rakam              movf         sayi+2,W
                   movwf        sayi+3
                   movf         sayi+1,W
                   movwf        sayi+2
                   movf         sayi,W
                   movwf        sayi+1
                   movf         tus,W
                   movwf        sayi
                   goto         $+2
kly_cik            clrf         int2
kly_son            return
test_10
                   movlw        .10
                   subwf        sayi,W
                   btfss        STATUS,Z
                   goto         t10_end
                   clrf         sayi
                   incf         sayi+1
                   movlw        .10
                   subwf        sayi+1,W
                   btfss        STATUS,Z
                   goto         t10_end
                   clrf         sayi+1
                   incf         sayi+2
                   movlw        .10
                   subwf        sayi+2,W
                   btfss        STATUS,Z
                   goto         t10_end
                   clrf         sayi+2
                   incf         sayi+3
                   movlw        .10
                   subwf        sayi+3,W
                   btfss        STATUS,Z
                   goto         t10_end
                   clrf         sayi+3
                   clrf         sayi
t10_end            return
test_xxxx
                   movf         sayi,W
                   subwf        sayi1,W
                   btfss        STATUS,Z
                   goto         t_end
                   movf         sayi+1,W
                   subwf        sayi1+1,W
                   btfss        STATUS,Z
                   goto         t_end
                   movf         sayi+2,W
                   subwf        sayi1+2,W
                   btfss        STATUS,Z
                   goto         t_end
                   movf         sayi+3,W
                   subwf        sayi1+3,W
                   btfss        STATUS,Z
                   goto         t_end
                   bsf          RA5,4
                   bcf          INTCON,T0IE
t_end              return
                   end