Forum: Mikrocontroller und Digitale Elektronik Erstes Programm und Probleme


von Robert (Gast)


Lesenswert?

Moin,
ich hab da ein Problem mit meinen Programm, aus irgendeinen Grund 
funktioniert das nicht so wie es soll.

1..include "include/m32def.inc"
2..def temp0 = r16
3..def temp1 = r17
4..def temp2 = r18
5.
6.  ldi temp0, LOW(RAMEND)
7.  out SPL, temp0
8.  ldi temp0, HIGH(RAMEND)
9.  out SPH, temp0
10.
11.  ldi temp0, 0xFF
12.  out DDRA, temp0
13.
14.  ldi temp1, 0x00
15.  out DDRD, temp1
16.
17.main:
18.  ldi temp0, 0xFF
19.  out PORTA, temp0
20.  ldi temp0, 0x00
21.  out PORTD, temp0
22.
23.loop0:
24.  sbic PIND, 2
25.  rjmp loop1
26. ldi temp2, 0xFE
27.  rcall prog1
28.  rjmp main
29.
30.loop1:
31.  sbic PIND, 3
32.  rjmp loop0
33.  rcall prog2
34.  rjmp main
35.
36.prog1:
37.  sbic PIND, 2
38.  brne lopo
39.
40.  ret
41.
42.lopo:
43.  inc R1
44.  brne prog1
45.  inc R2
46.  brne prog1
47.  rol temp2
48.  out PORTA, temp2
49.  rjmp prog1
50.
51.prog2:
52.  cbi PORTA, 2
53.  cbi PORTA, 4
54.
55.  ldi temp0, 10
56.wait0:  ldi temp1, 0
57.wait1:  ldi temp2, 0
58.wait2:  dec temp2
59.  brne wait2
60.  dec temp1
61.  brne wait1
62.  dec temp0
63.  brne wait0
64.
65.  ret

Man kann das  erste Unterprogramm als erstes mehrmals aufrufen, aber 
sobald man das zweite Unterprogramm das erste mal aufgerufen hat kommt 
man nicht mehr ins erstes Programm zurück, man kann nur noch das zweite 
Unterprogramm durchlaufen lassen, das funktioniert dann als einzigstes.

Wenn einer nen Vorschlag hat, waere das hilfreich, auch wie man das 
Programm effecktiver gestalten kann, hab jetzt das Wochenende mit 
avr-asm angefangen, hab da also noch nicht die Erfahrung.

Gruß Robert

von Johannes M. (johnny-m)


Lesenswert?

Robert wrote:
> ich hab da ein Problem mit meinen Programm, aus irgendeinen Grund
> funktioniert das nicht so wie es soll.
Ich hab da auch ein Problem mit. Ich kann nicht ersehen, was das 
Programm denn überhaupt machen soll. Auch wenn Du mit Assembler erst 
anfängst, solltest Du Deine Programme kommentieren. Falls nicht bekannt: 
Das Kommentarzeichen ist ";"...

von Denis (Gast)


Lesenswert?

ohne stack läuft das auch nicht, siehe stack im tutorial (hier)

von Johannes M. (johnny-m)


Lesenswert?

Denis wrote:
> ohne stack läuft das auch nicht, siehe stack im tutorial (hier)
Nun, wenigstens das kann man auch ohne Kommentar erkennen: Schau Dir 
bitte mal die Zeilen 6-9 in Roberts Code an. Hast Du das Programm 
überhaupt angeschaut, bevor Du das geschrieben hast?

von Paul Baumann (Gast)


Lesenswert?

Kann es daran liegen, daß Du oben "Loop0" (Loop Null) und unten "Lopo"
schreibst?

MfG Paul

von Johannes M. (johnny-m)


Lesenswert?

Paul Baumann wrote:
> Kann es daran liegen, daß Du oben "Loop0" (Loop Null) und unten "Lopo"
> schreibst?
"lopo" gibts unterhalb von "prog1" auch. Ich hab auch schon mal gesucht, 
ob irgendwo ein ret fehlt. Bisher ohne Ergebnis...

von Micha R. (Gast)


Lesenswert?

1
51.prog2:
2
52.  cbi PORTA, 2
3
53.  cbi PORTA, 4
4
54.
5
55.  ldi temp0, 10
6
56.wait0:  ldi temp1, 0
7
57.wait1:  ldi temp2, 0
8
58.wait2:  dec temp2
9
59.  brne wait2
10
60.  dec temp1
11
61.  brne wait1
12
62.  dec temp0
13
63.  brne wait0

Kannst du mir mal erklären, was du damit bezwecken willst?

von Micha R. (Gast)


Lesenswert?

1
loop0:
2
24.  sbic PIND, 2

Was ist mit den beiden Pins 2 und 3?

Hast du da Tasterchen dran? Ziehen die auf GND oder auf Vcc?

von Robert (Gast)


Lesenswert?

Ja, sorry, das mit dem kommentieren ist nicht gerade meine Staerke. Das 
Programm funktioniert ja soweit, es ist nur das Problem, dass wenn ich 
nach dem ersten Unterprogramm, das zweite Unterprogramm starte, das ich 
nicht mehr das erste Unterprogramm starten kann, nur noch das zweite. 
Die Unterprogramme werden ueber eine Tasterabfrage gestartet, da ist 
aber auch das Problem, dass das erste Unterprogramm, welches ein 
Lauflicht ist, nicht sofort startet, sondern erst nach eine paar mal 
druecken, dachte das koennte mit der nicht Entprellung zu tun haben?

Gruß Robert

von Micha R. (Gast)


Lesenswert?

Na Entprellen musst du es schon... sonst würd das nix.
Hast du wenigstens Pullups oder Pulldowns an den Schaltern?

von Robert (Gast)


Lesenswert?

Jo, pullup widerstaende sind dran. Kay wenn`s am Entprellen liegt, schau 
ich mir das mal mit an.

Gruß Robert

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.