Forum: Mikrocontroller und Digitale Elektronik Timer funktionen in Asm beim AVR


von Jokey (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich schreibe/bzw. versuche gerade ein (für mich) doch etwas 
umfangreicheres Prog zu schreiben.Ich hing schon paar mal,aber das Forum 
hat mir da doch immer weiter geholfen,nur bei meinem folgenden Problem 
nicht.
Zum Hintergrund:
Es soll ein μC werden, bei dem ich eine Taste drücke,dann z.bsp. 2s 
später ein LED leuchtet und diese soll dann 1ßs leuchten.Drücke ich nun 
in der zwischenzeit den gleichen Taster nochmal,dann bricht das Prog ab 
und keine LED leuchtet.
Das Problem ist dann meine LED gleich bei Tastendruck leuchtet,bring ich 
dann die Prozedur "zeit2s davor,dann will sie gar ned mehr.
Also was mache ich falsch?

von troll (Gast)


Lesenswert?

Also Quellcode als Bild ist schon mal sehr falsch, wie soll man das 
assemblieren/simulieren?

von der alte Hanns (Gast)


Lesenswert?

Ist das wirklich Ihr Ernst?
rcall ohne ret, und das ist nur eines von mindestens einem Dutzend 
Problemen.

von Eumel (Gast)


Lesenswert?

Jokey schrieb:
> Hallo zusammen,
> ich schreibe/bzw. versuche gerade ein (für mich) doch etwas
> umfangreicheres Prog zu schreiben.Ich hing schon paar mal,aber das Forum
> hat mir da doch immer weiter geholfen,nur bei meinem folgenden Problem
> nicht.
> Zum Hintergrund:
> Es soll ein μC werden, bei dem ich eine Taste drücke,dann z.bsp. 2s
> später ein LED leuchtet und diese soll dann 1ßs leuchten.Drücke ich nun
> in der zwischenzeit den gleichen Taster nochmal,dann bricht das Prog ab
> und keine LED leuchtet.
> Das Problem ist dann meine LED gleich bei Tastendruck leuchtet,bring ich
> dann die Prozedur "zeit2s davor,dann will sie gar ned mehr.
> Also was mache ich falsch?

Mach das AVR Tutorial hier auf der Seite von Anfang an durch und lies 
das Datenblatt deines Controllers.

von Jokey (Gast)


Lesenswert?

Danke schon mal für die Antworten...
1.) auch mit "ret" (was ich leider übersehen habe) funzt es ned
2.) mit dem Bild: ich hab mich da an die vorgabe von hier gehalten, ich 
hätte es auch gerne in einem anderen format hochgeladen,aber danke dafür 
hust
3.)das tutorial habe ich bereits durch...
4.)bitte um aufklärung zwecks der dutzend fehler???

von troll (Gast)


Lesenswert?

Jokey schrieb:
> 2.) mit dem Bild: ich hab mich da an die vorgabe von hier gehalten, ich
> hätte es auch gerne in einem anderen format hochgeladen,aber danke dafür
Wo bitte steht das man Code als Bild hochladen soll?

von Eumel (Gast)


Lesenswert?

Jokey schrieb:
> 3.)das tutorial habe ich bereits durch...

Ja, einmal überflogen oder so. Anständig durcharbeiten!

von der alte Hanns (Gast)


Lesenswert?

Also eigentlich kann ich mich Eumel nur anschließen. Aber:
Wie sieht denn jetzt das Programm aus? Am besten, nachdem Sie 
stillgelegte Befehle entfernt haben.
Ansonsten z.B.: hinter WGLOOP2: R1 ! ?

von Jokey (Gast)


Lesenswert?

@troll: dein comment hilft mir nicht weiter und is auch off-topic...
update: mit den zeiten hab ich es jetzt hinbekommen, nur noch nicht mit 
dem ausbrechen aus der 10s schleife noch nicht

von Jokey (Gast)


Lesenswert?

@hans: ja,das hab ich auch schon gesehen und behoben :)

von Jokey (Gast)


Lesenswert?

main:  ldi  r16,lo8(RAMEND)
  out  SPL,r16
  ldi  r16,hi8(RAMEND)
  out  SPH,r16
  ;Hier Init-Code eintragen
;----------------------------------------------------------------------- 
-
  cbi  DDRB,0  ;b0 auf eingang
  sbi  PORTB,0 ;pullup widerstand
  sbi  DDRB,1  ;b1 auf ausgang
  sbi  DDRC,0  ;c0 auf ausgang(status led)
;----------------------------------------------------------------------- 
-
mainloop:  wdr
  sbi  PORTC,0
  sbic  PINB,0  ;taste auswerten
  rcall  LEDOFF
  rcall  LEDON


;----------------------------------------------------------------------- 
-
LEDON:  rcall  ZEIT2S
  sbi  PORTB,1   ;zeit-led einschalten
  rcall  ZEIT10S
  rjmp  mainloop
  ;rcall  LEDOFF
  ret

LEDOFF:  cbi  PORTB,1  ;zeit-led ausschalten
  rjmp  mainloop
  ret

;----------------------------------------------------------------------- 
-
ZEIT10S:
; delaying 36863838 cycles:
            ldi  R17,246
WGLOOP0:    ldi  R18,222
WGLOOP1:    ldi  R19,224
WGLOOP2:    dec  R19
  brne WGLOOP2
  dec  R18
            brne WGLOOP1
            dec  R17
            brne WGLOOP0

; -----------------------------
; delaying 162 cycles:
            ldi  R17,54
WGLOOP3:    dec  R17
            sbic PINB,0
  rcall LEDOFF
            brne WGLOOP3
            ret
; =============================
ZEIT2S:

; delaying 7372782 cycles:
            ldi  R17, 54
WGLOOP4:    ldi  R18, 185
WGLOOP5:    ldi  R19, 245
WGLOOP6:    dec  R19
            brne WGLOOP6
            dec  R18
            brne WGLOOP5
            dec  R17
            brne WGLOOP4
; -----------------------------
; delaying 18 cycles:
           ldi  R17, 6
WGLOOP7:    dec  R17
            brne WGLOOP7
            ret
; =============================

von der alte Hanns (Gast)


Lesenswert?

ret, und davor steht rjmp - Jokey, Sie sind entweder ein Troll oder 
etwas unbedarft. Im letzteren Fall sollten Sie Eumels (wirklich gut 
gemeinten) Rat befolgen.


"Ech ben ein alter Mann und gähe leber fröh ins Bette."

von Spess53 (Gast)


Lesenswert?

Hi

>update: mit den zeiten hab ich es jetzt hinbekommen, nur noch nicht mit
>dem ausbrechen aus der 10s schleife noch nicht

Wirst du auch nicht so einfach. Und jede Erweiterung wird ein weiterer 
Krampf. Als Tip: Nimm deinen Thread-Titel mal wörtlich und benutze einen 
richtigen Timer. Da hast du nämlich unendlich Zeit auch noch etwas 
anderes zu machen als den Controller mit Delays zu blockieren.

MfG spess

von Jokey (Gast)


Lesenswert?

danke für eure "kritischen" hinweise...habs selbst hinbekommen....

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
Noch kein Account? Hier anmelden.