Hallo, ich habe folgendes Problem: zur Übung schreibe ich gerade an einem mini Programm, dass mit dem Timer0 eine Zeit misst, solange der Interrupt-Pin PIND2 auf high geschalten ist und diese anschließend ins Register r18 lädt. Wenn man das ganze jetzt im Simulator testet, wird komischerweise immer die Zahl 0x32 in das Register r18 geladen, egal wie lange der Timer läuft. Kann mir bitte jemand helfen? Wo liegt der Fehler ? .include "m8def.inc" .def temp = r16 .org 0x000 rjmp main ; Reset Handler .org INT0addr rjmp timerstarten main: ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, 0x00 out DDRD, temp ldi temp, 0xFF out DDRB, temp ldi temp, (0<<ISC01) out MCUCR, temp ldi temp, (1<<ISC00) out MCUCR, temp ldi temp, (1<<INT0) out GICR, temp sei ; Interrupts allgemein aktivieren loop: rjmp loop ; eine leere Endlosschleife timerstarten: ldi temp, (1<<CS00) ; CS00 setzen: Teiler 1 out TCCR0, temp inc r17 cpi r17,2 brsh timerstoppen rjmp weiter timerstoppen: ldi r17, 0x00 ldi temp, (0<<CS00) out TCCR0, temp ldi r18, TCNT0 ; <-- Hier sollte der Wert des Timers in r18 geladen werden out TCNT0, r17 weiter: reti
:
Verschoben durch User
Hi
>danke :) es funktioniert , aber wann nimmt man ldi wann in und wann out
Wenn die IO-Adresse <=0x3F dann in oder out. Wenn größer, dann lds oder
sts. In lädt ein Register mit dem Inhalt eines IO-Register. Lds mit dem
Inhalt einer RAM-Adresse oder eines IO-Registers aus dem erweiterten
IO-Bereich.
Out speichert den Inhalt eines Registers in ein IO-Register. Sts lädt
eine RAM-Adresse oder ein IO-Register im erweiterten Bereich mit dem
Inhalt eines Registers.
Ldi hat damit nichts zu tun. Damit wird ein Register mit einer Konstante
geladen.
MfG Spess
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.