Forum: Mikrocontroller und Digitale Elektronik Kleines Problem mit dem Z-Flag


von PIC N. (eigo) Benutzerseite


Lesenswert?

Ich habe ein kleines Problem und das lautet wie folgt:

Ich habe am Eingang PORTA Pin 0-3 Low aktive Eingabeschalter
und einen Übernahmeschalter an PORTA,4 der ist High aktiv!

So wir nehmen jetzt an, dass am PORTA folgendes Byte anliegt:
'00011111' weil ich die Schalter 0-3 NICHT betätigt habe den
Schalter 4 schon...


1.Zeile >movf PORTA,0
2.Zeile >xorlw B'00011111'
3.Zeile >movlw '0'
4.Zeile >BZ Para

So in der 1.Zeile schreibt er den ganzen PORTA (also 00011111)
in das Arbeitsregister!
In der 2.Zeile verknüpft er das Arbeitsregister (00011111) mit
dem festen Wert/Zahl '00011111' also das selbe was an PORTA ist.
Daher ergibt die Operation 0, denn die Eingänge des XOR sind gleich
und es kommen 0 raus.

Was bedeutet, dass das Z-Flag auf High gesetzt wird, weil das
Z-Flag ja bei einer Operation die null ergibt gesetzt wird.

In der 3 Zeile schreibt er '0' ins Arbeitsregister, die brauche ich
später weil ich sie auf einer LCD anzeigen muss...

...In Zeile 4 weiß er jetzt, weil das Z-Flag 1 ist, dass es sich
tatsächlich um eine '0' handelt (bzw. alle Eingabeschalte am PORTA aus)
und der Übernahmeschalte An ist.
Also springt er zum Unterprogramm "Para".




MEIN PROBLEM:
______________________________________________________
In MPLAB im Stimulus funktioniert es!
ABER ich hab mir noch ein weiteres Programm besorgt um auch die LCD zu 
simulieren, doch da setzt er zwar das Z-Flag bei der XOR verknüpfung,
löscht es aber beim nächsten Takt wieder... Und genau das versteh ich 
nicht.

Es handelt sich um folgendes Programm:
-PIC Simulator IDE v.6.71 (OshonSoft)

LG Eigo

von Falk B. (falk)


Lesenswert?

@eigo

>löscht es aber beim nächsten Takt wieder... Und genau das versteh ich
>nicht.

Möglicherweise löscht der Befehl das Z-Flag. Wäre zwar doof, aber bei 
PICs ist alles möglich ;-)
Schau dir mal die Doku der Assemblerbefehle an.

MFG
Falk

: Bearbeitet durch Admin
von PIC N. (eigo) Benutzerseite


Lesenswert?

Also die Befehle hab ich studiert. Und bin deshalb ja so verwirrt.

Aber es scheint ja eigentlich zu klappen, denn im Stiumlus geht es ja
nur in diesem anderen Simulation Programm macht er Quatsch..

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


Lesenswert?

Ja, und was macht er in der Realität, und was sagt das Datenblatt dazu.

Kann es sein, dass Software (auch ein Simulator) Fehler enthält?

von tachauch (Gast)


Lesenswert?

Also die MOVL.. Befehle beeinflussen keine Flags. Ist ja auch logisch, 
denn Literal ist immer ein fester Wert und da ist ja bekannt, was 
passiert. Wenn ich eine '0' lade, dann braucht mir kein Flag zu sagen, 
dass die Operation '0' ergibt und deswegen wird's auch nicht gemacht.

Ich tippe auch eher auf einen Bug(?) in deinem 3rd-Party-Simulator.

von PIC N. (eigo) Benutzerseite


Lesenswert?

tachauch wrote:
> Also die MOVL.. Befehle beeinflussen keine Flags. Ist ja auch logisch,
> denn Literal ist immer ein fester Wert und da ist ja bekannt, was
> passiert. Wenn ich eine '0' lade, dann braucht mir kein Flag zu sagen,
> dass die Operation '0' ergibt und deswegen wird's auch nicht gemacht.
>
> Ich tippe auch eher auf einen Bug(?) in deinem 3rd-Party-Simulator.


Also sagst du auch es müsste so funktionieren?

;Das für ne 0

movf PORTA,0
xorlw B'00011111'
movlw '0'
BZ Para

;Dann weiter für ne 1

movf PORTA,0
xorlw B'00011110'
movlw '0'
BZ Para

und so weiter..

von tachauch (Gast)


Lesenswert?

Jo, sollte funktionieren.

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.