Aus den Defines im Header File: #define MC__UP (1*0x10u) #define MC__STOP (0*0x10u) Der Programmcode: TA0CTL |= MC__UP; // starten TA0CTL |= MC__STOP; // stoppen Frage: Kann der Timer durch den "Oder-Gleich" Befehl MC__STOP gelöscht werden, wenn die Bits aufgrund eines vorhergehenden "MC__UP vorher gesetzt waren? mfg
Set_reset schrieb: > Kann der Timer durch den "Oder-Gleich" Befehl MC__STOP gelöscht werden, > wenn die Bits aufgrund eines vorhergehenden "MC__UP vorher gesetzt > waren? Nein. Mit Oder kann man Bits nur auf 1 bringen, aber nicht wieder zurück auf 0. Das folgt schon aus der Logiktabelle der Oder-Operation Bit Maske Ergebnis (Bit | Maske) 0 0 0 0 1 1 1 0 1 1 1 1 Nur wenn das Bit schon 0 war und in der Maske auch ein 0 Bit vorliegt, nur dann ist auch das Ergebnis 0. In allen anderen Fällen, insbesondere in denen bei Bit bereits eine 1 vorliegt, ist das Ergebnis auf jeden Fall eine satte 1. In ordentlicher deutscher Sprache: Wenn das Bit bereits auf 1 ist, dann kannst du dich mit deiner Oder Operation brausen gehen, du bringst es nie wieder auf 0. Denn in der Operation 'Das Ergebnis ist dann 1, wenn entweder A ODER B ODER beide auf 1 sind' ist A ja schon auf 1. Und damit KANN das Ergebnis nur noch 1 sein, wenn A bereits auf 1 liegt. Und es spielt dann auch keine Rolle mehr, ob B auf 1 oder auf 0 ist. Bitmanipulation
... gut, das bestätigt meine Vermutung, warum es in meinem Programm einfach nicht richtig funktioniert... Das heiist also: Starten mit TA0CTL |= MC__UP; // starten Beenden mit TA0CTL &=~ MC_UP;
Aber Vorsicht: Es gibt beim AVR und vielleicht wo anders IIRC Bits (irgendwelche Interruptflags glaube ich) die durch Schreiben einer 1 gelöscht werden! Was Karl-Heinz schrieb ist natürlich vollkommen richtig, aber es gibt halt diesen Spezialfall wo die Hardware das Bit löscht wenn es mit 1 geschrieben wird (warum Atmel das auch immer so gemacht hat).
troll schrieb: > Aber Vorsicht: Es gibt beim AVR und vielleicht wo anders IIRC Bits > (irgendwelche Interruptflags glaube ich) die durch Schreiben einer 1 > gelöscht werden! Richtig. Das sind sog. "Strobe-Bits". Und es gibt sie ganz sicher nicht nur bei Atmel. > warum Atmel das auch immer so > gemacht hat. Aus denselben Gründen wie alle anderen auch. Kohärenz und Performance.
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.