void PCA_Isr() interrupt 7
{
if (CF)
{
CF = 0;
cnt++; //PCA timing overflow times+1
}
if (CCF0)
{
CCF0 = 0;
count0 = count1; //Back up the last captured value
((unsigned char *)&count1)[3] = CCAP0L;
((unsigned char *)&count1)[2] = CCAP0H;
((unsigned char *)&count1)[1] = cnt;
((unsigned char *)&count1)[0] = 0;
length = count1 – count0; //length saved is the captured pulse width
}
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
cnt = 0; //User variable initialization
count0 = 0;
count1 = 0;
length = 0;
CCON = 0x00;
CMOD = 0x09; //PCA clock is the system clock, enable PCA timing interrupt
CL = 0x00;
CH = 0x00;
CCAPM0 = 0x11; //PCA module 0 is 16-bit capture mode (falling edge capture)
CCAPM0 = 0x21; //PCA module 0 is 16-bit capture mode (falling edge capture)
CCAPM0 = 0x31; //PCA module 0 is 16-bit capture mode (falling edge capture)
CCAP0L = 0x00;
CCAP0H = 0x00;
CR = 1; //Start PCA timer
EA = 1;
while (1);
}
Assembly code
;Operating frequency for test is 11.0592MHz
CCON DATA 0D8H