P16F877'nin eepromuna atanan değeri okumak

Başlatan teketek, 29 Mayıs 2006, 19:20:38

teketek

merhaba arkadaşlar;

pbp ile p16f877 nin eepromuna veri kaydetip sonra bu veriye göre bir işlem yaptırmak istiyorum.ancak verileri kayıt edip eeproma yazdırdıktan sonra bunları okumak istediğimde bu veri değişkenine kaç yazarsam yazayım desimal 255 ya da hex okutursam FF görüyorum.zaten ikiside aynı sayılır.yazdığım/atadığım değeri bi türlü okuyamadım.

P1KAYIT: ' burda verileri eeproma yazdırıyorum
    WRITE ISI1, Y_ISI : pause 20 : WRITE ZMN1, Y_ZMN 
    PAUSE 20     
    GOTO MENU1_2 
    .
    .
    .
P1CALIS:
    POZ=14
    READ ISI1,ISI   'burda eeproma yazılmış olan verileri çağırıyorum.
    pause 20
    READ ZMN1, ZMN
    PAUSE 20
    LCDOUT $FE,1,"PROGRAM 1"
    LCDOUT $FE,$C0, "ISI:", dec3 ISI :LCDOUT $FE,$C9,"ZMN:", dec3 ZMN
    GOTO BTX
 

bu arada

ISI       VAR WORD
ZMN     VAR BYTE
ZMN1   VAR BYTE
ISI1     VAR WORD

olarak tanımlı.

Sizce nerde hata yapıyorum ??
Bilgi fark yaratır..

OG

read x,ISI

olmalı. x= eeprom adresi.

Yazarken de
data @x,ISI
veya
write x, ISI

Genel kural bu , adreslerden biri word görünüyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mhk

birde ;
ISI1 VAR WORD  bunu
ISI1 VAR byte     yapmayı dene. Eğer pic data eepromu 256 byte olduğu için değişken olarak byte kullanılmalı.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

OG

Benim dikkatimi çekip de düzeltirken MHK üstad imdada yetişmiş.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Arkadaşlarım gerekeni açıkladılar. Ben yalnızca word değişkenini eproma nasıl yazacağını açıklayayım. Anlayacağın üzere eeprom 8 bitlik ve 16 bitlik değişkeni bir seferde eeproma yazamazsın. Bunun yolu Word değişkenini parçalı olarak eeproma yazmak. Kaide ise şöyle;

Write adres , ISI1.byte1
write ,adres+1 , ISI1,byte0

Okurken ise;

Read adres, ISI1.byte1
Read adres+1 , ISI1.byte0

şeklinde okuyabilirsin.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

teketek

üstadlar ilginiz için sağol un.
ISI1 VAR WORD yerine ISI1 VAR BYTE yaptım ve adres için eepromu sayısal olarak adresledim.

P1KAYIT:
    WRITE 1, Y_ISI : pause 20 : WRITE 2, Y_ZMN 
    PAUSE 20     
    GOTO MENU1_2 
    .
    .
    .
P1CALIS:
    POZ=14
    READ 1,ISI1 
    pause 20
    READ 2, ZMN1
    PAUSE 20
    LCDOUT $FE,1,"PROGRAM 1"
    LCDOUT $FE,$C0, "ISI:", dec3 ISI1 :LCDOUT $FE,$C9,"ZMN:", dec3 ZMN1
    GOTO BTX
   .
   .
   .


burda eeproma yüklediğim değerler yerine (dec3) 255 ya da (hex3) 0FF görmeye devam ediyorum:(
Bilgi fark yaratır..

teketek

Aslında en iyisi projeyi görmeniz galiba.

Dosya:

http://rapidshare.de/files/21712056/eeprom.rar.html


"Menü=> 1)Program => 1_2)Prog. Olstur" burda bi deger girip, girilen değeri ,

"Menü=> 1)Program => 1_1) Program Sec" burdan görebilmem lazım.Eeprom komutlarında bi yanlışlık yapmadım gibi geliyor bana.ü
Bilgi fark yaratır..

ete

Bana kalırsa senin programda kayıt (eproma yazma) bölümüne gidilemiyor.
Programını inceledim. Tabiiki öyle 5-10 dakikada programın mantığına erişilemiyor. Ancak aklıma gelen en kestirme testi yaptım. Kayıt blümüne şu komutu koydum; (hemen write komutunun altındaki satıra ilavedir)
lcdout $fe,1," yazdı":pause 5000

bu komut ile şayet eproma bir şey yazılırsa ve bende ekranda bu ikazı görürsem eproma bilgi yazıldığını anlayacak idim. Ancak bir türlü bu ikazı göremedim. Normalde değer girişi yapıyorum. Menü tuşu ile çıkıyorum ancak bu ikaz glemiyor. Buradan eeproma bir şey yazılmadığı fikrine vardım. İstersen sende dene.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ete

Sonunda yadırabildim. Nasıl yaptığımı bilmiyorum ama ekranda yazdı ikazını gördüm. Programı durdurdum. ve tekrar çalıştırdım. Program seç menüsünden eproma yadırdığım bilgileri geri okudum. Programın yazdığın hali ile çalışıyor. Dediğim gibi sorun yazdırma bölümüne göndermede. Çok zor gidiyor.
Programında şöyle bir parça var;

PROGOLUS:
    POZ=21
    IF POZ=21 THEN PO1       'PO1 İÇİN
BTY:IF POZ=22 OR POZ=23 AND SOL=0 THEN MENU1_2
    IF POZ=22 AND ASAGI=0 THEN PO2
    IF POZ=22 AND SEC=0 THEN P1OL

Bu bir alt program. Bu bölüme gelince Poz=21 demişsin hemen altınada
if poz=21 then PO1 demişsin.
Bu durumda program alttaki satırlara ebediyyen gitmeyecektir. Bunlar bana göre hata. Şayet GOTO BTY diyorsan sorun yok. Ama GOTO PROGOLUS diyorsan problem var demektir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

teketek

Ete hocam;
LCDOUT $FE,1, "YAZDI" : PAUSE 5000


Bu komutu bende ekledim ve menü tuşuna bastığımda göremedim. Yazdırmadığını böylece görmüş olduk. Ayrıca deminki söylediğiniz GOTO BTY yapma konusuna gelince bende öyle yapmıştım ve POZ=22 ve POZ=23 için işlem yapabiliyorum.

PROGOLUS:
    POZ=21
    IF POZ=21 THEN PO1       'PO1 İÇİN
BTY:IF POZ=22 OR POZ=23 AND SOL=0 THEN MENU1_2
    IF POZ=22 AND ASAGI=0 THEN PO2
    IF POZ=22 AND SEC=0 THEN P1OL     
    IF POZ=23 AND YUKARI=0 THEN PO1  
    GOTO BTY


Demin nası yaptığınızı hatırlamıyormusunuz gerçekten  :roll:
Bilgi fark yaratır..

teketek

Galiba sorunu anladım."Prog. Olustur" kısmında değeri atadıktan sonra verdiğimiz değeri eeproma yazdırıp üst menü ye dönmeyi sağlayan "menu" tuşuna bikaç saniye basılı tutunca "yazdı" ekranını görebildim.O zaman,
if poz=24 and sec=0 then P1KAYIT

Kısmına bi çözüm getirmek gerekicek anlaşılan.
Bilgi fark yaratır..