?5樓 tianshuihu 2014-4-29 18:19:19 樓主想問(wèn)Delay函數(shù)實(shí)現(xiàn)的延時(shí)是怎樣計(jì)算的是嗎,看程序應(yīng)該是51單片機(jī)的延時(shí)程序 以10ms延時(shí)子程序(12MHz)為例來(lái)分析一下(其它的類似) void delay10ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--); } 這個(gè)程序有三層循環(huán),循環(huán)的總次數(shù)為 Num=5*4*248=4960 每次循環(huán)都有一次條件判斷(如“k>0”)和一次只減(如“k--”),即每次循環(huán)消耗兩個(gè)機(jī)器周期 那么花費(fèi)的總的機(jī)器周期即為 Sum=Num*2=9920 對(duì)于51單片機(jī)12M晶振的話一個(gè)周期是1us,那么延時(shí)時(shí)間 t=Sum*1us=9 920 us ≈ 10ms 這段程序有可能是精確延時(shí)到10ms,這是因?yàn)檎{(diào)用這個(gè)函數(shù)及執(zhí)行完這個(gè)函數(shù)分別要壓棧和出棧,另外i,j,k也有一個(gè)賦初值的過(guò)程...所以各種因素疊加到一起延時(shí)就是10ms了 其實(shí)樓上說(shuō)的挺好的,如果你想看具體的延時(shí)過(guò)程可以仿真一下,在keil中對(duì)比C語(yǔ)言匯編前后的代碼你會(huì)理解的更透徹
|
|
來(lái)自: 美達(dá)說(shuō) > 《c語(yǔ)言》