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
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 ";"...
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?
Kann es daran liegen, daß Du oben "Loop0" (Loop Null) und unten "Lopo" schreibst? MfG Paul
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...
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?
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?
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
Na Entprellen musst du es schon... sonst würd das nix. Hast du wenigstens Pullups oder Pulldowns an den Schaltern?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.