Uart Port Binär ausgeben

Gast #1313646
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
> 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
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
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");
Gast
@Lothar Miller

geht leide nicht, i ist unbekannt und

int8_t msk

führt zu einer endlosschleife.
1
uint8_t Wert = PORTB;
2

3
uart_puts("PORTB ==> 0b");
4

5
for ( uint8_t msk=0x80; msk; msk>>=1, uart_putchar( (Wert & msk) ? 1 : 0 ));
6

7
uart_puts("\r\n");
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'.
Gast
ah jetzt habe ich erstanden, ok ich gebe zu ich habe nicht die 
korrektheit des ergebnisse überprüft.

Ich dachte die Abbruchbedingung in der schleife ist falsch.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.