微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > JTAGICE mkII 或是 AVR单片机 的问题

JTAGICE mkII 或是 AVR单片机 的问题

时间:11-23 来源:互联网 点击:
这两天 用 JTAGICE mkII 的 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;

}


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

网站地图

Top