Hi.
- ATmega168
- AVR-Studio 4.12 SP1
- AVR-GCC 3.4.5
- AVR-DUDE 1.72 mit GUI 0.2.0
Ich Suche nach einer Möglichkeit, wie ich die oberen 4 Bit (7-4) eines Ports beschreiben kann, OHNE auf den unteren 4 Bit (3-0)/Pins Interrupts auszulösen..
Wozu?:.. Ich will das Input-Capture-Register auf einer LED-Zeile ausgeben (8 Stück).
Zuordnung der LED's zu den Pins/Ports: |PB7|PB6|PB5|PB4|PC3|PC2|PC1|PC0|
Weshalb diese Zerstückelung? Weil:...
- PB0 wird für den Input Capture Pin benötigt.
- Port C hat nur 7 Bit.
- Port D wird auch schon durch Interrupt belegt..
Die Auszugebende Variable ist folgendermassen definiert und wird durch Zuweisung aus dem ICR1 (Input-Capture-Register) gewonnen, bei einem solchen Interrupt:
volatile unsigned short int icp;
icp = ICR1;
Ports sind folgendermassen initiiert:
DDRB |= (1<<DDB7)|(1<<DDB6)|(1<<DDB5)|(1<<DDB4); /* PinB7-4 als AUSGANG */
DDRB |= (0<<DDB0); /* Eingang für ICP1 */
DDRC |= (1<<DDC3)|(1<<DDC2)|(1<<DDC1)|(1<<DDC0); /* PinC3-0 als AUSGANG */
DDRD |= (0<<DDD3)|(0<<DDD2); /* Eingänge für INT0 und INT1 */
Nun will ich die binäre Information der Variablen 'icp' auf den Pins 7-4 des Port B ausgeben und hab dies bisher folgendermassen getan:
PORTB = ~(icp);
Gibt es eine Möglichkeit, wie ich das Beschreiben der unteren 4 Bits von Port B bei dieser Zuweisung "schützen" kann, so dass dort garantiert keine Interrupts ausgelöst werden?
Ist dies schon mit Hilfe der Richtungsangabe im Data-Direction-Register erledigt?
Danke und Grüße
Nico
Lesezeichen