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.