hi, ich habe eine frage zu dem Code:
1 | #include <avr/io.h> |
2 | #include <inttypes.h> |
3 | #ifndef F_CPU
|
4 | #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
|
5 | #define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */ |
6 | #endif
|
7 | #include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */ |
8 | |
9 | /* Einfache Funktion zum Entprellen eines Tasters */
|
10 | inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) |
11 | {
|
12 | if ( ! (*port & (1 << pin)) ) |
13 | {
|
14 | /* Pin wurde auf Masse gezogen, 100ms warten */
|
15 | _delay_ms(50); // max. 262.1 ms / F_CPU in MHz |
16 | _delay_ms(50); |
17 | if ( *port & (1 << pin) ) |
18 | {
|
19 | /* Anwender Zeit zum Loslassen des Tasters geben */
|
20 | _delay_ms(50); |
21 | _delay_ms(50); |
22 | return 1; |
23 | }
|
24 | }
|
25 | return 0; |
26 | }
|
27 | |
28 | int main(void) |
29 | {
|
30 | DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang (Taster) */ |
31 | PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */ |
32 | ...
|
33 | if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */ |
34 | PORTD = PIND ^ ( 1 << PD7 ); /* ..LED an Port PD7 an- |
35 | bzw. ausschalten */
|
36 | ...
|
37 | }
|
wieso verwendet man hier Zeiger? Kann man den Port nicht auch direkt übergeben?