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

Vortragsfolien und Beispiel-Assembler-Programm 21.5.2024

parent a67f6bf7
No related branches found
No related tags found
No related merge requests found
#include <avr/io.h>
#define F_CPU 8000000
#include <util/delay.h>
int main (void)
{
DDRD = 0xff; // alle 8 Ausgänge als Outputs verwenden ("pinMode" für alle 8)
PORTD = 0x04; // Bit Nr. 2 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
while (1)
{
_delay_ms (500);
PORTD = 0x00;
_delay_ms (500);
PORTD = 0x04;
}
return 0;
}
.file "blink-01.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.section .text.startup,"ax",@progbits
.global main
.type main, @function
main:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
ldi r24,lo8(-1)
out 0xa,r24
ldi r24,lo8(4) # #include <avr/io.h>
.L3: #
out 0xb,r24 # #define F_CPU 8000000
# Warteschleife: Um bei 16 MHz auf 1/4 Sekunde zu kommen,
# müssen wir 4000000 Taktzyklen lang warten.
# Wir können also z.B. 800000mal etwas tun,
# was 5 Taktzyklen dauert.
# Taktzyklen
ldi r18,lo8(799999) # # #include <util/delay.h>
ldi r19,hi8(799999) # #
ldi r25,hlo8(799999) # # int main (void)
1: subi r18,1 # 1 # {
sbci r19,0 # 1 # DDRD = 0xff; // alle 8 Ausgänge als Outputs verwenden ("pinMode" für alle 8)
sbci r25,0 # 1 # PORTD = 0x04; // Bit Nr. 2 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
brne 1b # 1 oder 2 # while (1)
# 5 Taktzyklen pro Schleifendurchlauf
# 799999 Schleifendurchläufe = 799999 * 5 - 1 = 3999994 Taktzyklen
# Der letzte Schleifendurchlauf hat nur 4 Taktzyklen, weil
# dann das brne nur 1 Taktzyklus braucht.
# Um auf 4000000 Taktzyklen zu kommen, fehlen uns also noch 6 Taktzyklen.
# Drei davon sind die ldi-Befehle. Die anderen drei sind rjmp und nop.
rjmp . # {
# rjmp: 2 Taktzyklen, springt dorthin, wo es ohnehin weiterginge, daher keine Operation
nop # _delay_ms (500);
# nop: 1 Taktzyklus, keine Operation
out 0xb,__zero_reg__ # PORTD = 0x00;
ldi r18,lo8(799999) # _delay_ms (500);
ldi r19,hi8(799999) # PORTD = 0x04;
ldi r25,hlo8(799999) # }
1: subi r18,1 # return 0;
sbci r19,0 # }
sbci r25,0
brne 1b
rjmp .
nop
rjmp .L3
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../common/pgslides.sty
\ No newline at end of file
File added
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment