Değişkene yazdığım değeri nasıl sıfırlayabilirim ?

Başlatan nurican, 11 Nisan 2009, 02:35:30

nurican

merhaba arkadaşlar.

bir kontrol kartı için yazdığım programda kartın yaptığı bazı işlemleri sayan
bir değişken oluşturdum.



     
  SAY VAR WORD   //programın başındaki say değişkeni


          KASNAK_GERI:             //kasnak adlı röleyi kontrol eden alt program
          LOW PORTB.7
          HIGH PORTB.4
          LCDOUT $FE, 1
          LCDOUT "KASNAK GERI"

          SAY=SAY+1
          LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY 
          
          PAUSE 500
      
      GOTO BUTTONKONTROL1


program bu döngüye her geldiğinde say değişkenini +1 arttırıyor ve
toplam sayıyı lcd de gösteriyor.

buraya kadar bir problem yok.

kartın enerjisini kesip
tekrar açtığımda say değişkeni sıfır olduğu için ekrandada sıfır görünüyor.
say değişkenini pic in hafızasına nasıl kaydedebilirm ?

ikici sorum ise say değişkenini bir butonu basılı tutarak nasıl sıfırlayabilirim ?
Bir yerde küçük insanların büyük gölgeleri oluşuyorsa orada güneş batıyor demektir.....

forsa1975

  SAY VAR WORD   //programın başındaki say değişkeni 


          KASNAK_GERI:             //kasnak adlı röleyi kontrol eden alt program 
          LOW PORTB.7 
          HIGH PORTB.4 
          LCDOUT $FE, 1 
          LCDOUT "KASNAK GERI" 

          SAY=SAY+1 
          LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY 
          write 1,say.higbyte
          write 2,say.lowbyte
          PAUSE 500 
      
      GOTO BUTTONKONTROL1


butonla silmet için

  
BUTTONKONTROL1

if button=1 then

say=0 ' degisken sıfırlandı

write 1,0 'eepromdakilerde temizlendi
write 2,0
pause 300

endif
return



program çalışmaya başladığında eepromdan değişken okutturulmalı.

Hata olduysa affola 8-10 aydır bir satır kod yazmamıştım.

ORC

Alıntı yapılan: "nurican"merhaba arkadaşlar.

bir kontrol kartı için yazdığım programda kartın yaptığı bazı işlemleri sayan
bir değişken oluşturdum.



     
  SAY VAR WORD   //programın başındaki say değişkeni


          KASNAK_GERI:             //kasnak adlı röleyi kontrol eden alt program
          LOW PORTB.7
          HIGH PORTB.4
          LCDOUT $FE, 1
          LCDOUT "KASNAK GERI"

          SAY=SAY+1
          LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY 
          
          PAUSE 500
      
      GOTO BUTTONKONTROL1


program bu döngüye her geldiğinde say değişkenini +1 arttırıyor ve
toplam sayıyı lcd de gösteriyor.

buraya kadar bir problem yok.

kartın enerjisini kesip
tekrar açtığımda say değişkeni sıfır olduğu için ekrandada sıfır görünüyor.
say değişkenini pic in hafızasına nasıl kaydedebilirm ?

ikici sorum ise say değişkenini bir butonu basılı tutarak nasıl sıfırlayabilirim ?

Enerji kesildiğinde tekrar aynı degerden okutmak istiyorsan say değişkeninin değerini EEPROM a at..sonra say değişkeninin degerini epprom dan okut boylelikle her defasında en son degeri almıs olursun...ve edegerinde kayıp olmaz..

Buton olayına gelince onu da bir sartla yapabilirsin

Butonu donanımsal olarak 1 de tutarsın butona basınca butonun baglı oldugu port sıfıra ceker ve sende eger buton=0 ise dersin EPProm un hangi adresinde say değişkeninin degerin tutuyorsan o adrese sıfır yazarsın..

nurican

butonu basılı tutarak demek istediğim olay butona bir basmada
sıfırlamasın.

