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

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

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

>END

Programmablaufplne (siehe auch 1d)

 

 

Aufgabe 3. 8051Win-Simulation von Wrfelmodell

 

Hexzahlenberechnung fr die Ausgabe auf dem Wrfel-2 in 8051Win

 

 

 

 

 

 

 

 

W-Anzeige4218421DualHexergebnisBelegung-D6D5D4D3D2D1D0 linke hex rechte hex-Augenzahl 100001000808hAugenzahl 2001000102 222hAugenzahl 300101010 2 8+22AhAugenzahl 401010101 4+1 4+155hAugenzahl 501011101 4+1 8+4+15DhAugenzahl 6011101114+2+1 4+2+177H

 

a) Wrfelmodell mit integriertem Decoder

 

Erklrung

 

Da der Wrfel einen integrierten Decoder besitzt, kann der Zhler aus der Aufgabe 1 benutzt werden. Dieser Zhler gibt die Zahlen an P2 aus. Der Decoder wandelt die Zahlen in entsprechend andere Zahlen, damit die Wrfelaugen richtig leuchten.

 

Assemblercode

 

Code at 0000h

 

P1 equ 90h ; Start/Stopp Schalter

P2 equ 0A0h ; Ausgabe erfolgt an der Adresse 0A0h

laden: mov R1, #01h ; Wert #01h wird ins Register R1 geladen

stopp: JB P1.0, stopp ; Bei geschaltetem Schalter (gesetztem
; Bit) wird es zu Stopp gesprungen.

mov P2, R1 ; Hier erfolgt die Ausgabe an Adresse 0A0h,
; d. h. an P2.

inc R1 ; Registerinhalt wird um eins erhht.

cjne R1, #07h, stopp ; Wenn Registerinhalt ungleich #07h ist,
; dann verzweigt das Programm zu Stopp

sjmp laden ; Es wird zu Laden gesprungen

End

Programmablaufplan

 

 

 

 

b) Wrfelmodell ohne Decoder mit indirekter Adressierung

 

Erklrung

 

Bei dieser Aufgabe besitzt der Wrfel keinen integrierten Decoder, die Wrfelaugen mssen trotzdem richtig leuchten. Das heit, dass bei einer Zwei auch die richtigen zwei Wrfelaugen leuchten mssen (s. Bild 18). Die folgende Codierungstabelle enthlt die Hexzahlen, die fr jeden Ausgabewert (1 bis 6) die richtigen Wrfelaugen zum Leuchten bringen.

 

AusgabewertHexzahlEins08hZwei41hDrei49hVier55hFnf5D4Sechs77h

Diese Hexzahlen werden gem der Aufgabestellung im Adressbereich 31h…36h abgespeichert. Der Zhler geht dann diesen Adressbereich immer wieder durch. Durch die indirekte Adressierung werden diese Hexzahlen nacheinander ausgegeben.

 

 

 

 

Assemblercode

 

Code at 0000h

 

P1 equ 90h ; Schalter

P2 equ 0A0h ; Ausgabe

; Decoder:

; es werden bestimmte Werte in dem

; Adressbereich 31h bis 36h

; abgespeichert

;------------------------

mov 31h, #08h

mov 32h, #41h

mov 33h, #49h

mov 34h, #55h

mov 35h, #5Dh

mov 36h, #77h

;------------------------

laden: mov R1, #31h ; im R1 wird der Wert

; 31h abgespeichert

mov A, @R1 ; in A steht jetzt der

; Wert 08h (indirekte

; Andressierung)

mov P2, A ; Akkuinhalt wird

; ausgegeben

 

stopp: JB P1.0, stopp ; Stopp/Start-Schalter

 

count:

inc R1 ; erhohe R1

mov A, @R1 ; in A wird der Wert der

; Adresse, welche in R1

; steht, abgespeichert.

mov P2, A ; Ausgabe des Akkuinhalts

cjne A, #77h, stopp ; Verzweigen zum Stopp bei

; Ungleichheit.

 

sjmp laden ; Sprung zum Laden

 

END

 

 

Programmablaufplan

 

 

 

 

 

 

Aufgabe 4. 8051Win-Simulation der 7-Segment-Anzeige

 

 

Erklrung

 

In dieser Aufgabe werden die Zahlen von 1 bis 6 durch eine 7-Segment-Anzeige dargestellt.

