16F88 eeprom problemi

Başlatan greatgonzo, 23 Haziran 2012, 15:47:10

greatgonzo

16f88 in hafızasına bir şeyler yazmaya çalışıyorum. Ama ısrarla hep aynı sonucu alıyorum. Bu durumda beni düşündürüyor; acaba neyi gayet düzgün biçimde yanlış yapıyorum ? Pause surelerini dahi bol keseden veriyorum. Ama sanki high byteı sanki yazmıyormuş gibi. Sadece basit bir yazma okuma çalışması olacak aslında. 2X16 ekran görüntüsünüde ekliyorum. İlgilenen arkadaşlara şimdiden teşekkür ederim.

İyi çalışmalar...


READ 0,PIN
PAUSE 10
IF PIN=255 THEN
PIN=9999
WRITE 0,PIN
PAUSE 100
ENDIF

READ 0,PIN.LowByte
PAUSE 100
READ 1,PIN.HighByte
PAUSE 100
LCDOUT $FE,1,dec PIN
LCDOUT $FE,$C0,"LOW:",dec PIN.LowByte,"HIGH:",dec pin.HighByte
PAUSE 5000

ete

Eprom 8 bitliktir. Yazarken 8 bit ( byte) olarak yazılır. Okunurkende byte olarak okunur.  Okunurken bir gecikme verilmez. Gecikme yazarken verilir oda 10 ms dir fazlası gereksizdir.
Senin sorunun yazmada. Yazarken okumada oldugu gibi bye0 ve byte1 olarak yada lowbyte ve high byte olarak yazdır.
Ete

greatgonzo

Ete hocam yardımınız için teşekkür ederim. Çok değişik ve saçma olanlarda dahil pek çok kombinasyon denedim ama sorun sanki if döngüsünde. Bende buna bir anlam veremedim. İf döngüsü kalkınca yani değişkene direkt değer verince her şekilde yazıyor ve sorunsuz okunuyor ama  if döngüsü girince sanki bir byte yazmıyor gibi.

İyi çalışmalar....

greatgonzo

KONT var word
BILGI VAR WORD
MST VAR WORD


LCDOUT $FE,1
pause 100

AYAR:
read 0,MST
IF MST=255 THEN
GOTO YAZ
ENDIF

YAZ:
MST=20000
WRITE 0,MST.LOWBYTE
WRITE 1,MST.highbyte
PAUSE 10

READ 0,BILGI.LowByte
READ 1,BILGI.HighByte
LCDOUT $FE,1,dec mst," ",DEC mst.LOWBYTE," ",DEC mst.HIGHBYTE
LCDOUT $FE,$C0,dec BILGI.LOWBYTE," ",dec bilgi.highbyte," ",dec bilgi
pause 5000
END


Şeklinde yazınca kod çalıştı. Eeproma yazıp okuyor. ama yaz etiketi kaldırılıp MST=20000 ataması if döngüsünde olunca tüm değerler 0 çıkıyor. Hiç tecrübe ettinizmi bilmiyorum hocam ama bana İsis in hatası gibi göründü.

İyi çalışmalar...

ete

#4
Sebebi basit.
MST Word tipinde bir değişken 2 adet byte değişkeninden meydana geliyor. MST.Byte0 ve MST.Byte1
Sen bunu tek seferde okumaya çalışıyorsun ,
READ 0,mst
peki ne okuyor acaba oradan? Tabiiki yalnızca sıfır nolu adresi okuyarak orada ne varsa MST değişkenine aktarılmış oluyor.
Hemen belirteyim YAZ etiketindekileri if döngüsüne aldım sonuç değişmedi. Daha güzel çalıştı bence.
Zira senin kodlarda yine sıralama hatası var.
MST değeri ne olursa olsun program YAZ etiketineden geçmek zorunda halbuki yalnızca MST=255 iken YAZ etiketine uğraması gerekmezmi.
Her neyse, programı aşağıdaki şekilde dene istersen.

LCDOUT $FE,1
pause 300

AYAR:
read 0,MST
IF MST=255 THEN
MSt=20000
WRITE 0,MST.LOWBYTE
WRITE 1,MST.highbyte
PAUSE 10
ENDIF


READ 0,BILGI.LowByte
READ 1,BILGI.HighByte
LCDOUT $FE,1,dec mst," ",DEC mst.LOWBYTE," ",DEC mst.HIGHBYTE
LCDOUT $FE,$C0,dec BILGI.LOWBYTE," ",dec bilgi.highbyte," ",dec bilgi
pause 5000
END


Yeniden sıfır eprom ile deneme yapmak istersen programın başına şu satırı ilave et.
DATA @0,255,255
Bu epromun ilk iki adresine direk 255 değerini, yazdıracaktır. Ama o satırı orada unutma sonra silmen gerek yoksa her seferinde program çalıştıkça aynı değeri eproma yazar.

Doğru kod şöyle olmalı idi.
Read 0,MST.byte0,MST.Byte1
IF MST=65535 THEN
   MST=20000
   WRITE 0,MST,byte0
   WRITE 1,MST.BYTE1
   PAUSE 10
ENDIF


Ete

greatgonzo

  Gerçekten çok önemli bir noktayı, gafletle atlamışım. Ayrıca farkettim ben şifre için 2 byte ayırdım ama kontrol ederken 1 bayt yeterli olur diye düşünüyordum. Halbuki 2 baytsa şifre, sıhatli olan her ikisinide kontrol etmek. Nihayetinde tüm olasılıkları örtmek gerekir diye düşünüyorum :-)  Hocam çok teşekkür ederim yardımlarınız için, Allah razı olsun .

İyi çalışmalar...

Powered by EzPortal