Hallo
Man könnte das vielleicht auch "von Hand" ausrechnen:
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 temp, i, uebertrag;
int main(void)
{
Init();
SerWrite("\n\rasuro Taschenrechner\n\n\r", 25);
SerWrite("Bitte dreistellige Zahl eingeben\n\rund mit [Enter] absenden\n\r", 60);
SerRead(zahl, 3, 0); // 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(ergebniss, 4); // Ergebniss ausgeben
SerWrite("\n\r",2);
StatusLED(RED); // Aufgabe erledigt und Programmende
while(1);
return(0);
}
(ungetestet)
Keine Ahnung ob das so funktioniert. Wenn du es zu laufen bringst und kapiert hast, wie ich mir das gedacht habe, hast du auch schon einiges gelernt. Als Zusatz könnte man noch eine Prüfung der eingegebenen Zahl einbauen, die führenden Nullen entfernen und das Ganze als Endlosschleife umsetzen.
Gruß
mic
[Edit]
PHP-Code:
SerWrite(zahl, 3); // Ergebniss ausgeben
SerWrite("*2=", 3);
SerWrite(ergebniss, 4);
SerWrite("\n\r", 2);
Lesezeichen