Tasterentprellung in Assembler geht nicht Kategorie: Progr. Assembler, TaskingTools, OS (von Harald - 28.02.2005 9:12) | ||
| ||
Hallo, folgendes Assemblerprogramm dient zur Belichtungszeiterzeugung für ein Aufnahmesystem: $case $segmented $model(medium) $extend $nomod166 $stdnames(reg164ci.def) regdef R2 regdef R3 regdef R4 regdef R5 ;*************************************************** userseg SECTION CODE word at 30000h assume dpp3:userseg assume dpp3:system ;*************************************************** ;Loops: 1,2,3,4,5,6,7,8,9 public belichtungszeit belichtungszeit proc far ;Interrupt deaktivieren bclr CC8IE bclr P1H.6 bclr P1H.7 mov R2,#1 mov R3,#1 mov R4,#1 mov R5,#1 ;Kamera öffnen Anfang bset P1L.4 ;Verschluss_1 öffnen Anfang ;Rollei auffahren bclr P1L.1 bclr P1L.0 ;5ms warten bis Verschluss geöffnet Loop5: Loop4: nop cmpi1 R2,#1775 jmpr cc_SLT,Loop4 mov R2,#1 cmpi1 R3,#5 jmpr cc_SLT,Loop5 mov R3,#1 ;Verschluss_1 halt: bset P1L.1 bclr P1L.0 ;Verschluss_1 öffnen Ende ;Verschluss_2 öffnen mov R2,#1 mov R3,#1 mov R4,T3 ;mov R4,#3000 add R4,#1 bset P1L.2 bset P1L.3 Loop1: Loop2: nop cmpi1 R2,#850 jmpr cc_SLT,Loop1 mov R2,#1 bset P1L.5 ;Blitz Loop3: nop cmpi1 R2,#925 jmpr cc_SLT,Loop3 mov R2,#1 add R3,#1 cmp R3,R4 jmpr cc_SLT,Loop1 ;Verschluss_2 schlie�en bclr P1L.2 bclr P1L.3 ;Blitz zurücksetzen bclr P1L.5 ;Verschluss_1 schlie�en Anfang ;Verschluss_1 zufahren bclr P1L.1 bset P1L.0 ;5ms warten mov R2,#1 mov R3,#1 Loop7: Loop6: nop cmpi1 R2,#1775 jmpr cc_SLT,Loop6 mov R2,#1 cmpi1 R3,#5 jmpr cc_SLT,Loop7 mov R3,#1 ;Verschluss_1 festbremsen: bset P1L.1 bclr P1L.0 ;Verschluss_1 schlie�en Ende ;bset P1L.0 ;bclr P1L.1 ;Kamera schlie�en bclr P1L.4 ;Taster entprellen Loop8: Loop9: nop cmpi1 R2,#1775 jmpr cc_SLT,Loop8 mov R2,#1 cmpi1 R3,#1000 jmpr cc_SLT,Loop9 mov R3,#1 bclr P1H.0 ;Interrupt wieder einschalten bset CC8IE rets testport endp userseg ends end Aufgerufen wird die Assmblerroutine mit folgendem C2-Programm (Auszug): thread main { system.hook (system.EVENT_P1H0,3,0,system.HOOK_BEFORE); loop { } AM P1H0 ist ein taster angebracht. Das Problem ist nun, da� die Entrpellung im Maschinencode so nicht funktioniert. Das System scheint sich die beim Prellen entstehende zweite fallende Flanke (konnt ich Oszillografieren) zu merken und führt die Routine nach Ende der Wartezeit sofort nochmals aus. Woran liegt das? Gibt es eine Lösung für das Problem? Kann der Interrupt evtl. wegen des Betriebssystems von Assembler aus nicht stillogelegt werden? Mittlerweile bin ich kurz davor, ein FlipFlop auf Platine zu basteln und den Taster so zu entprellen. Gru�, Harald | ||
Antwort schreiben Antworten: Re: Tasterentprellung in Assembler geht nicht (von André H. - 15.05.2005 18:13) |