ITG-ABI 07/08 |
6.1.2011 |
Korrekturhinweise / Lösungsvorschlag |
---|
Verwendeter µC: ATMEL AVR 8 Bit RISC.
Hinweis: Die PullDown-Widerstände sind in der µC Zeichnung der orginal Aufgabenstellung falsch eingezeichnet!
Hier das angepasste Blockschaltbild für AVR-Controller.
Bei Druck auf S soll mittels Timer/Counter - Einheit weiter gezählt werden. Erstelle Assembler-Unterprogramm zur Initialisierung.
Problem: Eigentlich soll der Wert des Counters auf der 7Segment-Anzeige ausgegeben werden, dazu müsste der Wert zum PortB kopiert werden. Wie soll das geschehen?
Lsg: Ich gehen von 2. aus. Unterprogramm zur Initialisierung der Zähler-Einheit. Reaktion auf steigende Flanke. Die Register haben nach einem Reset den Wert 0.
Zaehler_INIT: ldi R16, 0b111 ; externer Takt steigende Flanke, setze Bits out TCCR0, R16 ; speichere Steuerregister
Das Übernahmesignal Takt soll mittels Interrupt erfasst werden. Bei fallender Flanke wird die Ziffer von PortB übernommen und in 3 Speicherstellen (z.B. R5..R7) gespeichert.
Hinweise zum Unterschied einer 8051 Lösung
Immediate Befehle (ldi, sbi, cbi usw.) sind beim AVR auf die Register R16-R31 beschränkt. Sollten die Prüflinge trotzdem gemäss der Aufgabenstellung untere Registernummern verwendet haben, sollten keine Punkte abgezogen werden.
Weitere Interrupts während einer Interruptbehandlung zu sperren ist nicht notwendig, da automatisch bei Eintritt gesperrt. Müssten innerhalb einer ISR wieder explizit frei gegeben werden.
1.4.1 Zeichen Sie PAP oder Struktogramm für ISR Werte_speichern, die mit dem Drücken des Tasters Takt die aktuellen Ziffern an PortB erfasst uns speichert.
Lsg: Ich gehe hier davon aus, dass die Aufgabe 1.4.2 noch nicht gelesen wurde, daher wird Auswertung nur nach der zweiten Zahl aufgerufen und weitere Aufrufe sind verhindert (3. IF-Anweisung). Wenn aber Auswertung in jedem Fall in Endlosschleife endet, wie in 1.4.2 gefordert, dann würde bei der 3. Zahl die ISR hängen bleiben und kein weiterer Interrupt würde mehr verarbeitet werden. Somit könnte die dritte IF-Anweisung (PORTA & 7 = 3) entfallen.
1.4.2 Entwerfen Sie Unterprogramm Auswertung das die gespeicherten Werte mit 3-1-7 vergleicht und bei Übereinstimmung L7 setzt. Auswertung endet immer in Endlosschleife. Lösung in PAP + Assembler oder Struktogramm + C-Code.
Lsg:
void auswertung(){ if (R5==3 && R6==1 && R7==7) PORTA |= 128; // OK leuchten lassen while (1); // Endlosschleifchen }
Die richtige Ziffernfolge könnte auch in Tabellenform abgelegt werden. Dazu bieten sich die Speichervarianten ROM oder RAM an. Beurteilen Sie die Konsequenzen indem Sie die Vor- und Nachteile beider Varianten abwägen.
Lsg:
Der AVR-µC verfügt neben dem Programm Flash auch über einen extra EEPROM zur Speicherung von Parameterdaten, könnte bei Lösung berücksichtigt werden.
ROM (Programmspeicher) | RAM | EEPROM | |
---|---|---|---|
Vorteile |
|
|
|
Nachteile |
|
|
|