BomberD
11.11.2004, 12:11
Hi,
der AVR ATMega hat ja nur 2 externe Interrupt-Quellen. aber ich möchte zwischen 6 und 8 Ereignisse per interrupt abfangen.
Es wird, so meine Idee, mit dem schalten des Pins gleichzeitig der Int ausgelöst. (zur zeit drücke ich erst den Pin Taster auf dem STK board und dann löse ich den Int aus)
Also hab ich mir gedacht ich kann doch im der Interrupt Behandlung abfragen welcher Pin zusammen mit dem Int geschaltet ist.
Hierzu der Quellcode:
SIGNAL(SIG_INTERRUPT0){
/*if(PORTB==0x00)
PORTB=0xff;
else
PORTB=0x00;*/
//todo: 6 Tasten abfgragen, welche den int ausgelöst hat. und entsprechende LED Anschalten
if(PORTD&(1<<PD3)) PORTB=0x08; //PortB Pin 4
else if(PORTD&(1<<PD4)) PORTB=0x10; //PortB Pin 5
else if(PORTD&(1<<PD5)) PORTB=0x20; //PortB Pin 6
else if(PORTD&(1<<PD6)) PORTB=0x40; //PortB Pin 7
else if(PORTD&(1<<PD7)) PORTB=0x80; //PortB Pin 8
}
Leider bewirken die If Anweisungen keine Änderung bei der anzeige der LED's.
Der interrupt wird ausgeführt. das seh ich daran, dass die oben auskommentierten komandos ausgeführt werden.
Wo hab ich mich vertan? Geht meine Idee überhaupt?
der AVR ATMega hat ja nur 2 externe Interrupt-Quellen. aber ich möchte zwischen 6 und 8 Ereignisse per interrupt abfangen.
Es wird, so meine Idee, mit dem schalten des Pins gleichzeitig der Int ausgelöst. (zur zeit drücke ich erst den Pin Taster auf dem STK board und dann löse ich den Int aus)
Also hab ich mir gedacht ich kann doch im der Interrupt Behandlung abfragen welcher Pin zusammen mit dem Int geschaltet ist.
Hierzu der Quellcode:
SIGNAL(SIG_INTERRUPT0){
/*if(PORTB==0x00)
PORTB=0xff;
else
PORTB=0x00;*/
//todo: 6 Tasten abfgragen, welche den int ausgelöst hat. und entsprechende LED Anschalten
if(PORTD&(1<<PD3)) PORTB=0x08; //PortB Pin 4
else if(PORTD&(1<<PD4)) PORTB=0x10; //PortB Pin 5
else if(PORTD&(1<<PD5)) PORTB=0x20; //PortB Pin 6
else if(PORTD&(1<<PD6)) PORTB=0x40; //PortB Pin 7
else if(PORTD&(1<<PD7)) PORTB=0x80; //PortB Pin 8
}
Leider bewirken die If Anweisungen keine Änderung bei der anzeige der LED's.
Der interrupt wird ausgeführt. das seh ich daran, dass die oben auskommentierten komandos ausgeführt werden.
Wo hab ich mich vertan? Geht meine Idee überhaupt?