在AVR128中,我用了一个延时函数,程序如下:
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1714;i++); //1142=XTAL*143-2=8*143-2
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
主程序如下:
void main(void)
{
unsigned int one=40;
unsigned int two=3;
JTAG_DIS|=MCUCSR_JTD;
JTAG_DIS|=MCUCSR_JTD;
MCUCR=0x00;
DDRB=0xff; //端口为输出
PORTB=0x00;
pwm0_init(); PORTA=0X00;
DDRA=0XFF;
while(1)
{
delay_nms(one);
PORTA=0XFF;
delay_nms(two);
PORTA=0X00;
}
也就是说,我如果在主程序里定义了one和two这两个变局,即定义成局部变量,延时函数是正常的。但我如把这两个变量定义成全局变量,即:
#include <iom128v.h>
#include <macros.h>
#define JTAG_DIS MCUCSR
#define MCUCSR_JTD 0x80
unsigned int one=40;
unsigned int two=3;
结果程序就不正常了,即延时函数就不正常了,请高手帮我分析一下,这是怎么回事,谢谢。 |