32 bitlik veriyi 4 ayrı byte olarak almak?

Başlatan ogy, 21 Ocak 2014, 22:07:05

ogy

Merhaba,

Seri porttan  K3e3143 şeklinde veri alıyorum.Burada 'K', '3e', '31', '43' sayılarını 4 ayrı değişkene atmak istiyorum.Bunu MicroC PIC ile nasıl yapabilirim?Sanırım pointer kullanmam gerekiyor ama nasıl yapacağımı anlayamadım.

LukeSkywalker

Bu veriler zaten uart üzerinden byte byte gelir. Uart uzerinden 32 bitlik veri bir anda gonderilemezki.

selimkoc

UART üzerinden byte olarak transfer gerçekleşir. Dizi değişkenine aktarak yapabilirsiniz.

kudretuzuner

Merhaba,
Data, 'K' olarak gönderilmez."K" harfi  HEX'4B' olarak yollanır.C# bilmiyorum ama VB.Net'te PC'ye hex olarak gelen dataların DEC değerleri okunur.Yani PIC'in "K" harfi için yolladığı HEX'4B' değeri DEC75 olarak okunur.
Alıntı"Burada 'K', '3e', '31', '43' sayılarını 4 ayrı değişkene atmak "
Bakınız
http://www.asciitable.com/
Amatör

camby

FF ile and işlemi yapıpı kalan değeri byte'a convert ederseniz yada byte'ın içine atarsanız ilk byte'ı elde edersiniz.

2. byte için de önce 8 birim sağa kaydırıp aynı işlemi yapmak gerekiyor.

Diğerleri de aynı mantıkda devam ediyor.

Ama dedikleri gibi uart zaten byte gönderiyor.

ogy

Cevap yazan tüm hocalar sağolun.Uart'tan verilerin byte byte gelebileceği kısmını unutmuşum ben.Terminalden o formatta okuyunca kafam karıştı.Gelen verileri diziye alarak hallettim.Teşekkürler.

kimlenbu

ola ki kullanmak isteyen olur,

#define BYTE(var,index) *(((unsigned char*)&var)+index)

preprocessor makrosu ile byte okuma ve yazma yapılabiliyor.

degisken =0x1234;

ise

BYTE(degisken,0) ile 4'ü elde edebiliyorsunuz,

BYTE(degisken,0)=5; derseniz de degisken 1235 oluyor.

selimkoc


yamak

Alıntı yapılan: kimlenbu - 22 Ocak 2014, 11:53:43
ola ki kullanmak isteyen olur,

#define BYTE(var,index) *(((unsigned char*)&var)+index)

preprocessor makrosu ile byte okuma ve yazma yapılabiliyor.

degisken =0x1234;

ise

BYTE(degisken,0) ile 4'ü elde edebiliyorsunuz,

BYTE(degisken,0)=5; derseniz de degisken 1235 oluyor.
BYTE(degisken,0) ile  0x34 elde edilir 0x4 değil. zaten 0x1234 16 bitlik bir sayı.

muhittin_kaplan

bilgisayara mı göndereceksin ?
c# mı yada vb.net  mi kullanıyorsun.