HELLO ALL
I FOUND PICBASIC PRO CODE MADE BY BRUCE(ON 20th July 2006, 07:45) FOR 18F242 TO MEASURE PW USING CCP HARDWARE. I FOUND THAT IS VERY SHORT AND,NEAT AND STRAIGHT FORWARD. I HAVE 16F877A AND I WANT TO MAKE A CAP METER. I HAVE WRITTEN CODE BASED ON BRUCE'S CODE BUT USING 16F877A. I TRIED TO SIMULATE THIS ON PROTEUS . IT NEVER WORKED. BUT BRUCE'S CODE WORK FINE FOR 18F242. I DID EVERY THING POSSIBLE TO GET IT WORKING BUT NO LUCK. I AM POSTING THIS COD FOR SOME BODY OR BRUCE TO HELP ME PLEASE ON THIS.IT LOOKED TO ME OBSCURE NO MORE I CAN DO.COD:
'PIC16F877A
DEFINE OSC 20
Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1


Low PORTE.2
PIE1.2=1

Symbol Capture = PIR1.2 ' CCP1 capture flag
T1 VAR WORD ' 1st capture value
PW VAR WORD ' 2nd capture value & ultimately final pulse width


TRISC.2 = 1 ' CCP1 input pin (Capture input)
INTCON = 0 ' Interrupts off

ReLoad:
CCP1CON = %00000101 ' Capture mode, 4capture on rising edge
T1CON = 0 ' TMR1 prescale=1, clock=Fosc/4, TMR1=off (200nS per count @20MHz)
TMR1H = 0 ' Clear high byte of TMR1 counter
TMR1L = 0 ' Clear low byte
T1CON.0 = 1 ' Turn TMR1 on here


Capture = 0 ' Clear capture int flag bit
While !Capture ' Wait here until capture on rising edge
Wend

' Rising edge detected / stuff Timer1 value in T1
T1.HighByte = CCPR1H
T1.LowByte = CCPR1L

CCP1CON = %00000100 ' Configure capture for falling edge now
Capture = 0 ' Clear capture interrupt flag bit

While !Capture ' While here until capture on falling edge
Wend

' Falling edge detected / stuff Timer1 value in PW
PW.HighByte = CCPR1H
PW.LowByte = CCPR1L

PW = PW-T1 ' High pulse width = PW-T1
' Convert to uS for 20MHz osc with 200nS Timer1 ticks
PW = (PW * 2)/10
Pause 150 ' Pause to let LCD power up
LCDOut $fe,1, "PULSE WIDTH" ' Display if C1OUT = 1
LCDOut $fe,$C0, #PW

GOTO ReLoad

END
OBAID