Forum: Compiler & IDEs Mit Uart 16Bit Übertragen


von jens (Gast)


Lesenswert?

Guten Tag.

ich  möchte über den uart eine 16bit zahl senden.
Gibst da noch eine andere Möglichkeit.
mfg

int x=588

uint8_t HighByte = x >>8;
uint8_t LowByte = x ;

 uart_putc(HighByte);
 uart_putc(LowByte );

von STK500-Besitzer (Gast)


Lesenswert?

jens schrieb:
> Gibst da noch eine andere Möglichkeit.

von Es gibt für jedes Problem eine Lösung (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> nö

Warum die 16Bit nicht als string ausgeben?

von Peter (Gast)


Lesenswert?

>jens schrieb:
>> Gibst da noch eine andere Möglichkeit.
>nö
Doch! im Prinzip dasselbe, aber etwas direkter...
1
int x=588
2
UART_putc(*((char*)&x));
3
UART_putc(*((char*)&x+1));

von Peter (Gast)


Lesenswert?

1
int x=588
2
UART_putc(*((char*)&x+1)); //High-Byte?
3
UART_putc(*((char*)&x));   //Low-Byte

Oups, ist doch nicht das selbe, welches das High-Byte oder Low-Byte ist, 
hängt vom Endian-Mode deines Compiler/CPU Systems ab und ist nicht in 
jedem Fall portierbar, Deine Methode mit dem shiften hingegen schon! ;o)

von jens (Gast)


Lesenswert?

ich kann leider nur denn Pixel setzen von 0 bis 255 in X=Richtung sowie 
in Y=Richtung.
Viellesicht kann mir da einer helfen
mfg

1
//SENDEN
2
int x=588
3
int y=388
4
5
uart_putc(13 );
6
uart_putc(*((char*)&x+1)); //High-Byte?
7
uart_putc(*((char*)&x));   //Low-Byte 
8
uart_putc(*((char*)&y+1)); //High-Byte?
9
uart_putc(*((char*)&y));   //Low-Byte 
10
uart_putc( m );            //0=invert,1=not invert
11
12
13
//EMPFANG
14
  if (c==13)      // Set Pixel
15
   { unsigned char x1,x2,y1,y2,c;    
16
     int  xpos;
17
     int  ypos;
18
     x1=uart_getchar();  //HighByte in X
19
     x2=uart_getchar();  //LowByte  in X
20
     y1=uart_getchar();  //HighByte in  Y
21
     y2=uart_getchar();  //LowByte in Y
22
     c=uart_getchar();   //0=invert,1=not invert
23
     xpos=x1;  
24
     xpos+=x2;
25
     ypos=y1;  
26
     ypos+=y2;
27
     lcd_setpixel(xpos,ypos,c);
28
   }

von Karl H. (kbuchegg)


Lesenswert?

>    xpos=x1;
>    xpos+=x2;

Du musst schon die Bytes wieder richtig zusammensetzen.

wenn du die Ziffern 2 und 3 hast, wird daraus nicht das Ergebnis 23, 
indem du die 2 und die 3 addierst.

   xpos = x1 * 256 + x2;

oder

   xpos = x1 << 8 + x2;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.