#include <p18f2480.h> <br /><br />unsigned char cap_high;<br />unsigned char cap_low;<br /><br />void VectorHigh (void);<br />void HandlerHigh (void);<br /><br />#pragma code VectorHigh = 0x08<br />void VectorHigh (void)<br />{<br /> _asm<br /> goto HandlerHigh //jump to interrupt routine<br /> _endasm<br />}<br />#pragma code<br /><br />#pragma interrupt HandlerHigh<br />void HandlerHigh ()<br />{<br />//CCP1中断----------------------------------<br />TMR1H=0;//定时器1一定要在中断里面清0<br />TMR1L=0;//进入中断先清0,保证计时精度<br /><br /> if(PIR1bits.CCP1IF) <br /> { <br /> PIR1bits.CCP1IF = 0; //一定要在中断里面赋值<br /> cap_low=CCPR1L;<br /> cap_high=CCPR1H;<br /> }<br /><br />}<br />#pragma code<br /><br />void main() <br />{ <br />//初始化定时器1,Capture用----------------------------------------<br /><br />TRISCbits.TRISC2= 1; //设定RC2为输入<br /><br />CCP1CON = 0x04;//CCP1下降沿捕捉模式<br /><br />T3CON = 0x00;//定时器1是CCP1的时钟源<br /><br />CCPR1H=0;<br />CCPR1L=0;<br /><br />PIE1bits.CCP1IE=1;//CCP1中断打开<br />PIR1bits.CCP1IF=0;//CCP1溢出标志<br />IPR1bits.CCP1IP = 1;//CCP1溢出中断优先级为高中断<br /><br />T1CON = 0x01;//打开定时器1<br /><br />PIE1bits.TMR1IE=1;//定时器1中断打开<br />PIR1bits.TMR1IF=0;//定时器1溢出标志<br />IPR1bits.TMR1IP = 1;//定时器1溢出中断优先级为高中断<br /><br />INTCONbits.GIE = 1;//全局中断打开<br />INTCONbits.PEIE=1;//外围设备中断打开<br /><br />for(;;);<br /><br />} |
|