Prüfungsaufgabe

Gast #4865518
Lesenswert?

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 :-)
Gast #4865548
Lesenswert?

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.
(Firma: matzetronics) #4865582
Lesenswert?

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.
(Firma: matzetronics) #4865600
Lesenswert?

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:
1
void HighByte(uint8_t myByte) {
2
uint8_t save = PORTA & 0x0F;
3
myByte &= 0xF0;
4
PORTA = myByte | save;
5
}
Gast #4865604
Lesenswert?

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.
Gast #4865607
Lesenswert?

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.
Gast #4865608
Lesenswert?

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 ?
#4865611
Lesenswert?

1
 
2

3
void high_byte(byte x)
4
{
5
   unsigned uint8_t buf = 0;
6

7
   buf = PINA;         // alten wert einlesen
8
   buf &= 0x0F;        // oberes nibble löschen
9
   buf |= (x & 0xF0);  // oberes Nibbel von x einfügen
10

11
   PORTA = buf;
12
}


Um die Diskussion zu beenden und falls mich meine C-Kenntnisse gerade 
nicht enttäuschen, müsste das funktionieren

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren