標題: 請問這個毫秒級單片機延時程序有問題嘛? [打印本頁]

作者: 2755395523    時間: 2022-1-15 18:04
標題: 請問這個毫秒級單片機延時程序有問題嘛?
這個毫秒級延時程序:
void ms(ut x){
ur i;
while(x--)
for(i=0;i<123;i++);
}
有什么問題嗎?
作者: 188610329    時間: 2022-1-15 22:44
無單片機型號,無晶振頻率,不置評否。
作者: 老二不怕黑    時間: 2022-1-15 23:51
while(x--)后面不是應(yīng)該加上分號嗎??
while(x--);
作者: wulin    時間: 2022-1-16 06:39
從表面看這個延時程序沒有什么問題,但實際上有3個問題。其中有1個花括號2個分號是漢字字符,編譯器不認。
作者: 2755395523    時間: 2022-1-16 10:18
188610329 發(fā)表于 2022-1-15 22:44
無單片機型號,無晶振頻率,不置評否。

芯片是AT89C52,晶振頻率12HZ
作者: 2755395523    時間: 2022-1-16 10:26
老二不怕黑 發(fā)表于 2022-1-15 23:51
while(x--)后面不是應(yīng)該加上分號嗎??
while(x--);

程序是我?guī)熜纸涛业,我的理解是unsigned int 長度0~65535
while (x--)
的意思是執(zhí)行最多65535遍for語句差不多延時1秒的
有分號就是停止了,所以我不加分號
作者: 2755395523    時間: 2022-1-16 10:31
wulin 發(fā)表于 2022-1-16 06:39
從表面看這個延時程序沒有什么問題,但實際上有3個問題。其中有1個花括號2個分號是漢字字符,編譯器不認。

這個不好意思啊手機的發(fā)的帖子所以符號是漢化的
作者: 名字不是重點    時間: 2022-1-16 10:58
老二不怕黑 發(fā)表于 2022-1-15 23:51
while(x--)后面不是應(yīng)該加上分號嗎??
while(x--);

邏輯上沒問題,while(x--)是個循環(huán),當后面帶上“;”后,循環(huán)體就是“X--”,當x=0時,這個循環(huán)線路束,不帶“;”時,是下一行的代碼做為循環(huán)體。
所以這是一個2級的嵌套循環(huán),加了“;”就成了2個獨立的一級循環(huán),延時上就差多了去了。
作者: 188610329    時間: 2022-1-16 19:57
2755395523 發(fā)表于 2022-1-16 10:18
芯片是AT89C52,晶振頻率12HZ

STC89C52   12M晶振, ms級的延時,一般差不多是:

void   delayms(u8 ms)
{
     u8   i,j;
     while(ms--)
     {
         j = 4;
         while(j--)
         {
              i=248;
              while(i--);
         }
     }
}
作者: lwh999995    時間: 2022-1-16 22:40
普通的延時函數(shù),不會很精準
作者: 羅斯德隆    時間: 2022-1-17 09:04
看匯編或者看示波器可能會準點,這個時間要微調(diào)。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1