
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Kann mir jemand sagen was #1,#2,#4,#8 im Assemblertext ist. Wenn ich Kanal 5,6,7,8 brauche,was ist dann mit #1,usw. Wird daraus dann #16, #32 > usw.? > Und was bewirkt "and" genau? > #1, #2 usw. im Assembler-Programm sind Konstanten, d.h. feste Zahlen 1, 2, ... Diese werden benutzt, um jeweils ein Bit des Byteports "auszumaskieren". Beispiel: ; Puls an Portpin 3 dekodieren w_hi_3 lda portb ; Port 1 einlesen and #4 ; Pin 3 ausmaskieren Es soll Pin 3 ausgewertet werden. Pin (oder Bit) 3 entspricht der Bitmaske 2^(3-1) also 4 Nebenbei: -1 ist notwendig, weil die Zählung bei 0 beginnt. Durch den and-Befehl wird das Portbyte bitweise mit der Maske verknüpft, bei der Maske #4 bleibt also nur Pin (oder Bit) 3 übrig, die anderen Pins sind "ausmaskiert". Wenn also mehr als 4 Servoausgänge des Empfängers mit entsprechenden Pins des Byteports verbunden sind, lauten die Masken also tatsächlich #16, #32, #64, #128. Das hat aber natürlich nichts damit zu tun, welche Kanäle des Empfängers verwendet werden! Entscheidend sind die Nummern der Portpins an der C-Control Unit. Wenn also z.B. nur die Kanäle 5,6,7,8 eines (8- oder mehrkanaligen) Emfängers ausgewertet werden sollen, können diese ebenso über die Portpins 1,2,3,4 eingelesen werden (über die beschriebene Transitorstufe). Dann sind die richtigen Masken also immer noch #1, #2, #4, #8. > Kann ich denn Assemblercode bei C3C auch direkt über #asm ... #endasm einfügen, oder wird das dann wieder zu langsam? Ich habe mit C3C selbst keine Erfahrung. Aber: Assembler-Code sollte immer gleich schnell sein. Es kommt auch nur auf die Geschwindigkeit innerhalb der Assembler-Routine an. Ein evtl. vorhandener Overhead beim Aufruf der Routine ist unerheblich. Also ruhig mit C3C probieren! > Kann ich z.B.: den "BC558" nehmen? Nein, BC 558 geht nicht! Dies ist ein PNP-Typ, es wird aber ein NPN-Typ gebraucht. Es geht z.B. BC 547. > Wie lange dauert es eigentlich einen Kanal auszulesen? Ein Servoimpuls ist 1 bis 2 msec lang, die Wiederholrate ist 20 msec. Die Assemblerroutine wird also zwischen einigen msec und maximal 2 x 20 msec = 40 msec brauchen. Interessanter dürfte sein, wiel lange der Rest des Programms benötigt, d.h. wie oft die Kanalimpulse eingelesen werden. Das kommt natürlich auf die jeweilige Anwendung an. |
| Antwort schreiben |