Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC16 => Konuyu başlatan: Kabil ATICI - 07 Mayıs 2014, 11:58:42

Başlık: XC16'da veri tipi dönüşümü
Gönderen: Kabil ATICI - 07 Mayıs 2014, 11:58:42
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.
Başlık: Ynt: XC16'da veri tipi dönüşümü
Gönderen: Erol YILMAZ - 07 Mayıs 2014, 12:45:32
#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 (http://www.keil.com/support/docs/2229.htm)
Başlık: Ynt: XC16'da veri tipi dönüşümü
Gönderen: Tagli - 07 Mayıs 2014, 12:59:31
Allegro hocam, senin kod sanki big endian olmuş. Ben mi yanılıyorum acaba?
Başlık: Ynt: XC16'da veri tipi dönüşümü
Gönderen: fgokcegoz - 07 Mayıs 2014, 13:28:36


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.)
Başlık: Ynt: XC16'da veri tipi dönüşümü
Gönderen: Kabil ATICI - 07 Mayıs 2014, 13:45:32
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 (http://www.keil.com/support/docs/2229.htm)
yardımcı oldu. Cevap veren herkese teşekkür ederim.