Ich dreh bald durch? Wer weiß, was dieser Code macht? Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
|
Ich dreh bald durch? Wer weiß, was dieser Code macht? |
|
|
|
|
BID = 71249
X-Plod Neu hier

Beiträge: 25 Wohnort: Salzgitter
|
|
Hallo
So langsam fang ich an, mein Wissen in Frage zu stellen. Ich habe mir mal ein Testcode im Assembler gemacht. Es wird ein ATmega8 angesteuert. Am Port B sind an PB0 bis PB3 LEDs angebracht, die bei hohem Potential (am Port) leuchten! Am Port D ist an PD0 ein Taster angeschlossen, der gedrückt das Potential am Port auf 0 bringt. Also Taster gedrückt -> Potential 0 und Taster nicht gedrückt -> Potential Hoch.
Jetzt will ich zuerst mal sehen, was ihr aus diesem Code erkennt. Was passiert, wenn ich den Taster drücke? Was ich normalerweise bezwecken will, sag ich euch später. Bin erstmal gespannt! Hier der Code:
| Code : |
.include "m8def.inc"
.DEF temp=r17
ldi r16, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, r16
ldi r16, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, r16
ldi r16, 0xFF
out DDRB, r16
ldi r16, 0x00
out DDRD, r16
ldi temp, 0b00000001
out PORTB, r17
loop:
in r16, PIND
ANDI r16, 0b00000001
CPI r16, 0b00000000
BREQ impuls
rjmp loop
impuls:
CPI temp, 0b00001000
BREQ impuls2
rol temp
out PORTB, temp
ret
impuls2:
ldi temp, 0b00000001
out PORTB, temp
rcall loop |
|
|
|
BID = 71253
IngmarJoern Gerade angekommen
Beiträge: 11
|
|
ließt PIND den ganzen Port ein oder nur einen Pin? Und wenn nur den Pin, woher weiß der Compiler welchen?
ich kenne assembler nicht so gut, aber ich denke Dein Auge ist zu langsam das aufblitzen der LEDs (sollen wohl eine nach der anderen kurz aufleuchten solange der Taster gedrückt ist). Baue doch mal eine Zeitschleife ein. |
|
BID = 71256
X-Plod Neu hier

Beiträge: 25 Wohnort: Salzgitter
|
in r16, PIND
liest den ganzen Port ein!
Also gut, es soll folgendes erreicht werden:
Beim Starten Leuchten LED 1 (permanent!). Drückt man den Taster, geht LED 1 aus und LED 2 soll leuchten. Drückt man den Taster erneut, geht LED 2 aus und LED 3 leuchtet. Nochmal den Taster drücken, geht LED 3 aus und LED 4 leuchtet. Beim nochmaligen Drücken, soll alles wieder von vorne anfangen!
Nur wenn ich das bei mir aufbaue und das Programm aufspiele, leuchtet zuerst die nur die LED 1. Drück ich den Schalter, leuchtet LED 2 noch zusätzlich auf, jedoch nur solange ich den Schalter gedrückt halte. Mehr passiert nicht. Ich weiß aber nicht, woran es liegt.
mfg
[ Diese Nachricht wurde geändert von: X-Plod am 26 Mai 2004 18:01 ]
|
BID = 71260
IngmarJoern Gerade angekommen
Beiträge: 11
|
wie hast du den Taster denn entprellt? aus dem code geht nicht hervor, das nur ein impuls kommt.
ausserdem muß am ende von impuls2 ein ret kein rjump
[ Diese Nachricht wurde geändert von: IngmarJoern am 26 Mai 2004 18:14 ]
|
BID = 71263
Benedikt Inventar
      Beiträge: 6241
|
Genau das wollte ich auch grad sagen, aber es geht trotzdem nicht. Ein Problem könnte ROL sein: Rotate Left, Carry
Carry ist nicht definiert... Ich hab vor ROL ein CLC eingefügt und rcall impuls durch ret ersetzt.
Aber trotz all dem, das Programm läuft nicht. Ich verstehs auch nicht.
|
BID = 71269
Magni Gelegenheitsposter
 
