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
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
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
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.
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.
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.