Skip to content
Snippets Groups Projects
Commit e2a2949b authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

blink-01.S: interne LED des Arduino ansteuern

parent 2c4a1698
Branches
No related tags found
No related merge requests found
extern void asm_main (void);
int main (void)
{
asm_main ();
}
%.elf: %.c
avr-gcc -Wall -Os -mmcu=atmega328p $< -o $@
%.elf: %.S
avr-gcc -Wall -Os -mmcu=atmega328p BlinkAsm.c $< -o $@
%.hex: %.elf
avr-objcopy -O ihex $< $@
download:
./download.sh
......@@ -6,15 +6,15 @@
asm_main: ; Einsprungpunkt: Hier geht's los.
ldi r24,0xff ; Alle 8 Anschlüsse auf "Output" schalten
out 0x0a,r24 ; In DDRD schreiben (Port Nr. 0x0a, Speicherzelle 0x2a)
out 0x04,r24 ; In DDRB schreiben (Port Nr. 0x0a, Speicherzelle 0x24)
loop:
ldi r24,0x00 ; LED ausschalten (angeschlossen an Ausgang Nr. 2)
out 0x0b,r24 ; In PORTD schreiben (Port Nr. 0x0b, Speicherzelle 0x2b)
out 0x05,r24 ; In PORTB schreiben (Port Nr. 0x0b, Speicherzelle 0x25)
ldi r26,lo8(7999999) ; Warteschleife: von 7999999 rückwärts bis 0 zählen
ldi r22,hi8(7999999) ; Die 24-Bit-Zahl 7999999 in 3 8-Bit-Register
ldi r23,hlo8(7999999)
ldi r26,lo8(799999) ; Warteschleife: von 799999 rückwärts bis 0 zählen
ldi r22,hi8(799999) ; Die 24-Bit-Zahl 799999 in 3 8-Bit-Register
ldi r23,hlo8(799999)
1:
subi r26,1 ; Subtrahiere 1 von den untersten 8 Bit
sbci r22,0 ; Subtrahiere 0 von den mittleren 8 Bit, berücksichtige Übertrag (carry)
......@@ -23,12 +23,12 @@ loop:
rjmp .
nop
ldi r24,0x04 ; LED einschalten (angeschlossen an Ausgang Nr. 2)
out 0x0b,r24 ; In PORTD schreiben (Port Nr. 0x0b, Speicherzelle 0x2b)
ldi r24,0x20 ; LED einschalten (angeschlossen an Bit 5 von Port B, Ausgang Nr. 13 des Arduino)
out 0x05,r24 ; In PORTB schreiben (Port Nr. 0x0b, Speicherzelle 0x25)
ldi r26,lo8(7999999) ; 1 Taktzyklus
ldi r22,hi8(7999999) ; 1 Taktzyklus
ldi r23,hlo8(7999999) ; 1 Taktzyklus --> 3 Taktzyklen vor der Schleife
ldi r26,lo8(799999) ; 1 Taktzyklus
ldi r22,hi8(799999) ; 1 Taktzyklus
ldi r23,hlo8(799999) ; 1 Taktzyklus --> 3 Taktzyklen vor der Schleife
1:
subi r26,1 ; 1 Taktzyklus
sbci r22,0 ; 1 Taktzyklus
......@@ -39,7 +39,7 @@ loop:
nop ; 1 Taktzyklus lang nichts machen
; --> zusätzlich zu der Schleife weitere 3 + 3 = 6 Taktzyklen warten
; --> Die Schleife wird sozusagen 8000000 mal durchlaufen
; (7999999 Durchläufe + Extra-Taktzyklen)
; (799999 Durchläufe + Extra-Taktzyklen)
; und verbraucht dabei jedesmal 5 Taktzyklen.
; Bei 16000000 Taktzyklen pro Sekunde sind das insgesamt 2.5 Sekunden.
jmp loop
port=$(ls -rt /dev/ttyACM* | tail -1)
echo avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1)
avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1) 2>/dev/null
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment