Forum: Mikrocontroller und Digitale Elektronik Lottozahlengenerator (2-stellige 7-Segment Anzeige)


von DerGast (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
und zwar stehe ich wirklich auf dem Schlauch. So erstmal zur 
Aufgabenstellung: Wir müssen einen Lottozahlengenerator in Assembler 
programmieren(8051WinXL und RIDE). Man soll eine Taste drücken und 
sobald man loslässt soll eine Zahl von 1 bis 49 auf der 2-stelligen 
7-Segment Anzeige ausgegeben werden. Ich habe nun meinen Programmcode 
als Anhang zur Verfügung gestellt mit der Hoffnung,dass ihr mir helfen 
könnt. Ich möchte nur mal nebenbei sagen, dass ich wirklich nicht sehr 
gut in diesem Themengebiet bin, jedoch mein Bestes gebe. Des Weiteren 
kriegen wir von unserem Lehrer gar keine Unterstützung...
Ich hoffe ihr könnt mir helfen und danke euch im Voraus! :-)

: Wiederhergestellt durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

DerGast schrieb:
> Ich habe nun meinen Programmcode als Anhang zur Verfügung gestellt mit
> der Hoffnung,dass ihr mir helfen könnt.
Das hättest du mal besser als *.asm oder *.txt gemacht. Dann bräuchte 
man kein externes Programm, um den Quelltext anzusehen. Da sehe ich 
gerade: es ist noch schlimmer, viel schlimmer! Du hast einen 
Screenshot(!), der augenscheinlich wiklich abfotografiert(!!) wurde, in 
dieses Office-Format hineingepackt. Umständlicher gehts echt nicht 
mehr...

> Ich habe nun meinen Programmcode als Anhang zur Verfügung gestellt mit
> der Hoffnung,dass ihr mir helfen könnt.
Was erwartest du von diesem Programm? Was sollte es tun, und was macht 
es stattdessen? Und wie stellst du das fest?

DerGast schrieb:
> Des Weiteren kriegen wir von unserem Lehrer gar keine Unterstützung...
Warum nicht? Der macht das Selbe doch schon seit gut 30 Jahren...

BTW1:
das hier ist ein komplett unnötiger Kommentar (so wie die meisten)
mov R1, A; // Akku ins R1 laden
Richtig gut Kommentare beschreiben nicht die Assemblerzeile, sondern 
das, was mit diesen Zeilen gerade gemacht wird.

BTW2:
deine Frage hat nichts mit FPGAs und VHDL zu tun --> verschoben

: Wiederhergestellt durch Moderator
von Joachim (Gast)


Lesenswert?

Was ist denn das für ein Quatsch?:
1
test:
2
CJNE R1, #11010010b, Loop1
3
Loop1:

Also Fazit, ohne das Programm nun exakt nachvollzogen zu haben: KV 
(kannste vergessen).

Alle Deine bedingten Sprünge CJNE haben zwar ein Ziel, wenn die 
Bedingung erfüllt ist, aber keines wenn sie nicht erfüllt ist.
Beim obigen Beispiel läuft die Bedingung IMMER auf "loop1", egal was 
dabei herauskommt. Beim letzten CJNE stürzt das Programm ab, denn es 
läuft in den Segmentcode.

Lustigerweise war mein allererstes Kontrollerprojekt 1982 ein 
Lottozahlengenarator mit dem 8048 (48!!!).

Bevor Du in Assembler losprogrammierst musst Du den Ablauf am besten als 
Pseudocode aufschreiben. Zur besseren Sichtbarkeit der Struktur habe ich 
immer ein paar bekannte OPcodes genommen, z.B. LCALL oder RET.
Und bitte MODULAR aufbauen und nicht als SPAGHETTICODE!
Zunächst mal teilst Du Deine Grundfunktionen für Display, Zählen usw. in 
Funktionsmodule auf und schreibst diese als Subroutinen.
Dann im Hauptprogramm rufst Du nur noch die Subroutinen auf.
Also in etwa so:
1
Anzeige: 
2
Einer und Zehner an Display
3
RET
4
5
Anzeige_Reset:
6
Einer auf 1
7
Zehner auf 0
8
RET
9
10
Zaehlen:
11
Einer + 1
12
wenn Einer = 10
13
dann 
14
   Einer = 0
15
   Zehner + 1
16
wenn Zehner = 5
17
dann
18
   Anzeige_Reset
19
RET
20
21
Reset: 
22
LCALL Anzeige_Reset
23
Hauptprogramm:
24
wenn Taste
25
   LCALL Zaehlen
26
sonst
27
   LCALL Anzeige
28
LJMP Hauptprogramm

