değişken nerden başlar

Başlatan POWER, 06 Mart 2007, 22:40:16

POWER

PBP da tanımlanan değişken,proğramın başında sıfırlanmassa  proğram başladıktan sonra hangi değerden başlar.Yani 0 danmı yoksa 1 denmi yada nerden
TB6BKG

ete

Teorik olarak sıfırdan başlar. Ancak bir kaç kullanımdan sonra şayet sıfırlanmaz ise data sheetlerde değişkenlerin sıfır olacağı garanti edilmemiştir.
Bazen 1 bazen 128 yani rastgele bir sayıda alabilir. (Ben rastlamadım bu güne kadar ama tabiiki genelde sıfırlarım değişkenleri.

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

Pros_PektuS

Aşağıdaki kodların hepsinde de LCD a değişkeni için 0 gösteriyor.

Ancak ilk kodda portC koddaki 2 sn bekleme süresince ilk anda 1 iken 2 sn sonunda 0 oluyor.

İkinci kodda ise ilk andan itibaran portC çıkışı 0

Üçüncüde a=0 dememe rağmen ilk örnek gibi ilk 2 sn Cportu yine 1 ve 2 sn sonunda 0.

:) hadi bakalım, proteusmu bizi şaşırtıyor, yoksa gözden kaçan bişeymi var.




DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
a VAR BYTE
TRISC=%00000000
start:
Pause 1000
LCDOut $fe,$c0
LCDOut #a
Pause 1000
PORTC=a
done:
GoTo done

*******


DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
a VAR BYTE
TRISC=%00000000
PORTC=a
start:
Pause 1000
LCDOut $fe,$c0
LCDOut #a
Pause 1000

done:
GoTo done


*****

DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
a VAR BYTE
TRISC=%00000000
a=0
start:
Pause 1000
LCDOut $fe,$c0
LCDOut #a
Pause 1000
PORTC=a
done:
GoTo done

****

ayrıca etenin dediğine göre ilk anda aldığı değer rasgele ise bunu koruması gerekmiyormu? yukarıdaki ilk kodda oluşan değişme neden olabilir? !!! Proteusmu ???
Soz soylemek icin once duymak, dinlemek gerek. Sen de soze, dinlemek yolundan gir.                                                          Hz. MEVLANA

sitenindelisi

C portunu kullanmanız sebebi ile 877 gibi bir MCU kullandığınızı tahmin ediyorum. 877 için data sheet, tablo 3.6 ya bakarsanız, göreceğiniz üzere reset durumlarında TRIS ve PORT registerlarının durumları verilmiştir.

Sizin verdiğiniz 3 örnek kodtan 2 sinde, çıkış(TRIS REG) olarak tanımlayıp, sıfırlayarak(PORT REG) kontrol altına almış değilsiniz. Reset anında TRIS registerı için değer sabit(255) iken, PORT registerı için bu tanımlama konulamamış durumda, H da olabilir, L da. Eğer PORT registerına  bir değer yüklenmiş ve reset POR:BOR haricinde ise değerini koruyacak.
1. ve 3. örneklerinizde, compiler vasıtası ile a değikenine ilk değer olarak 0 atamışsınız fakat bunu PORT registerına  done etiketinin hemen üzerinde atamışsınız, dolayısı ile port ilk değerini o anda almış(0).
2. örnekte ise TRIS registerını yönlendirmenizin hemen ardından, PORT registerına da değer atayarak, hakimiyeti ele almışsınız.
Proteusun bir kabahati yok yani. Compiler ne üretti ise, gariban motomot onu uyguluyor.