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.
#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)
Allegro hocam, senin kod sanki big endian olmuş. Ben mi yanılıyorum acaba?
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.)
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.