PIC16F690 RA2引脚设置为INT中断,外部信号发生器发出方波到RA2,触发中断后RB4-RB7触发相关动作。方波频率1K-100K均试过,用示波器检测到信号发送到RA2引脚。
发现没有进入中断函数,检查过寄存器设置仍未找到原因,先将完整代码贴出,请大家指教。
#include <pic.h>
__CONFIG(0X0f4);
#define LED RC7 //定义LED端口
/**************************************************
函数说明:CPU相关初始化
***************************************************/
void Init_CPU(void)
{
OPTION = 0X40; //端口若弱上拉
OSCCON = 0x71; //内部振荡,4M
INTCON = 0Xd0; //允许RA2/INT中断和中断总开关
//下面为led端口初始化
TRISC = 0x00; //LED端口设置为输出
LED = 0; //关闭,LED
//关闭模拟功能
ANSEL = 0X00;
ANSELH = 0X00;
//端口输入初始化,接方波
TRISA |= 0x04; //RA2为输入端口
//端口输出初始化:为IO动作准备
TRISB = 0x00; //RB4 RB5 RB6 RB7为输出
PORTB = 0XC0;
}
/*******************************************************************************
函数说明:主函数,根据中断所发生的上升沿次数,A-D端口输出不同脉冲,以驱动步进电机
********************************************************************************/
void main(void)
{
Init_CPU();
while(1)
{
// LED = ~LED;
delay_ms(100);
}
}
/************************************************************************
中断服务函数:LED部分仅仅为了验证是否进入中断
*************************************************************************/
void interrupt INT(void)
{
static char clk = 0;
static char num = 0;
//for test
if(num ++ == 50)
{
LED = ~LED;
num = 0;
}
if(INTF && INTE)
{
INTF = 0;
switch(clk)
{
case 0: RB4 = 1;
RB6 = 0;
clk = 1;
break;
case 1:
RB5 = 1;
RB7 = 0;
clk = 2;
break;
case 2:
RB4 = 0;
RB6 = 1;
clk = 3;
break;
case 3:
RB5 = 0;
RB7 = 1;
clk = 0;
break;
default:break;
}
}
} |