sayi sistemleri string to hex

Başlatan armsistem, 20 Eylül 2013, 17:32:39

armsistem

Arkadaşlar merhaba ;

DS1990a iBUTTON Uygulaması yapmaya çalışıyorum ,yalnız sayı sistemlerine tam hakim olmadığımdan sıkıntı yaşıyorum.

Okuyacağım ;

- 8 bit (1 byte) aile kodu
- 48 bit (6 byte) serial number
- 8 bit (1 byte) CRC

Aşağıdaki şekilde veri çekiliyor.(For döngüsü ve dizi olarakta çekebilirim.)

char Data1 = ReadByte();
char Data2 = ReadByte();
char Data3 = ReadByte();
char Data4 = ReadByte();
char Data5 = ReadByte();
char Data6 = ReadByte();
char Data7 = ReadByte();
char Data8 = ReadByte();

ilk veri Data1 - > aile kodu sabit 0x01   if (Data1 == 0x01){FIO2SET |= 0x01 <<9;} yaptığımda çalışıyor

fakat bu değeri stringe çevirip UART basmam lazım 01 olarak -- > sprintf kullanmam gerek lakin  bir türlü başarılı olmadım !

Data2+Data3+Data4+Data5+Data+Data7 toplamam (arka arkaya eklemem gerekiyor) gerek sonuç olarak ortaya  1A-BC-D1-00-D1-11-D1-DD gibi veri çıkartması gerekiyor ve bu değerleri stringe çevirip uarta göndermem gerekiyor. Sonuç olarak ekranımda görmem gerekenen aşağıdaki gibi olması gerekiyor.

aile kodu                 serial number                        CRC
0x01               1A-BC-D1-00-D1-11-D1-DD           0x02

Klein

char  Tablo[] = {'0','1','2',....,'E','F'};
şeklinde bir tablo yap.

char TxBuf[32];
txBuf[1] = Tablo[OkunanVeri[0] & 0x0F];
txBuf[0] = Tablo[(OkunanVeri[0] >> 4) & 0x0F];

şeklinde string  oluştur. ister döngüde yap. ister tek tek.


armsistem

Alıntı yapılan: Klein - 20 Eylül 2013, 17:40:18
char  Tablo[] = {'0','1','2',....,'E','F'};
şeklinde bir tablo yap.

char TxBuf[32];
txBuf[1] = Tablo[OkunanVeri[0] & 0x0F];
txBuf[0] = Tablo[(OkunanVeri[0] >> 4) & 0x0F];

şeklinde string  oluştur. ister döngüde yap. ister tek tek.

Hocam çok iyi ....

armsistem

#3
Hocam 8 bit +48 bit + 8 bit

- 8 bitlerde problem yok ama 48 biti nasıl yapabilirim aynı mantıkta baktığım da tuhaf değerler çıkıyor.

- 48 bitlik bir hexdecimal sayı nasıl stringe çevirebilirim.

sadogan

48 bit 6 byte ediyor byte byte çevirmelisiniz hocam.

armsistem

Alıntı yapılan: Klein - 20 Eylül 2013, 17:40:18
char  Tablo[] = {'0','1','2',....,'E','F'};
şeklinde bir tablo yap.

char TxBuf[32];
txBuf[1] = Tablo[OkunanVeri[0] & 0x0F];
txBuf[0] = Tablo[(OkunanVeri[0] >> 4) & 0x0F];

şeklinde string  oluştur. ister döngüde yap. ister tek tek.



Hocam yukarıdaki mantıkla yapabiliyorum ama şunu kafam almadı.

Aşağıda 6 byte 48 bit var . byte-byte denediğimdeki sonucu bilgisayara gönderdiğimde tuhaf tuhaf karakterler çıkıyor. Acaba 48 bit bir bütün olup oradanmı stringe çevirmem gerek.

byte1;
byte2;
byte3;
byte4;
byte5;
byte6;

char seri_number[6],temp=0;
seri_number[0]=byte1;
seri_number[0]=byte2;
seri_number[0]=byte3;
seri_number[0]=byte4;
seri_number[0]=byte5;
seri_number[0]=byte6;

mantığıyla mı devam etmesi gerek devamı gelmiyor.


sadogan

Alıntı yapılan: armsistem - 21 Eylül 2013, 09:41:54
Hocam yukarıdaki mantıkla yapabiliyorum ama şunu kafam almadı.

Aşağıda 6 byte 48 bit var . byte-byte denediğimdeki sonucu bilgisayara gönderdiğimde tuhaf tuhaf karakterler çıkıyor. Acaba 48 bit bir bütün olup oradanmı stringe çevirmem gerek.

byte1;
byte2;
byte3;
byte4;
byte5;
byte6;

char seri_number[6],temp=0;
seri_number[0]=byte1;
seri_number[0]=byte2;
seri_number[0]=byte3;
seri_number[0]=byte4;
seri_number[0]=byte5;
seri_number[0]=byte6;

mantığıyla mı devam etmesi gerek devamı gelmiyor.
Okuduğunuz 1 byte veriyi ascii ye cevirdiginizde elinizde 2 byte lik veriniz olur.
0x1BC gibi bir veriniz var bunun ascii karşılığı 'B'1 ci byte 'C' 2 ci byte
bunu göz önüne almanız gerekiyor.

char paket[32];

sprintf(paket"%X%X%X%X%X%X",data1,data2,data3,data4,data5,data6);//

Paketi  seri porttan göndermeyi deneyin.