Ich versuche nun schon verzweifelt meine billige Warteschleife in betrieb zu nehmen. Hier mein Programmbeispiel: ____________________________________________________ .include "m8535def.inc" rjmp Anfang Anfang: sbi ddrb,0 Initanzeige: rcall warteschleife cbi portb,0 test: rjmp test Warteschleife: ldi r16,255 Warteschleife1: ldi r19,255 Warteschleife2: dec r19 brne Warteschleife2 dec r16 brne Warteschleife1 sbi portb,0 ret ____________________________________________________ Das problem ist, dass er nicht mehr aus der Warteschleife zurück kommt. sbi portb,0 wird noch ausgeführt, aber das cbi portb,0 nicht mehr. Jemand eine ahnung wiso? Das LED leuchtet durchgehend. Und eine 2. Frage hab ich gleich auch noch: Wie kann ich den Takt des Atmegas konfigurieren? Ich hoffe ihr könnt mir helfen :) vielen dank!
Achja was vergessen sorry: Diese Warteschleife hier funktioniert komischerweise: XTAL wurde mit .def XTAL = 8000000 definiert. ldi temp1, ( XTAL * 5 / 607 ) / 1000 WGLOOP0: ldi temp2, $C9 WGLOOP1: dec temp2 brne WGLOOP1 dec temp1 brne WGLOOP0 ret
@ Michi (Gast) >Ich versuche nun schon verzweifelt meine billige Warteschleife in >betrieb zu nehmen. Hier mein Programmbeispiel: Tja, hast du dir mal überlegt oder simuliert, was da passiert? >sbi ddrb,0 Auf Ausgang schalten, OK > rcall warteschleife Schleif hab ich mal vom logischen Ablauf reinkopiert. >Warteschleife: > ldi r16,255 >Warteschleife1: > ldi r19,255 >Warteschleife2: > dec r19 > brne Warteschleife2 > dec r16 > brne Warteschleife1 Zwei verschtelte Schleifen, mit 65536 Durchläufen. > sbi portb,0 LED ein. > ret Zurückspringen > cbi portb,0 LED aus. >test: >rjmp test Endlosschleife Hmm, wenn du mich fragst, verdammt wenig Zeit zum leuchten. ;-) Kann es sein, dass du ein STK500 hast, und die LEDs low active sind? MfG Falk
Du hast das falsch verstanden. das LED leuchtet IMMER! es hört nicht auf zu leuchten. Und da es erst vor dem ret eingeschaltet wird, wird wohl auch da der Fehler sein denke ich. Allerdings finde ich keinen ???? Hab ich eventuell was falsch eingestellt? der Atmega ist Fabrikneu und hab bisher nichts gross umgestellt. ausser "BODEN" auf 1 (bzw auf 0 im AVR)
Wenn die Kathoden (das ist der Minusanschluss) der LEDs am Port hängen werden sie durch cbi portb,0 eingeschaltet und dann geht Dein Programm in die Endlosschleife.
Versuchs mal so.
1 | .include "m8535def.inc" |
2 | |
3 | sbi ddrb,0 |
4 | |
5 | test: |
6 | rcall warteschleife |
7 | cbi portb,0 |
8 | rcall warteschleife |
9 | sbi portb,0 |
10 | rjmp test |
11 | |
12 | Warteschleife: |
13 | ldi r16,255 |
14 | Warteschleife1: |
15 | ldi r19,255 |
16 | Warteschleife2: |
17 | dec r19 |
18 | brne Warteschleife2 |
19 | dec r16 |
20 | brne Warteschleife1 |
21 | ret |
MfG Falk
Hallo, wo ist die Stackpointer-Initialisierung? Gruß aus Berlin Michael
Ihr meint das hier?: ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp1 ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp1 auch wenn ich das ganze miteinbinde ganz am anfang vom Programm funktionierts nicht. Beim Atiny13 den ich vorhher hatte hat alles wunderbar funktioniert. Ich werde morgen mal nochmals einen Versuch machen. Komme heute nicht mehr dazu und schreib dann wies ausgegangen ist. Gruss Michi ;)
@ Michi (Gast) >funktionierts nicht. Beim Atiny13 den ich vorhher hatte hat alles >wunderbar funktioniert. Der hat ja auch einen Hardwarestack. MfG Falk
naja für den hatte ich so n' Starterkit, dass so zimlich alles selber gemacht hat, bzw. eingestellt hat. Daher bin ich mir nicht sicher ob ich nun mit dem AVR und Pinyprog alles richtig mache.
hmm komisch. in einem anderen Programm funktioniert das ganze programm... Ich werde wohl das ganze nochmals anschauen müssen,
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.