Forum: Mikrocontroller und Digitale Elektronik Aufschlagwechsel


von Christoph Unkart (Gast)


Lesenswert?

Hi,

ich habe vor kurzem mit der Assemblerprogrammierung angefangen. Mein
erstes Projekt ist eine digitale Zähltafel für Tischtennis.
Das auf-, abzählen, multiplexen und Satzwechsel klappt schon, nur das
mit dem Aufschlagwechsel ist  nur Teilweise funktionsfähig.

Aufgabe: Nur wenn alle Zähler auf Null sind kann man den Aufschlag mit
Taster6 auswählen. Der Aufschlag wird durch Wechsel von PC6
und PC7 geändert. Bis zu einem Gesamtzählstand von 20 (10:10), soll der
Aufschlag nach jedem zweiten Punkt gewechselt werden. Sobald
die 20 erreicht ist soll der Aufschlag nach jedem Punkt gewechselt
werden. Bis hier funktioniert es bei mir auch. Nur wenn
der Zählstand korrigiert wird, also zurückzählen funktioniert es bei
mir nicht. Wenn der Satz fertig ist soll der Aufschlag
umgekehrt werden, also das entgegengesetzte von dem Wert, der mit
Taster6 ausgewählt wurde. Die anderen Pins von PORTC dürfen
nicht verändert werden.

Ich habe den Gesamtzählstand mit einem Register verglichen, Welches
nach jedem Wechsel um 2 bzw. um 1 erhöht wurde. Den Aufschlagwechsel
habe ich mit sbi und cbi gemacht, um die anderen Pins nicht zu
verändern.

Hoffentlich hat das jetzt jemand verstanden und kann mir Helfen.

MfG Christoph

von Denis Gérard (Gast)


Lesenswert?

etwas verwirrend, das mit dem zurückzählen beim tischtennis begreif ich
nicht,

versuch das ganze doch mal in ein paar formeln zu kleiden,

von thkais (Gast)


Lesenswert?

Was mir bei solchen Problemen immer hilft, ist ein Flußdiagramm, dann
wird meistens einiges klarer.

von Christoph Unkart (Gast)


Lesenswert?

Ok, Ich habe nochmal "nachgedacht" das mit den zurückzählen brauche
ich eigentlich garnicht.
Nur wie kann ich jetzt PC6 und PC7 vertauschen ohne die anderen Pins zu
beeinflussen. Ist bestimmt ganz leicht, aber ich komm nicht drauf!
MfG Christoph

von Tobi (Gast)


Lesenswert?

externe schaltung. ok, etwas übertrieben wenn es auch in software geht,
aber es geht....
du könntest z.b. indirekt auf das bit an portc zugreifen. mach zwei
variablen in denen drinsteht welches bit gerad welche funktion hat und
ändere alle funktionen die auf diese bits zugreifen so ab, dass sie nur
noch die variablen benutzen und nicht direkt auf das bit zugreifen.
wechsel wäre einfach die beiden vars zu tauschen

von Rahul (Gast)


Lesenswert?

Bit-Swapping?
in C:
if (PORTC & (1<<PC6)
   {
     PORTC &= ~(1<<PC6);  // Pin PC6 löschen
   }
else
   {
     PORTC |= (1<<PC6);   // Pin PC6 setzen
   }
dito für PC7...

in ASM vielleicht so:

SBIS PORTC,6
rjmp PC6setzen

CBI PORTC,6
rjmp weiter

PC6setzen:
SBI PORTC,6

weiter:
...

Bin in ASM nicht wirklich bewandert...

Gruß Rahul

von Christoph Unkart (Gast)


Lesenswert?

Ok es war doch sehr einfach. Ich habe die am Anfang ausgewählten PINs in
ein Register gespeichert. Wenn der Satz zuende ist nehme ich den com
Befehl und lade das Register wieder auf PortC.

Trotzdem Danke, dass sich jemand meinen wirren Text angesehen hat!

MfG Christoph

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.