微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC15W系列单片机比较器中断

STC15W系列单片机比较器中断

时间:10-02 整理:3721RD 点击:
路过的大神,已经设置了标志位,为什么每一次进中断都会执行中断里边的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;}
        }
}

自己先占一楼啊。

只要count不为0,当然会进入while循环,改if(count==2)试试

顶一个~~~~~~~~~~~~~~~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top