TTL-Gatter, Atmega 8, MIPS Assembler

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1488
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Re: TTL-Gatter, Atmega 8, MIPS Assembler

Beitrag von davidvajda.de »

gut, dann machen wir unsere innere zählschleife

Code: Alles auswählen

ldi, r2, 0xff
label1:
dec r2
breqz (oder irgendwas) r2, label1
so, etwas in der Art. Und das machen wir jetzt genau, bis es es stimmt, weil ich bin mir mir breqz nicht sicher.

Nein, das gibt es nicht, aber

Code: Alles auswählen

breq
brne
brge
brlt
Gut, dann muss ich mir die Syntax von breq genau angucken.

Es ist nicht wie bei MIPS sondern wie bei INTEL, hier gibt es den CMP Befehl. Bei MIPS geht es ohne

Erst Vergleichen, dann Springen

Bei MIPS wie gesagt ohne das ist architekturabhängig, und beim Atmega heisst, der cpi

Das CMP bei Intel heisst bei Atmega
Und das vergleicht

Code: Alles auswählen

r2, mit 0
also

Code: Alles auswählen

cpi r2, 0
Und dann kommt

Code: Alles auswählen

brne label1
Also,

Code: Alles auswählen

ldi, r2, 0xff
label1:
dec r2
cpi r2, 0
brne r2, label1
probieren wir es aus

So geht es

Code: Alles auswählen

.include "m8def.inc"

ldi r17, 0xff
label2:
ldi r16, 0xff
label1:
dec r16
cpi r16, 0
brne label1
dec r17
cpi r17, 0
brne label2
Jetzt kommt eine zweite Schleife drum rum.

So geht es

Code: Alles auswählen

.include "m8def.inc"

ldi r17, 0xff
label2:
ldi r16, 0xff
label1:
dec r16
cpi r16, 0
brne label1
dec r17
cpi r17, 0
brne label2
Jetzt ersparen wir uns die Funktion und machen ein Jump und dahinter auch ein Jump hin.

So, müsste der Code gehen

Code: Alles auswählen

.include "m8def.inc"

ldi r16, 0xFF
out DDRD, r16
ldi r16, 0x00
label0:
inc r16
out PORTD, r16

ldi r18, 0xff
label2:
ldi r17, 0xff
label1:
dec r17
cpi r17, 0
brne label1
dec r18
cpi r18, 0
brne label2
rjmp label0
Ich übertrage ihn mit avrdude an den Programmer und dann sehen wir, was raus kommt.

Das hier funktioniert prima ist aber ein Atmega88 und deswegen m88def.inc
Jetzt ein Video

Antworten