新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > JTAGICE mkII 或是 AVR單片機(jī) 的問題

JTAGICE mkII 或是 AVR單片機(jī) 的問題

作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
這兩天 用 JTAGICE mkII 的 JTAG功能 仿真 一個程序,發(fā)現(xiàn) 一個問題,不知 是芯片問題,還是 仿真器的問題。我 是用AVRSTDIO4的GCC 寫的 程序,用 JTAGICE mkII 來 仿真,芯片 是 ATmega32。
程序 見 附錄,出現(xiàn)的問題是:當(dāng) 代碼 如附錄所寫 時,程序 運(yùn)行正常,當(dāng) 把 函數(shù)func()中的代碼 直接放到while(1)中,即如下:(原程序 是 用 func() 代替了 幾行代碼)
while(1)
{
atimer = 0; //清1ms定時標(biāo)志
atmp = (aclock)/2;
if (anum!=atmp )
{
anum = atmp;
atimer = 1; //置1ms定時標(biāo)志
}
if(atimer == 1)
{
PORTA=~PORTA;
}
}
此時,程序 不正常。單步調(diào)試 時,程序指針 不會 指向 atimer=0、atmp 這兩行,也就是說 這兩行 不被 CPU 執(zhí)行。經(jīng)過我 反復(fù)驗(yàn)證,確實(shí)如此。
附錄:
#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上觀察現(xiàn)象。
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定時標(biāo)志
atmp = (aclock)/2;
if (anum!=atmp )
{
anum = atmp;
atimer = 1; //置1ms定時標(biāo)志
}
}
ISR(TIMER1_OVF_vect,ISR_BLOCK)
{
TCNT1=58162; //1024分頻下延時2S.
aclock++;
if(aclock==100)
aclock=0;
}



關(guān)鍵詞: JTAGICEmkIIAVR單片

評論


技術(shù)專區(qū)

關(guān)閉