mesela butonu 3 saniye basılı tuttuğumda sıfırlamasını istiyorum
bunu nasıl yapabilirim ?
Bir yerde küçük insanların büyük gölgeleri oluşuyorsa orada güneş batıyor demektir.....

Maxim

Alıntı yapılan: "nurican"butonu basılı tutarak demek istediğim olay butona bir basmada
sıfırlamasın.

mesela butonu 3 saniye basılı tuttuğumda sıfırlamasını istiyorum
bunu nasıl yapabilirim ?

dostum o istediğin özellik daha önce birçok kere konuşuldu ve yapıldı
arama özelliğini kullanırsan bulursun

nurican

Alıntı yapılan: "maxiboost"
dostum o istediğin özellik daha önce birçok kere konuşuldu ve yapıldı
arama özelliğini kullanırsan bulursun

evet kardeşim doğru diyorsun bir çok örnek var forumda bende buldum
ayrıca forumda araştırma yapmadan konu açmıyorum.
ama bulduğum örneklerin çoğunu anlamadım. anladıklarım ise ihtiyacım olan örnekler değil.
arkadaşlar sağolsun öyle gizemli öyle sır dolu sorular sormuş ki
ne sorulan soruyu anlayabildim nede verilen cevabı.
sanki uzay mekiği yapacaklar.          

forumda tüm konularda yardımcı olan bilgi seviyesi yüksek kişiler var
bu arkadaşlar sorulan soruları yeterince açıklanmasada cevaplayabiliyorlar
fakat yeterince açıklanmayan soruların cevapları
ve örnekleride pek açıklayıcı olmuyor.
benim programlama konusundaki bilgim incelediğim konulardaki
örnekler ve cevapları anlamaya yetmediği için bu konuyu açtım.  
         
ihtiyacım olan şey bir kaç satır komut. arama yapmamı söyleyene kadar
soruma cevap verip bana yardımcı olman daha  kolay olurdu @maxiboost kardeşim.

7 yaşına gelmiş picprojenin database inde cevaplanmamış soru kaldığını pek sanmıyorum  
nasıl olsa daha önce cevaplandı diye konu açtırmayacaksanız söyleyin arkadaşlar hiç uğramayalım buralara.
Bir yerde küçük insanların büyük gölgeleri oluşuyorsa orada güneş batıyor demektir.....

tyildizak

içiçe iki for döngüsü ile olur:


BUTTONKONTROL1


      if buton=1 then   ; *

            pause 3000
  
                  if buton = 1 then

                        say=0 ' degisken sıfırlandı
                        write 1,0 'eepromdakilerde temizlendi
                        write 2,0
                        pause 300

                  endif

       endif

       return



*  "button" bir komut olduğu için bu isimde bir değişken tanımlanamaz.

İyi çalışmalar

fofo

if tus=0 then
sayIsay=sayisay+1
if sayisay=>1000 then
say=0
endif

endif
Tuşa bastığın müddetce 3 sn sayarak değişkeni sıfırlamak istiyorsan bu şekilde yazabilirsin .
if sayisay=>1000 then
buradaki 1000 sayısını 3 sn geciktirecek bir deger vermelisin araya pause koyabilirsin

tyildizak

Alıntı yapılan: "fofo"if tus=0
sayIsay=sayisay+1
if sayisay=>1000 then
say=0
endif

endif


"sayisay" değişkenini başlangıçta 0 kabul edersek:

1000'e ulaşmadan buton bırakılırsa, 0 ile 1000 arasında bir değerde kalır

tekrar butona basıldığında ise 1000'e ulaşacağı süre belirsiz olur

hemen altına "sayisay = 0" eklersek sorun kalmaz:


     if tus=0
            sayIsay=sayisay+1
                  if sayisay=>1000 then
                  say=0
            endif
      endif 

      sayisay = 0

muhittin_kaplan

bence bu tür bir işlem için tmr kesmesi kullanılmalı..

nurican

