Hallo ihr, ich habe ein Problem mit meinem Assembler Programm. Die Funktion die ich brauche ist folgende : Im SRAM in der Speicherstelle Adresse (0x100 im SRAM) steht eine Adresse für einen Slave (Wert 1-127 in dez.) der angesprochen werden soll. (hierfür aber uninteressant) Dazu möchte ich den im Byte vom SRAM enthaltene Adresse bitweise an einen Ausgang senden. Mein Assemblercode funktioniert aber leider nicht richtig. Zur Kontrolle habe ich an den Ausgang eine LED gehängt die ja unregelmässig blinken müsste wenn die einzelnen Bits gesendet werden. Aber entweder blinkt sie gar nicht oder total regelmässig. Ich habe genügend Pausenzeiten zur Kontrolle eingebaut damit ich es wirklich sehe wenn sie blinkt. Der benutzte Ausgang für die LED ist PortD , Bit2 Hier ist mein Code : Shift_out: lds r20,ADRESSE ;Register das geShiftet werden soll ldi r21,8 ;Schleifenzähler für 8 Bit. PBin1: lsr r20 ;Oberes Bit ins Carry-Bit schieben. brcc shift_ ;Wenn Carry log 0 springe weiter cbi PORTD,2 ;Invertiert löscht Bit 2 auf PortD rcall delay50us ;Verzögerungszeit rjmp shift_weiter1 shift_: sbi PORTD,2 ;Invertiert setzt Bit 2 auf PortD rcall delay50ms ;Verzögerungszeit shift_weiter1: rcall delay50ms ;Verzögerungszeit dec r21 ;Schleifenzähler verringern. brne PBin1 ;Solange wiederholen bis alle 8 Bit angezeigt sind ret Das dabei das Register R20 mit Nullen aufgfüllt wird ist egal da der Wert ja im SRAM steht. Was ist denn nur falsch an dem Programm ? Bin für jede Hilfe dankbar! Liebe Grüße Thomas
Hmm... probiers mal mit ROR (Rotate Right through CARRY) statt LSR (Logical Shift Right). Außerdem ist die Ausgabe verkehrt herum, glaub ich. dave
Hallo Dave, leider brachte Dein Vorschlag keine Lösung. Die LED blinkt in regelmässigen Abständen ganz gleichmässig, egal welchen Wert ich in "Adresse" reinschreibe. Die Ausgabe müsste stimmen da ich die LED ja auf GND ziehe mit dem PIN, sie also bei nicht gesetztem Ausgang leuchtet und umgekehrt. Liebe Grüße Thomas
Ich habs grad im Simulator getestet... funktioniert bei mir... Vielleicht liegts ja am Aufruf? zu oft? Schleife zu kurz? dave
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.