Реферат: Программирование микроконтроллера на ассемблере. Симуляция игральной кости

<span Courier New"">

<span Courier New"">

<span Courier New"">Projekt

Würfel

<span Courier New"">8051Win- Simulation

<span Courier New"">

<span Courier New"">

<span Courier New""><img src="/cache/referats/23280/image001.gif" v:shapes="_x0000_i1025">

<span Courier New"">

<span Courier New"">

<span Courier New"">von Ilya Gufan, 4G5

<span Courier New"">

<span Courier New"">

<span Courier New"">Heilbronn, Juni 2006

<span Courier New";mso-fareast-font-family:«Times New Roman»;mso-ansi-language: DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

<span Courier New"">

<span Courier New"">Inhaltsverzeichnis

<span Courier New"">

·<span Times New Roman"">       

Lastenheft                                                                                       3

·<span Times New Roman"">       

Einführung                                                                                      4

·<span Times New Roman"">       

Aufgaben                                                                                         5

<span Courier New";mso-fareast-font-family: «Courier New»">o<span Times New Roman"">  

Aufgabe1. 8051Win-Simulation mit LED-Reihe                            6

<span Courier New";mso-fareast-font-family: «Courier New»">o<span Times New Roman"">  

Aufgabe2. Programmierung der BB-Mikrocontrollerplatine         12

<span Courier New";mso-fareast-font-family: «Courier New»">o<span Times New Roman"">  

Aufgabe3. 8051Win-Simulation des Würfelmodells            17

<span Courier New";mso-fareast-font-family: «Courier New»">o<span Times New Roman"">  

Aufgabe4. 8051Win-Simulation der 7-Segment-Anzeige     23

<span Courier New";mso-fareast-font-family: «Courier New»">o<span Times New Roman"">  

Aufgabe5. Programmierung der 7-Segment-Anzeige            27

<span Courier New";mso-fareast-font-family: «Courier New»">o<span Times New Roman"">  

Aufgabe6. Langsam auslaufender oder nachlaufender Zähler        29

·<span Times New Roman"">       

Beschreibungder benutzten Befehle                                                        32

·<span Times New Roman"">       

Quellenangabe                                                                                33

Anlage: CD

<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language: AR-SA">

<span Courier New"">Lastenheft

<span Courier New"">

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">1.8051Win-Simulation mit LED-Reihe

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">a) Dualanzeige des Zählers/DJNZ-Befehl und CJNE-Befehl

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">b) Start-Stopp Schalter /Bitverarbeitung und bedingte Sprünge

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">c) Ausgabe auf die LPT-Schnittstelle /Parallele Schnittstelle

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">d) Ausgabe als Leuchtbalken / Decoder /Unterschied von Wert und Adresse

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">e) Vollständige Dokumentation mitProgrammablaufplänen, Code,

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">Erklärungen, Snapshots

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">2. Programmierungder BB-Mikrocontrollerpiatine

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">a) EEPROM / Flash-EPROM /Harvard-Struktur / Adressbereiche

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">b) Zählerausgabe auf die LED-Reihe

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">c) Zeitprogramm / Unterprogramme /Zeitberechnung / Stackpointer

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">d) Befehlsabarbeitung

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">e) Vollständige Dokumentation mitProgrammablaufplänen, Code,

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">Erklärungen, Snapshots

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">3.8051Win-Simulation

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">a) Würfelmodell mit integriertemDecoder

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">b) Würfelmodell ohne Decoder/indirekte Adressierung @R0, @R1 im 8bit-

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">Adressraum Code in Adr. 31h… 36habspeichern

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">c) Vollständige Dokumentation mitProgrammablaufplänen, Code,

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">Erklärungen, Snapshots

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">4.8051Win-Simulation

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">a) Siebensegmentmodell / IndirekteAdressierung @DPTR im 16 bit-

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">Adressraum / Define Byte (DB)

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">b) Übersicht allerAdressierungsarten.

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">c) Vollständige Dokumentation mitProgrammablaufplänen, Code,

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">Erklärungen, Snapshots

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">5. Programmierungder BB-Mikrocontrollerplatine

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">a) Ausgabe auf 7-Segment-Anzeige/arbeiten mit CJNE-Befehl / DPTR / DB

<span Centaur",«serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:DE">b) Vollständige Dokumentation mitProgrammablaufplänen, Code, Erklärungen, Snapshots

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">6. Zusatzaufgabe(freiwillig)

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">a) Langsam auslaufenden/ nachlaufenden Zähler entwickeln

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">b)Vollständige Dokumentation mit Programmablaufplänen, Code,

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">Erklärungen,Snapshots

<span Centaur",«serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:DE">7.Vollständige Projektdokumentation incl. Deckblatt, Inhaltsverzeichnis, Lastenheft,Quellangaben und a51- wie hex-Code auf Diskette / CD

<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language: AR-SA">

<span Akademiya",«sans-serif»; mso-bidi-font-family:«Courier New»">

