Hi Leute,
nachdem ihr mir schon so oft super geholfen habt, hätte ich hier noch
eine kleine Prüfungsaufgabe die ich gerne in die Runde werfen würde um
zu sehen ob ich sie in der Prüfung richtig hatte.
Zu erstellen ist eine Funktion "High_Byte" die einen 8bit-Wert übergeben
bekommt und nur die 4 höherwertigen Bits an Port A ausgibt. Die
restlichen Bits am Port dürfen nicht geändert werden. Der Port A wurde
in der Aufgabe davor bereits als Ausgang definiert.
Ach ja, in C programmieren :-)
schüler schrieb:> Hi Leute,>> nachdem ihr mir schon so oft super geholfen habt, hätte ich hier noch> eine kleine Prüfungsaufgabe die ich gerne in die Runde werfen würde um> zu sehen ob ich sie in der Prüfung richtig hatte.
Ich verrate dir einen Trick: Tipp' deine Lösung in einen Editor deiner
Wahl,kompiliere das dann und guck obs funktioniert. Das nennt sich
Testen! Wenn es nicht kompiliert, habe ich schlechte Nachrichten für
dich.
Stephan schrieb:> Mov A,Port> ANL A,0Fh> Mov Port,A01011100 schrieb:> port a = high_byte & 11110000
Och Leute. Wenn ihr eine Lösung liefert, dann bitte in INTERCAL und
Brainfuck.
Wegen:
Matthias S. schrieb:> und dann noch das:> Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
Matthias S. schrieb:> und dann noch das:> Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
Zum Thema fauler Schüler, ich hatte heute Prüfung und wollte nur wissen
ob meine Lösung richtig ist. Wenn dir Fragen eines Neulings zu trivial
sind musst du ja nicht antworten.
THOR schrieb:> Och Leute. Wenn ihr eine Lösung liefert, dann bitte in INTERCAL und> Brainfuck.
Das mit den Hausaufgaben funktioniert hier immer, weil dann auch ein
kleiner Forenversager mal was weiß und ganz heiß drauf ist das zu
posten.
Stephan schrieb:> Mov A,Port> ANL A,0Fh> Mov Port,A
Blödsinn. Ich gratuliere dir zur Löschung der oberen 4 Bits - das war
aber nicht die Aufgabe. Schreibfehler ist auch noch drin, falls das
MCS51 sein soll.
schüler schrieb:> ich hatte heute Prüfung und wollte nur wissen> ob meine Lösung richtig ist
Dann poste sie doch mal.
schüler schrieb:> Funktion "High_Byte" die einen 8bit-Wert übergeben> bekommt und nur die 4 höherwertigen Bits an Port A ausgibt. Die> restlichen Bits am Port dürfen nicht geändert werden01011100 schrieb:> port a = high_byte & 11110000
ich kann zwar kein C aber Dein & mit F0 verändert doch das Low Nibble ?
Stephan schrieb:> ich kann zwar kein C aber Dein & mit F0 verändert doch das Low Nibble ?
Beide angebotenen Codeschnipsel Lösungen waren falsch.
schüler schrieb:> Also meine Lösung wäre:>> void High_Byte (unsigned char wert)> {> unsigned char high;>> high = (unsigned char) (wert>>4);> high = (unsigned char) (wert<<4);>> PORTA |= wert;>> }
Und diese ist es auch. Du liest ja nicht von PortA, weisst also auch
nicht was sich im Lownibble befindet.
Naja, schade dass sich manche von einer einfachen Frage im Forum gleich
angepisst fühlen und es statt um Antworten dann nur noch um
Beschimpfungen geht.
Das hat nichts mit angepisst zu tun. Aber du musst dein Hirn schon mal
selber in Bewegung bringen, anstatt das andere tun zu lassen. Hier ist
z.B. eine funktionierende Lösung:
schüler schrieb:> Naja, schade dass sich manche von einer einfachen Frage im Forum gleich> angepisst fühlen und es statt um Antworten dann nur noch um> Beschimpfungen geht.
Wie wäre es, wenn er seine Lösung einfach mal ausprobiert hätte? Das
wäre wohl zu einfach gewesen.
Mit einer anderen Lösung als seiner, die dann hier gepostet wird, kann
er ja auch nicht erkennen, ob seine richtig ist.
Matthias S. schrieb:> Das hat nichts mit angepisst zu tun. Aber du musst dein Hirn schon> mal> selber in Bewegung bringen, anstatt das andere tun zu lassen. Hier ist> z.B. eine funktionierende Lösung:void HighByte(uint8_t myByte) {>> uint8_t save = PORTA & 0x0F;>> myByte &= 0xF0;> PORTA = myByte | save;> }
Man muss es auch extra schwer machen? ;)
Was sollte an meiner Lösung falsch gewesen sein?
Habe lediglich gezeigt wie man es Bitmaskieren soll.
ANL FFh dann bleibt alles wie gewollt.
Nur geht das so einfach nicht weil nicht definiert ist wo der
übergebenen 8 Bit Wert her kommt.
Ist es schon in A ?
kommt es mit einem anderen Register daher ?
01011100 schrieb:> Was sollte an meiner Lösung falsch gewesen sein?
Du löschst die unteren 4 Bits des Portes, die eigentlich erhalten
bleiben sollen.
01011100 schrieb:> port a = high_byte & 11110000
schüler schrieb:> Zum Thema fauler Schüler, ich hatte heute Prüfung und wollte nur wissen> ob meine Lösung richtig ist.
Es gibt mehr als eine korrekte Lösung.
Poste deine Lösung und wir sagen dir, ob sie das tut, was du willst.
hat aber einen Nachteil: Für einen Taktzyklus (Wenn nicht gerade in dem
Moment ein Interrupt zuschlägt, dann kann das auch deutlich länger
dauern) werden die High Bytes low geschalten. Wenn das kein Problem ist
ist diese Lösung ok. Wenn doch dann besser die mit Zwischenspeicherung.