#include<pic.h>
__CONFIG(WDTDIS&HS&UNPROTECT);
void main()
{
TRISC2=1; //RC2设为输入//
TRISD=0;
PORTD=0x00;
TMR1IF=0; //定时器1标志位置零
INTCON=0xc0; //中断控制器开GIE和PEIE;
PIE1=0x04; //开CCP1IE中断使能
PIR1=0x00; //置零CCP1IF标志位
CCP1CON=0x00; //CCP1控制寄存器关闭
CCP1CON=0x05; //CCP1控制寄存器设置为捕捉,上升沿捕捉;
T1CON=0x31; //开T1定时器,预分频1:8;
while(1); //等待中断
};
void interrupt CCP1_pulse(void)
{
if(CCP1IF==1)
{
CCP1IF=0; //清除标志位
PORTD++; //中断一次,端口RD+1
};
}
这一段练习PIC16F877A的CCP1捕捉中断的程序;不知为何总捕获不了RC2端口的上升沿信号,我是用PROTEUS仿真的;
另外 这个程序如果在main()函数里做一个CCP1IF置位,可以进中断;运行正常;
而且整个运行期间各个中断包括GIE,PEIE,CCP1IE中断都是使能状态;只是捕捉不到RC2端口的上升沿,造成CCP1IF不置位。
我不知道是不是CCP1的配置位有问题,求老鸟帮助。 |