Habe folgende Probleme: 1. Ist warte(); eingebaut, scheint er dort zu hängen. Nehme ich die Funktion warte() aus dem Programm heraus, läuft er. 2. Habe ich putchar('x'); eingebaut, gibt er endlos das Zeichen x aus, schaltet aber nicht mehr die Ports. Woran kann das liegen?
Hier mein Code: (habe einige for-Schleifen der Übersicht wegen herausgenommen) #include<mega128.h> #include<stdio.h> #include<stdlib.h> #include<string.h> void warte(void) { unsigned char a; for (a=0;a<80;a++) { } } // *** START des C-Programms *** void main(void){ unsigned int x; UCSR0B= 0b00011000; UCSR0C= 0b00000110; UBRR0L=87; // Initialsierung // Interupt DDRC.4 = 1; DDRC.5 = 1; warte(); while(1) { PORTC.4=1; PORTC.5=0; //putchar('2'); for (x=0;x<25000;x++) { } } PORTC.5=1; PORTC.4=0; for (x=0;x<25000;x++) { } } }
Zeichen x ist eine 2. 1 Klammer ist zuviel, liegt aber daran, daß ich dort eine for_schleife entfernt hatte.
Wenn Du Deinen Quelltext auch noch formatieren würdest, müsste man keine geschweiften Klammern zählen ...
for (a=0;a<80;a++) { } Sowas optimiert der Compiler raus, sobald optimieren eingeschaltet ist! Etwas besser: for(a=0;a<80;a++) asm volatile ("nop"); noch etwas besser: volatile unsigned char a; for(a=0;a<80;a++); Oder noch viel besser: Die delay-Routinen der AVR-Libc 1.2.x in avr/delay.h benutzen. Außerdem gebe ich Rufus recht, Dein Quelltext ist wirklich grottenschlecht zu lesen. ciao, Stefan.
void warte(void) { delay_ms(10); } Sorry wegen dem schlechten Code. Der ATmega128 hängt trotzdem in der Funktion. Kein Signal an den Ports. Sobald warte(); raus ist geht es(ohne putchar). Hab auch die nop's probiert. Habe auch mal die putchar-Anweisung vor die while-Schleife gesetzt. Er wiederholt ständig die 2, obwohl doch nur eine erscheinen dürfte. An den Ports spielt sich gar nichts ab.
ich hatte des öfteren solche "lustigen" effekte... jetzt sind die stütz-Cs richtiger verbaut und jetzt haut alles hin.. irgendwie ist der mega128 da kritischer wie die im dil gehäuse... also ich würd mal (wenn vorhanden) mit einem oszi die versorgungs-pins abklappern und schaun was sich da so tut... 73
Der Prozessor, der vorher auf der Platine war, lief einwandfrei. Habe ihn gegen einen neuen gleichen Typs ausgetauscht, da der alte sich nicht programmieren ließ. An der äußeren Beschaltung wurde nichts verändert. Also solten die Stützkindensatoren doch in Ordnung sein. Die Verbindungen scheinen ok zu sein. Kann es etwas mit den Fusebits zu tu haben?
Erst einmal danke an alle. Meine Vermutung war richtig. Die Fusebit für den 103-Kompatibilitätsmodus war programmiert. Wirklich dumm, daß diese im Auslieferungszustand programmiert ist. Dachte ich mache nichts falsch, wenn ich die programmiert lasse. Dies führt wohl bei 128-Programmen zu oben beschriebenen Problemen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.