Программирование микроконтроллера на ассемблере. Симуляция игральной кости
Реферат - Компьютеры, программирование
Другие рефераты по предмету Компьютеры, программирование
enden Hexzahl. Eine Lsungsvariante besteht darin, dass man diese Hexzahlen einfach der Reihe nach ausgibt, dabei muss aber jedes Mal geprft werden, ob der Schalter auf „1“ gelegt wurde. Wenn ja, muss der Ablauf angehalten werden.
Codierungstabelle:
AusgabewertHexzahlBinrzahlEins01h0000 0001bZwei03h0000 0011bDrei07h0000 0111bVier0Fh0000 1111bFnf1Fh0001 1111bSechs3Fh0011 1111bAssemblercode (1d)
Code at 0000h
P1 equ 90h ;Schalter
P2 equ 0A0h ;LEDs
count: ;Programmpunkt fr die Schleife
mov P2, #01h ;Wertausgabe, 1x LED leuchtet
stopp1: JB P1.0, stopp1 ;Bei gesetztem Bit STOP
mov P2, #03h ;Wertausgabe, 2x LEDs leuchten
stopp2: JB P1.0, stopp2 ;Bei gesetztem Bit STOP
mov P2, #07h ;Wertausgabe, 3x LEDs leuchten
stopp3: JB P1.0, stopp3 ;Bei gesetztem Bit STOP
mov P2, #0Fh ;Wertausgabe, 4x LEDs leuchten
stopp4: JB P1.0, stopp4 ;Bei gesetztem Bit STOP
mov P2, #1Fh ;Wertausgabe, 5x LEDs leuchten
stopp5: JB P1.0, stopp5 ;Bei gesetztem Bit STOP
mov P2, #3Fh ;Wertausgabe, 6x LEDs 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 bentigt immer einen Programm- und Datenspeicher. Der Inhalt des Programmspeichers wird vom Mikroprozessor nur gelesen, whrend der Datenspeicher sowohl gelesen als auch beschrieben wird. Fr den Programmspeicher werden deswegen ROMs (read only memory, lese-nur-Speicher) eingesetzt. Der Programmspeicher muss ein nichtflchtiger 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 lschbar. Das Programmieren und Lschen kann nicht beliebig schnell erfolgen, deswegen mssen dabei bestimmte Mindestzeiten eingehalten werden.
Flash-Speicher
Hat im Vergleich zu EEPROM wesentlich krzere Programmier- und Lschzeiten. Die Speicherzellen knnen nicht mehr, wie im EEPROM einzeln sondern nur Blockweise gelscht 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)
Fr den Datenspeicher bentigt man einen Speicher, den man sehr schnell lesen und beschreiben kann. Fr 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 flchtig.
( Harvard-Struktur
Alle Microcontroller der Familie 8051 verfgen ber getrennte Adressierbereiche fr den Programmspeicher und den Datenspeicher, welche am gleichen Adressbus liegen.
Der Zugriff auf den exteren Programmspeicher wird ber das Signal (Programm Store Enable) gesteuert. Fr den Zugriff auf den Datenspeicher stehen die Signale (read) und (write) zur Verfgung. Die Struktur eines solchen Speichersystems wird Harvard-Struktur genannt.
Die Harvard Struktur wird whrend des normalen Betriebs des Mikrocontrollers verwendet.
Zeitprogramm, Zeitberechnung
Erklrung.
Das menschliche Auge ist in der Lage, die Ereignisse wahrzunehmen, die lnger, als ca. s dauern. Diese Eigenschaft bentzt man, um das „Bremsen“ des C zu simulieren oder die LEDs „schwcher“ (z. B. halbhell) leuchten zu lassen. Das menschliche Auge kann nmlich nicht so schnell die Vernderungen wahrnehmen. Dies wird mit einem Unterprogramm realisiert, welcher vor jeder Vernderung bis einer Zahl zhlt.
Schleife:
zeit: DJNZ R1, zeit
Einmaliges durchfhren dieser Schleife (bei R1 = #01h) dauert bei unserem C 2 s.
Man programmiere eine Schleife, die ca. 0,2 s luft. 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 ; ldt 10 in R3 ein
loop3: mov R2, #100 ; Unterschleife; ldt 100 in R2 ein
loop2: mov R1, #100 ; Unterschleife; ldt 100 in R2 ein
loop1: djnz R1, loop1 ; bedingter Sprung zurck
djnz R2, loop2 ; bedingter Sprung zurck
djnz R3, loop3 ; bedingter Sprung zurck
RET ; Das Programm wird an der Stelle
; fortgesetzt, an der das Unter-
; programm aufgerufen wurde, also
; nach der lcall uptime
Das Unterprogramm wird aufgerufen, durchgefhrt und mit RET kehrt man an den Punkt zurck, von welchem es aufgerufen wurde.
Stackpointer und Stackspeicher.
Die Adresse, an die es zurckspringen 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 Rcksprungsadressen bei Unterprogrammen.
Zhlerausgabe auf die LED-Reihe.
Erklrung
Die Lsung 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 runtergezhlt. Danach wird es wieder mit RET an den Punkt des Aufrufs zurckgesprungen.
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 fr Pause
stopp1: JB P1.0, stopp1; Beim gesetzten bit stoppen.
mov P2, #03h ; 2 LEDs ist an.
lcall uptime ; Aufruf des Unterprogramms fr Pause
stopp2: JB P1.0, stopp2; Beim gesetzten bit stoppen.
mov P2, 07h ; 3 LEDs ist an.
lcall uptime ; Aufruf des Unterprogramms fr Pause
stopp3: JB P1.0, stopp3; Beim gesetzten bit stoppen.
mov P2, 0Fh ; 4 LEDs ist an.
;
lcall uptime ; Aufruf des Unterprogramms fr Pause
stopp4: JB P1.0, stopp4; Beim gesetzten bit stoppen.
mov P2, 1Fh ; 5 LEDs ist an.
; lcall uptime ; Aufruf des Unterprogramms fr Pause
stopp5: JB P1.0, stopp5; Beim gesetzten bit stoppen.
mov P2, 3Fh ; 6 LEDs ist an.
lcall uptime ; Aufruf des Unterprogramms fr Pause
stopp6: JB P1.0, stopp6; Beim gesetzten bit stoppen.
;
ORG 0F0h
uptime:
mov R3, #10 ; ldt 10 in R3 ein
loop3: mov R2, #100 ; Unterschleife; ldt 100 in R2 ein
loop2: mov R1, #100 ; Unterschleife; ldt 100 in R2 ein
loop1: djnz R1, loop1 ; bedingter Sprung zurck
djnz R2, loop2 ; bedingter Sprung zurck
djnz R3, loop3 ; bedingter Sprung zurck
RET ; Das Programm wird an der Stelle
; fortgesetzt, an der das Unter-
; programm aufgerufen wurde, also
; nach der lcall uptime