Problem mit Timer

OP #1450047
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:
1
main:            ; Unser Einsprungspunkt "Main"
2
  rsp          ; Stackpointer zurücksetzen
3
  ld A,#255        
4
  ld PADDR,A        ; Port A als Ausgang konfigurieren
5
  ld A,#0                      
6
  ld PAOR,A        ; Port A Option "Open Drain"
7
  ld PADR,A           ; Port A Ausgabe Null (LED leuchtet)
8
  rim
9
  ld A,LTICR
10
  ld A,#$30        ; Wert für Lite Timer f8 
11
  ld LTCSR1,A        ; Timer-Register beladen
12
TimerInterrupt:  
13
  ld A,PADR          ; Port A in Register laden
14
  xor A,#$FF         ; Port ver-xor-en
15
  ld PADR,A          ; Ausgabe
16
test:  jp test
#1450064
Иван 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
OP #1450082
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.
OP #1450204
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.
1
main:            ; Unser Einsprungspunkt "Main"
2
  rsp          ; Stackpointer zurücksetzen
3
  ld A,#255        
4
  ld PADDR,A        ; Port A als Ausgang konfigurieren
5
  ld PAOR,A        ; Port A Option "Open Drain"
6
  ld PADR,A           ; Port A Ausgabe (LED dunkel)
7
  rim          ; Enable Interrupt
8
  ld A,LTICR
9
  ld A,#0
10
  ld LTARR,A
11
  ld A,#$20        ; Wert für Lite Timer Control Register A 
12
  ld LTCSR1,A        ; Timer-Register beladen
13
  ld A,#2          ; Timer Interrupt aktivieren
14
  ld LTCSR2,A
15
gogo:  jp gogo
16
Timer:  ld A,PADR        ; Port A auslesen
17
  xor A,#%11111111      ; ver-xor-en
18
  ld PADR,A        ; Ausgabe
19
  ld A,#255
20
dec1:  dec A
21
  jrne dec1
22
  ld A,#255
23
dec2:  dec A          ; Verzögerungsschleifen      
24
  jrne dec2
25
  ld A,#255
26
dec3:   jrne dec3
27
  iret
OP #1450411
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.
1
main:            ; Unser Einsprungspunkt "Main"
2
  rsp          ; Stackpointer zurücksetzen
3
  ld A,#$FF        
4
  ld PADDR,A        ; Port A als Ausgang konfigurieren
5
  ld PAOR,A        ; Port A Option "Open Drain"
6
  ld A,#$00
7
  ld PADR,A           ; Port A Ausgabe (LED leuchtet)
8
  jp main

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.