WORD tipi değişkeni eeproma yazma okuma

Başlatan ~ENES~, 22 Şubat 2014, 17:11:58

~ENES~

Degerli ete hocam eeprom okuma mantıgını anlamak için basit bir devre tasarladım fakat ufak bir problem çıktı  porgramın basında eeproma yazdıgım verıyı okuyup lcdye  basınca değerde sapmalar oluyo (sapma derken mesela verdiğim değer 512 ise ekranda 514 çıkıyo) sizce bunun sebebi nedir dosyalar ektedir...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

Hattuşa

READ 0,A.LOWBYTE
READ 0,A.HIGHBYTE


özür dileyerek müdahil oluyorum ama ustam ewrite ile yazdığınız nokta ile okuduğunuz nokta farklı,
yani
A highbyte 1. e yazmışsınız ama okurken 0 dan okumuşsunuz

bundan kaynaklı olduğunu düşünüyorum

~ENES~

Alıntı yapılan: pro-TR - 22 Şubat 2014, 17:20:01
READ 0,A.LOWBYTE
READ 0,A.HIGHBYTE


özür dileyerek müdahil oluyorum ama ustam ewrite ile yazdığınız nokta ile okuduğunuz nokta farklı,
yani
A highbyte 1. e yazmışsınız ama okurken 0 dan okumuşsunuz

bundan kaynaklı olduğunu düşünüyorum




Dostum sorun ordaymış gerçekten ağır bir program yazdıktan sonra bunu yazdım gözden kaçmış çok teşekkür ederim ...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

MS_59

Yazma kısmındada hata var
WRITE 0,A.HIGHBYTE
WRITE 1,A.LOWBYTE

diye yazılmış doğrusu
WRITE 0,A.LOWBYTE
WRITE 1,A.HIGHBYTE

olmalı
mehmet

Hattuşa

proteus ustam adresleme önemli değil yani ister high i ister low olani önce veya sonra yazalım farketmez yalnız enes usta yazdığı adresten okuma yapmadığı için hatalı sonuç alıyor,

yani

WRITE 0,A.HIGHBYTE
WRITE 1,A.LOWBYTE

burada 0. ve 1. adresi kullanmış ama
okurken her ikisinide 0. adresten okumuş

MS_59

tabiki önemli değil farkındayım sıralı olursa daha iyi olur sonuçta herkesin alışkanlığı farklı
mehmet

~ENES~

hocam konu biraz eskimiş ama uygulamada takıldığım bir nokta var örneğin

SAYI adında bir değişkenimiz var ve biz buna SAYI=300 diye değer atadık ve WRITE 0,SAYI komutuyla eeproma yazdık okurkende

READ 0,SAYI.LOWBYTE
READ 1,SAYI.HIGHBYTE

OLARAK okuduk ama bu iki byte'ı toplayıp sayı değişkenine mi atmamız gerekiyor ki 300 değerini okuyalım ...YADA farklı bir yöntemi mi var ? bu sekilde yapıyorum yanllış bır değer okuyor..
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

8 bitlik sistemler 16 bitlik değeri hafızada şöyle tutar. Önce high byte değeri sonra low byte değeri.
Sayıya hex formatında baktığınız zaman ($A436) solda highbyte sağda ise lowbyte değerini görürsünüz, Eproma yazarken okumayıda aynı sırada yapmak şartı ilee yer çok önemli değil ama eliniz standarda alışsın diye siz daima öne highbyte sonra lowbyte şeklinde yazın. Yukarıdaki örneği esas alırsak, write 10, $A4,$36 şeklinde yazılması gerekir.

Bazı derleyiciler word değişkenini tek komutla eproma yazabilir ama siz yinede olması gereke formatı kullanın. SAYI=1485 ise bunu Eproma yazarken,
Write 10, SAYI.BYTE1, SAYI.BYTE0:Pause 10. Şeklinde yazın.
Okurken, READ 10, SAYI.BYTE1,SAYI.BYTE0 şeklinde okuduğunuz zaman otomatikman SAYI=1485 olacaktır. Ayrıca bir işlem yapmanız gerekmiyor.

Ete

Hattuşa

Ete hocam byte 2 degeri nasil word yapabiliriz ornegin basit bir ortalama filtresi yaptik diyelim ornek su sekilde

Adc= adin0
A=((A *99) +Adc.byte0)
SonucAdc =Adc.byte1 +A.byte0


Yani Adc degiskeninin high byte ile elde ettigim A degerinin lowbyteni birlestirip yeni bir word tipi degisken elde etmek idtiyorum

ete

Adc= adin0
A=((A *99) +Adc.byte0)
SonucADC.Byte0=A.Byte0
SonucADC.Byte1=ADC.Byte1
şeklinde yapılmalıdır.

yada
Adc= adin0
A=((A *99) +Adc.byte0)
SonucAdc =Adc.byte1*256 +A.byte0 şeklinde olabilir.

Ete

Powered by EzPortal