#include <p18f2480.h> <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 />//定时器3中断----------------------------------<br /><br /> if(PIR1bits.CCP1IF) <br /> { <br /> PIR1bits.CCP1IF = 0; //一定要在中断里面赋值<br />//比较软件中断,要将定时器3的初值清0<br />//比较特殊事件触发,定时器自动重装<br />// TMR3H=0; <br />// TMR3L=0; <br /> LATBbits.LATB1 = !LATBbits.LATB1;<br /> }<br />}<br />#pragma code<br /><br />void main() <br />{ <br />//初始化定时器3,Compare用----------------------------------------<br /><br />TRISCbits.TRISC2= 0; //设定RC2为输出<br />LATCbits.LATC2 = 0; //CCP1引脚置低位<br />TRISB = 0;//PB.0-.7口作输出<br /><br />CCP1CON = 0x0b;//CCP1比较模式,<br /> //0x02电平翻转,0x0a软件中断,0x0b特殊事件触发<br /><br />INTCONbits.GIE = 1;//全局中断打开<br />INTCONbits.PEIE=1;//外围设备中断打开<br /><br />PIE2bits.TMR3IE=1;//定时器3中断打开<br />PIR2bits.TMR3IF=0;//定时器3溢出标志<br />IPR2bits.TMR3IP = 1;//定时器3溢出中断优先级为高中断<br /><br />CCPR1H=0x03;//高8位初值<br />CCPR1L=0xe8;//低8位初值<br /><br />PIE1bits.CCP1IE=1;//CCP1中断打开<br />PIR1bits.CCP1IF=0;//CCP1溢出标志<br />IPR1bits.CCP1IP = 1;//CCP1溢出中断优先级为高中断<br /><br />T3CONbits.RD16 = 0;//关闭定时器3的16位读写<br />T3CONbits.T3ECCP1 = 1;//定时器3是CCP1的时钟源<br />T3CONbits.T3CKPS1 = 0;//分频1:1<br />T3CONbits.T3CKPS0 = 0;<br />T3CONbits.T3CCP1 = 0;//定时器3是CCP1的时钟源<br />T3CONbits.TMR3CS = 0;//定时器3选择定时方式<br />T3CONbits.T3SYNC = 0;//无效<br />T3CONbits.TMR3ON = 1;//打开定时器3<br /><br />for(;;);<br /><br />} <br /> |
|