Zur Lsung der Aufgabe bentzen wir eine indirekte Adressierung @DPTR im 16 bit- Adressraum und Define Byte (DB).

Die Zahlen 1 bis 6 haben folgende Entsprechungen:

 

AusgabewertHexzahlEins12hZwei0BChDrei0B6hVier0D2hFnf0E6hSechs0EEh

Am Ende der Datenzeile setze man 0FFh, um das Ende der Zeile zu markieren (end of line).

 

 

Assemblercode

 

Code at 0000h

P2 equ 0A0h

P3 equ 0B0h

clr P3.6 ; Eine 7-Segment-Anzeige loeschen/abschalten

init: mov DPTR, #Daten ; Daten laden

start: clr A ; Akku loeschen

movC A, @A+DPTR ; Indirekte 16-Bit-Adressierung.

; Es wird auf diese Weise wegen der

; Besonderheiten des Prozessors gemacht.

;

CJNE A, #0FFh, weiter ; Pruefe, ob "end of line" (Ende der Zeile).

sjmp init ; Wenn ja, von Anfang an.

weiter: mov P2, A ; Ausgabe des Akkuinhaltes

INC DPTR ; Naechstes Datum nehmen.

sjmp start ; Zurueck zu Start

 

ORG 0C0h

 

Daten: DB 12h, 0BCh, 0B6h, 0D2h, 0E6h, 0EEh, 0FFh

; Liste der Zustaende der 7-Segment-Anzeige,

; 1 bis 6

END

 

Programmablaufplan

 

Adressierungsarten

 

1. Unmittelbare Adressierung.

Einer Variable (einem Speicherplatz, dem Akku oder einem Register) wird unmittelbar ein Wert zugeordnet.

 

#01h->R1

oder

mov R1, #01h

 

2. Direkte Adressierung.

 

Einer Variable (einem Speicherplatz, dem Akku oder einem Register) wird direkt der Inhalt Wert einer anderen Variable (eines Speicherplatzes, des Akkus oder eines Registers) zugeordnet.

 

R1

oder

mov R1, A

 

3. Indirekte Adressierung.

 

Einer Variable (einem Speicherplatz, dem Akku oder einem Register) wird direkt der Inhalt der Speicherzelle zugeordnet, deren Adresse dem Inhalt einer anderen Variable (eines Speicherplatzes, des Akkus oder eines Registers) entspricht.

 

R1

oder

mov A, 0ACh

mov R1, @A

Nach dem Ausfhren steht der Inhalt der Speicherzelle mit der Adresse 0ACh in R1.

 

Aufgabe 5. Programmierung der 8051Win-Simulation der 7-Segment-Anzeige

 

 

Erklrung

 

In dieser Aufgabe werden die Zahlen von 1 bis 6 durch eine 7-Segment-Anzeige dargestellt. Zur Lsung der Aufgabe bentzen wir CJNE-Befehl, DPTR und Define Byte (DB). Die Aufgabe 5 ist im Prinzip die Aufgabe 4. Jedoch bentigen wir hier eine Zeitpause, damit wir den Ergebnis prfen knnen.

Die Programmierung wurde erfolgreich whrend des Unterrichts durchgefhrt. Die Simulation mit dem Programm 8051Win ist wegen der Zeitpause nicht sinnvoll.

 

Assemblercode

 

Code at 0000h

P2 equ 0A0h

P3 equ 0B0h

clr P3.6 ; Eine 7-Segment-Anzeige loeschen/abschalten

init: mov DPTR, #Daten ; Daten laden

start: clr A ; Akku loeschen

movC A, @A+DPTR ; Indirekte 16-Bit-Adressierung.

; Es wird auf diese Weise wegen der

; Besonderheiten des Prozessors gemacht.

;

CJNE A, #0FFh, weiter ; Pruefe, ob "end of line" (Ende der Zeile).

sjmp init ; Wenn ja, von Anfang an.

weiter: mov P2, A ; Ausgabe des Akkuinhaltes

lcall uptime ; Zeitpause

INC DPTR ; Naechstes Datum nehmen.

sjmp start ; Zurueck zu Start

 

ORG 0C0h

 

Daten: DB 12h, 0BCh, 0B6h, 0D2h, 0E6h, 0EEh, 0FFh

; Liste der Zustaende der 7-Segment-Anzeige.

uptime:

mov R3, #10 ; ldt 10 in R