ITG-ABI 12/13

12.04.2013

Korrekturhinweise / Lösungsvorschlag

Teil 1 Aufgabe 1

1.2.4 Anzahl Zeilen in Zustandsübergangstabelle

Bei der Zustandsübergangstabelle sollten alle Ausgangskombinationen erfasst werden. Die im Lösungsvorschlag ermittelte Zeilenanzahl passt nach meiner Logik nicht, hier zwei mögliche Lösungen.

Zustandsübergangstabelle
Zeile Start A B Zustand Zustand' Bemerkung
1 0 x x x Ausgleich umfasst 32 Zeilen
2 1 x x EIN EIN umfasst 4 Zeilen
3 1 0 0 AUSGLEICH x don't Care
4 1 0 1 AUSGLEICH A1  
5 1 1 0 AUSGLEICH B1  
6 1 1 1 AUSGLEICH AUSGLEICH  
7 1 0 0 A1 x  
8 1 0 1 A1 A2  
9 1 1 0 A1 AUSGLEICH  
10 1 1 1 A1 A1  
11 1 0 0 A2 x  
12 1 0 1 A2 A3  
13 1 1 0 A2 A1  
14 1 1 1 A2 A2  
15 1 x x A3 A3 umfasst 4 Zeilen
16 1 0 0 B1 x  
17 1 0 1 B1 AUSGLEICH  
18 1 1 0 B1 B2  
19 1 1 1 B1 B1  
20 1 0 0 B2 x  
21 1 0 1 B2 B1  
22 1 1 0 B2 B3  
23 1 1 1 B2 B2  
24 1 x x B3 B3 umfasst 4 Zeilen
Zustandsübergangstabelle
Zeile Start A B Zustand Zustand' Bemerkung
1 0 x x x Ausgleich umfasst 32 Zeilen
2 1 x x EIN EIN umfasst 4 Zeilen
3 1 0 x AUSGLEICH A1 umfasst 2 Zeilen
4 1 1 0 AUSGLEICH B1  
5 1 1 1 AUSGLEICH AUSGLEICH  
6 1 0 x A1 A2 umfasst 2 Zeilen
7 1 1 0 A1 AUSGLEICH  
8 1 1 1 A1 A1  
9 1 0 x A2 A3 umfasst 2 Zeilen
10 1 1 0 A2 A1  
11 1 1 1 A2 A2  
12 1 x x A3 A3 umfasst 4 Zeilen
13 1 0 1 B1 AUSGLEICH  
14 1 x 0 B1 B2 umfasst 2 Zeilen
15 1 1 1 B1 B1  
16 1 0 1 B2 B1  
17 1 x 0 B2 B3 umfasst 2 Zeilen
18 1 1 1 B2 B2  
19 1 x x B3 B3 umfasst 4 Zeilen

 

 

 

 

 

Mikrocontroller

Verwendeter µC: ATMEL AVR 8 Bit RISC.

1.3.1 Zeitprogramm 3 Sekunden

Zykluszeit bei 1 Mhz vergleichbar mit 8051 bei 12 Mhz: 1µSec. Für 3 Sec müssen ca. 3.000.000 Takte verbraten werden. Die nop-Befehle in der äussern Schleife dienen zu Korrektur und könnten auch weggelassen werden.

.def zeit   = R16 ;R16 als Variable zeit
.def innen  = R17 ;R16 als Variable innen
.def aussen = R18 ;R16 als Variable aussen
...
wait3s:
  ldi zeit, 30    ;30*100ms
wait100ms:
ldi aussen,100 ;100*1ms
loop_aussen:
ldi innen,249 ;249*4µs
loop_innen:
dec innen ;1Takt
nop ;1Takt
brne loop_innen ;2Takte bei Sprung
nop ;1Takt Korrektur
dec aussen ;1Takt
brne loop_aussen
dec zeit brne wait100ms ret ;Ruecksprung aus UP

1.5.1 Initialisierung ext. Interrupt 0 und 1

void init(){
  MCUCR = (1<<ISC11)|(1<<ISC01); // 0b00001010 fallende Flanke
  GIMSK = (1<<INT1)|(1<<INT0);   // 0b11000000 ext. Interrupts aktivieren
  sei();                         // globale Interruptfreigeabe
}