一、出現(xiàn)“IAR AVR unknown or ambiguous symbol.main”
project==>options==>linker,format設(shè)置成debug。
IAR下必須進(jìn)入DEBUG模式才能進(jìn)行調(diào)試,如果不連接開發(fā)工具的話,斷點也是不行的
二、處于調(diào)試狀態(tài),但是不能在C語言上單步運(yùn)行,也不能設(shè)置斷點
project==>options==>C/C++Compiler,將Generate debug information打上勾。
三、IAR For AVR軟件的精確延時
好了,廢話不多說,不浪費(fèi)中斷的情況下的精確延時啊~~,當(dāng)然是軟件自帶的單周期的空操作了~~,你懂得為什么,比如_nop_();(當(dāng)然這個家伙是51單片機(jī)中用到的c程序,匯編就是nop;嘍)
在IAR for AVR中的庫函數(shù)#include"intrinsics.h"里面有個單周期的延時函數(shù)__delay_cycles();(相當(dāng)于_nop_();),
如果__delay_cycles(100)就是100個mclk的周期延時。
然后就是下面的操作了:
1)建立一個.h文件,用Keilc51這個是必須懂得,我就不多解釋了
2)輸入代碼:
#ifndef __delay_h
#define __delay_h
#include"intrinsics.h"
#define xtal
#define delay_us(x) __delay_cycles((unsigned
#define delay_ms(x) __delay_cycles((unsigned
#define delay_s(x)
#endif
3)就是在你用到延時的函數(shù)里面調(diào)用#include"Delay.h"(這里是不區(qū)分大小寫的,哈,不用擔(dān)心這個)
這就在不浪費(fèi)中斷情況下的軟件延時,當(dāng)然你要非得精確,那非得定時計數(shù)器不可了
補(bǔ)充一下:
我用的是IAR for AVR,別的軟件什么的似乎也有延時函數(shù),如果沒有可以用下面的這個延時(聽說也是相當(dāng)準(zhǔn)的,在8MHZ晶振下,不管是外接還是內(nèi)部晶振,哈都一樣):
//------------------------------------------------------------------------------
//延時函數(shù)
void
{
}
還有一個:差點忘記(這個不知道是那個哥們想到的,也可以改變晶振的~~~都貼出來,反正沒事干):
//------------------------------------------------------------------------------
//延時1ms的函數(shù),沒有參數(shù)傳遞
void
{
}
//------------------------------------------------------------------------------
//延時nms的函數(shù),有參數(shù)傳遞
void
{
}