为什么必须使能比较器中断模块,才能使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:}
没有完整的代码,不排除是不是哪个函数里某个寄存器会相互干扰!建议先用历程里的单独的外部中断3测试一下。然后在一点点的增加自己的代码进去,直到哪一行加进去不行了的话就是那一行的问题。 比较器模块 与 外中断INT0~INT4之间,没有任何关联的,各自独立的模块。
还是仔细检查程序。
页:
[1]