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
etwas verwirrend, das mit dem zurückzählen beim tischtennis begreif ich nicht, versuch das ganze doch mal in ein paar formeln zu kleiden,
Was mir bei solchen Problemen immer hilft, ist ein Flußdiagramm, dann wird meistens einiges klarer.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.