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
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
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
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
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
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.
Joachim schrieb: > @Moderator: Bitte meine obigen Hilfebeitrag löschen. Ich tus nicht, weil er ja einem weniger egozentrisch orientierten Menschen helfen könnte...
Das größte Problem sehe ich eigentlich darin, die korrekten Lottozahlen vorherzusehen. Warum wird auf diese Problematik nicht eingegangen?
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 :-)
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
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 mir aus lass es stehen. War nur vorher stinksauer :-( Gruß Joachim
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
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
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.
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
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.
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.
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.
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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.