WORD tipi değişkeni Eproma yazma ve okuma..

Başlatan solidus, 22 Ağustos 2013, 19:01:26

solidus

Dim DUTY     As Byte
Dim FREKANS  As Word
.
.
DUTY=ERead 10:DelayMS 20
FREKANS=ERead 50:DelayMS 20
.
.
.
If KAYDET=0 Then
EWrite 10, [DUTY]:DelayMS 20
EWrite 50, [FREKANS]: DelayMS 20

16f877 işlemci ile yukarıdaki şekilde yazma ve okuma yapmak istiyorum.. ancak bu kodlarla duty değerini yazıp okumakta problem yaşamazken, frekans değerini okuma ve yazma yapamadım.. 1 haftadır neyi yanlış yaptığımı bulamadım. Bu konuda yardımlarınıza ihtiyacım var. Teşekkürler..
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

esensoy

proton+ bilmem ama word genelde byte in 2 katı olur, yani byte 8 bit ise word 16 bittir,
sanırım siz 8 bitlik yazma ve okuma komutlarıyla 16 bitlik değişken yazmaya ve okumaya çalışıyorsunuz,
büyük ihtimalle frekansın düşük 8 bitini eeprom alanına yazıp okuyorsunuz
En tehlikeli an "zafer" anıdır.

OG

FREKANS  değişkenin word olduğundan 2 byte yer kaplar,
50 adresine yaz dediğinde 50 ve 51 nolu adreslere yazar.
50'ye FREKANS.LowByte degerini
51'e FREKANS.HighByte degerini yazar

Okumada da
FREKANS=ERead 50
dediğinizde 50 den okuduğunu FREKANS.LowByte a yerleştirir, 51 den okuduğunu FREKANS.HighByte degerine yerleştirir.

Buraya kadar kodlarınızda problem yok.

Eğer ki 51 nolu adrese başka bir müdahale yapıyorsanız (başka değerin kaydı falan) o zaman FREKANS.HighByte değerini bozmuş olursunuz.

Yani
EWrite 51, [abc]  gibi bir komutunuz varsa FREKANS'ın alanına girip onu bozmuş olursunuz.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

solidus

#3
O halde okuma ve yazma ve sonuç için 2 sorunumuz var.. Birincisi;

FREKANS.LowByte=ERead 50:DelayMS 20
FREKANS.HighByte=ERead 51:DelayMS 200
.
.
.
If KAYDET=0 Then
EWrite 50, [FREKANS.LowByte]: DelayMS 20
EWrite 51, [FREKANS.HighByte]: DelayMS 20
Endif


şeklinde yazmak yeterli olacakmıdır ?

İkincisi Low ve High byte'ları okuduktan sonra bu bilgileri eproma yazılan bu değerleri nasıl görünür hale getirebilirim.. Daha açıkça sormak gerekirse bir hesaplama rutini var mıdır ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

OG

İf şartın ne içindir bilemem ama okuma ve yazmanda hata yok, ilk verdiğin şekilde de olabilir son verdiğin şekilde de olabilir.  Önemli olan 51 no ya başka birşey yazmaman.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Maxim

@solidus
hayır öyle yapmanıza gerek yok, kafanız karışmasın
sizin kod doğru, hata yok
fakat sadece şu : dan sonraki beklemeleri alt satıra alın belki onları görmüyor derleyici
* bu arada, okuma yaparken beklemeye gerek yok

şöyle bir deneyin

Dim DUTY     As Byte
Dim FREKANS  As Word

DUTY=ERead 10
FREKANS=ERead 50

If KAYDET=0 Then
EWrite 10, [DUTY]
DelayMS 10
EWrite 50, [FREKANS]
DelayMS 10


solidus

@Maxim,
frekans değişkeni word tipi olduğundan lowbyte ve high byte okunmalı ve yazılmalı değil mi ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

OG

DelayMS 10

Hatta buna bile gerek yok, proton onu hallediyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

homer380

word olduğu için 2'ye bölmeniz gerek. Ki bölünmüş daha sonra değer okuyup word cevirebilirsiniz. oda şöyle olur
Eread 50, [FREKANS.LowByte]: DelayMS 20
Eread 51, [FREKANS.HighByte]: DelayMS 20

frekans=(frekans.highbyte<<8)+frekans.lowbyte


OG

Proton bölme işlemini kendisi yapıyor. Yani en üstteki mesajdaki hali de doğru, bölerek yüklense de doğru.
Word değil Dword olsa da yapıyor. Gereken byte kadar ayırıp adresi 1 arttırarak yazar/okur.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

solidus

@ OG,
Hocam kafam karıştı.. küçücük bi örnek vermeniz mümkün müdür ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

homer380


solidus

Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

OG

Yazdıkların doğru,

DUTY=ERead 10
FREKANS=ERead 50
.
.
.

EWrite 10, [DUTY]
EWrite 50, [FREKANS]


Veya

FREKANS.LowByte=ERead 50
FREKANS.HighByte=ERead 51
.
.
.
EWrite 50, [FREKANS.LowByte]
EWrite 51, [FREKANS.HighByte]

Hepsi doğru.

Saç baş yolduran yerler saçma sapan basit şeyler,
Mesela satırı çok uzun tutmayın, satırdan sonra boşluklar bırakmayın, derleyici bazen oraları okuyamıyor.

@ETE hocanın yazdıklarını incelerken hep derdim, niye böyle dip dibe yazıyor, TAB falan kullanmıyor diye. Protonda benim başıma geldi, verilen boşluklar bazı zamanlarda derleyici tarafından okunamıyor olsa gerek hatalı sonuç verebiliyor.

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.