Hallo radbruch,
ja Freude für mich, Dein code funktioniert ! Ich habe auch Deinen 2. Teil und eine Endlosschleife eingefügt. Leider habe ich den SerWrite-Befehl noch nicht gerafft: statt *2 wird nd ausgegeben und an das Ergebnis ein n angehängt. Enter braucht bei dreistelliger Zahl nicht eingegeben werden (Ergebnis kommt von selbst), aber bei nur zweistelliger, Ergebnis ist dann um 1 zu hoch, d.h. die Mathe-Syntax habe ich nur bruchstückhaft kapiert.
PHP-Code:
// asuro multipliziert dreistellige Zahl mit 2                          mic 7.6.2012
// Die über die serielle Schnittstelle empfangene dreistellige Zahl wird üngeprüft
// mit zwei multipliziert und das Ergebniss wird zurückgesendet
// https://www.roboternetz.de/community/threads/58106-Mit-dem-asuro-rechnen
#include "asuro.h"
char zahl[3]; // drei Ziffern mit Index 0 bis 2
char ergebniss[4]; // das Ergebniss könnte vierstellig sein
unsigned char tempiuebertrag;
int main(void)
{
  
  while(
1)
  {
    
Init();
    
SerWrite("\n\rasuro Taschenrechner\n\n\r"25);
    
SerWrite("Bitte dreistellige Zahl eingeben\n\rund mit [Enter] absenden\n\r"60);
    
SerRead(zahl30); // drei Zeichen ohne Timeout einlesen
       
    
StatusLED(YELLOW);
    
i=2// Index auf Einerstelle setzen
    
uebertrag=0// noch kein Übertrag von der vorhergehenden Stelle
    
do
    {
        
temp=zahl[i]-'0'// Ziffer von ascii nach dezimal umrechnen
        
temp=temp*2+uebertrag// mit 2 multiplizieren und Übertrag berücksichtigen
        
if(temp 9// Übertrag erkennen
        
{
            
uebertrag=1// Übertrag auf nächste Stelle
            
temp=temp-10;
        }
        else
            
uebertrag=0// kein Übertrag
        
ergebniss[i+1]=temp+'0'// Wert in ascii-Ziffer umrechnen und speichern
    
}while(i-- != 0); // nächste Stelle berechnen
    
if(uebertrag// erste Stelle berechnen (keine Prüfung auf führende Nullen)
        
ergebniss[0]='1'// 1 wenn Übertrag...
    
else
        
ergebniss[0]=' '// sonst Leerzeichen
             
SerWrite(zahl3); // Ergebniss ausgeben,
             
    
SerWrite("*2="3); 
    
SerWrite(ergebniss4);
    
SerWrite("\n\r"2);  
    
//SerWrite(ergebniss, 4); // Ergebniss ausgeben
    //SerWrite("\n\r",2);
    
StatusLED(RED); // Aufgabe erledigt und Programmende
  
}
    while(
1);
    return(
0);