我主要是简单的试验一下CCP1(捕捉工作)各寄存器初值正确没,但是我把下面的程序放进仿真里面没反应,每捕捉一次,就对变量Count加1,然后在LED(RD口)上显示
变量的值,我用的是PIC18F46K22的单片机,希望各位高手帮帮忙,找找原因,谢谢了!
#include<pic18.h>
unsigned int Count=0;
void delay(void)
{
unsigned char i,j;
for(i=0;i<30;i++)
for(j=0;j<250;j++)
;
}
void CCP1_INIT(void)
{
CCP1CON = 0x05;//捕捉模式,每个上升沿捕捉
CCPTMRS0 = 0x08;//CCP1使用Timer1为定时器,CCP2使用Timer3定时器
PIR1bits.CCP1IF = 0;//捕捉标志清零
PIE1bits.CCP1IE = 1;//允许捕捉中断
IPR1bits.CCP1IP = 1;//高优先级
T1CON = 0x023;//Timer1使能一次16位操作进行寄存器读写,F = Fsoc/4,使能TMR1
TMR1L = 0;//计数器放初始值
TMR1H = 0;
PIR1bits.TMR1IF = 0;//计数器标志清零
PIE1bits.TMR1IE = 1;//允许定时器TMR1溢出中断
IPR1bits.TMR1IP = 1;//高优先级
}
void main(void)
{
CCP1_INIT();
TRISD = 0x00;
LATD = 0xff;
delay();
while(1)
{
LATD = Count;
delay();
LATD = 0x00;
delay();
}
}
void interrupt Ccp1(void)
{
if(CCP1IF==1)
{
CCP1IF = 0;
Count++;
}
if(TMR1IF==1)
{
xxxxxxxxxxx
}
}
一周热门 更多>