So. Das ist nun im Groben Dein Programm.
Was noch beim Assembler dazukommt, ist dass man bei 1 Seite Programm 
nicht schreibfaul sein sollte und Labels und Daten AUSFÜHRLICH benennen 
kann.
Angaben wie "loop", "anf", "anf2" usw. sind Müll!
Man kann die Namen ruhig so benennen, wie ich es oben getan habe und das 
Programm wird - oh Wunder - gleich leserlicher.

Wenn Du die Funktionen in Module als Subroutinen (CALL) aufteilst, dann 
kannst Du diese nachher einzeln testen.
Und Du kannst die im Hauptprogramm einzeln auskommentieren, um Fehlern 
auf die Spur zu kommen.
z.B. kannst Du bei einem ersten Test das Hauptprogramm so machen:
1
Hauptprogramm:
2
Anzeige
3
LJMP Hauptptogramm
Dann siehst Du z.B. ob die Anzeige geht und ob die Werte EINER und 
ZEHNER richtig initialisert sind, also "01".
Wenn das geht, baut man die nächste Funktion ein usw. usw.
Wenn die erste Funktion schon nicht geht, hast Du es viel leichter zu 
suchen, weil die aufgerufene einzelne Funktion viel kürzer ist als Dein 
ganzer "Programmschlauch"!

Hast Du überhaupt eine Hardware zum Test? Dein Programm ist so wie es 
ist nicht mal ansatzweise lauffähig, also womit hast Du das getestet?

So wie das jetzt aussieht würde ICH auch auf dem Schlauch stehen :-)

: Wiederhergestellt durch Moderator
von FUCK YOU (Gast)


Lesenswert?

1.Wie du oben lesen konntest haben wir keine Unterstützung von unserem 
Lehrer.
Das einzige,dass wir bekommen haben ist eine Befehlsliste( Richtig geil)
2.Wenn man gerade mal 2 Wochen Erfahrung hat kann vielleicht für dich 
nichts gutes raus kommen ABER für uns !
3.Könnte man auch ein wenig freundlicher Antworten ... klingt als 
wolltest du dass ich von einer Brücke springe !
4. Habe ich das so kommentiert ,dass es für MICH verständlich ist ,wenn 
du ein Problem damit hast behalte es für dich.
5.Hier sieht man ,wie manche Menschen sind ,meinen sie wären etwas 
besseres und machen andere runter ! Vielen Dank für die Unterstützung 
(NICHT)
Noch ein schönes Egoleben


P.s Das Programm funktioniert !

: Wiederhergestellt durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

FUCK YOU schrieb:
> FUCK YOU
> 1.Wie du oben lesen konntest haben wir keine Unterstützung von unserem
> Lehrer.
Mal ehrlich: wenn du deinem Lehrer genau so kommst, dann wundert mich 
das eigentlich nicht...

> 5.Hier sieht man ,wie manche Menschen sind ,meinen sie wären etwas
> besseres und machen andere runter !
Was stimmt an den obigen Aussagen nicht? Warum müsste man das mehr in 
Watte verpacken?

> Vielen Dank für die Unterstützung
Lern was draus.

> P.s Das Programm funktioniert !
Schön, dass wenigstens DU dann DEIN Programm für DICH ALLEIN behältst. 
Dann also auch ...
> Noch ein schönes Egoleben

: Bearbeitet durch Moderator
von Joachim (Gast)


Lesenswert?

FUCK YOU schrieb:
> 1.Wie du oben lesen konntest haben wir keine Unterstützung von
> unserem
> Lehrer.
> Das einzige,dass wir bekommen haben ist eine Befehlsliste( Richtig geil)
> 2.Wenn man gerade mal 2 Wochen Erfahrung hat kann vielleicht für dich
> nichts gutes raus kommen ABER für uns !
> 3.Könnte man auch ein wenig freundlicher Antworten ... klingt als
> wolltest du dass ich von einer Brücke springe !
> 4. Habe ich das so kommentiert ,dass es für MICH verständlich ist ,wenn
> du ein Problem damit hast behalte es für dich.
> 5.Hier sieht man ,wie manche Menschen sind ,meinen sie wären etwas
> besseres und machen andere runter ! Vielen Dank für die Unterstützung
> (NICHT)
> Noch ein schönes Egoleben
>
> P.s Das Programm funktioniert !

Ich glaub ich hab mich verhört!!!
Ist das Deine Antowort darauf, dass ich mir hier die Zeit genommen habe?
Okay - das war das erste und letzte mal!

