Byte[] Dizi tipi değişkeni

Başlatan muyat, 05 Aralık 2015, 13:37:49

muyat

Bit tipi değişkene 1 ve 0 degerleri vererek set ederken kullanıyoruz.Bu değişkenle ilgili sorun yok.
Fakat bu byte dizi tipi değişkeni bazı komutlarda anlamakda zorluk çekiyorum hatta hiç anlamıyorum.
Örnegin byte tipi değişkeni ben genelde for komutundan sonra saydırma,süre ayarı  veya sayac eklendiginde  saydırmak için tanımlıyorum
sayac var byte gibi ...Bunlarda da sorun yok.

Fakat bu büyük parantezle yazılan dizi tipi değişken olan byte'nın kullanım amacını hala anlayamadım.
Örnegin aşagıdaki linkteki konuda ilyas bey ekledigi yazılımda OG VAR BYTE[8] yazmış
http://etepic.com/index.php/topic,2805.msg26850/topicseen.html#msg26850
OG VAR BYTE [8]
Burda ben OG isimli değişkenın sadece 8 bitten oluştugunu anlıyorum.
OG[0]=1 derken 0.bitin 1 degeri aldıgını anlıyorum..
8 bit denilince benım aklıma gelen ilk ve tek şey TRISA ve TRISB yani 16f628a gibi bir picin pinleri oluyor hep.
O halde bu trisa ve trisb dışında tanımlanan byte dizi tipi değişkeninde  her bitin farklı değer alması benım nerede işime yarıyor?Bunu mümkünse  basit bir proteus led simulasyonuyla anlatabilir miyiz?

Burak

#1
Kafanda bazı konularda yanlış bilgi oluşmuş durumda ..

ARRAY yani dizi değişkenlerinin bizlere sağladığı fayda kolaylıktan ibarettir ... Örneğin 0-255 arasında değişecek bu limitin dışına çıkmayacak değerler için WORD tipi bir değişken tanımlamak SRAM'de gereksiz yer zaptetmeye sebebiyet verecektir ... Farzedelim ki , bize 10 adet birbirinden bağımsız byte tipi değişken lazım ... Bunları

DEGISKEN var byte[10]

şeklinde oluşturabiliriz ..  Veya aynı şekilde DEGISKEN1 VAR BYTE : DEGISKEN2 VAR BYTE ..... Şeklinde bir rutin ilede oluşturabilirsin .. Bahsettiğin şeylerin yani TRIS veya diğer yazmaçların bununla bir alakası yoktur ... 8 bit denilince aklına sadece 8 bitlik bir sayı gelmeli .. Yazmaçlar değil .. Yazmaçların 8 bit olması sadece işlemcinin bit kapasitesi ile alakalı birşey .. Bunlar birbirinden farklı şeyler ...

Dizi şeklinde oluşturulan değişkenler bize erişim kolaylığı sağlarlar ...

Örneğin A kümesinin 10 adet değişkenini b kümesinin 10 adet değişkenine eşitlemek istersem bunu dizi değişken tanımlaması ile yaparak işimi bir for döngüsü ile çok basitleştirebilirim ..

A var byte[10]
B var byte[10]
i  var byte

for i=0 to 9

a[i]=b[i] ' b'nin içindeki değeri a değişkenine at

next i

Diğer bir yordamla hem tanımlamalar hemde eşitleme kod parçası çok uzun sürecektir ... Programda da çok gereksiz yer kaplayacaktır ...

Burak
Ω Gens Una Sumus Ω

ete

Bütün mikroişlemcilerde değişken denilen şey bir hafızada saklanan bilgidir.
Byte cinsinden değişken 1 adet 8 bitlik hafızada saklanır.
Hafızamızın $20 den başladığını varsayalım.İlk tanımladığımız değişken $20 nolu adresi kullanır.
Ama bu değişkeni dizi olarak tanımlarsak dizi adedi kadar hafızaya yerleşir.
Örnek olarak SAYI[5] sıfır dahil 5 adet değişken demektir. Bu bizim örnek hafızamızda;
SAYI[0]=>$20 nolu hafızaya;
SAYI[1]=>$21 nolu hafızaya,
SAYI[2]=>$22 nolu hafızaya,
SAYI[3]=>$23 nolu hafızaya,
SAYI[4]=>$24 nolu hafızaya yerleşir.
Dizi değişkenleri köşeli parantez içinde yer alan INDEX değeri ile kullanılırlar. Bu index'i değişken olarak kullanırsak bir çok işi kolaylıkla yapmamızı sağlar.
Örneğin bu sayı dizisi değişkenlerini sıfırlamak istiyoruz ne yaparız (Clear kullanmadan)
Ya oturup yukarıdaki gibi her birini index değeri ile yazıp sıfıra eşitlemek (örnek SAYI[0]=0 gibi)
Yada index kullanarak basit bir döngü ile yaparız;
FOR X=0 to 4
  SAYI[X]=0
