
; Befehl wo Daten gespeichert werden sollen im RAM

CAPTURE_0 DATA 30H
CAPTURE_1 DATA 32H
PHASE DATA 34H
FLAG_0 BIT 20H.0
FLAG_1 BIT 20H.1
;

ORG 0000H

JMP PCA_INIT
ORG 0033H
JMP PCA_INTERRUPT

;

PCA_INIT:				; PCA Timer 

initialisieren
	
MOV	CMOD, #00H
MOV	CH, #00H
MOV	CL, #00H				

; in Listing 1. Initialize two PCA modules as follows
;

MOV CCAPM0, #21H 			
MOV CCAPM1, #21H 			
;

SETB	EC				;Einschalten PCA interrupt
SETB	EA				
SETB	CR				;PCA Timer einschalten ( Zähler Bit)
CLR	FLAG				;Reset Test Flag

;***************************************************************
; Hauptprogramm
;***************************************************************

; Im Hauptprogramm werden nur Modul 0 und Modul 1 verwendet. 

PCA_INTERRUPT:
JB CCF0, MODULE_0 			
JB CCF1, MODULE_1			
;	

MODULE_0:
	CLR CCF0 			
	MOV CAPTURE_0, CCAP0L 		
	MOV CAPTURE_0+1, CCAP0H
	JB FLAG_1, CALCULATE_PHASE 	

SETB FLAG_0 				
RETI
MODUL_1:

	CLR CCF_1 			
	MOV CAPTURE_1, CCAP1L
	MOV CAPTURE_1+1, CCAP1H
        JB FLAG_0, CALCULATE_PHASE 		
        SETB FLAG_1 				

        RETI					 
					 
					 
					
					
					
;
CALCULATE_PHASE:

	PUSH ACC 				
	PUSH PSW 			 
	CLR C 							
;

JB FLAG_0, MOD0_LEADING
JB FLAG_1, MOD1_LEADING
;

MOD0_LEADING:

	MOV A, CAPTURE_1		
	SUBB A, CAPTURE_0		
	MOV PHASE, A				
	MOV A, CAPTURE _1+1		
	SUBB A, CAPTURE_0+1
	MOV PHASE+1, A
	CLR FLAG_0
	JMP EXIT
;
MOD1_LEADING:

	MOV A, CAPTURE_0	
	SUBB A, CAPTURE_1
	MOV PHASE, A
	MOV A, CAPTURE_0+1
	SUBB A, CAPTURE_1+1
	MOV PHASE+1, A
	CLR FLAG_1
EXIT:

	POP PSW				
	POP ACC
	RETI