Das Programm kann nicht funktionieren! Wenn bei dem letzte Befehl die 
Bedingung nicht erfüllt ist, läuft es in den Segmentcode und somit ins 
Nirvana. Aber gut, Dein Problem.
Da stellt sich mir natürlich die Frage, was Du hier willst, wenn Dein 
Programm doch funktioniert..
Recht vielen Dank für Deine pampige Antworten. Nicht dass ich 
irgendeinen Danke erwartet hätte.

@Moderator: Bitte meine obigen Hilfebeitrag löschen.

Danke.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Joachim schrieb:
> @Moderator: Bitte meine obigen Hilfebeitrag löschen.
Ich tus nicht, weil er ja einem weniger egozentrisch orientierten 
Menschen helfen könnte...

von Cyblord -. (cyblord)


Lesenswert?

Das größte Problem sehe ich eigentlich darin, die korrekten Lottozahlen 
vorherzusehen. Warum wird auf diese Problematik nicht eingegangen?

von Der Andere (Gast)


Lesenswert?

Cyblord -. schrieb:
> Das größte Problem sehe ich eigentlich darin, die korrekten Lottozahlen
> vorherzusehen. Warum wird auf diese Problematik nicht eingegangen?

ROFL. Damit gehe ich jetzt ins Wochenende
Danke Cyblord, das war der beste Beitrag des Tages :-)

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> die korrekten Lottozahlen

Darauf muss man nicht eingehen, weil der Generator a) nur eine der x 
notwendigen Zahlen ausgibt und b) auch nur wenn man den Finger vom Knopf 
nimmt. Man muss folglich nur x-mal hintereinander zum richtigen 
Zeitpunkt den Finger runternehmen. (Selbst mit Pseudozufallszahlen, ganz 
ohne Einsaddierer ist das deterministisch.)

FUCK YOU schrieb:
> 1.Wie du oben lesen konntest haben wir keine Unterstützung von unserem
> Lehrer.
Ich sehne den Tag herbei, an dem der Lehrer die Schüler sogar noch zu 
Hause abholt und die Eltern sie erst mitgehen lassen, wenn der Lehrer 
die Hausaufgaben auch ordentlich gemacht hat. Selbständiger 
Erkenntnisgewinn ist im Zeitalter der Suchfunktion ineffizient.

: Bearbeitet durch User
von Marc H. (marchorby)


Lesenswert?

Lothar M. schrieb:
> Joachim schrieb:
>> @Moderator: Bitte meine obigen Hilfebeitrag löschen.
> Ich tus nicht, weil er ja einem weniger egozentrisch orientierten
> Menschen helfen könnte...

Eigentlich müsstest du es aber...

von Joachim (Gast)


Lesenswert?

