houyawei 发表于 2024-2-21 15:14:39

为什么必须使能比较器中断模块,才能使INT3中断函数的内容起作用。

这个是初始化的内容

void system_init(void)
{
    WTST= 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度
       
        P0M0 = 0x00; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0x00;
        P2M0 = 0x03; P2M1 = 0x00; //lcd 2.4567双向口2.0 2.1推挽输出
        P3M0 = 0x00; P3M1 = 0x00;
        P4M0 = 0x18; P4M1 = 0x00; //p4.3,p4.4推挽输出
        P5M0 = 0x00; P5M1 = 0x00;
        P6M0 = 0xff; P6M1 = 0x00; //pwm p6
        P7M0 = 0x70; P7M1 = 0x00; //lcd p7.456推挽输出

    ADCTIM = 0x3f;                //设置 ADC 内部时序,ADC采样时间建议设最大值
    ADCCFG = 0x2f;                //设置 ADC 时钟为系统时钟/2/16/16
    ADC_CONTR = 0x80;   //使能 ADC 模块

        UART1_config(2);
        CANInit();
        init(128);
    Timer0_init();

        Timer3_init();
        pwm_init();

        CMPEN = 1;                                  //使能比较器模块
        fule_angle_temp=0;
        water_angle_temp=0;
        zs_angle_temp=0;

        EX3 = 1;    //使能 INT3 下降沿中断
    EA = 1;

}目的是int3引脚,有下降沿触发中断函数里面的内容
/********************* INT3中断函数 *************************/
void INT3_int (void) interrupt 11   //进中断时已经清除标志
{
        EA=0;
        HC595DATA &=0x0000;
        HC595_DATAOUT(HC595DATA);
       
        end_stepmotor();
        fule_angle_temp=0;
        water_angle_temp=0;
        zs_angle_temp=0;
        while(low_vol==1)
        {;}
        EA=1;
}但是为什么使能了比较器模块(CMPEN = 1; //使能比较器模块),int3中断函数才能正常运行。
电路里面有3个2200微法电容。
当int3有下降沿信号,关闭所有灯,三个电机回转
但是去掉比较器模块使能,外部中断就不能正常运行了{:4_167:}

电子DIY小家 发表于 2024-2-21 16:48:00

没有完整的代码,不排除是不是哪个函数里某个寄存器会相互干扰!建议先用历程里的单独的外部中断3测试一下。然后在一点点的增加自己的代码进去,直到哪一行加进去不行了的话就是那一行的问题。

梁工 发表于 2024-2-23 22:16:18

比较器模块 与 外中断INT0~INT4之间,没有任何关联的,各自独立的模块。
还是仔细检查程序。
页: [1]
查看完整版本: 为什么必须使能比较器中断模块,才能使INT3中断函数的内容起作用。