DEVICE SX28,TURBO,BANKS8,OSCHS3,SYNC,OPTIONX FREQ 50_000_000 ID "FUNCTEST" ' -----[ I/O Definitions ]------------------------------------------------- Sensor PIN RB.0 INPUT SCHMITT ' -----[ Variables ]------------------------------------------------------- ' tach vars rpm VAR WORD dividendMSW VAR WORD dividendLSW VAR WORD pWidth0 VAR word pWidth1 VAR word 'wanna be local variables tmpW1 VAR Word tmpW2 VAR Word tmpB1 VAR Byte tmpB2 VAR Byte flags VAR Byte isrFlag VAR flags.0 INTERRUPT 100_000 ISR_Start: GOTO Int_Start ' ------------------------------------------------------------------------- ' Subroutine Declarations ' ------------------------------------------------------------------------- HIGHTIME FUNC 1 LOWTIME FUNC 1 ' ========================================================================= PROGRAM Start ' ========================================================================= Int_Start: \ SETB isrFlag RETURNINT ' ------------------------------------------------------------------------- ' Program Code ' ------------------------------------------------------------------------- Start: DO ' Measure pulse low time pWidth0 = LOWTIME ' Measure pulse high time pWidth1 = HIGHTIME ' Watch statements for debuging WATCH pWidth0, 8, SDEC WATCH pWidth1, 8, SDEC BREAK END FUNC LOWTIME tmpW1 = 0 \ JNB Sensor, @$ ' let old low clear \ JB Sensor, @$ ' let high clear DO \ CLRB isrFlag ' clear old ISR marker \ JNB isrFlag, @$ ' wait for new marker INC tmpW1 IF tmpW1 = 0 THEN EXIT LOOP UNTIL Sensor = 1 RETURN tmpW1 ENDFUNC FUNC HIGHTIME tmpW1 = 0 \ JB Sensor, @$ ' let old high clear \ JNB Sensor, @$ ' let low clear DO \ CLRB isrFlag ' clear old ISR marker \ JNB isrFlag, @$ ' wait for new marker INC tmpW1 IF tmpW1 = 0 THEN EXIT LOOP UNTIL Sensor = 0 RETURN tmpW1 ENDFUNC