Deiğişkene verdiğim değerin sıfırlanmaması ????

Başlatan yusuftr80, 19 Temmuz 2007, 17:24:46

yusuftr80

SELAM
Arkadaşlar  bir değişkene verdim değerleri LCD de göre biliyorum  fakat  enerjisini katipte tekrardan verdimde  değişkene verdim değer  sıfırlanmış olarak  çıkıyor   değişkenin sıfırlanmaması için nasıl bir komut kullanacağım.
Programı  PBP ile   yazıyorum  kulandım komut ( WRITE  ve READ ) komutlarını   kullanıyorum   ama bir yerde yanlışlık olmalı ki  verdim değer enerjiden sonra tekrardan sıfır lanmış olarak  geliyor  buna ufak bir örnek programla anlatırsanız çoook makbule geçecek saygılar kolay gelsin Yusuf usta


Örnek:
If porta.0=0 then
Say=say+1
Pause 100
Lcdout $fe,1,"SAY=",# SAY

SAY a verdim değerin silin memesi için nasıl bir yol izlemeliyim  :?:

Klein

Bir yerde yanlış yapmıyorsun. Değişkenler Ram de tutulur. ve enerji kesilince kaybolur. Ama 0 olmaz. 0xFF olur. Eğer değer 0 gelmesin FF gelsin istiyorsan derleyicinin opsiyonlarından(varsa)  Ram sıfırlamayı iptal edebilirsin. Ama yok  değişkene son atadığım değer kalsın istiyorsan olmaz. Bunun için değişkene değeri attıktan sonra aynı zamanda bu değeri eeproma da yazmalısın. enerji geldiğinde eepromu okuyup değşkene bu değeri atarsın.

OG

Değeri EEPROM 0 nolu adresine kaydettiğini düşünelim


DATA @0,0 ' Pic e kayıt anında 0 nolu adrese 0 değeri yazarsın

Basla:
READ 0,Say
.
.
.

If porta.0=0 then
Say=say+1
WRITE 0,Say
Pause 100
Lcdout $fe,1,"SAY=",# SAY
bekle:
if porta.0=0 then bekle ' Kontak sıçramasını engellemek için
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

vale9

OG hocam şu kontak sıçraması olayını açarmısın? Buton kullanırken nelere dikkat etmeliyiz? Bazen sorun yaşıyoruz.

Saygılar.
Hayat 1'ler ve 0'lardan ibarettir.

Veli B.

Benim kullandigim prensip yontem soyle;
DEVICE ...
CONFIG....
XTALL.....
SABITLER.....
DEGISKENLER.....
ALIASLAR....
INITAL....
.
.
TEMP=EREAD 0

MAIN:
IF IPTAL=0 THEN 
B1:delayms 1
IF IPTAL=0 THEN B1
TEMP= TEMP+1
EWRITE 0,TEMP
ENDIF
GOTO MAIN


Bu yontemde elinizi basili tuttugunuz surece islem yapmaz, birakmada islem yapar ve basili tuttugunuz surece artirma gibi bir isem isterseniz ilave kod yazmaniz gerekir.
Pic epromundan degeri main oncesinde okutma sebebi is, RAM iceriginin reset veya enerji kesilmesi durumund olusmasidir, aksi durumlarda temp degeri RAM uzerinde yukludur. Inital asamasinda alinmasi yeterlidir.

Kontak sicramasi veya arki denilen olay; buton, switch gibi elemanlarin durum degistirmesi esnasinda cok hizli ama MCU nun algilamasina engel olmayan bir sekilde kontak ve diger temasli parcalarini temas edip etmemesidir. MCU bunu Birden fazla basma olarak algilar ve buna gore islem yapar. Siz kilitlemeli ve zaman gecikmeli yazacaginiz rutinlerle bunu buyuk olcude engelleyebilirsiniz.

yusuftr80

Arkadaşlar  yapmak istedim  devrede ki   program akışını  detayıyla anlatamadım sanırım.

Devre üzerinde Pik in enerjisini kesip te tekrardan enerji verdimizde  değişkene  verdim değerin silinmemesi için nasıl bir  yöntem uygulaya bilirim ?

vale9

Hocam arkadaşlar anlatmış işte, enerji kesilip geri geldiğinde değerin silinmemesi için bunu EEPROM'a kaydetmen gerekiyor. Bunun için de READ ve WRITE komutlarını kullanmalısın, örneklerde var.

Değişkenindeki değeri WRITE komutuyla kaydettir, programın başına da READ komutu koy, bu değeri değişkenine yükle. OG hocamın yazdığı gibi:

Basla:
READ 0,Say
.
.
.

If porta.0=0 then
Say=say+1
WRITE 0,Say
Pause 100
Lcdout $fe,1,�SAY=�,# SAY
Hayat 1'ler ve 0'lardan ibarettir.

yusuftr80

Arkadaşlar  ilginize ve bilginize çok teşekkür ederim  hepinizden  ALLAH razı olsun.  :D ALLAH SİZLERİ DE GÜLDÜRSÜN VE DAİM ETSİN