Программирование микроконтроллера на ассемблере. Симуляция игральной кости
Реферат - Компьютеры, программирование
Другие рефераты по предмету Компьютеры, программирование
>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