From bcef249f6a821b49de6898fd0e390a84254426e8 Mon Sep 17 00:00:00 2001 From: Johannes Theiner Date: Thu, 6 Dec 2018 11:30:38 +0100 Subject: [PATCH] a4: Bearbeitung Praktikum --- src/asm/a4.asm | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/asm/a4.asm b/src/asm/a4.asm index a1cd85a..8d81ce4 100644 --- a/src/asm/a4.asm +++ b/src/asm/a4.asm @@ -18,7 +18,7 @@ frei db 'frei ', 0 ; Texte belegt db 'belegt ', 0 ; Konstanten -??? equ 0 ; Platzhalter fuer Ihre Zeitkonstante1 +divider equ 0 ; Platzhalter fuer Ihre Zeitkonstante1 ????? equ 0 ; Platzhalter fuer Ihre Zeitkonstante2 VE_aktiv equ 1 << 0 ; Vereinzeler bzw. Verzoegerung aktiv intab0 equ 20h ; Adresse Interrupttabelle PIT, Kanal 1 @@ -53,13 +53,13 @@ keybd equ 80h ; SBC-86 Tastatur gokey equ 11h ; Taste "GO" outkey equ 15h ; Taste "OUT" sseg7 equ 9eh ; Segmentanzeige 7 -tcpwm equ ??? ; 1843200 Hz / ??? = ca. 10000 Hz = 0.1 ms +tcpwm equ 184 ; 1843200 Hz / 184 = ca. 10000 Hz = 0.1 ms ; Taktzyklus ; Zeitkonstante fuer PWM-Interrupt tpwm equ 200 ; Periodendauer des PWM-Signals * 0.1 ms tlinks equ 10 ; Impulsdauer fuer "ZU" * 0.1 ms trechts equ 20 ; Impulsdauer fuer "AUF" * 0.1 ms -tcwait equ ????? ; 1843200 Hz / ????? = 100 Hz => 10 ms +tcwait equ 18432 ; 1843200 Hz / 18432 = 100 Hz => 10 ms ; Zeitkonstante fuer Wartezeitinterrupt twait equ 1 ; Wartezeit fuer offenen Vereinzeler (s) shcnt equ 4 ; Shiftcount Anzahl Teile @@ -92,10 +92,13 @@ again: times shcnt shr ax, 1 cmp ax, 0x0 - jle ifzero + jz ifzero + + cmp ax, 0x8 + ja ifbelowzero cmp ax, 0x0 - jnz ifnotzero + ja ifnotzero jmp again @@ -107,12 +110,16 @@ ifnotzero: jmp again -ifzero: +ifzero: mov ah, ascii mov dl, 7 mov bx, belegt int conout + + jmp again +ifbelowzero: + mov dx, pieces << shcnt and dx, 10000001b mov [status], dx @@ -186,7 +193,17 @@ init: isr_opentimer: ; Timer fuer Vereinzeler (Zeit fuer Oeffnung) push ax + ; Ihr Programmcode + ;Zeit abgelaufen ? + inc byte [divider] + cmp byte [divider], tcountv + jne isr_opentimer_out + + mov ax, [status] + and ax, 11111110b + mov [status], ax + isr_opentimer_out: ; Ausgang aus dem Service @@ -219,14 +236,20 @@ isr_lt_out: ; Ausgang aus dem Service isr_servotimer: ; Timer fuer Servo (Vereinzeler) push ax + push bx ; Ihr Programmcode + mov bl, [status] + and bl, 11111110b + + cmp bl, 0x0 + jz auf + + jmp isr_servotimer_out isr_servotimer_out: ; Ausgang aus dem Service mov al, eoi ; EOI an PIC out ocw_2_3, al + pop bx pop ax iret - - -