JTAGICE mkII 或是 AVR單片機 的問題
程序 見 附錄,出現(xiàn)的問題是:當 代碼 如附錄所寫 時,程序 運行正常,當 把 函數(shù)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;
}
}
此時,程序 不正常。單步調(diào)試 時,程序指針 不會 指向 atimer=0、atmp 這兩行,也就是說 這兩行 不被 CPU 執(zhí)行。經(jīng)過我 反復(fù)驗證,確實如此。
附錄:
#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定時標志
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;
}
關(guān)鍵詞:
JTAGICEmkIIAVR單片
評論