arkadaşlar @tyildizak ın ilk verdiği örneği uyguladım ve tuşu basılı tutarak
çalışmayı sağladım. şu anda program tam istediğim gibi çalışıyor. fakat
sormak istediğim bişey var. if...then komutundan sonra endif
kullandığımda pic basic pro uyarı veriyordu bende endifleri silerek
derledim programı. şimdilik sorun yok fakat programın kararlı ve
istikrarlı devam etmesi açısından ileride bir sorun ortaya çıkarmı.

DEFINE LCD_DREG   PORTD
          DEFINE LCD_DBIT   0
          DEFINE LCD_RSREG  PORTD
          DEFINE LCD_RSBIT  4
          DEFINE LCD_EREG   PORTD
          DEFINE LCD_EBIT   5
          DEFINE LCD_BITS   4
          DEFINE LCD_LINES  2
          
          
         
          
          
         
          SAY VAR WORD
         
     
     
     INPUT PORTD.7
     INPUT PORTD.6
     INPUT PORTC.7
     
     
     
     
               READ 1, SAY.higHbyte 
               READ 2, SAY.lowbyte
               LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY
     
     
     
     BUTTONKONTROL :
     
       
     
       
      IF PORTD.6=0 THEN ARTTIR2
      
      IF PORTD.7=0 THEN EKSILT2
      
      IF PORTC.7=0 THEN SIFIRLA2
                 
                  
      LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY
      
      GOTO BUTTONKONTROL
      
               ARTTIR2:

                   PAUSE 200
                   IF PORTD.6=0 THEN ARTTIR
                   GOTO BUTTONKONTROL
                   
               EKSILT2:

                   PAUSE 200
                   IF PORTD.7=0 THEN EKSILT
                   GOTO BUTTONKONTROL
                   
               SIFIRLA2:
      
                   PAUSE 200
                   IF PORTC.7=0 THEN SIFIRLA
                   GOTO BUTTONKONTROL
                   
               
               
      ARTTIR:
      
                
          LCDOUT $FE, 1
          SAY=SAY+1
          write 1, SAY.higHbyte 
          write 2, SAY.lowbyte
          READ 1, SAY.higHbyte 
          READ 2, SAY.lowbyte
          LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY 
          GOTO BUTTONKONTROL
      
      
      
      
      
      EKSILT:
      
     
      
          LCDOUT $FE, 1
          SAY=SAY-1
          write 1, SAY.higHbyte 
          write 2, SAY.lowbyte
          READ 1, SAY.higHbyte 
          READ 2, SAY.lowbyte
          LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY 
          GOTO BUTTONKONTROL
      
      
      
      
      
      
      SIFIRLA: 
      
          LCDOUT $FE, 1
          SAY=0
          WRITE 1, SAY.higHbyte 
          WRITE 2, SAY.lowbyte
          READ 1, SAY.higHbyte 
          READ 2, SAY.lowbyte
          LCDOUT $FE, $D4, "BASILAN ADET : ", DEC SAY 
          GOTO BUTTONKONTROL
      
      
      END
Bir yerde küçük insanların büyük gölgeleri oluşuyorsa orada güneş batıyor demektir.....

ferdem

Alıntı yapılan: "nurican"if...then komutundan sonra endif
kullandığımda pic basic pro uyarı veriyordu bende endifleri silerek
derledim programı.
Basic de "if" li ifadeyi tek satırda yazarsanız "endif" yazmazsınız.
Örn:
if x>5 then x=10
Eğer alt satıra geçerseniz "endif" gerekir.
if x>5 then
x=10
endif

Program hakkında ben yorum yapamayacağım ama bütün fonksiyonları ve olası tüm durumları tekrar tekrar test edebilirsiniz. İyi çalışmalar.

nurican

@ferdem arkadaşım cevabın için çok teşekkür ederim basic i yeni öğrendiğim için henüz bu tür detayları bilmiyorum.  program yaklaşık 4  gün boyunca aralıksız çalıştı ortalama olarak 6000 defa tekrarlandı. şimdiye kadar bir sorun çıkmadı umarım bundan sonra da çıkmaz.
Bir yerde küçük insanların büyük gölgeleri oluşuyorsa orada güneş batıyor demektir.....