Beiträge: 91 Wohnort: Edewecht
|
Hallo,
damit müsste es gehen, ich habe es aber noch nicht ausprobiert ...
| Code : |
.include "m8def.inc"
.DEF temp=r17
ldi r16, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, r16
ldi r16, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, r16
ldi r16, 0xFF
out DDRB, r16
ldi r16, 0x00
out DDRD, r16
ldi temp, 0b00000001
out PORTB, r17
loop:
in r16, PIND
ANDI r16, 0b00000001
CPI r16, 0b00000000
BREQ impuls
rjmp loop
impuls:
CPI temp, 0b00001000
BREQ impuls2
rol temp
out PORTB, temp
rjmp loop
impuls2:
ldi temp, 0b00000001
out PORTB, temp
rjmp loop
|
|
|
BID = 71274
IngmarJoern Gerade angekommen
Beiträge: 11
|
sind eigentlich die pullup widerstände automatisch an den Eingängen aktiviert?
|
BID = 71277
Benedikt Inventar
      Beiträge: 6241
|
Selbst damit gehts nicht, den habe ich auch eingebaut..
|
BID = 71302
Magni Gelegenheitsposter
 
Beiträge: 91 Wohnort: Edewecht
|
Was macht er denn überhaupt?
Geht er überhaupt beim drücken in impuls?
Wenn ja, wird dann der bit in temp richtig nach links verschoben?
Resetet er vielleicht zwischendurch? (hatte ich auch schon alles)
|
BID = 71304
Jornbyte Moderator
      
Beiträge: 7435
|
.include "m8def.inc"
.DEF temp=r17
ldi r16, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, r16
ldi r16, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, r16
ldi r16, 0xFF
out DDRB, r16
ldi r16, 0x00
out DDRD, r16
ldi temp, 0b00000001
out PORTB, r17
loop:
in r16, PortD ; <------- Fehler, muss Portd sein
ANDI r16, 0b00000001
CPI r16, 0b00000000
BREQ impuls
rjmp loop
impuls:
CPI temp, 0b00001000
BREQ impuls2
rol temp
out PORTB, temp
rjmp loop
impuls2:
ldi temp, 0b00000001
out PORTB, temp
rjmp loop
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 71311
IngmarJoern Gerade angekommen
Beiträge: 11
|
ach, also doch 
|
BID = 71325
Benedikt Inventar
      Beiträge: 6241
|
Solange PinD.0 Low ist, toggelt LED2
Beginnt man im Code mit temp=2 (anstelle von Temp=1), blinkt LED 0 und 2 abwechselnd mit LED 1
|
BID = 71339
Magni Gelegenheitsposter
 
Beiträge: 91 Wohnort: Edewecht
|
Dann macht rol vielleicht wirklich Probleme.
Versuch
| Code : |
impuls:
CPI temp, 0b00001000
BREQ impuls2
rol temp
out PORTB, temp
rjmp loop
|
|
in:
| Code : |
impuls:
CPI temp, 0b00001000
BREQ impuls2
CPI temp, 0b00000001
BREQ step1
CPI temp, 0b00000010
BREQ step2
CPI temp, 0b00000100
BREQ step3
step1:
ldi temp, 0b00000010
out PORTB, temp
rjmp loop
step2:
ldi temp, 0b00000100
out PORTB, temp
rjmp loop
step3:
ldi temp, 0b00001000
out PORTB, temp
rjmp loop
|
|
zu ändern um zu gucken obs wirklich an rol liegt.
[ Diese Nachricht wurde geändert von: Magni am 26 Mai 2004 22:03 ]
|
BID = 71447
X-Plod Neu hier

Beiträge: 25 Wohnort: Salzgitter
|
Hallo
Danke für die rege Beteiligung, doch ich denke, dass die Assembler-Sprache einfach nichts für mich ist! Ich habe gestern geguckt, wie es mit C aussieht, da ich diese Sprache kann und siehe da: Mein Vorhaben hat ohne Probleme geklappt und ich konnte auch noch ein Lauflicht erstellen mit 8 LEDs. Um das alles mit einem Assembler hinzubekommen, hätte ich mit Sicherheit noch einen Monat warten und lernen müssen. Vielleicht liegt es auch einfach daran, dass ich kein gutes Tutorial für die Assembler Sprache habe! Bei dem was ich habe, setzt der Autor sehr viel an Fachkenntnis voraus!
Ich werde jetzt jedoch erstmal für unbestimmte Zeit bei C bleiben und auch mein Vorhaben damit realisieren!
mfg
|
BID = 71708
IngmarJoern Gerade angekommen
Beiträge: 11
|
wie jetzt? schon aufgeben? kommt doch gar nicht in die Tüte!
Nur weil es assembler heißt muss es doch nicht unmöglich sein?!!
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 7 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 192389138 Heute : 1015 Gestern : 4012 Online : 772 16.7.2026 9:05 4 Besucher in den letzten 60 Sekunden alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0498960018158
|