Hallo Ich habe folgendes Problem, ich möchte über das UART befehle an den MC (ATMega8) schicken. Die kommunikation über das UART fungtioniert soweit, also kein Hardwarefehler. Wenn ich im Studio4 mein Programm simuliere leuft am anfang wie gewolt. Wenn aber die bestätigung gesendet wurde springt er nicht zurück ins Programm sondern startet wieder am anfang. Habs dann trotzdem mal versucht das ganze auf dem STK500 laufen zu lassen, bekomm aber nur seltsme Zeichen zurück. Könnte sich vieleicht mal jehmand das Programm anschaun, oder mal im Studio simuliern? Das programm ist im Anhang. mfg Max
Hallo, dein Problem ist in der int_uart_recive: routine. Der Befehl BREQ führt einen absoluten Sprung aus. Danach kann nicht mit RET zurückgesprungen werden. In der recive_... willst du aber genau das machen. Der Controller list dann aus dem Stack den nächsten wert (hier ist das gespeicherte Register temp) und gibt diesen in den Programm Counter. Da dieser wert 0 ist, fängt der Controller von vorne an. Hab das Programm jetzt ein bischen umgeschrieben. Müsste nun gehen. PS: Wenn du mit den Megas Arbeitest: Hast du den internen Takt ausgeschaltet??? FUSES! denn die Megas Arbeiten Herstellermäßig mit dem Internen RC-Oszillator. Wenn du aber einen anderen Takt benötigst, so musst du eine FUSE umprogrammieren und erst dann kannst du den Externen Takt verwenden. 73, DB1PF, Florian Pfanner
Hallo Florian, Danke für deine Hilfe. werde es gleich probieren. am besten wird sin, wen ich das register einfach nicht sichere und ein explizit für jede aufgabe benutze. Den internen Takt hab ich ausgeschaltet, hab die Fuses so wie im Tutorial beschrieben gesetzt. Hat bis jetzt immer fungtioniert. mfg Max
Das allein mit dem Register sichern ist nicht entscheident. Entscheident ist, dass der Stack beim verlassen der Funktion (welche durch ret oder reti verlassen wird) so ist, wie beim eintritt. Also wenn du ein wert auf den Stack legst und den dann nicht mehr holst, so stürzt dein Programm beim verlassen der Routine ab. Gruß, Florian
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.