Programda saat aralığı problemi

Başlatan ugures, 06 Mayıs 2015, 08:27:14

ugures

Ekte yazılımın tamamını verdiğim  programın bir bölümünde aydınlatmanın bir saat kapatılması için oluşturduğum yazılım kısmı aşağıdaki gibidir.
AYD_CALISMA:
           
        LCDOUT $FE,$C0,dec2 t_,":00-",dec2 t_,":59"
                       
      
      IF YUKARI=1 then t_=t_+1
        WHILE YUKARI=1:WEND
           IF t_=00 then t_=24
           
            IF ASAGI=1 then t_=t_-1
        WHILE ASAGI=1:WEND
           IF t_=24 then t_=00       
            IF MENU=1 THEN
           
            WRITE $02,t_:PAUSE 2
            GOTO AYAR_MENUSU 
                ENDIF
                                           
         GOTO AYD_CALISMA   
       RETURN

Ancak yazılımı pic 16 f 877 ye atıp çalıştırdığımda menü ayarlarından ilgili menüye gelip yukarı aşağı saat ayarı yaptığımda "00:00-00:59" ile "23:00-23:59" arasında gezmesi gerekirken, saat ayarı "00:00-00:59" ile "99:00-99:59" arası çalışıyor. Programın neresini hatalı yazdım acaba ???

ete

Artışlarda ve eksilmelerde sınır koymamışsın böyle olması doğal tabiiki.
Birinci satırdan iitibaren bakalım;
 IF YUKARI=1 then t_=t_+1
        WHILE YUKARI=1:WEND
           IF t_=00 then t_=24

Yukarı=1 olduğu zaman t_=t_+1 olacak. t_ değişkeni byte cinsinden ve artırdıkça 255 e kadar gidecektir. Bu değer saat için artırılıyor ise t_=24 olduğunda ya sıfıra döndürülmeli yada 23 de bırakılmalıdır.
Yine t_ değeri dakika için artırılıyor ise bu değer 60 olduğunda 59 da bırakılmalı yada yeniden sıfıra döndürülmelidir.
Ama sen ne yazmışsın t_=00 (00 yazmanın bir anlamı yok desimal sistemde sıfır=0 dır ve tek sıfır yazılmalıdır) ise t_=24 olsun demişsin. t_ değerinin 24 olabilmesi için önce 255 değerine ulaşması oradan tekrar sıfır olması ve ardından 24 e ulaşması gerekir. Bu sınırlama eksiltme için doğru zira sayı eksile eksile önce sıfıra sonra 255 değerine ulaşır.
Ancak tamda doğru sayılmaz saat de sıfır değeride kullanılan bir zaman birimidir ve kullanılması gerekir. O halde doğru ifade,
IF t_=255 then t_=23 denilmesi gerekir ama t_ değerinin eksiltildiği kısımda tabiiki.

Benzer hata eksiltme kısmında da mevcut.
            IF ASAGI=1 then t_=t_-1
        WHILE ASAGI=1:WEND
           IF t_=24 then t_=00       
            IF MENU=1 THEN


t_=t_-1 işlemi sonucunda sayı sonında önce sıfır sonrada 255 değerine ulaşır. Yukarıdaki sınırlama tanımlaması buraya yazılmalı. Buradaki de artırma kısmına yazılmalıdır.
Yerleri ters olmuş ama artırma kısmına yazdığın tarif ettiğim şekilde olmalı.

Saat geri sayımındaki mantığı açıklamakta yarar görüyorum.
Saat 23:59 dan başlar ise 23:58 - 23:57....23:00 ve ardından 22:59 şeklinde devam eder. En sonda ise 00:59..00:58 ve sonunda 00:00 olarak geri sayma sona erer.
Ete

ugures

Ete hocam çok teşekkürler. Sistemde aydınlatma 23 saat açık kalcak 1 saat kapalı kalacak. Kapalı kalma aralığıda örneğin "23:00-23:59" arası seçilecek. saat işlerken 23:00 oldugu anda kapanacak ve 00:00 olduğu anda açılacak. En kısa zamanda bahsettiğiniz şekilde düzeltmeyi yapacağım. Teşekkür ederim.

Powered by EzPortal