Aufgabe 1 Polling Interrupt Timer (Zeit

Werbung
MC
Abschlußprüfung
Fachhochschule Regensburg
Fachbereich Elektrotechnik
Prüfungsfach:
Mikrocomputertechnik
SS02
Prüfungsteilnehmer
(bitte in Druckschrift)
Name:
Aufgabensteller:
Prof. Meier, Prof. Scharfenberg
Vorname:
Prüfungstermin:
Matrikel-Nr.:
13.07.2002 10:00
Semester:
zugelassene Hilfsmittel: Buch/Skript
Teil 2, Arbeitszeit: 90 Min.
Aufgabe 1
Sie müssen eine Analogspannungsmessung Ux vornehmen, haben aber nur noch zwei Digital-Port-Pins
zur Verfügung (P2.0 und Px.y). Sie haben eine Schaltung bestehend aus einem Transistor Tr, der RC–
Kombination und einem CMOS-Schmitt-Trigger aufgebaut.
Die Schaltung funktioniert wie folgt:
- Die Spannung Ux lädt über Transistor Tr die RC–Kombination auf URC auf
- Port P2.0 schaltet Transistor Tr aus
- Der Widerstand R entlädt den Kondensator C exponentiell
- Nach Ablauf einer Zeit ∆T wird die Schwellspannung Uth des CMOS-Schmitt-Triggers unterschritten,
so dass dieser eine „1“ am Port Px.y liefert
U
RC
Uth
P2.0
Tr
CMOS Schmitt-Trigger
Px.y
Ux
C167
P2.0
Px.y
R
C
URC
Beantworten Sie zu den Verfahren: Polling, Interrupt, Timer folgende Fragen: ∆T
1. Geben Sie für Px,y den Port-Pin an, der verwendet werden muss oder,
falls optionale Pins verwendet werden können, nennen Sie einen passenden Pin
2. Beschreiben Sie kurz den Ablauf zur Ermittlung der Zeit ∆T
3. Damit Sie die Zeit möglichst genau messen, benötigen auch für das Polling- und Interruptverfahren
einen Timer. Welchen Timer und wie wenden Sie den Timer jeweils an?
Verfahren
1) Pin
Polling
P2.1
+
altern
Interrupt
P2.1
+
altern
Timer (Zeitmessung
direkt)
Meh; Sfb
P3.6
für
T3
2) Verfahren
3) Timer
Sperren Tr
Start des Timers
Zyklisches Einlesen, bis an P2.1 eine
“1“ anliegt
Auslesen Timer; Timerwert entspr. ∆T
Timer 3 als Timer
Anfangswert 0
Inc. Timer
Interrupt freigeben
Sperren Tr
Start des Timers
Interruptroutine liest Timer aus
Timerwert entspr. ∆T
Timer 3 als Timer
Anfangswert 0
Inc. Timer
Sperren Tr
Start des Timers
bei positivem Gate stoppt Timer
Auslesen Timer z.B. im nächsten HPZyklus; Timerwert entspr. ∆T
Timer 3 als gated Timer
Anfangswert 0
Inc. Timer
FH Regensburg
S. 1
MC
Abschlußprüfung
SS02
2. Aufgabe
Teil a) Unterprogramm QS
Das Unterprogramm QS ermittelt die Quersumme über einen Speicherbereich (Words).
Schnittstelle:
Eingabe
R2 : Anfangsadresse des Speicherbereichs, in dem sich die Words befinden
R3 : Anzahl der zu summierenden 16 Bit-Werte
Ausgabe
{R1+R0} : 32 bit Quersumme des Speicherbereichs
Hinweis: Werden 16 Bit-Werte addiert, kann sich ein Übertrag zu einer 32
Bit- Größe ergeben, weshalb als Ergebnisgröße zwei Register (R1, R0)
gemeinsam vereinbart sind:
Ergebnisvariable
high-Anteil in R1
low-Anteil in R0
Der Inhalt von R1 kommt dadurch zustanden, dass jeweils nach der Addition
zweier Worte (Addition in R0 hinein) geprüft wird, ob ein Überlauf gesetzt ist.
Wenn ja, wird der Inhalt von R1 incrementiert.
Aufgabenstellung:
Der unten stehende Ablaufplan QS stellt den Programmablauf dar. Notieren Sie neben den
Ablaufplan die Kodierung des Unterprogramms.
QS
Retten der lokal benötigten Register
R0 (low-Anteil-Register) auf Grundstellung
R1 (high-Anteil-Register) auf Grundstellung
Addition Speicherinhalt mit R0 -> [RAM-ptr] + R0
n
Überlauf? -> CY
j
Increment high-Anteil-Register R1
Adresszeiger auf nächstes Word weiterführen
Decrement der Zählvariablen
n
alle
Words
aufaddiert?
j
Restaurieren der lokal benötigten Register
return
Meh; Sfb
FH Regensburg
S. 2
MC
Abschlußprüfung
SS02
Teil b) Unterprogramm InStr
Das Unterprogramm InStr prüft, ob sich innerhalb einer Zeichenkette (data string) eine
Zeichenfolge (SearchStr) befindet. (Bedingung: beide Strings keine Null-Strings)
Schnittstelle:
Eingabe
Ausgabe
Beispiel:
R1 : Anfangsadresse des Data Strings (R1 = data ptr)
R3 : Anfangsadresse des SearchStr (R3 = search ptr)
R1 : Trefferadresse (goal), Startadresse des SearchStr innerhalb Data Strings
falls kein Treffer: Rückgabe des Wertes 0ffffh
w o r l
Data String (0F600h) H a l l o
l l 0h
SearchStr
Lösung: InStr liefert Trefferadresse 0F602h zurück (goal)
d
0h
Aufgabenstellung:
Das nebenstehende Assemblerprogramm stellt den Programmablauf dar. Zeichnen Sie den
detaillierten Ablaufplan des Unterprogramms neben das Assemblerprogramm.
Vorgaben zum Ablaufplan:
• Kommentare angeben
(keine Ass-Anweisungen)
• Adresslabels in Ablaufplan
übernehmen
Meh; Sfb
FH Regensburg
S. 3
MC
Abschlußprüfung
InStr PROC
SS02
near
push
R0
push
R2
push
R4
mov
R2,R1
;save data ptr
mov
R4,R3
;save start pos SearchStr
mov
RL0,[R1] ;load data byte
cmp
RL0,[R3] ;byte (data ≡ search)
jmp
cc_nz, SJ2
cmp
RL0,#0
jmp
cc_z, EnT
add
R1,#1
;data ptr
add
R3,#1
;search ptr
jmp
SJ1
cmp
RL0,#0
jmp
cc_z, EnoT
mov
RL0,[R3] ;load search byte
cmp
RL0,#0
jmp
cc_z, EnT
SJ1:
CM1:
CM2:
SJ2:
CM4:
;both strings end pos?
;data string end pos?
;search string end pos?
;no goal
EnT:
mov
R3,R4
;search ptr start address
add
R2,#1
;last data address incr.
mov
R1,R2
;resume data ptr
jmp
SJ1
mov
R1,R2
jmp
Ende
;goal position from R2
ENoT: mov
R1,#0ffffh ;no goal
Ende: pop
R4
pop
R2
pop
R0
ret
InStr ENDP
Meh; Sfb
FH Regensburg
S. 4
MC
Abschlußprüfung
SS02
3. Aufgabe
Für eine Interrupt-Routine Key_ISR ist das Unterprogramm Trans zur Umwandlung zu entwerfen.
Die Routine Trans hat die Aufgabe, die Tasten eines Nummernblocks (Tasten ’0’ bis ’9’)
auszuwerten.
Vorinformation
Beim Betätigen (Drücken und Loslassen) einer Taste einer MF-II-Tastatur – wie man sie vom PC
her kennt – wird folgende 3-Byte-Sequenz aus scancode und breakcode vom Tastaturcontroller
(sorgt zusätzlich noch für die Entprellung) an den PC übertragen:
-----| scancode |------------- -- -- -- -- -- -- ------------| breakcode |---| scancode |--------Aufgaben des Codes:
- Der erste scancode kennzeichnet die betätigte Taste
- Der breakcode (F0h) zeigt das Loslassen einer Taste an
- Der anschließende scancode zeigt an, welche Taste losgelassen wurde
Die Struktur der Interrupt-Routine ist wie folgt:
Key_ISR
Nummernblock
Tastaturcode für UP bereitstellen
7
8
9
Trans
4
5
6
1
2
3
Ergebnis an Tastaturtreiber
0
reti
Beschreibung der Aufgaben:
Ihre Aufgabe ist es die Umwandlungsroutine (Trans) zu schreiben, die die Tasten eines
Nummernblocks (Tasten ’0’ bis ’9’) in die zugehörigen ASCII-Codes umwandelt!
• Für den scancode soll aus einer Tabelle der zugehörige ASCII-Code ermittelt und an die
Aufrufschnittstelle zurückgeliefert werden
• Mit dem breakcode wird keine Umwandlung vorgenommen, sondern der breakcode an die
Aufrufschnittstelle zurückgeliefert
Such-Tabelle (ScanTab):
Definieren Sie im Bereich ihres Controllers (ab Adresse 00400h) eine Tabelle für die scancodes des
Nummernblocks und legen Sie jeweils neben (hinter) den scancode das dazugehörige ASCIIZeichen, so dass in einem Suchvorgang das ASCII-Zeichen ermittelt werden kann. Die Tabelle ist
mit 0h terminiert, so dass die Tabelle später weiter ergänzt werden kann.
gedrückte
Taste
b c
d
e
f
g
h
i
j
k
scancode
70 h
69 h
72 h
7A h
6B h
73 h
74 h
6C h
75 h
7D h
ASCII-Code
30 h
31 h
32 h
33 h
34 h
35 h
36 h
37 h
38 h
39 h
Schnittstelle
Eingabe
Ausgabe
Meh; Sfb
RL0 : Tastaturcode (scancode bzw. breakcode)
RL0 - ASCII-Code des Tastaturzeichens, wenn scancode eingetroffen
RL0 - breakcode, wenn breakcode eingetroffen // breakcode = F0h
FH Regensburg
S. 5
MC
Abschlußprüfung
SS02
Bewertete Lösungsschritte:
a) Beschreiben Sie kurz Ihre Vorgehensweise und ergänzen Sie das untenstehende
Speicherbild.
ScanTab
00400h
b) Geben Sie die Adresse des Interrupt-Einsprunges
in der Interrupt-Vektortabelle an. Der verwendete
Interrupt hat die Int-Nr. 2Bh
c) Wie muss das Interrupt-Controlregister xxIC eingestellt
werden, damit die Prioritätsebene 12 (Gruppe = 0) erreicht
ist und der Interrupt sich durchsetzen kann (Bitmuster)?
d) Entwerfen Sie zunächst das Flussdiagramm für die
Unterprogrammroutine Trans (Veränderungen von nicht
betroffenen Registern unzulässig)
e) Codieren Sie das Programm in C167-Assembler
Es wird davon ausgegangen, dass alles korrekt initialisiert wurde.
Hinweise:
• Codierung des breakcodes: F0h
• Es wird angenommen, dass keine unbekannten scancode auftreten!
Viel Erfolg
Meh; Sfb
FH Regensburg
S. 6
Herunterladen