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

Weitere Notizen (Aufgabe) und Beispiele 31.5.2022

parent 46ccf994
No related branches found
No related tags found
No related merge requests found
.file "blink.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.section .text.startup,"ax",@progbits
.global pruzzel
.type pruzzel, @function
pruzzel:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
ldi r24,0xff /* Lade die Zahl 0xff (unmittelbar - immediately) in das Register r24 */
sts 0x24,r24 /* Speichere das Register r24 in der Speicherzelle Nr. 0x24 (= DDRB) */
/* --> Wir verwenden alle 8 Bit von PORTB als Outputs. */
.L3: /* Hier beginnt die Endlosschleife. */
sts 0x25,__zero_reg__ /* Speichere ein Register mit dem Inhalt 0 in der Speicherzelle Nr. 0x25 (= PORTB) --> alle LEDs aus */
ldi r18,lo8(799999) /* Warte 0.5 Sekunden: zähle von 799999 bis 0 */
ldi r19,hi8(799999) /* Jeder Assembler-Befehl dauert 1 Takt = 1 / 16000000 Sekunde */
ldi r25,hlo8(799999) /* Wir haben ausgerechnet, daß dann die ganze Schleife ziemlich genau */
1: subi r18,1 /* 0.5 Sekunden dauert. */
sbci r19,0
sbci r25,0
brne 1b /* Ende der Schleife */
rjmp . /* 2 Befehle, die nichts tun: auf genau 0.5 Sekunden aufrunden */
nop
/* Schalte die rote LED ein */
/* In C: PORTB |= 0x10 */
lds r24,0x25 /* Register r24 von Speicherzelle 0x25 laden */
ori r24,0x10 /* Register r24 mit Maske Oder-verknüpfen */
sts 0x25,r24 /* Register r24 an Speicherzelle 0x25 speichern */
ldi r18,lo8(799999) /* 0.5 Sekunden warten */
ldi r19,hi8(799999)
ldi r25,hlo8(799999)
1: subi r18,1
sbci r19,0
sbci r25,0
brne 1b
rjmp .
nop
rjmp .L3 /* Sprung nach oben: Endlosschleife */
.size pruzzel, .-pruzzel
.ident "GCC: (GNU) 5.4.0"
...@@ -2,3 +2,8 @@ Aus dem Datenblatt des ATMega 328P, Seite 615, erfahren wir: ...@@ -2,3 +2,8 @@ Aus dem Datenblatt des ATMega 328P, Seite 615, erfahren wir:
Die Variable DDRD liegt an Speicherzelle 0x2a. Die Variable DDRD liegt an Speicherzelle 0x2a.
Die Variable PORTD liegt an Speicherzelle 0x2b. Die Variable PORTD liegt an Speicherzelle 0x2b.
Aufgabe für nächste Woche:
Programmiere eine Verkehrsampel (rot, rot-gelb, grün, gelb, Schleife)
auf einem ATMega-Prozessor (Arduino) in Assembler.
#include <stdint.h>
uint8_t x = 3;
int main (void)
{
x |= 6;
x &= 4;
return 1117;
}
.file "variables-03.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.global x
.data
.type x, @object
.size x, 1
x:
.byte 3
.text
.global main
.type main, @function
main:
push r28
push r29
in r28,__SP_L__
in r29,__SP_H__
/* prologue: function */
/* frame size = 0 */
/* stack size = 2 */
.L__stack_usage = 2
lds r24,x
ori r24,lo8(6)
sts x,r24
lds r24,x
andi r24,lo8(4)
sts x,r24
ldi r24,lo8(93)
ldi r25,lo8(4)
/* epilogue start */
pop r29
pop r28
ret
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
.global __do_copy_data
.file "variables-03.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(4)
sts x,r24
ldi r24,lo8(93)
ldi r25,lo8(4)
ret
.size main, .-main
.global x
.data
.type x, @object
.size x, 1
x:
.byte 3
.ident "GCC: (GNU) 5.4.0"
.global __do_copy_data
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment