Hey,
ich versuche momentan ein bisschen Programmieren zu lernen
aber komme mit dem STK500 nicht ganz zurecht.
Ich wollte PINB2 auf Tastendruck testen.
Letztendlich habe ich es mit diesem Code geschafft:
1 | /*
|
2 | * GccApplication1.c
|
3 | *
|
4 | * Created: 26.10.2014 21:29:53
|
5 | * Author: Gigi
|
6 | */
|
7 |
|
8 | #include <avr/io.h>
|
9 | #ifndef F_CPU
|
10 | #warning "F_CPU war noch nicht definiert, wird nun mit 900000 definiert"
|
11 | #define F_CPU 900000UL /* Quarz mit 3.6864 Mhz */
|
12 | #endif
|
13 |
|
14 | #include <avr/io.h>
|
15 | #include <util/delay.h>
|
16 |
|
17 | int main(void)
|
18 | {
|
19 |
|
20 | DDRB |= (1<<DDB0) | (1<<DDB1); // Ausgang
|
21 | DDRB &= ~(1 << DDB2);
|
22 | PORTB |= (1<<PB2); //Pullup = Taster OFF
|
23 | PORTB |= (1<<PB1); // Pullup = LED aus (STK)
|
24 |
|
25 |
|
26 |
|
27 | while( 1 ) // Endlosschleife
|
28 | {
|
29 | PORTB ^= ( 1 << PB0 ); // Toggle PB0 z.B. angeschlossene LED
|
30 | _delay_ms(1000); // Eine Sekunde warten...
|
31 |
|
32 | if ((PINB & 0x4) == 0)
|
33 | {
|
34 | PORTB ^= (1<<PB1);
|
35 | _delay_ms(500);
|
36 | }
|
37 |
|
38 | }
|
39 | return 0;
|
40 | }
|
Mir gehts insbesondere umfolgende Zeile :
Geht das nicht eleganter, bzw gibt es noch andere Methoden ?
In ASM kann ich die Bits ja per Namen ansprechen z.B. PINB2,
allerdings scheint das in C nicht zu funktionieren.
Und jedes mal umrechnen in Hex wollte ich auch nicht.
1 | if ((PINB & PINB2) == 0) //funktioniert nicht
|
2 | if (PINB == 0b00000100) //geht auch nicht
|
3 | if (!(PINB2)) // auch nicht erwünschtes Ergebnis
|
Vielen Dank für eure Hilfe,
Gruß,
Gigi