longzhilianwjl 发表于 2010-11-13 11:59:36

求助,AVR Studio 的诡异问题,,while(1); 这句话竟然不能编译??!!

近日在做巡线小车,用的是M16,但是在写了个简单的程序在调试小车的时候,竟然出现了一个特别诡异的问题,就是WHILE(1);这句话不会被编译
看我的代码

#include <avr/io.h>
#include <avr/interrupt.h>

#define countertop 10000//这里定义了pwm波的最大计数值,从而得到50HZ的频率
#define uchar unsigned char
#define uint unsigned int

#define moto_left_fwd    PORTD=(PORTD|(1<<PD0))&(~(1<<PD1))      //左电机正转
#define moto_left_bck    PORTD=(PORTD|(1<<PD1))&(~(1<<PD0))      //左电机反转
#define moto_right_fwd   PORTD=(PORTD|(1<<PD6))&(~(1<<PD7))      //右电机正转
#define moto_right_bck   PORTD=(PORTD|(1<<PD7))&(~(1<<PD6))      //右电机反转
#define moto_left_off    PORTD=PORTD&(~(1<<PD0))&(~(1<<PD1))        //左电机停
#define moto_right_off   PORTD=PORTD&(~(1<<PD6))&(~(1<<PD7))      //右电机停



uchar duty1=75,duty2=85; //定义占空比,为字符型,0-99,即duty%



void init()         //初始化
{

DDRD|=0b11110011;         
DDRA=0;//PORTA0-7设置为输入,读取传感器的值
PORTA&=0x7F;

moto_left_off;//初始关闭电机
moto_right_off;

TCCR1A=0b10100000;         //配置定时器1工作在相位与频率修正PWM,TOP值为ICR1
TCCR1B=0b00010010;      //8分频,正常PWM输出
ICR1=countertop;         //ICR1 为计数器的TOP值

OCR1A=countertop*duty1/100;         //设置捕捉比较输出初值
OCR1B=countertop*duty2/100;

TIMSK|=((1<<OCIE1A)|(1<<OCIE1B)|(1<<TOIE1));   //使能比较匹配中断
SREG=0x80;         //使能全局中断


/* 置位 WDTOE 和 WDE*/
WDTCR |= (1<<WDTOE) | (1<<WDE);
/* 关闭看门狗 */
WDTCR = 0x00;
}



intmain()
{
        init();
        while((PINA&0X80)==0X80);//等待启动键按下
        moto_left_fwd;
        moto_right_fwd;

       
        while(1);

}


解释一下这句话:
while((PINA&0X80)==0X80);//等待启动键按下
我在PA7加了一个按键,如图,目的就是在这个键按下的时候小车程序才会跑。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_597629E2326E.jpg
(原文件名:PA7按键原理图.jpg)
按理说,应该按键按下一次以后,小车的应该一直跑,但现在的问题是,按键按下小车可以跑,只要按键松开,小车就停止转动,再按下去,小车又开始转,松开又停止。
你说要是这样的话,那不是程序是自动复位了。细想想,如果不是这样,小车应该在按键按一下以后就会一直转啊,比较我已经通过moto_left_fwd;moto_right_fwd;这两句给P口赋值了。。。只有复位了才会P口上的值清零啊。。。。。。。现在竟然出现了这毛病
问了一个学长是看门狗没关,但是我已经在程序里关了啊。。。但是这里说一句就是PDF上有一句是_WDR();由于AVR STUDIO编译通不过,我就去掉了。感觉没啥大的必要,难道跟这个有关????
下面看一下我在AVR studio的调试截图。。。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_597631MDIWF6.JPG
调试截图1 (原文件名:调试截图一.JPG)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_597632A9FD7Z.JPG
调试截图2 (原文件名:调试截图2.JPG)
看调试效果,while里面没有形成死循环。。。。。
我现在无语了。。。。哪位大仙给我解释一下啊。。。。。跪求解释啊。。。。。。

longzhilianwjl 发表于 2010-11-15 19:06:44

没有人知道么。。。。不要沉了啊。。。。
页: [1]
查看完整版本: 求助,AVR Studio 的诡异问题,,while(1); 这句话竟然不能编译??!!