Word degıskenı 2 adet byte halıne getırıp sonra tekrar word'e çevirme ?

Başlatan mustafa_cmbz, 06 Aralık 2018, 22:54:22

mustafa_cmbz

Merhabalar..

Bu aralar serial usart ile kafayı yeme noktasına geldim diyebilirim.

@OG  hocamın verdii örnekleri uygulayarak öğrenmeye çalışıyorum..

Tx tarafından gelen word datayı

Rx tarafından byte byte almak ve bunları tekrar toplayıp ekranda yazdırmak istiyorum.

Çok basit bir deneme yaptım ama her ne hikmet ise olmuyor..

Nerede yanlışlık yapıyorum ?

Device=16F628A
 Xtal=4
 
   Declare LCD_Type 0
   Declare LCD_DTPin PORTB.4
   Declare LCD_ENPin PORTB.3 
   Declare LCD_RSPin PORTB.2 
   Declare LCD_Interface 4
   Declare LCD_Lines 4
   Cls
   DelayMS 100
   
 Dim GELEN As Word 
 GELEN=65535
 
 Dim TOPLAM As Word 
 TOPLAM=0
 
 
 Dim YUKSEK_BYTE As Byte  
 Dim DUSUK_BYTE  As Byte 
 
 YUKSEK_BYTE = GELEN.HighByte 
 DUSUK_BYTE  = GELEN.LowByte 
 
 '*****************************

 BASLA:

 TOPLAM = YUKSEK_BYTE + DUSUK_BYTE
 Print At 2,1,"TOPLAM: ",Dec8 TOPLAM 

 End

tekosis

Burada yaptığın işlem iki tane baytı birleştirmek değil. Doğrudan toplamışsın.

Alıntı yapılan: mustafa_cmbz - 06 Aralık 2018, 22:54:22
TOPLAM = YUKSEK_BYTE + DUSUK_BYTE

C ile aşağıdaki şekilde olur. Sanırım basic dili de destekler.

TOPLAM= (YUKSEK_BYTE << 8) | DUSUK_BYTE
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Hattusa

bir word 2 adet byte değişkeninin çarpımından meydana gelir,
bir dword ise 2 tane wordun çarpımından meydana gelir

diyelim ki başka bir yerden byte olarak çektiğin değeri tekrar worda dönüştürmek için

gelen1 = 1. byte değeri
gelen2 = 2. byte değeri

deger =(gelen1 *256) +gelen2

protonda ben olsam şöyle yapardım.

deger.highbyte =deger1
deger.lowbyte =deger2

print at 1,1,dec deger

dediğimde otomatik olarak word değerini görmüş olurdum

vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

OG

Toplama işine neden girdin anlayamadım, herhalde gelen byte'ları word de yerine yerleştirmek istiyorsun.

GELEN değişkeni önceki konuşmadaki gibi array ise
ve
GELEN[sayac] = RCREG
olarak data alındı ise
word değişkenin bu ise
Dim TOPLAM As Word
word'e çevirmek için

TOPLAM.lowByte = GELEN
TOPLAM.HighByte = GELEN[y]

Önceki konuşmamızdaki gibi sıralama
x için 3
y için 4
ise
TOPLAM.lowByte = GELEN[3]
TOPLAM.HighByte = GELEN[4]

olur.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mustafa_cmbz

Alıntı yapılan: pro-TR - 07 Aralık 2018, 01:19:44bir word 2 adet byte değişkeninin çarpımından meydana gelir,
bir dword ise 2 tane wordun çarpımından meydana gelir

diyelim ki başka bir yerden byte olarak çektiğin değeri tekrar worda dönüştürmek için

gelen1 = 1. byte değeri
gelen2 = 2. byte değeri

deger =(gelen1 *256) +gelen2

protonda ben olsam şöyle yapardım.

deger.highbyte =deger1
deger.lowbyte =deger2

print at 1,1,dec deger

dediğimde otomatik olarak word değerini görmüş olurdum



Yukardaki örnek seni yanıltmasın abi.

Ben orta bir word e değer verip sonradan 2 byte haline getirip tekrar word olarak toplayabilecekmiyim diye baktım niyeyse artık aklım toplmaya gitmiş.

255 e kadar verdiğim değerlerde sorun yok toplayarak oluyor ama sonrasında taşma miktarını görüyorum toplam ifadesinde.

Neyse bu tarz şeylerle uğraşmamışım hiç eksiğim vardı tamamlamaya çalışıyorum.

Hattusa

mustafa;
matematiksel olarak bir word değerini  adet byte değeri elde etmek için bir örnek vereyim.

diyelim ki gelen =4000 değerimiz olsun ve bunu 2 byte yapmak istiyoruz.
1.byte =gelen /256 => 15
2.byte =gelen //256 =>160

sağlaması ;

gelen =(15*256) +160  'dememiz yeterli

2 adet byte değerini elde etmiş oluruz. bu değerlerden 15 olanı gelen.highbyte, 160 olanı ise gelen.lowbyte değerini alır. protonda bu tür matematiğe gerek yok, zira hazır komutlarla icra edebiliyoruz. aynı durum word değerler içinde geçerli;

mesela sayı =102,000 değerimiz var dword olarak, matematiksel olarak;

1.word =102,000/65535 =>1
2.word =102,000//65535 =>36,465

değerlerini alır, ha protonda hazır kod kullanırsak;

değer1 =sayı.word1
deger0 =sayı.word0

gibi, anlatmak istediğim. matematiksel işlemdi.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>