Ich dreh bald durch? Wer weiß, was dieser Code macht?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 16 7 2026  16:24:07      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : 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
Zur Homepage von X-Plod ICQ Status  
 

  


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
Zur Homepage von X-Plod ICQ Status  

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
ICQ Status  

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
ICQ Status  

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
ICQ Status  

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
Zur Homepage von X-Plod ICQ Status  

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?!!


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


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 5 Beiträge verfasst
© x sparkkelsputz        Besucher : 192391042   Heute : 2923    Gestern : 4012    Online : 230        16.7.2026    16:24
3 Besucher in den letzten 60 Sekunden        alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0554659366608