Forum: Mikrocontroller und Digitale Elektronik Microcontroler Programm


von Nico (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Ich hab mal eine Frage: Bei dieser simplen Schaltung, und bei dem noch 
simpleren Programm soll wenn man den Schalter zu P3 drückt eine 1 auf 
der 7Segment anzeige angezeigt werden. Das funktioniert auch, nur wird 
zwischen den Schritten immer wieder die 8 angezeigt.

Es sollte folgende Anzeige ausgegeben werden:
1. Eine 1 soll angezeigt werden
2. Die Anzeige soll garnichts mehr anzeigen (keine LED Leuchtet)
3. Das ganze wieder von vorne.


Es wird folgende Anzeige ausgegeben:
1. Es wird eine 8 angezeigt
2. Es wird eine 1 angezeigt
3. es wird nichts angezeigt, also keine LED leuchtet
4. Es beginnt wieder von vorne.

Die Schaltung wird mit Multisim simuliert.

An was kann denn das liegen, dass zwischen drinnen noch die 8 Angezeigt 
wird?

Tut mir leid, bin noch total neu auf diesem Gebiet... :)

Nico

von Nico (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab hier mal noch die Multisim-Dateien hochgeladen.

Vielleich kann sich das ja jemand kurz anschauen, weil ich glaube ich 
hab nun schon alles ausprobiert, finde den Fehler aber nicht, bzw. in 
der Debug Ansicht kann man ja den Assembler Quellcode anschauen, und da 
wird in folgender Zeile die 8 ausgegeben:


                  ljmp _segcode
_segcode, _main:  sjmp l5
f1600, l4:        jb P3.0, u11
                  sjmp u10
u11:              sjmp l6
u10:              mov DPTR, #002ah
u11:              clr A
                  movc A, @A+DPTR          <<<---- In dieser Zeile setzt 
er
                                                   die 8 (alle LEDs
                                                   leuchten)
u10:              mov P2, A                <<<---- In dieser Zeile setzt
                                                   er dann die 1 (also
                                                   es leuchten nur die
                                                   LEDs für die 1)
l6, l3:           mov P2, #0ffh
l6, l3:           sjmp f1600
l5, l2, f1601:    ret
l5, l2, f1601:    sjmp f1600
LB8               clr A
                  mov PSW, A
                  mov SP, #20h
                  lcall _segcode
                  ljmp l5
                  ljmp LB8
_segcode, _main:  mov R1, A
                  mul AB



Aber warum in dieser Zeile alle LED's auf einmal leuchten verstehe ich 
nicht...


Vielen dank schon mal :)

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


Lesenswert?

Du sollest deine LEDs nicht am Adressbus anschliessen:
1
       :
2
u10:   mov DPTR, #002ah
3
       :
4
       movc A, @A+DPTR  <<<---- hier passiert ein externes Buszyklus mit oberem Adressbyte = 00 --> LEDs an
5
       :
Der P0 und der P2 sind Adress- und Datenbus und sollten nur sehr 
kontrolliert als EA-Ports verwendet werden.

Mich wundert stark, dass deine Simulation überhaupt läuft. In der harten 
Realität fehlt dem 8051 nämlich der komplette externe (Programm- und 
Daten-)Speicher. Der würde so keinen Mucks tun, das ist mal eine echt 
irreführende Simulation   :-o

von Nico (Gast)


Lesenswert?

Hallo Lothar,

Ahh, das wusste ich nicht :) Schon wieder mehr dazu gelernt... :)

Könntest du mir vielleicht einen Link geben, oder eine Kurze skitze, wie 
ich noch den Externen Speicher usw anschließen müsste? Bzw. Was ich noch 
machen müsste, dass der im realen Leben funktionieren würde? Nur so die 
Grundschaltung, ohne dem ganzen, was man nicht unbedingt braucht :)


Ich hab nun die Dioden an meinen P1 gelegt, und noch Widerstände und 
Transistoren davor gemacht (das war ja das, was du gemeint hattest, 
oder?) und nun funktioniert es einwandfrei... Also zumindest in der 
Simulation :)

Da hab ich auch schon wieder was dazu gelernt, dass der P0 und P2 nur 
für Adressen und Daten benutzt werden sollte. :)
Kann ich dann eigentlich auf den P0 z.B. meine Schalter legen?


Vielen Dank für deine Hilfe,
Nico

von (prx) A. K. (prx)


Lesenswert?

Ein 8052 mit 12V-Versorgung???

von Nico (Gast)


Lesenswert?

Hallo A.

Ja, das ist mir vorhin auch aufgefallen, das sollte natürlich 5 V sein 
:)
Die Simulation stört das nicht, ob nun 5V oder 12V - aber im Realen 
betreibe ich das natürlich mit 5 V :)

Nico

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


Lesenswert?

A. K. wrote:
> Ein 8052 mit 12V-Versorgung???
Und ohne Reset-Beschaltung und ohne Quarz.... :-o
Ja, damit dürfte genug über die Qualität der Simulation gesagt sein ;-)

@  Nico
> Kann ich dann eigentlich auf den P0 z.B. meine Schalter legen?
Nein, ein 8051 hat an P0 und P2 den Speicher-Bus. Punkt.
Du kannst schon Taster anschliessen, aber dazu mußt du Bustreiber mit 
entsprechendem Decoder verwenden.

> wie ich noch den Externen Speicher usw anschließen müsste?
Da hilft dir Google: 8051 schaltplan
z.B. http://elektronik.kai-uwe-schmidt.de/index.php?page=8051_board

So wie ich das sehe, bist du gerade am Lernen?
Warum nimmst du dazu so einen alten Schinken wie den 8051?
Es gibt so schöne neue und wesentlich performantere uC (MSP430, AVR...). 
Die interne Struktur dieser uC ist besser durchdacht und die Dinger 
haben deutlich mehr IO (Counter, Serielle Schnittstellen, Oszillator...) 
auf dem Chip.

von oha (Gast)


Lesenswert?

Und die LED sollte mit Vorwiderstaenden angeschlossen werden. Wie man 
den 8052 beschaltet steht in dessen Datenblatt.

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.