mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer


Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin dabei, für ST7 einen Led-Blinker zu schreiben, leider blinkt da 
nichts. Ich bin mir im klaren darüber, daß heir niemand den ST7 
verwendet, jedoch finde ich, daß der Assembler gut zu verstehen ist. 
Vielleicht habe ich ja einen logischen Fehler eingebaut, der mir nicht 
ins Auge springen will. Hier also der Codeauszug:
main:            ; Unser Einsprungspunkt "Main"
  rsp          ; Stackpointer zurücksetzen
  ld A,#255        
  ld PADDR,A        ; Port A als Ausgang konfigurieren
  ld A,#0                      
  ld PAOR,A        ; Port A Option "Open Drain"
  ld PADR,A           ; Port A Ausgabe Null (LED leuchtet)
  rim
  ld A,LTICR
  ld A,#$30        ; Wert für Lite Timer f8 
  ld LTCSR1,A        ; Timer-Register beladen
TimerInterrupt:  
  ld A,PADR          ; Port A in Register laden
  xor A,#$FF         ; Port ver-xor-en
  ld PADR,A          ; Ausgabe
test:  jp test

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Иван S. schrieb:
> Vielleicht habe ich ja einen logischen Fehler eingebaut, der mir nicht
> ins Auge springen will.

Ja.

1.
In nen Interrupt läuft man nicht rein.

2.
Ein Interrupt braucht am Ende ein RETI, sonst weiß die CPU nicht, daß 
der Interrupt verlassen wurde.


Peter

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> 1.
> In nen Interrupt läuft man nicht rein.

Mann, ich weiss nicht was ich mir heute gedacht habe.

> 2.
> Ein Interrupt braucht am Ende ein RETI, sonst weiß die CPU nicht, daß
> der Interrupt verlassen wurde.

Heute ist wohl nicht mein Tag, wie peinlich mir das alles ist.

Danke für Deine Hilfe.

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, Stunden später blinkt es immer noch nicht. Es wird aber in den 
Interrupthandler gesprungen, denn die LED leuchtet. Jedoch leuchtet sie 
permanent. Auch eine Verzögerungsschleife in der Interruptroutine (ich 
weiss, nicht sehr elegant, ist aber nur zum Testen) bringt keine 
Abhilfe.

Vielleicht soll ich es für heute einfach bleiben lassen.
main:            ; Unser Einsprungspunkt "Main"
  rsp          ; Stackpointer zurücksetzen
  ld A,#255        
  ld PADDR,A        ; Port A als Ausgang konfigurieren
  ld PAOR,A        ; Port A Option "Open Drain"
  ld PADR,A           ; Port A Ausgabe (LED dunkel)
  rim          ; Enable Interrupt
  ld A,LTICR
  ld A,#0
  ld LTARR,A
  ld A,#$20        ; Wert für Lite Timer Control Register A 
  ld LTCSR1,A        ; Timer-Register beladen
  ld A,#2          ; Timer Interrupt aktivieren
  ld LTCSR2,A
gogo:  jp gogo
Timer:  ld A,PADR        ; Port A auslesen
  xor A,#%11111111      ; ver-xor-en
  ld PADR,A        ; Ausgabe
  ld A,#255
dec1:  dec A
  jrne dec1
  ld A,#255
dec2:  dec A          ; Verzögerungsschleifen      
  jrne dec2
  ld A,#255
dec3:   jrne dec3
  iret

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dec3:   jrne dec3

Da fe lt ein 'dec A'.

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hazeh Zimmerer schrieb:
>> dec3:   jrne dec3
>
> Da fe lt ein 'dec A'.

Ja, da habe ich mich wohl verschrieben. Ich habe es jetzt aufgegeben. Es 
lag nämlich doch nicht am Timer-Interrupt. Ich habe einfach mal 
probiert, eine LED mittels einfacher Portausgabe zum leuchten zu bringen 
und schon das funktioniert nicht. Einmal leuchtet die LED, einmal nicht. 
Selbst wenn ich mit dem selben Programm flashe funktioniert es mal, und 
mal nicht.
main:            ; Unser Einsprungspunkt "Main"
  rsp          ; Stackpointer zurücksetzen
  ld A,#$FF        
  ld PADDR,A        ; Port A als Ausgang konfigurieren
  ld PAOR,A        ; Port A Option "Open Drain"
  ld A,#$00
  ld PADR,A           ; Port A Ausgabe (LED leuchtet)
  jp main  

Dabei ist dieser code so simpel. Keine Ahnung, was da falsch läuft.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.