Forum: Mikrocontroller und Digitale Elektronik Dez-Hex Umwandler


von Patrick (Gast)


Lesenswert?

/*
Der kommt irgendwie mit den Vergleichen nicht kla.. und nur Gott weiß 
warum..

Am Ende soll hier ein DUAL -> HEX umwandler für die Zahlen 1-16 
einstehen,

Wenn z.B die die Zahl 15 gespeichert ist, dann hat
ports[0] den WErt 1 und ports[1] den Wert 5
*/

  c = toupper(cbf_get(rx_buf));
  ports[0]=c;

  c = toupper(cbf_get(rx_buf));
  ports[1]=c;

if (ports[0] >='0' && ports[0] <='1' && ports[1] >='0' && ports[1] 
<='F')
    {
      cbf_put(cmd_buf, 'I');
      cbf_put(cmd_buf, 'S');
      cbf_put(cmd_buf, myadress );
      cbf_put(cmd_buf, 0x00);
      cbf_init(rx_buf);

      cbf_put(cmd_buf, 0x01);
      cbf_put(cmd_buf, 'S');
      cbf_put(cmd_buf, 0x01);
      cbf_put(cmd_buf, 'C');

      cbf_put(tx_buf, 'S');
      cbf_put(tx_buf, 'C');
      cbf_put(tx_buf, ' ');
                }


if (ports[0]==0)
{
cbf_put(rx_buf, ports[0]);
cbf_put(rx_buf, ports[1]);
}

else if(ports[0] == '1' && ports[1] == '0')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'A');}

else if(ports[0] == '1' && ports[1] == '1')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'B');}

else if(ports[0] == '1' && ports[1] == '2')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'C');}

else if(ports[0] == '1' && ports[1] == '3')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'D');}

else if(ports[0] == '1' && ports[1] == '4')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'E');}

else if(ports[0] == '1' && ports[1] == '5')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'F');}

else if(ports[0] == '1' && ports[1] == '6')
{cbf_put(rx_buf, '1');
cbf_put(rx_buf, '0');}


else
{return parse_error(tx_buf, '?', PSTR("Y"));
}

von Oliver (Gast)


Lesenswert?

a) Was ist jetzt das Problem, und was ist die Frage?
b) Sourcecode entweder mit
1
  [c]
2
  [/c]
formatieren, oder als .c-Datei anhängen. Ohne das kann das kaum einer 
lesen.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Patrick schrieb:
> /*
> Der kommt irgendwie mit den Vergleichen nicht kla.. und nur Gott weiß
> warum..

Und der sagt nix.
Genauso, wie deine Fehlerbeschreibung nix sagt.

> Wenn z.B die die Zahl 15 gespeichert ist, dann hat
> ports[0] den WErt 1 und ports[1] den Wert 5
> */
>
>   c = toupper(cbf_get(rx_buf));
>   ports[0]=c;
>
>   c = toupper(cbf_get(rx_buf));
>   ports[1]=c;
>
> if (ports[0] >='0' && ports[0] <='1' && ports[1] >='0' && ports[1]
> <='F')

wo sind denn hier Zahlen im Spiel?
An dieser Stelle handelt das Programm immer noch von Zeichen. Und 
Zeichen wie '0', '1', ... '9', 'A', 'F' aber auch '+', '#', '(' sind 
einfach nur Zeichen. Jedes Zeichen hat einen Code und dieser Code ist in 
ports[0] gespeichert.
Aber: Der Code sagt nicht unbedingt etwas über die Reihenfolge der 
Zeichen, egal ob aufsteigend oder absteigend aus!
C gibt dir zwar die Garantie, dass die Zeichen '0' bis '9' codemäsig 
gesehen eine Reihe bilden, d.h. das das Zeichen '3' unmittelbar auf das 
Zeichen '2' folgt, aber C sagt nichts darüber aus, ob '5' jetzt 
beispielsweise einen größeren oder einen kleineren Code als 'W' hat, 
bzw. überhaupt ob der Code von 'W' größer oder kleiner als zb der Code 
von 'V' ist.

von Christian H. (christian_h)


Lesenswert?

http://de.wikipedia.org/wiki/Zahlbasiswechsel
Gibt aber noch weitere schöne Formeln dafür. Ist einfacher als Zeichen 
für Zeichen. Arbeite mit Zahlen nd nicht mit Strings!

von Michael R. (mexman) Benutzerseite


Lesenswert?

Einsprung mit der Zahl (0...19) in Variable EINER
Ausgang: Zehnerstelle in ZEHNER, Einerstelle in EINER


CONVRT MOVLW 0
       MOVWF ZEHNER
DO10   MOVLW d´10´
       SUBWF EINER, W
       BNC END
       MOVWF EINER
       INCF  ZEHNER
END



Gruss

Michael

von Peter D. (peda)


Lesenswert?

Michael Roek schrieb:
> CONVRT MOVLW 0
>        MOVWF ZEHNER
> DO10   MOVLW d´10´
>        SUBWF EINER, W
>        BNC END
>        MOVWF EINER
>        INCF  ZEHNER
> END

Das ist keine gültige C-Syntax.
Damit kann also keiner was anfangen.


Peter

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.