Şimdi Ara

pıc16f877 ile butonlu 0-99 sayıcı assembly buton programı sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
676
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • merhaba arkadaşlar pic16f877 de başlat durdur butonlu 0-99 sayıcı yapmak istiyorum. Öncelikle buton eklemeden sayıcı programını yazdım ve 0-99 arası sayıp başa dönüyor. Buraya kadar sorun yok. Buton eklemek istedim fakat bir türlü başaramadım. Kesmelerle falan yapılıyormuş araştırdım fakat kesmeleri de pek anlayamadım. Buton ekleme olayını nasıl yapabilirim. Butona bastığžımda sayma başlayacak atıyorum 11 de durdur butonuna bastığžımızda sayma duracak. Başlat butonuna tekrar bastığžımızda ise 11 den itibaren saymaya devam edecek. gerekli buton kodlarını ekleyip düzeltirseniz çok memnun olurum ilginiz için çok teşekkür ederim.
    LIST P=16F877A  
    INCLUDE "P16F877A.INC"

    SAYAC1 EQU H'20'
    SAYAC2 EQU H'21'

    ORG 0x00
    Goto ANA
    ANA
    BSF STATUS,5
    MOVLW b'11111111'
    MOVWF TRISB
    CLRF TRISD
    CLRF TRISC
    BCF STATUS,5
    CLRF PORTD
    CLRF PORTC

    MOVLW H'FC' ;7SEGMENT = 0
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'60' ;7SEGMENT = 1
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'DA' ;7SEGMENT = 2
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'F2' ;7SEGMENT = 3
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'66' ;7SEGMENT = 4
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'B6' ;7SEGMENT = 5
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'BE' ;7SEGMENT = 6
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'E0' ;7SEGMENT = 7
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'FE' ;7SEGMENT = 8
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'F6' ;7SEGMENT = 9
    MOVWF PORTC
    CALL SAYMA
    CLRF PORTD
    CLRF PORTC
    GOTO ANA

    SAYMA ;PORTD'YI SAYAN ALT PROGRAM
    MOVLW H'FC' ;7SEGMENT = 0
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'60' ;7SEGMENT = 1
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'DA' ;7SEGMENT = 2
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'F2' ;7SEGMENT = 3
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'66' ;7SEGMENT = 4
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'B6' ;7SEGMENT = 5
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'BE' ;7SEGMENT = 6
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'E0' ;7SEGMENT = 7
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'FE' ;7SEGMENT = 8
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'F6' ;7SEGMENT = 9
    MOVWF PORTD
    CALL GECIKME
    RETURN

    GECIKME
    MOVLW H'FF'
    MOVWF SAYAC1
    DONGU1
    MOVLW H'FF'
    MOVWF SAYAC2
    DONGU2
    DECFSZ SAYAC2,F
    GOTO DONGU2
    DECFSZ SAYAC1,F
    GOTO DONGU1
    RETURN

    END

     pıc16f877 ile butonlu 0-99 sayıcı assembly buton programı sorunu







  •  

    LIST P=16F877A
    INCLUDE "P16F877A.INC"

    SAYAC1 EQU H'20'
    SAYAC2 EQU H'21'
    ONES EQU H'22'
    TENS EQU H'23'

    ORG 0x00
    nop
    Goto ANA



    ANA
    BSF STATUS,RP0
    MOVLW b'11111111'
    MOVWF TRISB
    CLRF TRISD
    CLRF TRISC
    BCF STATUS,RP0
    CLRF PORTD
    CLRF PORTC

    loop
    BTFSS PORTB,0
    goto loop





    start
    MOVLW H'FC' ;7SEGMENT = 0
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'60' ;7SEGMENT = 1
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'DA' ;7SEGMENT = 2
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'F2' ;7SEGMENT = 3
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'66' ;7SEGMENT = 4
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'B6' ;7SEGMENT = 5
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'BE' ;7SEGMENT = 6
    MOVWF PORTC

    CALL SAYMA
    MOVLW H'E0' ;7SEGMENT = 7
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'FE' ;7SEGMENT = 8
    MOVWF PORTC
    MOVWF TENS

    CALL SAYMA
    MOVLW H'F6' ;7SEGMENT = 9
    MOVWF PORTC
    MOVWF TENS
    CALL SAYMA
    CLRF PORTD
    CLRF PORTC
    GOTO ANA

    SAYMA ;PORTD'YI SAYAN ALT PROGRAM
    MOVLW H'FC' ;7SEGMENT = 0
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'60' ;7SEGMENT = 1
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'DA' ;7SEGMENT = 2
    MOVWF PORTD
    CALL GECIKME

    MOVLW H'F2' ;7SEGMENT = 3
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'66' ;7SEGMENT = 4
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'B6' ;7SEGMENT = 5
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'BE' ;7SEGMENT = 6
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'E0' ;7SEGMENT = 7
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'FE' ;7SEGMENT = 8
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME

    MOVLW H'F6' ;7SEGMENT = 9
    MOVWF PORTD
    MOVWF ONES
    CALL GECIKME
    RETURN

    GECIKME
    MOVLW H'FF'
    MOVWF SAYAC1
    DONGU1
    MOVLW H'FF'
    MOVWF SAYAC2
    DONGU2
    BTFSC PORTB,1
    call loop2
    DECFSZ SAYAC2,F
    GOTO DONGU2
    DECFSZ SAYAC1,F
    GOTO DONGU1
    RETURN

    loop2
    MOVFW ONES
    MOVWF PORTD
    MOVFW TENS
    MOVWF PORTC
    BTFSC PORTB,0
    return
    goto loop2

    END




    İnterrupt kullanmadan yukarıdaki şekilde yapabilirsin.




  • teşekkür ederim gabba kardeşim ilgin uğraşın için çok teşekkür ederim kodları tekrar denedim başlatma ve durdurma algoritmasi çok güzel ve mantıklı olmuş fakat isisde simüle ettiğimde başlat tuşuna bastığımda başlıyor durdurma butonuna bastığımda durdurmuyor ve sayma işlemi yavaşlıyor bunun önüne nasıl geçebilirim
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.