Değişkenlerin farklı değer alması

Başlatan ulaser84, 13 Eylül 2006, 17:42:54

ulaser84

merhaba.dün başladığım projede takıldığım bir nokta oldu.değişken olarak
1 adet byte,2 adet word kullandım.bunları hızlı ve yavaş olmak üzere arttırıp azaltıyorum ve sonucu desimal olarak lcd den izliyorum.değişken içeriği 0  iken 1 azaltmaya yaptım.değer olarak word değişkenini 65535 olarak lcd de gördüm.değeri 1 arttırdığımda tekrar 0  değerini göremedim.farklı formatta değerler gördüm.sorunu nasıl aşabilirim.diğer bir sorum word değişkenini eeprom a yazmak.kullanılan 16f870. iyi çalışmalar.teşekkürler


MENU_2: 
PRINT   $FE,1,"<<-1<-1  +1>+1>>"
    PRINT   $FE,$C0,"VALUE=",#VALUE1
LABELH:
    BUTTON  ARTTIR,0,255,255,BUF1,0,LABELF
    VALUE1=VALUE1+1
    PRINT   $FE,$C0,"VALUE=",#VALUE1 
    DELAYMS 100
LABELF:
    BUTTON  AZALT,0,255,255,BUF2,0,LABELG
    VALUE1=VALUE1-1
    PRINT   $FE,$C0,"VALUE=",#VALUE1
    DELAYMS 100
LABELG:
    IF  PORTA.0=0 THEN
    VALUE1=VALUE1-1
    PRINT   $FE,$C0,"VALUE=",#VALUE1
    ELSE
    ENDIF
    DELAYMS 10
LABELM:
    IF  PORTA.3=0 THEN
    VALUE1=VALUE1+1
    PRINT   $FE,$C0,"VALUE=",#VALUE1
    ELSE
    ENDIF
    DELAYMS 10
LABELL:
    BUTTON  PORTB.0,0,255,255,BUF5,0,LABELH
    PRINT   $FE,1,"KAYDEDIYOR"
    DELAYMS 500
    GOTO    MENU
    RETURN

ibrsel

http://www.hemenpaylas.com/download/1560138/dene.rar.html

Linkteki programı bir incele..Senin dedeğin gibi bir sorun ile karşılaşmadım programı yazarken..Word tipi bir değişkenin değeri 0 iken bir azalttığında 65535 oluyor..Tekrar bir arttırdığında 0 oluyor..

Gelelim ikinci soruna..Mikro denetleyicinin eprom bellek hücresi 1 Byte lik bilgi depolar..Word tipi değişkenin ise 2 Byte olduğu için tek bellek hüzresinde bu değeri saklayamazsın..Bunu için yazılımında bazı oyunlar yaparak (örneğin;2 bytelik bir sayının ilk byte nı belleğin bir hücresine,ikinci byte nı başka bir hücresine yazdırabilirsin,yada bunun gibi başka çözümler..Kolay gelsin

ulaser84

hocam senin programı inceledim.çok sağolasın.while wend ile kontrol etmişsin butonları.program arasına iki parça while ile buton kontrol ekledim.sonuç yine aynı 65535 den 0 a geçişte (05535)sayısı çıkıyor lcd de.3 farklı buton kontrolunde aynı problem oluyor (button,if else,while wend).

ulaser84

sorun bulunmuştur.sayılar 5 basamaktan 0 a geçişte kalan artık sayılar ekrandan gitmemektedir.buton taramasıyla birlikte ekranı temizlettiğimde eklediğim 100 ms bekleme süresi butonların algılanmamasına yol açtı aynı zamanda ekran çok dalgalandı(bekleme olmasa ekran gözükmeyecek).bende her sayı değiştirdiğimde alt programdan komut çağırarak ekranı temizliyorum.hafif bir dalgalanma oluyor.rahatsız edici değil.koduda değiştirdim ilk program 1800 word tutarken 400 word bir azaltma oldu.
MENU_2:
    PRINT AT 1,1,"<< >>HIGH-LOW< >"
    PRINT AT 2,1,"SLOW RATE=",DEC VALUE1
    IF  ARTTIR=0    THEN
        DELAYMS 250:VALUE1=VALUE1+1:GOSUB TEMIZLE:ELSE
            IF  AZALT=0 THEN
                 DELAYMS 250:VALUE1=VALUE1-1:GOSUB TEMIZLE:ELSE
                     IF HIZLI_ARTTIR=0 THEN
                        DELAYMS 20:VALUE1=VALUE1+1:GOSUB TEMIZLE:ELSE   
                            IF HIZLI_AZALT=0 THEN
                                DELAYMS 20:VALUE1=VALUE1-1:GOSUB   TEMIZLE:ELSE
                                        IF  MENU_SECIM=0 THEN
                                            DELAYMS 500 
                                            GOTO    MENU    :ELSE
                                        ENDIF
                                     ENDIF
                                ENDIF
                            ENDIF
                        ENDIF
                  GOTO MENU_2
TEMIZLE:
    PRINT $FE,1
RETURN