<span Book Antiqua",«serif»;mso-bidi-font-family:«Courier New»">Bild 1. Würfelset für das Spiel »Dungeons & Dragons«

<img src="/cache/referats/23280/image003.gif" align=«left» hspace=«12» v:shapes="_x0000_s1090"><span Courier New"">Einführung<span Courier New";mso-ansi-language:RU">

<span Courier New"; mso-ansi-language:RU">

<span Centaur",«serif»;mso-bidi-font-family:«Courier New»">

<span Centaur",«serif»;mso-bidi-font-family: «Courier New»">Dieses Projekt wurde im Rahmen des CT-Unterrichts gemacht. DerProjektleiter ist Herr A. Hein. Das Ziel des Projektes war, dieAssembler-Programmierung des µC zu meistern. Das zu programmierende Objekt warder Würfel. Die Ausführung der Programme sollte mit 8051win simuliertwerden. Während des Unterrichts hatte der Schüler auch dieMöglichkeit, mit dem BB-

<span Centaur",«serif»;mso-bidi-font-family:Arial">µ<span Centaur",«serif»;mso-bidi-font-family: «Courier New»">C-Platine das Programm direkt auf dem µC ausführen zu lassen.

<span Akademiya",«sans-serif»; mso-bidi-font-family:«Courier New»">

<span Book Antiqua",«serif»;mso-bidi-font-family:«Courier New»">Bild 2. Würfel üblicher Form

<img src="/cache/referats/23280/image005.gif" align=«left» hspace=«12» v:shapes="_x0000_s1116"><span Centaur",«serif»;mso-bidi-font-family:«Courier New»">

<span Centaur",«serif»;mso-bidi-font-family:«Courier New»">

<span Book Antiqua",«serif»">Bild 3. Ein falscher Würfel

<img src="/cache/referats/23280/image007.gif" align=«left» hspace=«12» v:shapes="_x0000_s1122"><span Centaur",«serif»;mso-bidi-font-family: «Courier New»">Ein Spielwürfel ist ein als Zufallsgenerator verwendeter Gegenstand, der auf mehrere,voneinander unterscheidbare Arten stabil auf der Ebene zu liegen kommen kann.Die meisten Würfel sind heute aus Holz oder Kunststoff und haben einenDurchmesser von etwa eineinhalb Zentimetern. Spielwürfel werden vor allemin den nach ihnen benannten Würfelspielen und in Glücksspielen,gelegentlich auch in Brettspielen und in Rollenspielen (wie z. B. »Dungeons& Dragons«) verwendet.

<span Centaur",«serif»;mso-bidi-font-family: «Courier New»">Die übliche Form ist die eines geometrischen Würfels,worauf auch der Begriff Spielwürfel zurückgeht. Um seineRolleigenschaft zu verbessern, sind die Ecken heute häufig abgerundet. DieFlächen sind meistens mit ein bis sechs Punkten versehen, die auch alsAugen bezeichnet werden, wobei die Augensumme sich gegenüberliegendenerSeiten in der Regel sieben ergibt. Die Orientierung der gegenüberliegendenPaare (1,6), (2,5), (3,4) ist im westlichen Kulturkreis so festgelegt, dass dieZiffern 1, 2 und 3 im Gegenuhrzeigersinn gesehen werden, während sie imFernen Osten im Uhrzeigersinn ausgerichtet sind.

<span Centaur",«serif»;mso-bidi-font-family: «Courier New»">In dem Projekt wird ein Würfel üblicher Formprogrammiert.

<span Akademiya",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-bidi-font-family:«Courier New»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

<span Courier New"">Aufgaben

·<span Times New Roman"">     

Dualanzeigedes Zählers

·<span Times New Roman"">     

LED-Reihe

<span Courier New"">

·<span Times New Roman"">     

Würfelmodell

<span Courier New"">

·<span Times New Roman"">     

Siebensegmentmodell<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language: AR-SA">

Aufgabe 1. 8051Win-Simulation mit LED-Reihe

 

<span Book Antiqua",«serif»">LED-Dualanzeige desZählers.

<span Book Antiqua",«serif»;mso-fareast-font-family:«Arial Unicode MS»; mso-bidi-font-family:«Arial Unicode MS»">Bild 4. LED-Dualanzeige in 8051Win-Simulation

<img src="/cache/referats/23280/image009.gif" align=«left» hspace=«12» v:shapes="_x0000_s1029">

Erklärung:

Man baut einen einfachen Zähler von 1 bis 6 bzw. von 6 bis 1 auf.Der Schalter wird durch P1 mit derAdresse <span Courier New"">90h

, die Ausgabe auf P2 mit der Adresse <span Courier New"">0A0hfestgelegt. Danach wird der Wert 6 bzw. 1 ins Register 1 geladen (Programmpunkt„laden“). Dann wird der Schalter überprüft, ob er auf 1 gesetzt ist.Wenn ja, überprüft man wieder.  Wird er auf Null gesetzt, so lässt mandas Programm weiter laufen (Programmpunkt „stopp“).

