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

Ausgabe als Leuchtbalken.

 

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


Erklärung:

 

Codierungstabelle für diese Aufgabe steht unten.

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

Codierungstabelle:

Ausgabewert

Hexzahl

Binärzahl

Eins

01h

0000 0001b

Zwei

03h

0000 0011b

Drei

07h

0000 0111b

Vier

0Fh

0000 1111b

Fünf

1Fh

0001 1111b

Sechs

3Fh

0011 1111b

Assemblercode (1d)

 

 

Code at 0000h


P1 equ 90h            ;Schalter

P2 equ 0A0h           ;LED's


count:                ;Programmpunkt für die Schleife


mov P2, #01h          ;Wertausgabe, 1x LED leuchtet


stopp1: JB P1.0, stopp1 ;Bei gesetztem Bit STOP

mov P2, #03h          ;Wertausgabe, 2x LED's leuchten


stopp2: JB P1.0, stopp2   ;Bei gesetztem Bit STOP

mov P2, #07h         ;Wertausgabe, 3x LED's leuchten


stopp3: JB P1.0, stopp3   ;Bei gesetztem Bit STOP

mov P2, #0Fh         ;Wertausgabe, 4x LED's leuchten


stopp4: JB P1.0, stopp4   ;Bei gesetztem Bit STOP

mov P2, #1Fh          ;Wertausgabe, 5x LED's leuchten


stopp5: JB P1.0, stopp5   ;Bei gesetztem Bit STOP

mov P2, #3Fh          ;Wertausgabe, 6x LED's leuchten


stopp6: JB P1.0, stopp6   ;Bei gesetztem Bit STOP

sjmp count             ;Es wird zu count gesprungen


end




Programmablaufplan zu 1d


Aufgabe 2. Programmierung der BB-µC-Platine

Speicherarten und Harvard-Struktur

Speicherarten


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


EEPROM (Electrically Erasable Programmable Read Only Memory)

Ist elektrisch programmierbar und auch elektrisch löschbar. Das Programmieren und Löschen kann nicht beliebig schnell erfolgen, deswegen müssen dabei bestimmte Mindestzeiten eingehalten werden.


Flash-Speicher

Hat im Vergleich zu EEPROM wesentlich kürzere Programmier- und Löschzeiten. Die Speicherzellen können nicht mehr, wie im EEPROM einzeln sondern nur Blockweise gelöscht werden.

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


RAM-Speicher (Random Access Memory, Schreib-Lese-Speicher)

Für den Datenspeicher benötigt man einen Speicher, den man sehr schnell lesen und beschreiben kann. Für diese Aufgabe verwendet man Halbleiterspeicher, die auf der Basis von Flip-Flops aufgebaut sind.

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


Harvard-Struktur


Alle Microcontroller der Familie 8051 verfügen über getrennte Adressierbereiche für den Programmspeicher und den Datenspeicher, welche am gleichen Adressbus liegen.

Der Zugriff auf den exteren Programmspeicher wird über das Signal  (Programm Store Enable) gesteuert. Für den Zugriff auf den Datenspeicher stehen die Signale  (read) und  (write) zur Verfügung. Die Struktur eines solchen Speichersystems wird Harvard-Struktur genannt.

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




 

 

 

Zeitprogramm, Zeitberechnung


Erklärung.


Das menschliche Auge ist in der Lage, die Ereignisse wahrzunehmen, die länger, als ca. s dauern. Diese Eigenschaft benützt man, um das „Bremsen“ des µC zu simulieren oder die LEDs „schwächer“ (z. B. halbhell) leuchten zu lassen. Das menschliche Auge kann nämlich nicht so schnell die Veränderungen wahrnehmen. Dies wird mit einem Unterprogramm realisiert, welcher vor jeder Veränderung bis einer Zahl zählt.


Schleife:

zeit: DJNZ R1, zeit


Einmaliges durchführen dieser Schleife (bei R1 = #01h) dauert bei unserem µC 2 µs.

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

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


Unterprogramm

Unterprogramm

uptime:

mov R3, #10            ; lädt 10 in R3 ein

loop3: mov R2, #100    ; Unterschleife; lädt 100 in R2 ein

loop2: mov R1, #100    ; Unterschleife; lädt 100 in R2 ein

loop1: djnz R1, loop1  ; bedingter Sprung zurück

       djnz R2, loop2  ; bedingter Sprung zurück

       djnz R3, loop3  ; bedingter Sprung zurück

RET                         ; Das Programm wird an der Stelle
                            ; fortgesetzt, an der das Unter-
                            ; programm aufgerufen 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 im Stack-Speicher, in dem die Adresse gespeichert ist.


Ein Stack dient somit zur Zwischenspeicherung der Rücksprungsadressen bei Unterprogrammen.


Zählerausgabe auf die LED-Reihe.

Erklärung

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


Zwischen den Ausgaben von Zahlen wird jedes Mal ein Unterprogramm „up1sek“ aufgerufen. Das Unterprogramm verbraucht die Zeit von etwa 1Sekunde. Danach wird das Programm weiter 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 werden diese Zahlen bis Null runtergezählt. Danach wird es wieder mit RET an den Punkt des Aufrufs zurückgesprungen.

 

Assemblercode

Code at 0000h


P1 equ 90h             ; Schalter

P2 equ 0A0h            ; LEDs


count:                 ; Anfang der Hauptschleife


mov P2, #01h           ; 1 LED ist an.

lcall uptime           ; Aufruf des Unterprogramms für Pause

stopp1: JB P1.0, stopp1; Beim gesetzten bit stoppen.

mov P2, #03h           ; 2 LEDs ist an.

lcall uptime           ; Aufruf des Unterprogramms für Pause

stopp2: JB P1.0, stopp2; Beim gesetzten bit stoppen.

mov P2, 07h            ; 3 LEDs ist an.

lcall uptime           ; Aufruf des Unterprogramms für Pause

stopp3: JB P1.0, stopp3; Beim gesetzten bit stoppen.

mov P2, 0Fh            ; 4 LEDs ist an.

;

lcall uptime           ; Aufruf des Unterprogramms für Pause

stopp4: JB P1.0, stopp4; Beim gesetzten bit stoppen.

mov P2, 1Fh            ; 5 LEDs ist an.

; lcall uptime           ; Aufruf des Unterprogramms für Pause

stopp5: JB P1.0, stopp5; Beim gesetzten bit stoppen.

mov P2, 3Fh            ; 6 LEDs ist an.

lcall uptime           ; Aufruf des Unterprogramms für Pause

stopp6: JB P1.0, stopp6; Beim gesetzten bit stoppen.

;

ORG 0F0h

uptime:

mov R3, #10            ; lädt 10 in R3 ein

loop3: mov R2, #100    ; Unterschleife; lädt 100 in R2 ein

loop2: mov R1, #100    ; Unterschleife; lädt 100 in R2 ein

loop1: djnz R1, loop1  ; bedingter Sprung zurück

       djnz R2, loop2  ; bedingter Sprung zurück

       djnz R3, loop3  ; bedingter Sprung zurück

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.