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

Beispiele, Screenshots und Tafelbilder 9.11.2023

parent 79153605
No related branches found
No related tags found
No related merge requests found
Showing
with 404 additions and 0 deletions
2^14 ist nicht "2 hoch 14", sondern "2 xor-verknüpft mit 14".
Wie rechnet man das aus?
Binär rechnen:
14 = 15 - 1 = 1111 - 0001 = 1110
(dezimal) (binär)
2 = 10
(dezimal) (binär)
0010
^ 1110
----
1100
Alternative: 2^14 ist dasselbe wie 14^2
1110
^ 0010 <-- dieses eine Bit umklappen, die anderen beibehalten
----
1100
#include <avr/io.h>
int main (void)
{
DDRD = 0x40; /* binär: 0100 0000 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9444000C940000F1
:0C00800080E48AB98BB9FFCFF894FFCF61
:00000001FF
#include <avr/io.h>
int main (void)
{
DDRD = 0xff; /* binär: 1111 1111 */
PORTD = 0x42; /* binär: 0100 0010 */
while (1);
return 0;
}
#include <avr/io.h>
#define F_CPU 16000000l
#include <util/delay.h>
int main (void)
{
DDRD = 0x01;
PORTD |= 0x01;
while (1)
{
_delay_ms (500);
PORTD &= ~0x01;
_delay_ms (500);
PORTD |= 0x01;
}
return 0;
}
#include <avr/io.h>
#define F_CPU 16000000l
#include <util/delay.h>
int main (void)
{
DDRD = 0x02; /* binär: 0000 0010 */
PORTD = 0x02;
while (1)
{
_delay_ms (250);
PORTD ^= 0x02;
}
return 0;
}
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
int main (void)
{
DDRD = 0x01;
PORTD = 0x01;
while (1)
{
while ((PIND & 0x02) == 0)
; /* just wait */
PORTD ^= 0x01;
}
return 0;
}
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
int main (void)
{
DDRD = 0x01; /* binär: 0000 0001 */
PORTD = 0x01; /* ^ Ouptut */
while (1) /* ^ Input */
{
while ((PIND & 0x02) == 0) /* binär: 0000 0010 */
; /* just wait */
PORTD ^= 0x01;
_delay_ms (200);
}
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
ISR (TIMER0_COMPB_vect)
{
PORTD ^= 0x40;
}
int main (void)
{
cli ();
TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */
TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */
sei ();
DDRD = 0xfd; /* binär: 1111 1101 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
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 ^= 0x40;
}
int main (void)
{
cli ();
TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */
TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */
sei ();
DDRD = 0xfd; /* binär: 1111 1101 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
ISR (INT0_vect) /* PD2 */
{
PORTD ^= 0x40;
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xfb; /* binär: 1111 1011 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
ISR (INT0_vect) /* PD2 */
{
PORTD ^= 0x40;
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xff; /* binär: 1111 1111 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define F_CPU 16000000l
#include <util/delay.h>
ISR (INT0_vect) /* PD2 */
{
PORTD ^= 0x40;
_delay_ms (1); /* Wartezeit zum Entprellen. --> HIER FALSCH! */
/* Warteschleifen gehören nicht in einen Interrupt-Handler! */
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xff; /* binär: 1111 1111 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define F_CPU 16000000l
#include <util/delay.h>
uint8_t key_pressed = 0;
ISR (INT0_vect) /* PD2 */
{
key_pressed = 1;
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xfb; /* binär: 1111 1011 */
PORTD = 0x44; /* binär: 0100 0100 */
while (1)
{
while (!key_pressed)
; /* just wait */
PORTD ^= 0x40;
_delay_ms (1); /* Wartezeit zum Entprellen */
key_pressed = 0;
}
return 0;
}
.file "blink-9.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.text
.global __vector_1
.type __vector_1, @function
__vector_1:
push r1
push r0
in r0,__SREG__
push r0 ; #include <avr/io.h>
clr __zero_reg__ ; #include <avr/interrupt.h>
push r24 ; #include <stdint.h>
/* prologue: Signal */ ;
/* frame size = 0 */ ; #define F_CPU 16000000l
/* stack size = 4 */ ; #include <util/delay.h>
.L__stack_usage = 4 ;
ldi r24,lo8(1) ; uint8_t key_pressed = 0;
sts key_pressed,r24 ;
/* epilogue start */ ; ISR (INT0_vect) /* PD2 */
pop r24 ; {
pop r0 ; key_pressed = 1;
out __SREG__,r0 ; }
pop r0 ;
pop r1 ; int main (void)
reti ; {
.size __vector_1, .-__vector_1 ; cli ();
.section .text.startup,"ax",@progbits ; EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
.global main ; EIMSK = 1 << INT0; /* INT0 einschalten */
.type main, @function ; sei ();
main: ; DDRD = 0xfb; /* binär: 1111 1011 */
/* prologue: function */ ; PORTD = 0x44; /* binär: 0100 0100 */
/* frame size = 0 */ ; while (1)
/* stack size = 0 */ ; {
.L__stack_usage = 0 ; while (!key_pressed)
/* #APP */ ; ; /* just wait */
; 17 "blink-9.c" 1 ; PORTD ^= 0x40;
cli ; _delay_ms (1); /* Wartezeit zum Entprellen */
; 0 "" 2 ; key_pressed = 0;
/* #NOAPP */ ; }
ldi r24,lo8(3) ; return 0;
sts 105,r24 ; }
ldi r24,lo8(1)
out 0x1d,r24
/* #APP */
; 20 "blink-9.c" 1
sei
; 0 "" 2
/* #NOAPP */
ldi r24,lo8(-5)
out 0xa,r24
ldi r24,lo8(68)
out 0xb,r24
ldi r25,lo8(64)
.L4:
lds r24,key_pressed
cpse r24,__zero_reg__
rjmp .L7
.L6:
rjmp .L6
.L7:
in r24,0xb
eor r24,r25
out 0xb,r24
ldi r30,lo8(3999)
ldi r31,hi8(3999)
1: sbiw r30,1
brne 1b
rjmp .
nop
sts key_pressed,__zero_reg__
rjmp .L4
.size main, .-main
.global key_pressed
.section .bss
.type key_pressed, @object
.size key_pressed, 1
key_pressed:
.zero 1
.ident "GCC: (GNU) 5.4.0"
.global __do_clear_bss
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define F_CPU 16000000l
#include <util/delay.h>
volatile uint8_t key_pressed = 0;
ISR (INT0_vect) /* PD2 */
{
key_pressed = 1;
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xfb; /* binär: 1111 1011 */
PORTD = 0x41; /* binär: 0100 0001 */
while (1)
{
while (!key_pressed)
; /* just wait */
PORTD ^= 0x40;
_delay_ms (1); /* Wartezeit zum Entprellen */
key_pressed = 0;
}
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define F_CPU 16000000l
#include <util/delay.h>
volatile uint8_t key_pressed = 0;
ISR (INT0_vect) /* PD2 */
{
key_pressed = 1;
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xfb; /* binär: 1111 1011 */
PORTD = 0x45; /* binär: 0100 0101 */
while (1)
{
while (!key_pressed)
; /* just wait */
PORTD ^= 0x40;
_delay_ms (1); /* Wartezeit zum Entprellen */
key_pressed = 0;
}
return 0;
}
20231109/interner-pull-up-widerstand.png

20.1 KiB

File added
20231109/pull-down-widerstand.png

27 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment