在給單片機(jī)寫(xiě)程序的時(shí)候往往需要一個(gè)微秒或者毫秒的延時(shí)子程序,但是C語(yǔ)言不同于匯編,很難根據(jù)語(yǔ)句確定準(zhǔn)確的延時(shí)時(shí)間,經(jīng)過(guò)各種查資料得到一種簡(jiǎn)單實(shí)用的方法:通過(guò)keil下斷點(diǎn)調(diào)試確定時(shí)間。
就是編寫(xiě)一個(gè)延時(shí)子程序,然后在延時(shí)程序處和while(1)設(shè)置斷點(diǎn),運(yùn)行程序,在調(diào)試模式下就可以獲得該延時(shí)子程序的準(zhǔn)確延時(shí)時(shí)間。
1,編寫(xiě)如下源程序:
#include
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
}
void main (void)
{
delay_ms(1);
while(1);
}
2,下圖位置設(shè)置斷點(diǎn)
3,看哥哥怎么搞:
進(jìn)入運(yùn)行模式,開(kāi)始運(yùn)行(1處所示),程序會(huì)在延時(shí)子程序前的斷點(diǎn)處停下,此時(shí)記錄程序運(yùn)行時(shí)間,2處所示。
4,繼續(xù)搞
再次點(diǎn)運(yùn)行(1處所示),此時(shí)程序會(huì)在第二個(gè)斷點(diǎn)處,也就是while(1)停下,這時(shí)候程序剛剛運(yùn)行完延時(shí)子程序,讀取此時(shí)的程序運(yùn)行時(shí)間,如2所示,,二者想減就是延時(shí)子程序運(yùn)行時(shí)間。如下圖:
0.00143989-0.00042209=0.0010178,約等于1mS,ok,這樣就得到你所寫(xiě)的延時(shí)子程序的延時(shí)時(shí)間,準(zhǔn)確的哦,可以在你得到的運(yùn)行時(shí)間的基礎(chǔ)上更改數(shù)值來(lái)得到希望的延時(shí)時(shí)間。當(dāng)然記得設(shè)置晶振為你所需要的,我這里是11.0592。
參考:51hei論壇