STC15W系列单片机比较器中断

2019-07-15 09:25发布

路过的大神,已经设置了标志位,为什么每一次进中断都会执行中断里边的while循环呢,求解
#include        "config.h"
#include        <intrins.h>

sbit charge=P3^3;
sbit stimulate=P3^0;

u8 x;
u8 count=0;

#define CMPEN    0x80    //CMPCR1.7:比较器模块使能位
#define CMPIF    0x40    //CMPCR1.6:比较器中断标志位
#define PIE      0x20    //CMPCR1.5:比较器上升沿中断使能位
#define NIE      0x10    //CMPCR1.4:比较器下降沿中断使能位
#define PIS      0x08    //CMPCR1.3:比较器正极选择位
#define NIS      0x04    //CMPCR1.2:比较器负极选择位
#define CMPOE    0x02    //CMPCR1.1:比较器结果输出控制位
#define CMPRES   0x01    //CMPCR1.0:比较器比较结果标志位

#define INVCMPO   0x80    //CMPCR2.7:比较结果反向输出控制位
#define DISFLT    0x40    //CMPCR2.6:比较器输出端0.1us滤波控制位
#define LCDTY     0x3F    //CMPCR2.[5:0]:比较器输出的区抖时间控制

/*初始化IO口*/
void GPIO_config(void)
{
        P5M1=0x30;                //设置P55高阻态        
        P5M0=0x00;

        P3M1=0x00;                //设置P33推挽输出        
        P3M0=0x09;                //设置P30推挽输出
}
.
.
.
.

/******************** 主函数 **************************/
void main(void)
{               
        GPIO_config();
        CMPCR1=0xB0; //配置比较器控制寄存器
        CMPCR2=0;
        EA=1;

        while(1)
        {
                stimulate=1;
                Delay3ms();

                stimulate=0;
                Delay3ms();
        }
}

/*比较器中断*/
void CMP_Isr() interrupt 21 using 1
{
        u8 y=0;
        count=count+1;
        CMPCR1=0xBF;                 //清完成标志
        
        while(count==2)        
        {
         if(y<150)
         {
         for(x=0;x<200;x++)
        {
                charge=1;
                Delay3ms();
                charge=0;
                Delay5ms();
        }
        if(x==200)
        {
                x=0;
        }
        y++;
        }
        if(y==150)
        {count=0;}
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。