ITG-ABI 18/19 |
02.04.2019 |
Korrekturhinweise / Lösungsvorschlag |
---|
Verwendeter µC: ATMEL AVR 8 Bit RISC.
LS1 an PD2 (INT0); LS2 an PD3 (INT1); Resettaster an PD4; Messignal Waage an PC; P1 an PB
Systemtakt 1MHz Zylkuszeit 1µs.
void initISR(){ MCUCR |= (1<<ISC11) | (1<<ISC01); // INT1 und INT0 fallende Flanke GIMSK |= (1<<INT1) | (1<<INT0); // INT1 und INT0 enable sei(); // Globale ISR-Freigabe }
Gobale Variablen:
anzAusschuss:GZ
Globale Variablen:
anzAusschuss:GZ
ampel[]={0b00010,0b10010,0b01010,0b01110,0b00100}
ISR(INT0_vect){ int zeit; PORTB &= ~(1<<PB1); // Motor stopp TCCR1B |= (1<<CS11) | (1<<CS10); // Vorteiler Takt/64; 1s = 64*15625µs TCNT1=0; // Zuruecksetzen while (TCNT1 < 15625); // 1s warten if (PINC<sollwert){ PORTB |= 1; // PB0 = 1 Weiche stellen } else{ PORTB &= ~1; // PB0 = 0 } PORTB |= 2; // Baender starten }
Der PC ist ein 16Bit Register. Der Inhalt zeigt auf die Adresse des aktuellen Befehls im Flash-Speicher. Bei einem Sprung wird die Adresse des Sprungziels in den PC geladen.