本帖最后由 小滑头520 于 2012-6-16 13:47 编辑
我用两个外部中断 INT6 INT7同时检测 INT6设置为上升沿检测 INT7下降沿检测 然后我用PCA计数 输出上升沿到下降沿的时间 但是为什么中断能检测到上升沿下降沿void INT6_ISR(void) void INT6_ISR(void) interrupt 18 //上升沿
{
P3IF&=~0x40; //关闭外部中断6标志
num1=1;
}
void INT7_ISR(void) interrupt 19
{
// P3IF&=~0x40;
P3IF&=~0x80; //关闭外部中断6标志
num2=1;
}
但是加了PCA计数 下降沿这个中断就检测不出了
void PCA_Init(void)
{
EIE1 =0x08; //使能PCA0中断
PCA0MD =0x01; //PCA时钟源选择 01 12分频
PCA0L =0x00;
PCA0H =0x00;
PCA0CPM0 =0x11;
PCA0CPL0 =0x00;
PCA0CPH0 =0x00;
PCA0CN =0x40;
}
下面是主函数
void PORT_Init()
{
//P3MDOUT = 0xF0;
// P0MDOUT|=0xfe; //P0^0设置为漏极开路,数字输入
// P0|=0x01;
// XBR0 =0x08;
XBR2 =0X40;
P74OUT =0X00;
}
///中断初始化////
void INT67_Init(void)
{
EIE2 |=0X30;
P3IF |=0XC4;//把p3.6设置成上升沿触发 p3.7设置成下降沿触发
}
void INT6_ISR(void) interrupt 18 //上升沿
{
P3IF&=~0x40; //关闭外部中断6标志
num1=1;
}
void INT7_ISR(void) interrupt 19 //下降沿
{
P3IF&=~0x80; //关闭外部中断7标志
num2=1;
}
//////计数中断///////
void PCA_ISR(void) interrupt 9
{
CCF0 =0;
j++;
}
void main()
{
WDTCN = 0xde; // Disable watchdog timer
WDTCN = 0xad;
j=0;
PORT_Init();
oscillator_init();
INT67_Init();
LCD_init();
EA =1;
while(1)
{
if(num1==1)
{
num1=0;
PCA_Init();
}
if(num2==1)
{
PCA0CN =0x0; //禁止计数
EIE1 =0x0; //禁止pca0中断
num2=0;
j=0;
}
// handle(); //数据处理
}
} 感觉是PCA_Init(); 里面的 EIE1 =0x08; //使能PCA0中断 与程序中的一些地方冲突了 屏蔽了他就能检测到下降沿
因为 EIE1 =0x08;是使能PCA0中断 屏蔽了他PCA就不能工作 求大侠们帮帮忙 谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>