XC16'da veri tipi dönüşümü

Başlatan Kabil ATICI, 07 Mayıs 2014, 11:58:42

Kabil ATICI

Pic24 serisine el atınca XC16 başladık. İnterneteki örnek programlar sayesinde bir şekilde ilerleyebiliyoruz. Bir yere kadar. Kesin internette örneği vardır, ama bunu görmek yeni başlayan biri için kolay değil!

Sorum :16 bitlik bir veri nasıl 2 tane 8 bitlik veri haline getirilir?

void TIPDONUS  (unsigned int Veri)
{
  unsigned char DataL;
  unsigned char DataH;

//veri tipi dönüşümü nasıl olacak?
YOLLA (DataL);   //RB0...RB7 gönder
YOLLA (DataH);   //RB0...RB7 gönder
}


Teşekkür ederim.
ambar7

Erol YILMAZ

#define BYTELOW(v)   (*(((unsigned char *) (&v) + 1)))
#define BYTEHIGH(v)  (*((unsigned char *) (&v)))

void test1 (void)  {
  BYTELOW(x) = BYTEHIGH(x);
  BYTEHIGH (x) = 5;
}


http://www.keil.com/support/docs/2229.htm

Tagli

Allegro hocam, senin kod sanki big endian olmuş. Ben mi yanılıyorum acaba?
Gökçe Tağlıoğlu

fgokcegoz

struct BYTES{
   unsigned char low;
   unsigned char high;
};

union XYZT {
   unsigned int a;
   struct BYTES b;
}degisken;


"degisken.a" ile 16 bitlik değişkene,
"degisken.b.low" ile 16 bitlik değişkenin low byte ına,
"degisken.b.high" ile 16 bitlik değişkenin high byte ına erişebilirsiniz.

(Not:Kullandığınız platform da unsigned int türünün 16 bitlik bir değişken türü olduğunu farzettim.)
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

Kabil ATICI

Aşağıdaki kod yeterli olacak gibi görünüyor.

#define LOWBYTE(v)   ((unsigned char) (v))
#define HIGHBYTE(v)  ((unsigned char) (((unsigned int) (v)) >> 8))


void TIPDONUS  (unsigned int Veri)
{
  unsigned char DataL;
  unsigned char DataH;

//veri tipi dönüşümü
 DataL = LOWBYTE(Veri);
DataH = HIGHBYTE(Veri);

YOLLA (DataL);   //RB0...RB7 gönder
YOLLA (DataH);   //RB0...RB7 gönder
}


http://www.keil.com/support/docs/2229.htm
yardımcı oldu. Cevap veren herkese teşekkür ederim.
ambar7