;========================= 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
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.
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
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.
ç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