LDS Befehl funktioniert im controller nicht.

Gast #4622270
Lesenswert?

Hallo zusammen

bei folgendem Programmteil geht offensichtlich der lds (1. Zeile nach 
Timer1_comp_B:)Befehl nicht.
Im Simulator klappt alles, aber die serielle Schnittstelle gibt nur hx00 
aus. Wenn ich temp3 mit anderen Werten lade funktioniert alles.
Kann es sein dass man den Timer nicht auslesen kann, oder was mache ich 
denn da verkehrt. Und warum geht das im Simulator??
Der Timer läuft definitif, denn an PORTD,2  bekomme ich ein schönes 
Signal.

  Timer1_overflow:    //Beginn einer neuen PCM-Periode
  push  temp1
  in    temp1,sreg
  push  temp1
  cbi    PORTD,2      ;LED ausschalten(Lebenszeichen)
  clr     temp1
  sts    TCNT1H,temp1
  sts    TCNT1L,temp1
  ldi    temp1,0b00111111
  out    PORTB,temp1      ;Bits setzen
  out    PORTC,temp1
  sbi    PORTD,4
  sbi    PORTD,5
  ldi    status,0
  pop    temp1
  out    sreg,temp1
  pop    temp1
  reti
;*******************************************************
Timer1_comp_B:
  lds    temp3,TCNT1H
  sts    udr0,temp3
  sbi    PORTD,2      ;LED einschalten(Lebenszeichen)
  reti
Gast #4622642
Lesenswert?

Hallo Leute
Ich habe den Fehler gefunden. Man muss zuerst das Low-Byte lesen, auch 
wenn man das nicht braucht. Dan klappt es. Der Simulator berücksichtigt 
das nicht, sondern gibt einfach das High-Byte zurück.

Gruß Fritz

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren