bir kaç sorum var

Başlatan designer.21, 27 Aralık 2023, 23:49:26

designer.21

sizler için çok basit bir soru olacak ama ilk defa bir kod bloğunda denk geldiğim bu işaretin anlamını sormak istiyorum sizlere, ne anlama geldiğini bulamadım bir yerde.

değişik örneklerini aşağıda paylaşıyorum

GOTO $     ;sonsuz döngü

GOTO $+3

GOTO $-2


ayrıca bunlardan başka sormak istediğim bir konu daha var.

#DEFINE OUTFLAG FLAG,0
#DEFINE ONAYFLAG FLAG,1
#DEFINE SIGNFLAG FLAG,2

buradaki FLAG kavramı ne anlama geliyor. onu da açıklayabilirseniz çok sevinirim

alisumer

#1
$-2 komutu mevcut PC (program counter) sırasından iki sıra geri git demek bunu genellikle bir başlık kıllanmadığımızda örneğin BASLA: şeklinde dallanacağımız tanımlı bir program adresi yani sırası belirtmediğimiz yerlere gitmekte kullanırız define ile tanımladığımız terimler bizim istediğimiz daha sonra okumaka güçlük yaşamak istemediğimiz tanımlamalar için örneğin
    #DEFINE    SOL_LED    PORTA,4
    #DEFINE    SAG_LED    PORTA,5
    #DEFINE    SOL_CIK    PORTC,4
    #DEFINE    SAG_CIK    PORTC,3
    #DEFINE    OSC_8 
senin verdiğin örnekte ise FLAG isminde bir değişken tanımlanmış ve bu değişleknin 0 numaralı bitinin ismini OUTFLAG 1 numaralı biti ONAYFLAG ve ikiye de SIGNFLAG ismi verilmiş
böylelikle program içerisinde "bsf flag ,outflag" yazdığımızda flag isimli değikenin 0 numaralı biti açılacaktır çok gereklimi uzun kodlarda çok fazla değişken tanımladığımız kodlarda değişkenin yüklendiği görev ile ilgili bir isim vermek sonrasında düzenleme ve okuma için kolaylık sağlar,define yapmadan da sadece register adresi ile aynı işlemi yapabiliriz örneğin flag değişkeninnin adresi 0x20 ise "bsf 0x20,0 "yazarsak ta aynı işlemi yaparız okunurluluk bakımından farkı var sadece,Flag kavramı ise donanımsal değil de yazılım ile kendisi flag yani bayrak belirlemiş kendisine örneğin okuduğu bir değerin negatif olduğunu tespit ettiğinde singflag ismindeki bayrağı kaldırarak programın ilerleyen safhalarında bu bayrağa bakıp değerin negatif olduğunu anlayıp işlemini ona göre yapabilir tüm değeri kontrol etmektense daha kolay bir hatırlatıcı olur
Hep meraktan

alisumer

                CALL    EPROMYAZ
          DECFSZ    _TMP0            
          GOTO    $-2
          MOVF    ADR2    ,W
örnekte _TMP0 a verdiğimiz değer 0 olana kadar  Call epromyaz a dallanır
Hep meraktan

designer.21

alisumer hocam çok teşekkür ederim. Çok açıklayıcı oldu gerçekten. Ben oradaki FLAG ibaresini pic'in içerisindeki kaydedicilerden falan sanmıştım. Aklım almamıştı. Kendimizin tanımladığı bir değişkenden başka birşey değilmiş demek.

$ işareti de ilk defa karşıma çıktı. Onu öğrenmiş oldum sayenizde. Teşekkür ederim. İyi çalışmalar

designer.21

Merhabalar,
bu 2 kod bloğu arasında normalde bir fark olmaması lazım. $ işareti ile yapılan zaman dönügüsünü kullanmak istedim bir sonuç elde edemedim. ilk kod satırı ile yaptığım uygulama çalışıyor fakat bu alttaki 2. kod bloğunda ki uygulama çalışmıyor. hatamın nerede olduğu hakkında bilgisi olan varsa yardımcı olursa çok sevinirim


1.KOD BLOĞU (çalışan)
BASLA					
	BSF PORTB,0
	CALL UST_GECIKME
	BCF PORTB,0
	CALL ALT_GECIKME
	GOTO ILERI	


UST_GECIKME
	MOVLW 0X16		;D22
	MOVWF SAYAC1
UST_GECIKME1
	MOVLW 0X16 		;D22
	MOVWF SAYAC2
