Einführung Mikrocontroller 89C4051

Transcrição

Einführung Mikrocontroller 89C4051
11. Übung (27.7.06, 13-15h) Elektronikpraktikum für Physiker - Prof. Brunner SS06
(Termin für Nachholer und Interessierte)
Einführung Mikrocontroller 89C4051
1. Blinklicht / Frequenzgenerator
a) Hausaufgabe: Machen Sie sich mit den Unterlagen zum Mikrocontroller 89C4051
vertraut. Arbeiten Sie vor allem Kap. 11 des Vorlesungsskripts als Übersicht und das für
die Übung Wesentliche in den Dateien „atmel_architecture_89Cxx51.pdf“,
„atmel_datasheet_89C4051.pdf“ (Pinbelegung) und „atmel_instructions_89Cxx51.pdf“
(Details zu einzelnen Befehlen) durch. Alle Dateien sind auf der CD unter
\Vorlesung\Praktikum\Microcontroller\Dokumentation\. Besonders wichtig ist Pinbelegung, Adressierungsarten, interne Register, die Ausführungsgeschwindigkeit (der QuarzOszillator läuft im Praktikum mit 3 MHz) und die Funktion der folgenden 9 Befehle
(Instructions):
MOV Rn, #byte
RR
A
CPL bit
MOV A, #byte
RL
A
DJNZ Rn,adr
MOV
direct,A
JB
bit,adr
SJMP adr
Versuchen Sie damit zuhause (mit etwas Ausdauer) die Funktionsweise der beiden kurzen
Assembler-Programme „ph_08_01.s“ (zu Schaltplan A) und „ph_08_02.s“ (zu Schaltplan
B) zu verstehen. Am Blattende sind Abdrucke der Programme. Verbleibende offene Fragen
werden in der Übung besprochen.
b) Beschalten Sie den Microcontroller 89C4051 mit PowerOn-Reset (RC-Glied),
Taktgenerator (Quarz + Kondensatoren) und einer Leuchtdiode (Ausgabeeinheit) gemäß
Schaltplan A. (Siehe auch Kap. 11.4 des Vorlesungsskripts)
+5V
+5V
+ 10µF
100nF
10k
20
10
Vcc GND
30pF
5
XTAL1
4
XTAL2
11
P3.7
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
1
GND +5V
RST
3MHz
30pF
9
+5V
8
7
470
6
3
2
12
13
LED
14
15
16
17
18
19
Schaltplan A
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
AT89C4051
10µF
Bsp. für Steckboard-Realisierung
c) Zur Programmierung starten Sie die Entwicklungsumgebung WEPR2051 auf dem PC.
Wählen Sie den Dateinamen (ph_08_01.s) und drücken Sie den EDIT-Button.
Assemblieren Sie Ihr Programm (assemble) und testen seine Funktionsweise im
Menüpunkt software simulation ... bis es zufriedenstellend funktioniert.
d) Versorgen Sie das Programmiergerät mit +15V Betriebsspannung (Minilab) und schließen
Sie es an den PC an (parallele Schnittstelle). Setzen Sie nun den Microkontroller 89C4051
in den Textool-Sockel (Orientierung beachten!). Kontrollieren Sie im Menüpunkt
extended features ... / read signature bytes , dass der Baustein vom Programmiergerät
korrekt erkannt wird.
Programmieren Sie nun Ihr Programm in den Baustein (program uC) und testen seine
Funktionsweise im Menüpunkt hardware simulation ... bis es zufriedenstellend
funktioniert.
e) Bauen Sie nun die Schaltung auf dem Steckboard auf. Benutzen Sie einen 20-poligen ICSockel für den Microcontroller um ihn einfacher einsetzen und wechseln zu können.
Achten Sie auf die Orientierung (Pin 1) beim Einsetzen. Stellen Sie die
Versorgungsspannung auf +5V bevor Sie diese anschließen. Bestimmen Sie die Frequenz
des Blinklichtes mit mindestens 5% Genauigkeit.
2. Lauflicht mit wählbarer Richtung
a) Erweitern Sie die Schaltung von Aufgabe 1 gemäß Schaltplan B auf 8 LEDs an P1.0-P1.7
und einen Taster (Eingabeeinheit), der P3.7 in geschlossenem Zustand an Masse (0V) legt.
Verwenden sie für die LED-Vorwiderstände zur einfacheren Realisierung ein
Widerstandsnetzwerk.
b) Programmieren Sie den Microcontroller mit dem Programm „ph_08_02.s“ und testen Sie
die Funktion wie unter 1.c) und d) beschrieben. Setzen sie dann den Controller wieder in
die Schaltung ein und viel Spaß mit dem Lauflicht! Probieren Sie auch, die
Geschwindigkeit zu verdoppeln, Muster durchlaufen zu lassen (dazu muss man nur 2
Zeichen im Code ändern! Welche?) , und ein „Knight-Rider-Lauflicht“ zu programmieren.
+5V
+5V
+ 10µF
100nF
10k
20
10
Vcc GND
30pF
+5V
5
1
RST
XTAL1
/** PH_08_01.s (Blinklicht) Programm-Code
/*********************/
ORG
0
/* "origin", bewirkt, daß der folgende Code
beginnend bei Adresse 0 in den Programmspeicher geschrieben wird*/
loop:
CPL
P1.0
MOV
MOV
DJNZ
DJNZ
R1,#0x0F4+1
R0,#0x24
R0,delay
R1,delay
3MHz
30pF
4
11
4.7k
9
8
7
6
3
8x 470
8 LEDs
2
12
13
14
15
16
17
18
19
Schaltplan B
XTAL2
P3.7
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
**/
AT89C4051
delay:
SJMP
/* invertiert Port-Bit P1.0 */
/* => LED an -> aus bzw. aus -> an */
loop
/* wartet 0.5s */
/* zurueck zum Start */
/***********************************************************/
Berechnung Warteschleife: Osc.Frequenz = 3MHz
DJNZ Rn -Befehl = 24t
0.5s: 0.5s * (3MHz / 24t) = 62500 mal DJNZ ausführen
62500 (dezimal) = F424 (hexadezimal)
/***********************************************************/
/** PH_08_02.s (Lauflicht) Programm-Code
/*********************/
loop:
right:
skip:
delay:
**/
ORG
0
/* "origin" setzt akt. Adresse auf 0 */
MOV
A,#0xFE
/* nur LED an Bit 0 ist an */
JB
RL
SJMP
RR
MOV
P3.7,right
A
skip
A
P1,A
/* Abfrage Port-Bit P3.7 */
/* P3.7 = 0: links rotieren */
MOV
MOV
DJNZ
DJNZ
R1,#0x0F4+1
R0,#0x24
R0,delay
R1,delay
SJMP
loop
/* P3.7 = 1: rechts rotieren */
/* Ausgabe von A auf Port P1 */
/* wartet 0.5s */
/* zurueck zum Start */
/***********************************************************/