Danach gibt man den Registerinhalt von R1 auf P2.

Lösung mit DJNZ.

Mit DJNZ wird derRegisterinhalt um eins verkleinert,deshalb zählt man von 6 bis 1.Sobald das Ergebnis Null ist, wird der Code weiter abgearbeitet. Mit dem BefehlSJMP springt es zum Programmpunkt„laden“. Ist das Ergebnis keine Null, wird es zum Programmpunkt „stopp“gesprungen.

Lösung mit CJNE.

Mit INC wird derRegisterinhalt um eins erhöht. Manzählt von 1 bis 6. Ist derInhalt von R1 dem Wert 07h nicht gleich, wird es zum Programmpunkt „stopp“gesprungen. Im Falle der Gleichheit wird zu dem Programmpunkt „laden“gesprungen.

Man braucht keine Codierungstabelle, da man keinen Decoder hat.

<div v:shape="_x0000_s1033">

<img src="/cache/referats/23280/image010.gif" v:shapes="_x0000_i1030">

<span Arial Narrow",«sans-serif»">Bild 6. Programmablaufplan für die Lösung mit

<span Arial Narrow",«sans-serif»">INC<span Arial Narrow",«sans-serif»">

Programmablaufpläne

<div v:shape="_x0000_s1034">

<img src="/cache/referats/23280/image012.jpg" v:shapes="_x0000_i1031">

<span Arial Narrow",«sans-serif»">Bild 5. Programmablaufplan für die Lösung mit

<span Arial Narrow",«sans-serif»">DJNZ<span Arial Narrow",«sans-serif»">


  <span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

<span Book Antiqua",«serif»">Assemblercode

<span dir=«RTL» Arial Unicode MS",«sans-serif»; mso-bidi-language:HE;mso-ansi-font-weight:bold">א

) von 6 bis 1 (mit DJNZ)

<span Courier New";mso-ansi-language:EN-US">Code at

<span Courier New";mso-ansi-language:EN-US">0000h

<span Courier New"; mso-ansi-language:EN-US">

<span Courier New"; mso-ansi-language:EN-US">P1 equ 90h               ;Start-Stopp-Schalter

<span Courier New"">P2 equ 0A0h              ; Ausgabe erfolgt an der Adresse 0A0h

<span Courier New"">

<span Courier New"">laden: mov R1, #06h      ; Wert 6 wird in R1 geladen

<span Courier New"">stopp:  JB P1.0,stopp   ; Bei geschaltetem Schalter (d.h.
                         ; bei gesetztem Bit) wird es zu Stopp
                         ; gesprungen

<span Courier New"">count: mov P2, R1        ; Hier erfolgt die Ausgabe an die
                         ; Adresse 0A0h (durchP2)

<span Courier New"">          djnzR1, stopp; Register wird um 1 verkleinert und
                         ; verzweigt,wenn Ergebnis ungleich
                         ; Null

<span Courier New"">          sjmpladen

<span Courier New"">end                      

<span Courier New"">; Ende des Programms

<span dir=«RTL» Arial Unicode MS",«sans-serif»; mso-bidi-language:HE;mso-ansi-font-weight:bold">ב

<span Courier New"">) von1 bis 6 (mit INC und CJNE)

<span Courier New"">

<span Courier New"">Code at

<span Courier New"">0000h

<span Courier New"">

<span Courier New"">P1 equ 90h               ; Register Start-Stopp-Schalter

<span Courier New"">P2 equ 0A0h              ;Ausgabe erfolgt an die Adresse
                         ; 0A0h

<span Courier New"">   

<span Courier New"">laden: mov R1, #01h      ;Wert 1 wird ins Register R1 geladen

<span Courier New"">stopp: JB P1.0, stopp    ; Bei geschaltetem Schalter (d. h.
                         ; bei gesetztemBit) wird es zu Stopp
                         ; gesprungen

<span Courier New"">count: mov P2, R1        ; Hier erfolgt die Ausgabe an die
                         ; Adresse 0A0h d.h. an P2

<span Courier New"">    inc R1              ; Registerinhalt wird umeins erhöht

<span Courier New"">    cjneR1, #07h, stopp; Ist Registerinhalt ungleich #07h,
                         ; erfolgt die Verzweigtzu Stopp

<span Courier New"">    sjmpladen           ;Es wird zu Laden gesprungen

<span Courier New"">end                     

<span Courier New"">; Ende des Programms<span Times New Roman",«serif»;mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:DE;mso-bidi-language: AR-SA">

Ausgabe auf dieLPT-Schnittstelle

Ausgabe equ und mov

<span Book Antiqua",«serif»;mso-fareast-font-family:«Arial Unicode MS»; mso-bidi-font-family:«Arial Unicode MS»">Bild 7. Auswahl der Schnittstelle LPT1

<img src="/cache/referats/23280/image014.gif" align=«left» hspace=«12» v:shapes="_x0000_s1087"><span Courier New"; mso-ansi-language:EN-US">P2 equ 0A0h