UST_GECIKME2
	DECFSZ SAYAC2,F
	GOTO UST_GECIKME2
	DECFSZ SAYAC1,F
	GOTO UST_GECIKME1
	RETURN

ALT_GECIKME
	MOVLW 0X3B		;D59
	MOVWF SAYAC3
ALT_GECIKME1
	MOVLW 0X3B
	MOVWF SAYAC4
ALT_GECIKME2
	DECFSZ SAYAC4,F
	GOTO ALT_GECIKME2
	DECFSZ SAYAC3,F
	GOTO ALT_GECIKME1
	RETURN


2. KOD BLOĞU (çalışmayan)
BASLA					
	BSF PORTB,0
	CALL UST_GECIKME
	BCF PORTB,0
	CALL ALT_GECIKME
	GOTO ILERI	


UST_GECIKME
	MOVLW 0X16		;D22
	MOVWF SAYAC1
	MOVLW 0X16 		;D22
	MOVWF SAYAC2
UST_GECIKME2
	DECFSZ SAYAC1,F
	GOTO $+2
	DECFSZ SAYAC2,F
	GOTO UST_GECIKME2
	GOTO $+1
	RETURN

ALT_GECIKME
	MOVLW 0X3B		;D59
	MOVWF SAYAC3
	MOVLW 0X3B
	MOVWF SAYAC4
ALT_GECIKME2
	DECFSZ SAYAC3,F
	GOTO $+2
	DECFSZ SAYAC4,F
	GOTO ALT_GECIKME2
	GOTO $+1
	RETURN

alisumer

UST_GECIKME2:
	DECFSZ SAYAC2,F
	GOTO UST_GECIKME2       ;burada 2 geri gitmişsiniz   
	DECFSZ SAYAC1,F
	GOTO UST_GECIKME1
	RETURN
;//////////////////////          iki kodu aynı yapmaya çalışıyorsanız
UST_GECIKME2:
	DECFSZ SAYAC1,F
	GOTO $+2                 ;burada 2 ileri gitmişsiniz üstteki gibi olacaksa gereken $-1
	DECFSZ SAYAC2,F
	GOTO UST_GECIKME2        ; üstteki kodda burası yok neden eklediğini 
	GOTO $+1                 ; buradaki kodu yazmanızın bir anlamı da yok zaten bir altta geçecek o olmasada
	RETURN
sanırım yapmak istediğin
gecikme:
       movlw 20
       movwf sayac1
       decfsz sayac1 ,f    ;
       goto $-1            ;sayac1 0 olana kadar bit üste gider
       decfsz sayac2 ,f    ;
       goto $-5            ;sayac2 0 olana kadar sayac1 in değerinin verildiği bölüme yani en başa döner
       return              ;
;böylece sayac1= 20 ve sayac2=3 olsun bunun anlamı 3x20 say demek tabi komut gecikmelerini de hesap edersen çok hassas bir zaman tutabilirsin
Hep meraktan

alisumer

bunun için PIC delay adlı programı kullanman daha mantıklı zamanı hesaplamak zorunda kalmazssın 20 ms yazdığında sana kodu çıkarır uğraşmazssın 320volt sitesinde mevcuz bir kaç değişik versiyonu var
Hep meraktan

designer.21

hocam benim bu zamanlama yöntemiyle ilgili bir problemim yok normalde. asm diline yeni başladım sayılır. pratik amacıyla bu zamanlama yöntemiyle "tek düngü", "çift döngü", "3 döngülü" onlarca zamanlama yaptım. hepsi bire bir tuttu.
ama $ işaretli kavramı yeni gördüm ve bu defa da bununla bir kod kullanayım diye düşündüm. ve dediğiniz gibi yaptım şöyle ki;
$+2 => 2 alt satır
$+1 => 1 alt satır
$-2 => 2 üst satır vs. vs.

bu mantığa göre yaptığım kodlamada bir hata görünmüyor. sizin de belirttiğiniz gibi , sorun teşkil etmeyecek fazladan 1,2 uzatma var. onu da düzelttim hatta sizin de bahsettiğiniz Delay Generator'ün uygulamayı da açtım orada çıkan kodu da kullandım o da çalıştırmadı.

Delay Code Generator'ün verdiği kod
DELAY
     MOVLW 0X49
     MOVWF DCounter1
     MOVLW 0X02
     MOVWF DCounter2
LOOP
     DECFSZ DCounter1, 1
     GOTO LOOP
     DECFSZ DCounter2, 1
     GOTO LOOP
     NOP
     NOP
RETURN

neyse biraz daha kafa yoralım illa bir yerlerden çıkar : )



Powered by EzPortal