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

Vortragsfolien, Notizen und Beispiele 7.6.2023

parent 45a267a6
No related branches found
No related tags found
No related merge requests found
Showing
with 456 additions and 2 deletions
No preview for this file type
......@@ -55,7 +55,7 @@
\title{Rechnertechnik}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{31.\ Mai 2022}
\date{31.\ Mai 2023}
\begin{document}
......@@ -86,6 +86,7 @@
\item[4.1] Bit-Operationen
\color{red}
\item[4.2] I/O-Ports
\color{black}
\item[4.3] Interrupts
% \item[4.1] volatile-Variable
\item[\dots]
......@@ -595,7 +596,7 @@
\begin{frame}[fragile]
\showsubsubsection
\showsubsection
\textbf{Übungsaufgabe:}
......
%.elf: %.c
avr-gcc -Wall -Os -mmcu=atmega328p $< -o $@
%.hex: %.elf
avr-objcopy -O ihex $< $@
download:
./download.sh
#include <avr/io.h>
#define F_CPU 16000000
#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 (250);
PORTD = 0x00; /* Hexadezimalzahl. Binär: 0000 0000 */
_delay_ms (250);
PORTD = 0x04; /* Hexadezimalzahl. Binär: 0000 1000 */
} /* Bits zählen: ^ ^ ^------ Bit 0 */
return 0; /* rechts anfangen | `--------- Bit 3 */
} /* mit 0 anfangen `------------ Bit 5 */
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
int main (void)
{
DDRD = 0xfe; // 7 Ausgänge als Outputs verwenden, einen, nämlich Bit 0, als Input
PORTD = 0x04; // Bit Nr. 2 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
while (1)
{
if ((PIND & 0x01) != 0)
{
_delay_ms (250);
PORTD = 0x00;
_delay_ms (250);
PORTD = 0x04;
}
}
return 0;
}
.file "blink-02.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(-2) ; #include <avr/io.h>
out 0xa,r24 ;
ldi r24,lo8(4) ; #define F_CPU 16000000
.L6: ; #include <util/delay.h>
out 0xb,r24 ;
.L2: ; int main (void)
sbis 0x9,0 ; {
rjmp .L2 ; DDRD = 0xfe; // 7 Ausgänge als Outputs verwenden, einen, nämlich Bit 0, als Input
ldi r18,lo8(799999) ; PORTD = 0x04; // Bit Nr. 2 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
ldi r19,hi8(799999) ; while (1)
ldi r25,hlo8(799999) ; {
1: subi r18,1 ; if ((PIND & 0x01) != 0)
sbci r19,0 ; {
sbci r25,0 ; _delay_ms (250);
brne 1b ; PORTD = 0x00;
rjmp . ; _delay_ms (250);
nop ; PORTD = 0x04;
out 0xb,__zero_reg__ ; }
ldi r18,lo8(799999) ; }
ldi r19,hi8(799999) ; return 0;
ldi r25,hlo8(799999) ; }
1: subi r18,1
sbci r19,0
sbci r25,0
brne 1b
rjmp .
nop
rjmp .L6
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
.file "blink-03.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.global __mulsf3
.global __ltsf2
.global __gtsf2
.global __fixunssfsi
.text
.global main
.type main, @function
main:
push r28
push r29
in r28,__SP_L__
in r29,__SP_H__
sbiw r28,14
in __tmp_reg__,__SREG__
cli
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28
/* prologue: function */
/* frame size = 14 */
/* stack size = 16 */
.L__stack_usage = 16
ldi r24,lo8(42)
ldi r25,0
ldi r18,lo8(-2)
movw r30,r24
st Z,r18
ldi r24,lo8(43)
ldi r25,0
ldi r18,lo8(4)
movw r30,r24
st Z,r18
.L11:
ldi r24,lo8(41)
ldi r25,0
movw r30,r24
ld r24,Z
mov r24,r24
ldi r25,0
andi r24,1
clr r25
or r24,r25
breq .L11
ldi r24,0
ldi r25,0
ldi r26,lo8(-6)
ldi r27,lo8(67)
std Y+1,r24
std Y+2,r25
std Y+3,r26
std Y+4,r27
ldi r18,0
ldi r19,0
ldi r20,lo8(122)
ldi r21,lo8(69)
ldd r22,Y+1
ldd r23,Y+2
ldd r24,Y+3
ldd r25,Y+4
call __mulsf3
movw r26,r24
movw r24,r22
std Y+5,r24
std Y+6,r25
std Y+7,r26
std Y+8,r27
ldi r18,0
ldi r19,0
ldi r20,lo8(-128)
ldi r21,lo8(63)
ldd r22,Y+5
ldd r23,Y+6
ldd r24,Y+7
ldd r25,Y+8
call __ltsf2
tst r24
brge .L14
ldi r24,lo8(1)
ldi r25,0
std Y+10,r25
std Y+9,r24
rjmp .L5
.L14:
ldi r18,0
ldi r19,lo8(-1)
ldi r20,lo8(127)
ldi r21,lo8(71)
ldd r22,Y+5
ldd r23,Y+6
ldd r24,Y+7
ldd r25,Y+8
call __gtsf2
cp __zero_reg__,r24
brge .L15
ldi r18,0
ldi r19,0
ldi r20,lo8(32)
ldi r21,lo8(65)
ldd r22,Y+1
ldd r23,Y+2
ldd r24,Y+3
ldd r25,Y+4
call __mulsf3
movw r26,r24
movw r24,r22
movw r22,r24
movw r24,r26
call __fixunssfsi
movw r26,r24
movw r24,r22
std Y+10,r25
std Y+9,r24
rjmp .L8
.L9:
ldi r24,lo8(-112)
ldi r25,lo8(1)
std Y+12,r25
std Y+11,r24
ldd r24,Y+11
ldd r25,Y+12
/* #APP */
; 105 "/usr/lib/avr/include/util/delay_basic.h" 1
1: sbiw r24,1
brne 1b
; 0 "" 2
/* #NOAPP */
std Y+12,r25
std Y+11,r24
ldd r24,Y+9
ldd r25,Y+10
sbiw r24,1
std Y+10,r25
std Y+9,r24
.L8:
ldd r24,Y+9
ldd r25,Y+10
or r24,r25
brne .L9
rjmp .L10
.L15:
ldd r22,Y+5
ldd r23,Y+6
ldd r24,Y+7
ldd r25,Y+8
call __fixunssfsi
movw r26,r24
movw r24,r22
std Y+10,r25
std Y+9,r24
.L5:
ldd r24,Y+9
ldd r25,Y+10
std Y+14,r25
std Y+13,r24
ldd r24,Y+13
ldd r25,Y+14
/* #APP */
; 105 "/usr/lib/avr/include/util/delay_basic.h" 1
1: sbiw r24,1
brne 1b
; 0 "" 2
/* #NOAPP */
std Y+14,r25
std Y+13,r24
.L10:
ldi r24,lo8(43)
ldi r25,0
ldi r18,lo8(43)
ldi r19,0
movw r30,r18
ld r19,Z
ldi r18,lo8(4)
eor r18,r19
movw r30,r24
st Z,r18
rjmp .L11
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
int main (void)
{
DDRD = 0xfe; // 7 Ausgänge als Outputs verwenden, einen, nämlich Bit 0, als Input
PORTD = 0x04; // Bit Nr. 2 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
while (1)
{
if ((PIND & 0x01) != 0)
{
_delay_ms (500);
PORTD ^= 0x04;
}
}
return 0;
}
.file "blink-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(-2)
out 0xa,r24
ldi r24,lo8(4)
out 0xb,r24
ldi r25,lo8(4)
.L2:
sbis 0x9,0
rjmp .L2
ldi r18,lo8(1599999)
ldi r19,hi8(1599999)
ldi r24,hlo8(1599999)
1: subi r18,1
sbci r19,0
sbci r24,0
brne 1b
rjmp .
nop
in r24,0xb
eor r24,r25
out 0xb,r24
rjmp .L2
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
#include <avr/io.h>
#include <avr/interrupt.h>
ISR (TIMER0_COMPB_vect)
{
PORTD ^= 0x04;
}
int main (void)
{
cli ();
TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */
TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */
sei ();
DDRD = 0xfe; // Bit Nr. 0 als Input nutzen
PORTD = 0x04; // Bit Nr. 3 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
while (1)
; /* do very imporant stuff */
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
ISR (TIMER0_COMPB_vect)
{
static uint8_t counter = 0;
if (counter++ == 0)
PORTD ^= 0x04;
}
int main (void)
{
cli ();
TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */
TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */
sei ();
DDRD = 0xfe; // Bit Nr. 0 als Input nutzen
PORTD = 0x04; // Bit Nr. 3 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
while (1)
; /* do very imporant stuff */
return 0;
}
.file "blink-05.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.text
.global __vector_15
.type __vector_15, @function
__vector_15:
push r1
push r0
in r0,__SREG__
push r0
clr __zero_reg__
push r24
push r25
/* prologue: Signal */
/* frame size = 0 */
/* stack size = 5 */
.L__stack_usage = 5 ; #include <avr/io.h>
lds r24,counter.1606 ; #include <avr/interrupt.h>
ldi r25,lo8(1) ; #include <stdint.h>
add r25,r24 ;
sts counter.1606,r25 ; ISR (TIMER0_COMPB_vect)
cpse r24,__zero_reg__ ; {
rjmp .L1 ; static uint8_t counter = 0;
in r25,0xb ; if (counter++ == 0)
ldi r24,lo8(4) ; PORTD ^= 0x04;
eor r24,r25 ; }
out 0xb,r24 ;
.L1: ; int main (void)
/* epilogue start */ ; {
pop r25 ; cli ();
pop r24 ; TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */
pop r0 ; TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */
out __SREG__,r0 ; sei ();
pop r0 ; DDRD = 0xfe; // Bit Nr. 0 als Input nutzen
pop r1 ; PORTD = 0x04; // Bit Nr. 3 auf 1 setzen, alle anderen auf 0 ("digitalWrite" für alle 8)
reti ; while (1)
.size __vector_15, .-__vector_15 ; ; /* do very imporant stuff */
.section .text.startup,"ax",@progbits ; return 0;
.global main ; }
.type main, @function
main:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
/* #APP */
; 14 "blink-05.c" 1
cli
; 0 "" 2
/* #NOAPP */
ldi r24,lo8(3)
out 0x25,r24
ldi r24,lo8(4)
sts 110,r24
/* #APP */
; 17 "blink-05.c" 1
sei
; 0 "" 2
/* #NOAPP */
ldi r25,lo8(-2)
out 0xa,r25
out 0xb,r24
.L5:
rjmp .L5
.size main, .-main
.local counter.1606
.comm counter.1606,1,1
.ident "GCC: (GNU) 5.4.0"
.global __do_clear_bss
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
../common/io-ports-and-interrupts.pdf
\ No newline at end of file
../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
File added
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment