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

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

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