Servus,
Ich habe da ein kleines Problem. Ich schreibe grade ein Programm wo ich
2 LEDs mit 2 Tastern benutzen moechte. Das laeuft im Moment noch nicht
so ganz, sieht im Moment so aus:
1 | #define F_CPU 3686400
|
2 | #include <avr\io.h>
|
3 | #include <inttypes.h>
|
4 | #include <avr\interrupt.h>
|
5 | //----------------------------------------------------------------------
|
6 | volatile unsigned char buffer;
|
7 |
|
8 | SIGNAL(SIG_INTERRUPT0)
|
9 | {
|
10 | if( (!PIND2 & 4)){
|
11 | buffer = 3;
|
12 | }else if((!PIND2 & 8)) == 0){
|
13 | buffer = 1;
|
14 | }
|
15 | }
|
16 | //----------------------------------------------------------------------
|
17 | main()
|
18 | {
|
19 | DDRB = 0xff; // PortB = Output
|
20 | PORTB = 0xff; // alle LEDs ON
|
21 | cbi(DDRD,2); // PortD = Input
|
22 | cbi(DDRD,3);
|
23 | sbi(PORTD,2);
|
24 | sbi(PORTD,3);
|
25 | GICR = 0x40; // enable external int0 Bit 6
|
26 | MCUCR = 0x02; // falling egde: int0 Bit 1
|
27 | sei(); // enable interrupts
|
28 | do
|
29 | {
|
30 | PORTB = buffer;
|
31 | }
|
32 | while (true); // Mainloop
|
33 | }
|
34 | //----------------------------------------------------------------------
|
Taster 1 ist mit D.2, und Taster 2 mit D.3 verbunden. Die eine LED (die
durch Taster 1 angeschaltet werden soll) ist an B.0, die zweite LED (zu
Taster 2) and B.1. Ich dachte da kann man in einem Interrupt einfach
schaun welcher der beiden Taster jetzt gedrückt ist...D.2 würde ja einer
Bitkombination von 0b00000100 entsprechen (4) und D.3 0b00001000 (8).
Und dann halt Buffer entsprechend setzen. Irgendwo ist da noch der Wurm
drinnen und ich seh es nicht, oder ich hab totalen Bockmist gebaut :D.
Tips was ich falsch gemacht habe, oder wo ein Gedankenfehler ist sind
sehr willkommen.
Lg,
Chris