您的位置 首页 嵌入式

JTAGICE mkII 或是 AVR单片机 的问题

这两天用JTAGICEmkII的JTAG功能仿真一个程序,发现一个问题,不知是芯片问题,还是仿真器的问题。我是用AVRSTDIO4的

这两天 用 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;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/261177.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部