diff --git a/src/asm/a4.asm b/src/asm/a4.asm index 0199a3b..ca58eea 100644 --- a/src/asm/a4.asm +++ b/src/asm/a4.asm @@ -65,6 +65,7 @@ tcwait equ 18432 ; 1843200 Hz / 18432 = 100 Hz => 10 ms twait equ 1 ; Wartezeit fuer offenen Vereinzeler (s) shcnt equ 4 ; Shiftcount Anzahl Teile pieces equ 8 ; Anzahl Teile initial +lastBit equ 00000001b start: @@ -122,7 +123,7 @@ ifzero: ifbelowzero: mov dx, pieces << shcnt - and dx, 10000010b + and dx, 10000001b mov [status], dx @@ -198,19 +199,20 @@ isr_opentimer: ; Timer fuer Vereinzeler (Zeit fuer Oeffnung) ;Zeit abgelaufen ? mov ah, [divider] mov al, [status] - test al, 00000010b + test al, 0x1 jz isr_opentimer_out + ;Wenn Zeit nicht abgelaufen inc ah cmp ah, [tcountv] jnz isr_opentimer_out - mov ah, 0 - mov byte[dir], trechts - and al, 0xfd + ;mov ah, 0 + ;mov byte[dir], trechts + ;and al, 11111110b isr_opentimer_out: ; Ausgang aus dem Service - mov [status], al + ;mov [status], al mov [divider], ah mov al, eoi ; EOI an PIC out ocw_2_3, al @@ -219,6 +221,7 @@ isr_opentimer_out: ; Ausgang aus dem Service isr_lt: ; Lichttaster push ax + push bx mov al, [status] times shcnt shr al, 1 @@ -229,7 +232,9 @@ isr_lt: ; Lichttaster or [status], al mov [status], al - and al, 11111101b + mov bl, lastBit + not bl + and al, bl cmp al, 0b jz left cmp al, 10b @@ -245,9 +250,10 @@ right: isr_lt_out: ; Ausgang aus dem Service - or byte [status], 00000010b + or byte [status], lastBit mov al, eoi ; EOI an PIC out ocw_2_3, al + pop bx pop ax iret @@ -258,7 +264,9 @@ isr_servotimer: ; Timer fuer Servo (Vereinzeler) inc ah cmp ah, [dir] jnz auf - out ppi_a, al + mov al, 0 + out ppi_a, al + jmp isr_servotimer_out auf: cmp ah, tpwm