Next
Gmrdünmü ne kadar kolay. Dizi adedi az olunca aman canım ne farkeder yazarım olur biter dersin ama dizinin 50 elemanlı olduğunu düşünsene 50 adet komut yazacağına yukarıdaki 3 satırlık komut bu işi 50 dizi içinde yapar 100 lük dizi içide yapar.

Hatırlarsan bir ara ADC okumasında yazılım filtresi yapmış idik. Bu filtrede değişkenlerin bir birleri ile yerdeğiştirmeleri gerekiyor idi. Bunu normal değişkenlerle yaparsan 10 dizilik bir değişkendeki yer değiştirme işlemi belkide yüzlerce satır tutar.
Ama index değişkeni kullanarak basit bir döngü içinde kolaylıkla yapabiliyoruz.
Sonuç olarak INDEX denilen değişkenin önemini kavramak ve ona bağlı olarak dizi değişkenleri ile daha neler neler yapılabileceğini kafanızda canlandırmanız gerekir.
Elinde 20 tane sayı olsun bunları büyükten küçüğe kadar sıraya diz deseler ne yapacaksın. İşte kurtarıcı dizi değişkenidir. Onları hemen bir diziye aktarıp index değişkeni ile bir kaç satırlık döngü içinde işi kolaylıkla yaparsın.
Örnek göstereyim istersen;
FOR X=0 to 19  'toplam 20 adet sayımız var
  IF SAYI[X]<SAYI[X+1] THEN   'öndeki sayı bir sonrakinden küçük ise
     TEMP=SAYI[X]                    'onu geçici bir değişkene koyarım
      SAYI[X]=SAYI[X+1]           'büyük sayıyı ilk değişkene yerleştiririm
      SAYI[x+1]=TEMP               'küçük olanı ise bir sonrakine yerleştiririm
  ENDIF                                  'böylece büyük önce sonra küçük gelmiş olur.
next
Bu döngü bütün sayıları kabaca sıraya dizer. Aslında çift döngü ile daha kaliteli bir sıraya dizme yapılabilir.
Aynı işi teker teker değişkenlerle 20 sayı için yapmaya kalkarsan akşama kadar kod yazarsın.

Umarım anlamışsındır artık dizi değişkenleri ne kadar önemli. Şayet onlar olmasa kayan yazılar , matrix displaylerde animasyonlar veri gösterme gibi işleri yapamazdık.

Ete

muyat

Her iki açıklamada gayet anlaşılır idi.Çok teşekkürler

eln07

#4
Selamın aleyküm Ete Bey.
Öncelikle Nasılsınız? diyerek ufak bir sorum olacak size.

Ben bu dizi değişkenlerini kullanmak istiyorum ama nereden başlayacağımı bilemedim.

DTMF ile gelen rakamları 10 ayrı değişkene atmam lazım dizi değişkende tam bu iş için gibi geldi bana.

Örn:
E var Byte[10]
i var byte
DtmfVeri var byte

'' DTMF gelince Strob 1 oluyor.

DTMF: 
algılama döngüsü

burada

i=i+1
E [ i ] = DTMFveri    ' bu şekilde yazsam her gelen yeni veri ve strobe ta E nin içine i nin sayısını alarak 10 değişkeni tanımlar mı? Yoksa farklı bir yöntem mi bulmaya çalışayım.  

Bekle:
if strobe=1 then DTMF

Goto bekle

Şimdiden çok teşekkür ederim.

ete

Dizi değişkeni indexli çalışma için biçilmiş kaftandır. Tamda senin yapmayı planladığın iş için düşünülmüştür.
VERI BYTE[10] şeklindeki tanımlama sana 10 adet değişken tanımlama imkanı sağlar. Index değeri 0-9 aralığında olmalıdır. 10 rakamı kaç adet değişken tanımlandığını gösterir ve index değeri sıfırıda kullandığı için o rakamın bir eksiğidir her zaman.
VERI[0]=5
VERI[1]=12
gibi köşeli parantez içinde yer alan index değeri değiştirilerek değişkende değişmiş olur.
Gelen verileri sıradaki index değerinin gösterdiği değişkene atandıktan sonra index değeri bir artırılarak gelen diğer veri sıradaki diğer değişkene atanmış olur.

Ete

eln07

Yani hocam indeks değerini i yazmacini örnekteki gibi köşeli parantez içine alınca o yazmaci sorunsuz kullanabilirim.

Teşekkürler hocam .

Powered by EzPortal