新闻中心

EEPW首页>嵌入式系统>设计应用> JTAGICE mkII 或是 AVR单片机 的问题

JTAGICE mkII 或是 AVR单片机 的问题

作者: 时间:2016-11-23 来源:网络 收藏
这两天 用JTAGICEmkII的 JTAG功能 仿真 一个程序,发现 一个问题,不知 是芯片问题,还是 仿真器的问题。我 是用AVRSTDIO4的GCC 写的 程序,用 JTAGICE mkII 来 仿真,芯片 是 ATmega32。
程序 见 附录,出现的问题是:当 代码 如附录所写 时,程序 运行正常,当 把 函数func()中的代码 直接放到while(1)中,即如下:(原程序 是 用 func() 代替了 几行代码)
while(1)
{
atimer = 0; //清1ms定时标志
atmp = (aclock)/2;
if (anum!=atmp )
{
anum = atmp;
atimer = 1; //置1ms定时标志
}
if(atimer == 1)
{
PORTA=~PORTA;
}
}
此时,程序 不正常。单步调试 时,程序指针 不会 指向 atimer=0、atmp 这两行,也就是说 这两行 不被 CPU 执行。经过我 反复验证,确实如此。
附录:
#include < avr/io.h>
#include interrupt.h>
#include
unsigned int atmp;
unsigned int atimer;
unsigned int anum;
unsigned int aclock;
void func();
int main(void)
{
DDRA=0xFF; //将PA口接到 LED上观察现象。
PORTA=0x00;
TCCR1A=0x00;
TCCR1B=(1<
TCNT1=58162;
TIMSK=(1<
asm("SEI");
while(1)
{
func();
if(atimer == 1)
{
PORTA=~PORTA;
}
}
}
void func()
{
atimer = 0; //清1ms定时标志
atmp = (aclock)/2;
if (anum!=atmp )
{
anum = atmp;
atimer = 1; //置1ms定时标志
}
}
ISR(TIMER1_OVF_vect,ISR_BLOCK)
{
TCNT1=58162; //1024分频下延时2S.
aclock++;
if(aclock==100)
aclock=0;
}



关键词:JTAGICEmkIIAVR单片

评论


技术专区

关闭