Gast
#141406
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