<span Courier New"; mso-ansi-language:EN-US">mov

<span Courier New";mso-ansi-language:EN-US">P2, #data

Zuerst wird die Adresse <span Courier New"">0A0h

dem <span Courier New"">P2zugewiesen, danach werdendie Daten (<span Courier New"">#data) ausgegeben.Mit dem Befehl <span Courier New"">mov könneneiner bestimmten Adresse verschiedene Sachen zugeordnet werden z.B. Wert, Datenoder eine andere Adresse.

Auf diese Weise lässt sich auch die Ausgabe auf die LPTSchnittstelle und Parallele Schnittstelle realisieren.

In dem Programm 8051Win können wir dem Port eine Schnittstellezuweisen, bei dem Programm ist es LPT1.

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

<span Book Antiqua",«serif»;mso-ansi-language:EN-US">Bild 8. Screenshot

<span Book Antiqua",«serif»"> von 8051Win

<img src="/cache/referats/23280/image016.gif" align=«left» hspace=«12» v:shapes="_x0000_s1040"><span Book Antiqua",«serif»">Ausgabe alsLeuchtbalken.

Aufgabe:Nun sollen die Zahlen nicht als ein binärer Wert von 0001 bis 0101 einfachausgegeben werden. Es soll ein Decoder Programmiert werden, welcher die Aufgabehat: Die Anzahl der LED, die leuchten, ist gleich der Zahl.

Erklärung:

Codierungstabelle fürdiese Aufgabe steht unten.

Die Binärzahlentspricht der daneben stehenden Hexzahl. Eine Lösungsvariante bestehtdarin, dass man diese Hexzahlen einfach der Reihe nach ausgibt, dabei muss aberjedes Mal geprüft werden, ob der Schalter auf „1“ gelegt wurde. Wenn ja, mussder Ablauf angehalten werden.

Codierungstabelle:

Ausgabewert

Hexzahl

Binärzahl

Eins

<span Courier New"">01h

<span Courier New"">0000 0001b

Zwei

<span Courier New"">03h

<span Courier New"">0000 0011b

Drei

<span Courier New"">07h

<span Courier New"">0000 0111b

Vier

<span Courier New"">0Fh

<span Courier New"">0000 1111b

Fünf

<span Courier New"">1Fh

<span Courier New"">0001 1111b

Sechs

<span Courier New"">3Fh

<span Courier New"">0011 1111b

<span Book Antiqua",«serif»">Assemblercode(1d)

<span Book Antiqua",«serif»">

<span Book Antiqua",«serif»">

<span Courier New"">Code at

<span Courier New"">0000h

<span Courier New"">

<span Courier New"; mso-ansi-language:EN-US">P1 equ 90h            ;Schalter

<span Courier New"; mso-ansi-language:EN-US">P2 equ 0A0h           ;LED's

<span Courier New"; mso-ansi-language:EN-US">

<span Courier New"">count:                ;Programmpunkt für dieSchleife

<span Courier New"">

<span Courier New"">mov

<span Courier New"">P2, #01h          ;Wertausgabe, 1x LED leuchtet

<span Courier New"">

<span Courier New"">stopp1:JB P1.0, stopp1 ;Bei gesetztem BitSTOP

<span Courier New"">mov

<span Courier New"">P2, #03h          ;Wertausgabe, 2x LED's leuchten

<span Courier New"">

<span Courier New"">stopp2:JB P1.0, stopp2   ;Bei gesetztem Bit STOP

<span Courier New"">mov

<span Courier New"">P2, #07h         ;Wertausgabe, 3x LED's leuchten

<span Courier New"">

<span Courier New"">stopp3:JB P1.0, stopp3   ;Bei gesetztem Bit STOP

<span Courier New"">mov

<span Courier New"">P2, #0Fh         ;Wertausgabe, 4x LED's leuchten

<span Courier New"">

<span Courier New"">stopp4:JB P1.0, stopp4   ;Bei gesetztem Bit STOP

<span Courier New"">mov

<span Courier New"">P2, #1Fh          ;Wertausgabe, 5x LED's leuchten

<span Courier New"">

<span Courier New"">stopp5:JB P1.0, stopp5   ;Bei gesetztem Bit STOP

<span Courier New"">mov

<span Courier New"">P2, #3Fh          ;Wertausgabe, 6x LED's leuchten

<span Courier New"">

<span Courier New"">stopp6:JB P1.0, stopp6   ;Bei gesetztem Bit STOP

<span Courier New"">sjmp

<span Courier New"">count           ;Es wird zu count gesprungen

<span Courier New"">

<span Courier New"">end

<span Courier New"">



<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; color:#FF6600;mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language: AR-SA">

<span Book Antiqua",«serif»;mso-bidi-font-family: «Courier New»">Programmablaufplan zu 1d

<span Book Antiqua",«serif»;mso-bidi-font-family:«Courier New»">

<span Book Antiqua",«serif»;mso-ansi-language:EN-GB">Bild 9. Programmablaufplan zu 1d

<span Book Antiqua",«serif»">

<img src="/cache/referats/23280/image018.gif" align=«left» hspace=«12» v:shapes="_x0000_s1054"><span Book Antiqua",«serif»; mso-bidi-font-family:«Courier New»"><span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; color:#FF6600;mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language: AR-SA">

Aufgabe 2. Programmierung derBB-<span Centaur",«serif»">µ

C-Platine

Speicherarten und Harvard-Struktur

<span dir=«RTL» Arial Unicode MS",«sans-serif»;mso-ascii-font-family:«Book Antiqua»; mso-hansi-font-family:«Book Antiqua»;mso-bidi-language:HE;mso-ansi-font-weight: bold">(

<span dir=«RTL» Arial Unicode MS",«sans-serif»; mso-ascii-font-family:«Book Antiqua»;mso-hansi-font-family:«Book Antiqua»; mso-bidi-language:HE;mso-ansi-font-weight:bold">א<span Book Antiqua",«serif»">Speicherarten

Ein µC-System benötigt immereinen Programm- und Datenspeicher. Der Inhalt des Programmspeichers wird vom Mikroprozessornur gelesen, während der Datenspeicher sowohl gelesen als auch beschriebenwird. Für den Programmspeicher werden deswegen ROMs (read only memory,lese-nur-Speicher) eingesetzt. Der Programmspeicher muss ein nichtflüchtigerSpeicher sein d.h. ein Speicher der seinen Inhalt auch dann nicht verliert,wenn die Versorgungsspannung abgeschaltet wird.

EEPROM (ElectricallyErasableProgrammable Read Only Memory)

Ist elektrischprogrammierbar und auch elektrisch löschbar. Das Programmieren und Löschenkann nicht beliebig schnell erfolgen, deswegen müssen dabei bestimmteMindestzeiten eingehalten werden.

Flash-Speicher

Hat im Vergleich zuEEPROM wesentlich kürzere Programmier- und Löschzeiten. Die Speicherzellenkönnen nicht mehr, wie im EEPROM einzeln sondern nur Blockweisegelöscht werden.

Diese Speicherart wirdim Mikrocontroller als eine Art des ROM Speichers (nur Lese-Speicher) benutzt.In ihm wird der Programmcode abgelegt. Bei der Abschaltung des Stromes gehendie Daten nicht verloren.

RAM-Speicher(RandomAccess Memory, Schreib-Lese-Speicher)

Für denDatenspeicher benötigt man einen Speicher, den man sehr schnell lesen undbeschreiben kann. Für diese Aufgabe verwendet man Halbleiterspeicher, dieauf der Basis von Flip-Flops aufgebaut sind.

RAM-Speicher verliertseine Daten bei Stormabschaltung, d. h. sie ist flüchtig. 

<span dir=«RTL» Arial Unicode MS",«sans-serif»; mso-ascii-font-family:«Book Antiqua»;mso-hansi-font-family:«Book Antiqua»; mso-bidi-language:HE;mso-ansi-font-weight:bold">(

<span dir=«RTL» Arial Unicode MS",«sans-serif»; mso-bidi-language:HE;mso-ansi-font-weight:bold">ב<span Book Antiqua",«serif»">Harvard-Struktur

<span Book Antiqua",«serif»;mso-ansi-language:EN-GB">Bild 10. Harvard-Struktur

<span Book Antiqua",«serif»">

<img src="/cache/referats/23280/image020.gif" align=«left» hspace=«12» v:shapes="_x0000_s1103">Alle Microcontroller der Familie 8051verfügen über getrennteAdressierbereiche für den Programmspeicher und den Datenspeicher, welche am gleichen Adressbus liegen.

Der Zugriff auf den exteren Programmspeicher wird über das Signal <img src="/cache/referats/23280/image022.gif" v:shapes="_x0000_i1036"> (Programm Store Enable) gesteuert. Für den Zugriff auf den Datenspeicherstehen die Signale <img src="/cache/referats/23280/image024.gif" v:shapes="_x0000_i1037"> (read) und <img src="/cache/referats/23280/image026.gif" v:shapes="_x0000_i1038"> (write) zur Verfügung. Die Struktur eines solchen Speichersystemswird Harvard-Struktur genannt.

Die Harvard Struktur wird während des normalen Betriebs desMikrocontrollers verwendet.

<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:DE;mso-fareast-language: DE;mso-bidi-language:AR-SA">

Zeitprogramm,Zeitberechnung

<span Book Antiqua",«serif»">Bild 11. Das Auge merkt keine Pausen.

<img src="/cache/referats/23280/image028.gif" align=«left» hspace=«12» v:shapes="_x0000_s1060">Erklärung.

Das menschliche Auge ist in der Lage, die Ereignisse wahrzunehmen, dielänger, als ca. <img src="/cache/referats/23280/image030.gif" v:shapes="_x0000_i1040">

Schleife:

<span Courier New"">zeit:DJNZ R1, zeit

Einmaligesdurchführen dieser Schleife (bei <span Courier New"">R1 = #01h

) dauert bei unserem <span Centaur",«serif»">µC 2 <span Centaur",«serif»">µs.

Man programmiere eineSchleife, die ca. 0,2 s läuft. 1 s entspricht 100 000 Schleifen:

<img src="/cache/referats/23280/image032.gif" v:shapes="_x0000_i1041">

Folglich brauchen wirsie 100 000 durchlaufen zu lassen, um 0,2 s Zeitpause zu bekommen.

Unterprogramm

Unterprogramm

<span Courier New"">uptime:

<span Courier New"">mov

<span Courier New"">R3, #10            ; lädt 10 in R3 ein

<span Courier New"">loop3: mov R2,#100    ; Unterschleife; lädt 100 inR2 ein

<span Courier New"">loop2: mov R1,#100    ; Unterschleife; lädt 100 inR2 ein

<span Courier New"">loop1: djnz R1,loop1  ; bedingter Sprung zurück

<span Courier New"">       djnz R2, loop2  ; bedingter Sprung zurück

<span Courier New"">       djnz R3, loop3  ; bedingter Sprung zurück

<span Courier New"">RET                        

<span Courier New"">; Das Programm wird an der Stelle
                            ;fortgesetzt, an der das Unter-
                            ; programmaufgerufen wurde, also
                            ; nach der lcall uptime

Das Unterprogramm wird aufgerufen, durchgeführt und mit RET kehrt man an den Punkt zurück,von welchem es aufgerufen wurde.

Stackpointer und Stackspeicher.

Die Adresse, an die es zurückspringen muss, wird im Stack-Speicher gespeichert. Der Stackpointer zeigt auf den Platz imStack-Speicher, in dem die Adresse gespeichert ist.

Ein Stackdient somit zur Zwischenspeicherung der Rücksprungsadressen beiUnterprogrammen.

<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:DE;mso-fareast-language: DE;mso-bidi-language:AR-SA">

Zählerausgabeauf die LED-Reihe.

Erklärung

Die Lösung istwie bei № 1d, jedoch mit einer Erweiterung:

Zwischen den Ausgabenvon Zahlen wird jedes Mal ein Unterprogramm „up1sek“ aufgerufen. DasUnterprogramm verbraucht die Zeit von etwa 1Sekunde. Danach wird das Programmweiter an dem Punkt fortgesetzt von dem das Unterprogramm aufgerufen wurde.

Unterprogramm:

In die Register R1,R2, R3 wird jeweils eine Dezimalzahl unmittelbar geladen. In einer Schleife werdendiese Zahlen bis Null runtergezählt. Danach wird es wieder mit RET an den Punktdes Aufrufs zurückgesprungen.

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

Assemblercode

<span Courier New";mso-ansi-language:EN-US">Code at

<span Courier New";mso-ansi-language:EN-US">0000h

<span Courier New"; mso-ansi-language:EN-US">

<span Courier New"; mso-ansi-language:EN-GB">P1 equ 90h             ; Schalter

<span Courier New"; mso-ansi-language:EN-GB">P2 equ 0A0h            ; LEDs

<span Courier New"; mso-ansi-language:EN-GB">

<span Courier New"">count:                 ; Anfang der Hauptschleife

<span Courier New"">

<span Courier New";mso-ansi-language:EN-US">mov

<span Courier New";mso-ansi-language:EN-US">P2,#01h           ; 1 LED ist an.

<span Courier New"">lcall

<span Courier New"">uptime           ; Aufruf des Unterprogramms fürPause

<span Courier New"">stopp1: JB P1.0, stopp1; Beim gesetzten bitstoppen.

<span Courier New"">mov

<span Courier New"">P2, #03h           ; 2 LEDs ist an.

<span Courier New"">lcall

<span Courier New"">uptime           ; Aufruf des Unterprogramms fürPause

<span Courier New"">stopp2: JB P1.0, stopp2; Beim gesetzten bitstoppen.

<span Courier New"">mov

<span Courier New"">P2, 07h            ; 3 LEDs ist an.

<span Courier New"">lcall

<span Courier New"">uptime          ; Aufruf des Unterprogrammsfür Pause

<span Courier New"">stopp3: JB P1.0, stopp3; Beim gesetzten bitstoppen.

<span Courier New"">mov

<span Courier New"">P2, 0Fh            ; 4 LEDs ist an.

<span Courier New"">;

<span Courier New"">lcall

<span Courier New"">uptime           ; Aufruf des Unterprogramms fürPause

<span Courier New"">stopp4: JB P1.0, stopp4; Beim gesetzten bitstoppen.

<span Courier New"">mov

<span Courier New"">P2, 1Fh            ; 5 LEDs ist an.

;<span Courier New""> lcalluptime           ; Aufruf desUnterprogramms für Pause

<span Courier New"">stopp5: JB P1.0, stopp5; Beim gesetzten bitstoppen.

<span Courier New"">mov

<span Courier New"">P2, 3Fh            ; 6 LEDs ist an.

<span Courier New"">lcall

<span Courier New"">uptime           ; Aufruf des Unterprogramms fürPause

<span Courier New"">stopp6: JB P1.0, stopp6; Beim gesetzten bitstoppen.

<span Courier New"">;

<span Courier New"">ORG

<span Courier New"">0F0h

<span Courier New"">

<span Courier New"">uptime:

<span Courier New"">mov

<span Courier New"">R3, #10            ; lädt 10 in R3 ein

<span Courier New"">loop3: mov R2,#100    ; Unterschleife; lädt 100 inR2 ein

<span Courier New"">loop2: mov R1,#100    ; Unterschleife; lädt 100 inR2 ein

<span Courier New"">loop1: djnz R1,loop1  ; bedingter Sprung zurück

<span Courier New"">       djnz R2, loop2  ; bedingter Sprung zurück

<span Courier New"">       djnz R3, loop3  ; bedingter Sprung zurück

<span Courier New"">RET                        

<span Courier New"">; Das Programm wird an der Stelle
                            ;fortgesetzt, an der das Unter-
                            ; programm aufgerufen wurde,also
                            ; nach der lcall uptime

<span Courier New"">END

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

Programmablaufpläne (siehe auch 1d)

Bild 12. Programmablaufplan der Aufgabe 2

<img src="/cache/referats/23280/image034.gif" align=«left» hspace=«12» v:shapes="_x0000_s1093">

Bild 13. Unterprogrammablaufplan für die Zeitpause „uptime“

<img src="/cache/referats/23280/image036.gif" align=«left» hspace=«12» v:shapes="_x0000_s1072">

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

Aufgabe 3. 8051Win-Simulationvon Würfelmodell

<img src="/cache/referats/23280/image038.gif" align=«right» hspace=«12» v:shapes="_x0000_s1086">Hexzahlenberechnung fürdie Ausgabe auf dem Würfel-2 in 8051Win

W-Anzeige

4

2

1

8

4

2

1

Dual

Hexergebnis

Belegung

-

D6

D5

D4

D3

D2

D1

D0

    linke hex – rechte hex

-

Augenzahl 1

<span Courier New"">0

<span Courier New"">0

<span Courier New"">0

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">0

<span Courier New"">0

<span Courier New"">8

<span Courier New"">08h

Augenzahl 2

<span Courier New"">0

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">0

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">2 – 2

<span Courier New"">22h

Augenzahl 3

<span Courier New"">0

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">    2 – 8+2

<span Courier New"">2Ah

Augenzahl 4

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New""> 4+1 – 4+1

<span Courier New"">55h

Augenzahl 5

<span Courier New"">0

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">1

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">     4+1 – 8+4+1

<span Courier New"">5Dh

Augenzahl 6

<span Courier New"">0

<span Courier New"">1

<span Courier New"">1

<span Courier New"">1

<span Courier New"">0

<span Courier New"">1

<span Courier New"">1

<span Courier New"">1

<span Courier New"">4+2+1 – 4+2+1

<span Courier New"">77H

 

a)Würfelmodell mit integriertem Decoder

<span Book Antiqua",«serif»;mso-ansi-language:EN-US">Bild 15. Screenshot

<span Book Antiqua",«serif»"> von 8051Win

<img src="/cache/referats/23280/image040.gif" align=«left» hspace=«12» v:shapes="_x0000_s1073">

Erklärung

Da der Würfeleinen integrierten Decoder besitzt, kann der Zähler aus der Aufgabe 1benutzt werden. Dieser Zähler gibt die Zahlen an P2 aus. Der Decoderwandelt die Zahlen in entsprechend andere Zahlen, damit die Würfelaugenrichtig leuchten.

Assemblercode

<span Courier New"">Code at

<span Courier New"">0000h

<span Courier New"">

<span Courier New"">P1equ 90h               ; Start/Stopp Schalter

<span Courier New"">P2equ 0A0h              ; Ausgabe erfolgt an der Adresse 0A0h

<span Courier New"">   

<span Courier New"">laden:mov R1, #01h      ; Wert #01h wird ins Register R1 geladen

<span Courier New"">stopp:  JB P1.0,stopp   ; Bei geschaltetem Schalter (gesetztem
                         ; Bit) wird es zuStopp gesprungen.

<span Courier New"">mov

<span Courier New"">P2, R1        ; Hier erfolgt die Ausgabe an Adresse 0A0h,
                         ; d. h. an P2.

<span Courier New"">    inc R1               ;Registerinhalt wird um eins erhöht.

<span Courier New"">    cjneR1, #07h, stopp; Wenn Registerinhalt ungleich #07h ist,
                         ; dann verzweigt das Programm zu Stopp

<span Courier New"">    sjmpladen           ; Es wird zu Laden gesprungen

End

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:DE;mso-fareast-language:DE;mso-bidi-language:AR-SA">

Programmablaufplan

<div v:shape="_x0000_s1076">

<img src="/cache/referats/23280/image042.jpg" v:shapes="_x0000_i1046">

<span Book Antiqua",«serif»">Bild 16. Programmablaufplan vom Würfelmodell mit integriertem Decoder

<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:DE;mso-fareast-language: DE;mso-bidi-language:AR-SA">

<span Book Antiqua",«serif»;mso-ansi-language:EN-US">Bild 17. Screenshot

<span Book Antiqua",«serif»"> von 8051Win

<img src="/cache/referats/23280/image044.gif" align=«left» hspace=«12» v:shapes="_x0000_s1080">b) Würfelmodell ohne Decodermit indirekter Adressierung

Erklärung

<span Arial Narrow",«sans-serif»">Bild 18. Zw

<span Arial Narrow",«sans-serif»">ei Würfelaugen leuchten.<span Arial Narrow",«sans-serif»">

<img src="/cache/referats/23280/image046.gif" align=«left» hspace=«12» v:shapes="_x0000_s1079">

Bei dieser Aufgabe besitzt der Würfel keinen integrierten Decoder,die Würfelaugen müssen trotzdem richtig leuchten. Das heißt,dass bei einer Zwei auch die richtigen zwei Würfelaugen leuchten müssen(s. Bild 18). Die folgende Codierungstabelle enthält die Hexzahlen, diefür jeden Ausgabewert (1 bis 6) die richtigen Würfelaugen zum Leuchtenbringen.

Ausgabewert

Hexzahl

Eins

<span Courier New"">08h

Zwei

<span Courier New"">41h

Drei

<span Courier New"">49h

Vier

<span Courier New"">55h

Fünf

<span Courier New"">5D4

Sechs

<span Courier New"">77h

Diese Hexzahlenwerden gemäß der Aufgabestellung im Adressbereich 31h…36h abgespeichert. Der Zählergeht dann diesen Adressbereich immer wieder durch. Durch die indirekte Adressierung werden dieseHexzahlen nacheinander ausgegeben.

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:EN-GB;mso-fareast-language:DE;mso-bidi-language:AR-SA">

Assemblercode

<span Courier New"">Code at

<span Courier New"">0000h

<span Courier New"">

<span Courier New"">P1equ 90h   ; Schalter

<span Courier New"">P2equ 0A0h  ; Ausgabe

<span Courier New"">;Decoder:

<span Courier New"">;es werden bestimmte Werte in dem

<span Courier New"">;Adressbereich 31h bis 36h

<span Courier New"">;abgespeichert

<span Courier New"; mso-ansi-language:EN-US">;------------------------

<span Courier New";mso-ansi-language:EN-GB">mov

<span Courier New";mso-ansi-language: EN-GB">31h, #08h

<span Courier New";mso-ansi-language:EN-GB">mov

<span Courier New";mso-ansi-language: EN-GB">32h, #41h

<span Courier New";mso-ansi-language:EN-GB">mov

<span Courier New";mso-ansi-language: EN-GB">33h, #49h

<span Courier New";mso-ansi-language:EN-GB">mov

<span Courier New";mso-ansi-language: EN-GB">34h, #55h

<span Courier New";mso-ansi-language:EN-GB">mov

<span Courier New";mso-ansi-language: EN-GB">35h, #5Dh

<span Courier New";mso-ansi-language:EN-US">mov

<span Courier New";mso-ansi-language: EN-US">36h, #77h

<span Courier New"">;------------------------

<span Courier New"">laden:mov R1, #31h   ; im R1 wird der Wert

<span Courier New"">                      ; 31h abgespeichert

<span Courier New"">       movA, @R1     ; in A steht jetzt der

<span Courier New"">                      ; Wert 08h (indirekte

<span Courier New"">                      ; Andressierung)

<span Courier New"">       movP2, A      ; Akkuinhalt wird

<span Courier New"">                      ; ausgegeben

<span Courier New"">

<span Courier New"">stopp:JB P1.0, stopp;Stopp/Start-Schalter

<span Courier New"">

<span Courier New"">count:

<span Courier New"">inc

<span Courier New"">R1                ; erhohe R1

<span Courier New"">mov

<span Courier New"">A, @R1            ; in A wird der Wert der

<span Courier New"">                      ; Adresse, welche in R1

<span Courier New"">                      ; steht, abgespeichert.

<span Courier New"">mov

<span Courier New"">P2, A             ; Ausgabe des Akkuinhalts

<span Courier New"">cjne

<span Courier New"">A, #77h, stopp   ; Verzweigen zum Stopp bei

<span Courier New"">                      ; Ungleichheit.

<span Courier New"">

<span Courier New"">sjmp

<span Courier New"">laden            ; Sprung zum Laden

<span Courier New"">

<span Courier New"">END

<span Courier New"">

<span Time
еще рефераты
Еще работы по программированию, базе данных