Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo, > > folgendes Assemblerprogramm dient zur Belichtungszeiterzeugung für ein > Aufnahmesystem: > > > <asm> > > $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 > </asm> > > Aufgerufen wird die Assmblerroutine mit folgendem C2-Programm (Auszug): > > <code> > > thread main > { > system.hook (system.EVENT_P1H0,3,0,system.HOOK_BEFORE); > loop > { > } > > </code> > > 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 > >