Uart Port Binär ausgeben

Gast #1313646
Lesenswert?

Hallo Leute

ich würde gerne den Wert von PortB beim Atmega8 einlesen und in im Binär 
Format der UART ausgeben.

Zum Beispiel so:

PORTB ==> 0b00001111

Aber ich habe keine Idee wie ich den uint8 Wert in diese Form bringen 
kann.

Könntet ihr mir eventuell einen Anstoss geben wie ich dabei Vorgehen 
muss?

MfG

Flo
Moderator (Firma: Titel) Persönliche Seite #1313686
Lesenswert?

> PORTB ==> 0b00001111
Das soll also am Terminal ankommen?

Dann nimm erst mal die Holzhammermethode:
1
 uart_send('P'); 
2
 uart_send('O'); 
3
 uart_send('R');
4
 uart_send('T'); 
5
 uart_send('B'); 
6
 uart_send(' ');
7
 uart_send('='); 
8
 uart_send('='); 
9
 uart_send('>'); 
10
 uart_send(' '); 
11
 uart_send('0'); 
12
 uart_send('b'); 
13
 uart_send((PINB&0x80)?'1':'0');
14
 uart_send((PINB&0x40)?'1':'0');
15
 uart_send((PINB&0x20)?'1':'0');
16
 uart_send((PINB&0x10)?'1':'0');
17
 uart_send((PINB&0x08)?'1':'0');
18
 uart_send((PINB&0x04)?'1':'0');
19
 uart_send((PINB&0x02)?'1':'0');
20
 uart_send((PINB&0x01)?'1':'0');
21
 uart_send('\n');

Später könntest du dir einen String mit einer Schleife aufbauen und den 
komplett verschicken.

Bleibt allerdings noch die Frage nach der Sinnhaltigkeit des Ganzen :-/
Will heißen: warum verschickst du nicht einfach "nur" den Wert und lässt 
ihn dir auf dem PC so anzeigen, wie du es willst?
Gast #1313733
Lesenswert?

Ich bin dabei mir ein kleines Board zu bauen mit dem Ich per Commandline 
die Ports ,den ADC ,TWI etc. steuern und rum experimentieren kann da ich 
sowas brauche um andere Schaltungen zu testen (z.B. ob die Richtigen 
Signale aus der zu testenden Schaltung kommen und sowas). Da da ganze 
Später mit einem Palm oder Psion Revo gesteuert wird wo nur ein Terminal 
Programm läuft soll erstmal der Controller alles machen. Die Commandline 
ist schon fertig nur halt die Ausgabe der Ports fehlt noch.
Moderator (Firma: Titel) Persönliche Seite #1313887
Lesenswert?

Und wie war das jetzt mit dem variablen Shift?
Der ließe sich doch so unsagbar schlecht in Maschinensprache umsetzen, 
heißt es... :-/

Warum nicht gleich die Maske schieben:
1
uint8_t Wert;
2
int8_t msk;
3

4
Wert = PORTB;
5

6
uart_puts("PORTB ==> 0b");
7

8
for (msk=0x80; msk; msk>>=1)
9
{
10
  if (Wert & i) uart_putchar('1');
11
  else          uart_putchar('0');
12
}
13

14
uart_puts("\r\n");
#1313984
Lesenswert?

Peter schrieb:
> es muss doch gar nicht ausgewerter werden, das msk>>=1 und das print
> sind bloss anweissungen - der return ist doch dabei egal.

Ach, und du meinst es spielt keine Rolle, in welcher Reihenfolge msk>>=1 
und die Ausgabe ausgeführt werden?

Dass die Operanden von links nach rechts ausgewertet werden, bedeutet in 
diesem Fall, dass erst geschoben und dann ausgegeben wird. Das hat eine 
um 1 verschobene (nach links) Ausgabe zur Folge und das LSB ist in der 
Ausgabe immer '0'.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren