Forum: Mikrocontroller und Digitale Elektronik XC167 Hexadezimalziffer im Dualcode über die Tastatur einlesen


von Hergen C. (hcor)


Angehängte Dateien:

Lesenswert?

Moin,

ich muss eine Aufgabe bewältigen und bin zu unerfahren in der 
Programmierung.
Es ist ein lauffähiges Programm zu entwickeln, das in einer 
Endlosschleife den Wert einer Hexadezimalziffer im Dualcode mit den 
Bitstellen 2^0, 2^1, 2^3 im Wertebereich 0,1,2,...E,F über die Tastatur 
des PC's einliest, diesen in einen 7-Segment-Code mit den Leuchtbalken 
a,b,c,d,e,f und g umwandelt und dann wieder ausgibt.

Randbedingungen:
Ausgabe des 7-Segment-Codes auf den acht niederwertigen Bitstellen von 
Port 3 (P30...P37)
Leuchtbalken mit gemeinsamer Anode, low-aktiv.

Folgender Anfang ist gegeben:

#include <stdio.h>      /* standard I/O .h-file              */
#include <reg167.h>      /* special function register XC167  */

10000,-10000,-14257,333,25345,32146};



void main (void)
{
  /* initialize the serial interface */
  #ifndef MCB167  /* do not initialize if you use Monitor-166*/
  P3  |= 0x0400;  /* set port 3.10 output latch (txd) */
  DP3  |= 0x0400;  /* set port 3.10 direction control (txd
                                   output)*/
  DP3 &= 0xF7FF;    /* reset port 3.11 direction control (rxd
                                   input)*/
  S0TIC = 0x80;    /* set transmit interrupt flag */
  S0TIC = 0x00;    /* delete receive interrupt flag */
  S0BG = 0x40;    /* set baudrate to 9600 BAUD */
  S0CON = 0x8011;    /* set serial mode */
  #endif


...
}

Entwicklungsumgebung ArmKEIL

Über Hilfe wäre ich sehr dankbar (Vorgehensweise, Tipps...)
Datenblatt ist natürlich vorhanden

von Thomas (Gast)


Lesenswert?

Dann zeig doch mal wie du die Tastatur mit dem controller verbunden 
hast. ;-)
Dann reden wir weiter

Thomas

von Hergen C. (hcor)


Lesenswert?

Die Aufgabe ist rein theoretisch. Habe keinerlei Hardware...

von Thomas (Gast)


Lesenswert?

Hergen C. schrieb:
> Die

Hergen C. schrieb:
> Die Aufgabe ist rein theoretisch. Habe keinerlei Hardware...

Heißt übersetzt: Ich habe keine Ahnung und kann nicht mal die Aufgabe 
richtig formulieren. Macht das mal für mich, damit ich beim Prof glänzen 
kann.

Thomas

von Claus M. (energy)


Lesenswert?

Hergen C. schrieb:
> ArmKEIL

Wohl kaum, das ist nämlich kein arm mikrocontroller.

von Hergen C. (hcor)


Lesenswert?

Die Aufgabe ist genauso formuliert (das habe ich mir nicht ausgedacht). 
Und ja, ich kann mit den beigestellten Lernheften diese Aufgabe nicht 
bewältigen/lösen (habe, wie bereits gesagt, zu wenig Kenntnisse).

von Hergen C. (hcor)


Lesenswert?

Claus M. schrieb:
> Hergen C. schrieb:
>> ArmKEIL
>
> Wohl kaum, das ist nämlich kein arm mikrocontroller.

Soll laut Aufgabe mit der C166 Entwicklungsumgebung armKEIL getestet 
werden.

von Thomas (Gast)


Lesenswert?

OK wenn das so ist überleg dir mal wie die Tastatureingaben in den 
Mikrocontroller kommen.

Claus M. schrieb:
> Wohl kaum, das ist nämlich kein arm mikrocontroller.

Keil macht auch Compiler für C167 controller.

Thomas

von Sven S. (boldie)


Lesenswert?

Hergen C. schrieb:
> Die Aufgabe ist genauso formuliert (das habe ich mir nicht ausgedacht).
> Und ja, ich kann mit den beigestellten Lernheften diese Aufgabe nicht
> bewältigen/lösen (habe, wie bereits gesagt, zu wenig Kenntnisse).

In der Praxis kommt so was häufiger vor als gedacht, dann muss man mit 
dem Kunden reden und ihm aus der Nase ziehen, was er erreichen möchte 
und macht dann wieder weiter. Grundsätzlich würde ich sagen: Serielle 
Schnittstelle an das Ding ran, die einlesen und dann entsprechend 
ausgeben. Fertig.

PS: Mit rein theoretischen Aufgaben habe ich bei Profs auch so meine 
Erfahrungen gemacht: 0 Punkte in der Prüfung nach der Korrektur. Als ich 
dann dem Prof 1 Stunde erklärt habe, wie das Programm funktioniert und 
warum dies ganz anders als in seiner Vorlesung war, alle Punkte. War 
aber etwas nervenaufreibend, ihn dazu zu bringen überhaupt einmal 
zuzuhören.

: Bearbeitet durch User
von Hergen C. (hcor)


Lesenswert?

Thomas schrieb:
> OK wenn das so ist überleg dir mal wie die Tastatureingaben in den
> Mikrocontroller kommen.

Durch eine Abfrageschleife und einer Matrix, in der Zeilen und Spalten 
abgefragt werden. Die Spaltenleitungen geben dann an pull-up oder 
pull-down Widerständen angeschlossen (je nachdem - in diesem Fall soll 
das Ganze ja low-aktiv sein).

So habe ich das erst einmal verstanden. Korrgier mich wenn das falsch 
ist.

von Thomas (Gast)


Lesenswert?

Hergen C. schrieb:
> Durch eine Abfrageschleife und einer Matrix, in der Zeilen und Spalten
> abgefragt werden. Die Spaltenleitungen geben dann an pull-up oder
> pull-down Widerständen angeschlossen (je nachdem - in diesem Fall soll
> das Ganze ja low-aktiv sein).
> So habe ich das erst einmal verstanden. Korrgier mich wenn das falsch
> ist.

Ja so baut man eine Tastatur. Nur hast du ja gar keine Tastatur am 
controller angeschlossen....(Deine Worte)
Also lies noch mal genau die Aufgabenstellung... Steht da wirklich 
Tastatur oder vielleicht eher was über eine serielle Schnittstelle?

Thomas

von Hergen C. (hcor)


Lesenswert?

Thomas schrieb:
> Hergen C. schrieb:
>> Durch eine Abfrageschleife und einer Matrix, in der Zeilen und Spalten
>> abgefragt werden. Die Spaltenleitungen geben dann an pull-up oder
>> pull-down Widerständen angeschlossen (je nachdem - in diesem Fall soll
>> das Ganze ja low-aktiv sein).
>> So habe ich das erst einmal verstanden. Korrgier mich wenn das falsch
>> ist.
>
> Ja so baut man eine Tastatur. Nur hast du ja gar keine Tastatur am
> controller angeschlossen....(Deine Worte)
> Also lies noch mal genau die Aufgabenstellung... Steht da wirklich
> Tastatur oder vielleicht eher was über eine serielle Schnittstelle?
>
> Thomas

Also eigentlich steht das da für mich eindeutig:

....Wert einer Hexadezimalziffer im Dualcode mit den
Bitstellen 2^0, 2^1, 2^3 im Wertebereich 0,1,2,...E,F über die Tastatur
des PC's einliest, diesen in einen 7-Segment-Code mit den Leuchtbalken
a,b,c,d,e,f und g umwandelt und dann wieder ausgibt.

Aber da anscheinend die Aufgabe etwas "verwirrend" ist würde ich bei der 
Uni nochmals nachhaken ob das alles seine Richtigkeit hat...

von nachtmix (Gast)


Lesenswert?

Hergen C. schrieb:
> den Wert einer Hexadezimalziffer im Dualcode mit den
> Bitstellen 2^0, 2^1, 2^3 im Wertebereich 0,1,2,...E,F über die Tastatur
> des PC's einliest

Ohne 2^2 wird das schwer.

von Thomas (Gast)


Lesenswert?

Nun statt nachzufragen will ich dich dazu bringen nachzudenken...
Weil dann lernst du was bei der Aufgabe. Die ist ja klassisch nach EVA 
aufgebaut.
Sowas programmieren Lehrlinge im ersten Lehrjahr oder nach den ersten 
Stunden Info an der Schule.

Thomas

von Hergen C. (hcor)


Lesenswert?

nachtmix schrieb:
> Hergen C. schrieb:
>> den Wert einer Hexadezimalziffer im Dualcode mit den
>> Bitstellen 2^0, 2^1, 2^3 im Wertebereich 0,1,2,...E,F über die Tastatur
>> des PC's einliest
>
> Ohne 2^2 wird das schwer.

Natürlich mit 2^2 - mein Tippfehler.

von Bernadette (Gast)


Lesenswert?

Eingelesen werden hex-Werte von 0 bis F.

Ausgegeben wird ein Bitmuster für die Segmente  mit den Leuchtbalken
a,b,c,d,e,f und g.


0. Ein Array mit 16 Elementen wird vorbesetzt mit dem Bitmuster für die 
Segmente a,b,c,d,e,f und g.

1. Nur die Tasten 0 .. F werden als Eingabe akzeptiert.
2. Die Tasteneingaben 0 .. F werden in Ziffern 0 .. 15 umgewandelt und 
in I gespeichert.
3. Ausgegeben wird dann das Bitmuster ARRAY[I].

von Bernadette (Gast)


Lesenswert?

Dazwischen  kann man natürlich auch noch eine Umwandlung in den 
Binärcode einfügen, z.B. als Punkt 2b.
Dafür gibt es geeignete verfahren, einfach mal suchen.
Das dürfte aber bei dieser Aufgabenstellung schon vermittelt worden 
sein.

von Thomas (Gast)


Lesenswert?

Bernadette schrieb:
> Eingelesen werden hex-Werte von 0 bis F.
>
> Ausgegeben wird ein Bitmuster für die Segmente  mit den Leuchtbalken
> a,b,c,d,e,f und g.
>
> 0. Ein Array mit 16 Elementen wird vorbesetzt mit dem Bitmuster für die
> Segmente a,b,c,d,e,f und g.
>
> 1. Nur die Tasten 0 .. F werden als Eingabe akzeptiert.
> 2. Die Tasteneingaben 0 .. F werden in Ziffern 0 .. 15 umgewandelt und
> in I gespeichert.
> 3. Ausgegeben wird dann das Bitmuster ARRAY[I].

Dafür gibts nur die halbe Punktzahl. Weil nach Aufgabenstellung soll nur 
0 und 1ausgewertet werden und die Hexzahl aus Binär Werten gebaut 
werden.

Thomas

von ... (Gast)


Lesenswert?

Hergen C. schrieb:
> über die Tastatur des PC's einliest

Hergen C. schrieb:
>> Ja so baut man eine Tastatur. Nur hast du ja gar keine Tastatur am
>> controller angeschlossen....(Deine Worte)
>> Also lies noch mal genau die Aufgabenstellung... Steht da wirklich
>> Tastatur oder vielleicht eher was über eine serielle Schnittstelle?
>>
>> Thomas
>
> Also eigentlich steht das da für mich eindeutig:

Da steht von der Tastatur des PCs. Sie hängt also am PC. Ansonsten wäre 
es die Tastatur des Prozessors.
Wenn die Tastatur am PC hängt, müssen die Tastendrücke irgendwie an den 
Prozessor übertragen werden. Also über eine Schnittstelle zwischen PC 
und Prozessor. Da letzterer virtuell ist, musst Du erst herausfinden, 
wie Du in Deinem Simulator Tastendrücke an den Prozessor überträgst.

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.