TCNT0 lesen atmega8

Gast #3028394
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
Gast #3030254
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.