Hallo Henry,
Ob winavr auch den GCC (ohne avr) enthält kann ich Dir leider nicht sagen, meine Frau lässt mich nicht an ihren Win PC dran, aber falls das nicht gehen sollte gibt es noch andere Lösungen (sehe oben)
Ich teste meine Routinen in ganz normalen PC Programmen, das geht ganz gut, man muß aber ein paar Tricks benutzen, gerade habe ich Deine bcd Routine ausprobiert, und einen Fehler entdeckt
und hier das PC- Programm:
Code:
#include <stdio.h>
#include <string.h>
int bcd (int portd,int portb){
int var1 = portd & ((1<<5)|(1<<6)|(1<<7));
var1 >>=5;
if (portb & (1<<0))
var1 |= (1<<3);
return var1;
}
int bit2char (char *string) {
int i,result=0;
for (i=strlen(string)-1;i>=0;i--) {
if (*string++ == '1')
result |=(1<<i);
}
return result;
}
int main (int argc,char *argv[]) {
int a,b;
if (argc < 3) {
printf("Du musst zwei Parameter übergeben\n");
return 1;
}
printf ("Ergebnis %d\n",bcd(bit2char(argv[1]),bit2char(argv[2])));
return 0;
}
Das Programm erwartet 2 Argumente in einer binären Form, die den Zustand Deiner Ports darstellen z.B. wenn alle Pins am Schalter auf high stehen <programname> 11100000 00000001
die bit2char Funktion wandelt nur die zwei Argumente aus char Arrays in int werte um, damit wird dann die bcd Funktion gefüttert und liefert den BCD Wert zurück, der ausgegeben wird...
Naja der Fehler lag bei
Code:
if (PINB & (1<<PB0))
var1 |=(1<<4);
es muß heißen
Code:
if (PINB & (1<<PB0))
var1 |=(1<<3);
Wohl ein Bit zu weit geschoben...
Und kompliziert ?
So lernt man C am einfachsten
Gruß Sebastian
P.S Ich habe das Programm oben nochmal geändert
Lesezeichen