0-99 sayıcı hakkında yardım

Başlatan selimcan_19, 14 Aralık 2008, 23:29:59

selimcan_19

;========================= 0-99 sayici ===================================

      LIST P=16F84
      INCLUDE "P16F84.INC"

SAY EQU 11H ; counter to turn on the pins on PortB
D0 EQU 12H ; delay counter 0
D1 EQU 13H ; delay counter 1
D2 EQU 14H ; delay counter 2
TEMP EQU 15H ; Geçici register
GOTO START
START
   BSF STATUS,5
   CLRF TRISB
   MOVLW h'FF'
   MOVWF TRISA
   BCF STATUS,5
TOP1
   MOVLW 00H
   MOVWF SAY
TOP2
   MOVF SAY,W
   MOVWF PORTB
Y_TEST
    BTFSC PORTA,0
    GOTO A_TEST
    CALL Y_TUS
A_TEST
    BTFSC PORTA,1
    GOTO Y_TEST
    CALL A_TUS
    GOTO Y_TEST
;*********************************** ;YUKARI SAY TUSU ;***********************************
Y_TUS
    BTFSC PORTA,0
    GOTO Y_TUS
    INCF SAY,1
    MOVF SAY,W
    ANDLW .15              burası ne demek
      SUBLW .10               burası ne demek
    BTFSS STATUS,2
    GOTO S_CIKIS
    MOVF SAY,W
    ANDLW H'F0'               burası ne demek
    ADDLW .16                  burası ne demek
    MOVWF SAY
    ANDLW H'F0'               burası ne demek
    SUBLW H'A0'               burası ne demek
    BTFSS STATUS,2
    GOTO S_CIKIS
    MOVLW 00H
    MOVWF SAY
S_CIKIS
    MOVF SAY,W
    MOVWF PORTB
    CALL DELAY
    RETURN
;*********************************** ;ASAGI SAY TUSU  ;***********************************
A_TUS
    BTFSC PORTA,1
    GOTO A_TUS
    DECF SAY,1
    MOVF SAY,W
    ANDLW .15                         burası ne demek
    SUBLW .15                         burası ne demek
    BTFSS STATUS,2
    GOTO DEVAM
    MOVF SAY,W
    ANDLW H'F9'                          burası ne demek
    MOVWF SAY
    ANDLW H'F0'                         burası ne demek
    SUBLW H'F0'                          burası ne demek
    BTFSS STATUS,2
    GOTO DEVAM
    MOVLW 99H
    MOVWF SAY
DEVAM
    MOVF SAY,W
    MOVWF PORTB
    CALL DELAY
    RETURN
;*********************************** ; DELAY  ;***********************************
DELAY
    MOVLW h'30'
    MOVWF D0
ZD0
    MOVLW h'30'
    MOVWF D1
ZD1
   MOVLW h'30'
   MOVWF D2
ZD2
   DECFSZ D2,F
   GOTO ZD2
   DECFSZ D1,F
   GOTO ZD1
   DECFSZ D0,F
   GOTO ZD0
   RETLW 00
   END


arkadaşlar ben bu kod dizinini bir yerden aldım da a_tus ve y_tus etiketlerinin altında yer alan komut dizilerinde .15 .10 .16 şeklinde addlw komutu ve sublw komutları kullanımış. burada '.' işaretinin anlamı nedir yardımcı olabilirmisiniz ? birde burası ne demek diye belirttiğim satıtda kullanılan komutlar ne anlama gelmektedir.

iyi akşamlar veyahut iyi geceler herkese kolay gelsin

Tagli

Sayıdan önce yazılan nokta sanırım sayının 10'luk tabanda olduğunu gösteriyor. Ben d'15' demeyi tercih ederdim, göze daha çok hitap ediyor. SUBLW komutu W'yi yanına yazdığın sayıdan çıkarır, ANDLW komutu da W ile komutun yanına yazdığın sayıyı AND'ler (mantıksal "ve" işlemini uygular). Gerçi programda ne işe yaradığını ilk bakışta ben de anlamadım. Zaten gerektiği şekilde açıklamaları yazılmamış bir assembly kodunu anlamak zordur.
Gökçe Tağlıoğlu

selimcan_19

MOVF SAY,W
ANDLW .15 burası ne demek
SUBLW .15 burası ne demek
BTFSS STATUS,2

YA BURADA ANLATILMAK İSTENEN NEDİR ACABA HANİ BU İŞLEM BCD SEVEN SEGMENTTE GÖSTERİLECEK YA SON DÖRT BİT d'09'OLDUMU BUNU d'10' ATARSIN 99 DAN SONRA 0 RA DÖNDÜRÜRSÜN .... aşağı sayıyor isen 0 dan sonra 99 a dondurursun nasıl yapılmış anlayamadım lütfen yardımcı olun çok ihtiyacım var şuanda  herkese kolay gelsin. iyi günler

HANGİSİ HANGİ KOMUT SATIRINDA ACABA

Tagli

Senin de ifade ettiğin gibi SAY değişkeni BCD olarak ifade edilmiş. Yani her 4 biti (ki bunlara nibble da denir) bir basamağı ifade ediyor. Ordaki arttırma ve azaltma kodlarının büyük bir bölümü arttırma ve azaltma işlemlerinden sonra elde edilen sayıyı BCD halinde tutabilmek için yazılmış, bunun için bir dizi işlem uygulanıyor. Ordaki komutları tek tek açıklamak pek mümkün değil. Ama deneme amaçlı olarak 49 sayısını (01001001 olarak yazılacaktır) 1 arttırmayı veya 40 sayısını bir azaltmayı deneyebilirsin (kod üzerinde adım adım takip ederek). O zaman olay aklında netleşecektir.

Bu arada, 18 serisi PIC'lerde toplama ve çıkarma işleminden sonra DAW komutu kullanılabilir. Bu komut W'deki sonucu (toplama ve çıkarmanın sonucunun W'de kaldığı varsayılarak) BCD kurallarına uyacak şekilde yeniden düzenler. Yani 18 serisi bir PIC'te yukarda vermiş olduğun kod bir miktar kısalacaktır.
Gökçe Tağlıoğlu

selimcan_19

çok sağolasın olayı çözmüş durumdayım ama bunu yazan her kimse çok farklı bir yol izlemiş ilk etapta anlamak ve çözmek oldukça zor ama biraz kafanı yorunca halledilmeyecek hiçbir durum yok.

iyi geceler