Hallo zusammen, ich bin neu im Bereich der Mikrocontrollerprogrammierung und fange gerade mit der Assemblerprogrammierung an. Ich habe ein Programm geschrieben, bei dem ein Port ganz simple hochzählen soll. Dies ergibt dann einen Dualzähler bzw. Frequenzteiler. Nur zählt der Controller leider nicht korrekt (Atmega8), wie im Video zu sehen ist. Nach einem Reset zählt er nur bis 32 und fängt dann wieder bei 0 an und danach zählt er dann weiter als 32. Woran kann das liegen? Hier das Programm: /* * Frequenzteiler/Dualzähler 1Hz * Ausgang: PORTB * Created: 19.11.2015 10:40:30 * Author: Lubic, Napierski, Wittenberg */ ;---Assemblerdirektiv(en)--- .INCLUDE "m8def.inc" ;---Initialisierung--- ldi r16, low(RAMEND) ;Stack-Initialisierung out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 .DEF output=R25 .DEF Wait1=R20 .DEF Wait2=R21 ldi r17,0xff ;Lade Konstante ffh in r17 out DDRB,r17 ;PORT B ist Ausgang ldi output,0x00 ;Arbeitsregister output Anfangsbedinung 0 ;---Hauptprogramm--- loop: ;Beginn der Endlosschleife out PORTB,output ;PORTB auf Null setzen RCALL Unterprogramm INC output ;Arbeitsregister r16 inkrementieren rjmp loop ;Springe zur Marke loop ;-------Unterprogramm Wartschleife--------- Unterprogramm: ldi wait1,0xFF ;lade 255 in Register "Wait1" Warten: ldi wait2,0xFF ;lade 255 in Register "Wait2" Warten1: nop nop nop dec wait2 ;Dekrementiere Register "wait2" um 1 brne Warten1 ;Vergleiche "wait2" mit 0. Wenn ungleich 0 springe zu Warten1 dec wait1 ;Dekrementiere Register "wait1" um 1 brne Warten ;Vergleiche "wait1" mit 0. Wenn ungleich 0 springe zu Warten1 ret ;Rücksprung zum Hauptprogramm
sorry für die Formatierung. Irgendwie wurde es nicht übernommen, wie ich es eigentlich wollte :)
achja.. und die Simulation mit Atmel Studio 6.2 funktioniert einwandfrei. Dort zählt er hoch bis 255 un dann wieder auf 0 :/
hab gerade nochmal experimentiert. Wenn ich dem Controller sage, er soll 0xFF ausgeben(alle LED´s an) dann leuchtet die 5. LED(von links) also PB5. Wenn ich allerdings 0x10 direkt rausgebe (also dezimal 16), müste die LED ja eigentlich an gehen.. tut sie aber nicht
LED´s sind richtig angeschlossen, verwende nur auf dem Video PORTD, weil ich dachte das eventuell PortB das Problem wäre
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.