各位大侠,麻烦你们帮我看下这个小程序,下面是个简单的PWM程序,当占空比减小到0时,PWM停止,并跳出pwm()子程序,可是现在怎么也跳不出了,成为一个死循环,在单步调试时发现flag=1,但还是跳不出while(!flag);请大家指点迷津! volatile uint16 int_count; volatile uint8 flag; void PWM_Initial(void) { PINSEL1=PINSEL1|(1<<10);//连接PWM5 PWMPR=0x00;//时钟不分频 PWMMCR=0x03;//设置PWMMR6匹配后复位并产生中断标志 PWMMR0=100000;//设定步进电机启动速度为1K,占空比为50% 100000 PWMMR5=PWMMR0; PWMLER=0x21;//PWM0,PWM6锁存 PWMPCR=0x2000;//允许PWM6单边输出 PWMTCR=0x00;//关闭定时器,PWM使能 VICIntSelect=0x00000000; VICVectCntl2=0x20|8; VICVectAddr2=(int)PWM5_Int; VICIntEnable=(1<<8);//使能PWM中断 } ///////////////////////////////////////////////////////////////////////////////////// void __irq PWM5_Int(void) { PWMIR=0x01; if(int_count<2000) { int_count++; PWMMR0=100000; PWMMR5=100-int_count*50; } if(int_count>=2000) { PWMMR5=100000; flag=0x01; PWMTCR=0x00; } PWMLER=0x21;//PWM0,PWM6锁存 VICVectAddr=0x00; } ////////////////////////////////////////////////////////////////////////////////////// void pwm(void) { PWMTCR=0x09; //启动PWM while(!flag); //为何程序在此处死循环???? flag=0x00; } /////////////////////////////////////////////////////////// int main (void) { PINSEL0=PINSEL0&0x300fffff; //配置总线 PINSEL2=0xf814914; BCFG1=0x1000ffef; IO0DIR|=HC595_CS; IO0CLR|=HC595_CS; M1SpiInit(); PWM_Initial(); while(1) { round1(green,18); pwm(); round1(r_g,18); } } |