Ich hab dein Programm ein wenig modifiziert und im Simulator getestet.
Code:
.include "m8def.inc"
main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xFF
out DDRB,r16
ldi r17,0x00
out DDRC,r17
loop:
ldi r16,0x01
out PORTB,r16
in r17,PINC
cp r16,r17
breq mainloop
rjmp loop
;------------------------------------------------------------------------
mainloop: wdr
ldi r16,0b11101111
out PORTB,r16
rjmp mainloop
Zuerst wird auf Port B der Wert 0x01 ausgegeben.
Und zwar so lange bis der Pin C.0 High wird.
Dann verzweigt das Programm in den Mainloop, aus dem es nie wieder zurückkommt.
Ist noch zusätzlich ein anderer PIN des Port C aktiv bleibt das Programm in der Schleife loop:
Was soll denn nun das Progrämmchen machen ?
Nichts desto trotz solltest Du die beschriebenen Verbesserungen deines Programmcodes machen.
Du möchtest ja auch mal schwierigere Sachen in Assembler basteln.
Es sein denn es handelt sich hierbei um inline Code für einen Compiler.
Da musst Du dann aber das Handbuch deines Compilers befragen, welche Register für Assembler nutzbar sind.
Die Infromationen, die Du uns hier gibst sind leider etwas mager.
Lesezeichen