Von mir aus lass es stehen.
War nur vorher stinksauer :-(

Gruß

Joachim

von Georg (Gast)


Lesenswert?

Cyblord -. schrieb:
> Das größte Problem sehe ich eigentlich darin, die korrekten Lottozahlen
> vorherzusehen.

Das Programm gibt ja noch nicht mal MÖGLICHE Lottozahlen aus - es sollte 
doch bekannt sein, dass man auf einem Lottozettel keine Zahl 2 oder 
mehrmals ankreuzen kann. Ein echter Lottozahlengenerator müsste also 
beim zweiten Mal eine Zufallszahl aus den verbiebenen 49 - 1 Zahlen 
ausgeben usw. bis man die 6 Zahlen beieinander hat.

Also der übliche Ausbildungsmist ohne jeden Realitätsbezug oder der Prof 
hat in den ganzen Jahren immer noch nicht begriffen wie Lotto geht.

@DerGast: vergiss diesen Einwand, du kannst ja nichts dafür, und der 
Realität bist du einfach noch nicht gewachsen - wie auch, wenn es nicht 
mal deine Ausbilder sind.

Georg

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marc H. schrieb:
> Eigentlich müsstest du es aber...
Nein, das müsste ich nicht:
1
Nutzungsrecht an Beiträgen
2
Mit dem Erstellen eines Beitrags erteilt der Autor dem Betreiber des Forums
3
ein einfaches, zeitlich und räumlich unbeschränktes und unentgeltliches
4
Recht, den Beitrag im Rahmen des Forums zu nutzen. Das Nutzungsrecht bleibt
5
auch nach Kündigung der Mitgliedschaft bestehen.
Aus:
https://www.mikrocontroller.net/articles/Hilfe:Forum_Nutzungsbedingungen
das ist unten auf jeder Seite hier zu finden.

Joachim schrieb:
> War nur vorher stinksauer :-(
Kann passieren. Geht vorbei... ;-)

: Bearbeitet durch Moderator
von Harald W. (wilhelms)


Lesenswert?

Georg schrieb:

> Das Programm gibt ja noch nicht mal MÖGLICHE Lottozahlen aus - es sollte
> doch bekannt sein, dass man auf einem Lottozettel keine Zahl 2 oder
> mehrmals ankreuzen kann. Ein echter Lottozahlengenerator müsste also
> beim zweiten Mal eine Zufallszahl aus den verbiebenen 49 - 1 Zahlen
> ausgeben usw. bis man die 6 Zahlen beieinander hat.

Stimmt, die Antwort darauf ist, das man dann ja nochmal drücken kann.
Aber damit wird die "echte" Zufallszahlermittlung verfälscht.

von Cyblord -. (cyblord)


Lesenswert?

Darum sollte man nur auf echten Zufall setzen:

https://xkcd.com/221/

von Dietrich L. (dietrichl)


Lesenswert?

Harald W. schrieb:
> Stimmt, die Antwort darauf ist, das man dann ja nochmal drücken kann.
> Aber damit wird die "echte" Zufallszahlermittlung verfälscht.

Nicht wirklich!
Das ist ja das Zufalls-Paradoxon:
Auch wenn im Mittel alle Zahlen gleich oft auftreten, erhöht sich die 
Wahrscheinlichkeit für eine Zahl nicht dadurch, dass sie in der 
Vergangenheit seltener vorkam.
Bei jedem neuen Zug ist die Wahrscheinlichkeit für alle Zahlen gleich 
groß.

Gruß Dietrich

von Route_66 H. (route_66)


Lesenswert?

Dietrich L. schrieb:
> Bei jedem neuen Zug ist die Wahrscheinlichkeit für alle Zahlen gleich
> groß.

Stimmt nicht. Für die erste Zahl ist die Wahrscheinlichkeit 1/49, für 
die zweite 1/48, für die dritte 1/47, usw.

von Florian W. (Firma: Pesch Marinescheinwerfer) (seematzfw)


Lesenswert?

Route 6. schrieb:
> Dietrich L. schrieb:
>> Bei jedem neuen Zug ist die Wahrscheinlichkeit für alle Zahlen gleich
>> groß.
>
> Stimmt nicht. Für die erste Zahl ist die Wahrscheinlichkeit 1/49, für
> die zweite 1/48, für die dritte 1/47, usw.

Leider auch falsch, da in diesem Beispiel die Wahrscheinlichkeit für 
jede Zahl bei 1/49 bleibt, allerdings verbunden mit der Zusatzbedingung, 
dass bei ungültiger (vorher schon einmal gezogener) Zahl erneut gezogen 
werden muss. Oder um es anders auszudrücken: Die Wahrscheinlichkeit 
liegt in jedem Fall bei "1 zu Anzahl der gültigen Zahlen", egal ob es 
1/48, 1/47 oder 1/49 mit Zusatzbedingung ist.

von Route_66 H. (route_66)


Lesenswert?

Florian W. schrieb:
> bei ungültiger (vorher schon einmal gezogener) Zahl

Das gibt es beim Lotto nicht! Hast Du mal die Ziehung im Fernsehen 
beobachtet?
Die jeweils gezogene Zahl wird nicht mehr in die "Ziehtrommel" 
zurückgetan.

von Cyblord -. (cyblord)


Lesenswert?

Route 6. schrieb:
> Florian W. schrieb:
>> bei ungültiger (vorher schon einmal gezogener) Zahl
>
> Das gibt es beim Lotto nicht! Hast Du mal die Ziehung im Fernsehen
> beobachtet?
> Die jeweils gezogene Zahl wird nicht mehr in die "Ziehtrommel"
> zurückgetan.

Aber bei dem hier besprochenen Generator gibt es das leider.
Lies doch erst einmal worum es eigentlich geht, und Quatsch dann erst 
dazwischen. Wie wärs?

von Route_66 H. (route_66)


Lesenswert?

Cyblord -. schrieb:
> Lies doch erst einmal worum es eigentlich geht, und Quatsch dann erst
> dazwischen. Wie wärs?

Lies Du erst mal, worauf ich geantwortet habe!
Wie wärs?

von Cyblord -. (cyblord)


Lesenswert?

Route 6. schrieb:
> Cyblord -. schrieb:
>> Lies doch erst einmal worum es eigentlich geht, und Quatsch dann erst
>> dazwischen. Wie wärs?
>
> Lies Du erst mal, worauf ich geantwortet habe!
> Wie wärs?

Hab ich. Und da geht's nun mal um die Ziehung mittels des obigen 
Generators. Und dabei können nun mal Zahlen doppelt auftreten. Um die 
echte Lottoziehung geht's dabei nicht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.