一個單片機的for語句的簡單延時程序
你的延時程序從語法來說是沒有問題的,但是在實際應用中就應該考慮實際問題。
我具體幫你分析一下;看你包含的頭文件,你應該是用的51內核的單片機,假設你用的是12M的晶振好了,一個機器周期等于12個時鐘周期,那么就是1MHZ的頻率,你的延時程序增加一個數如果我沒記錯的話是雙周期指令,那么就是0.5MHZ,你增加100次,那么就是5KHZ,燈閃的太快了,也就是說你的燈亮與滅之間的間隔是0.2ms,人的眼睛是無法分辨那么快的變化的,所以你看上去就一直是亮的,其實我們日常生活中的日光燈也不是一直亮的,他是以50HZ的頻率閃爍著的,但是你看上去他是一直亮著的,一樣的道理。解決辦法是延長延時時間就可以了。
以上只是定性的分析,具體計算可能不是那么準,但是結果和原因的分析都是沒問題的。
一個單片機的for語句的簡單延時程序
你的延時程序從語法來說是沒有問題的,但是在實際應用中就應該考慮實際問題。
我具體幫你分析一下;看你包含的頭文件,你應該是用的51內核的單片機,假設你用的是12M的晶振好了,一個機器周期等于12個時鐘周期,那么就是1MHZ的頻率,你的延時程序增加一個數如果我沒記錯的話是雙周期指令,那么就是0.5MHZ,你增加100次,那么就是5KHZ,燈閃的太快了,也就是說你的燈亮與滅之間的間隔是0.2ms,人的眼睛是無法分辨那么快的變化的,所以你看上去就一直是亮的,其實我們日常生活中的日光燈也不是一直亮的,他是以50HZ的頻率閃爍著的,但是你看上去他是一直亮著的,一樣的道理。解決辦法是延長延時時間就可以了。
以上只是定性的分析,具體計算可能不是那么準,但是結果和原因的分析都是沒問題的。
試著用for語句編寫延時子函數
很多初學者對于程序中ms級延時函數的編寫方法比較疑惑,其原理和方式雖然簡單,但是卻沒有相關資料。
這里用一個例程詳細介紹一下。 過程參考如下: 在編譯器下建立一個新項目,也可以利用已有項目。
此過程中需要注意,單片機晶振的選擇,因為for循環里指令的執行時間和晶振有直接關系,本例中晶振使用11.0592M。 編寫一段關于延時的函數,主要利用for循環,代碼如下:void delay_ms(unsigned int ms){unsigned int i;unsigned char j; for(i=0;i。
C語言用for語句要設置1MS延時,為什么是500*121?
這要看你的機器周期是多大,
其實C語言對人來說很容易理解(相對匯編程序而言),但是對于機器來說匯編語言更容易理解,
我們編寫的C語言程序,會被翻譯成匯編程序,最后成為二進制代碼輸入機器,一句很簡單的C語言代碼,翻譯成匯編的話可能是幾句匯編代碼,而機器執行一句匯編代碼需要的指令周期是固定的(一般一到四個機器周期),
因為一句C語言代碼被翻譯成幾句匯編代碼,所以不同C語言代碼執行的時間不同,進而很難實現精確的延時。
這也是C語言不如匯編語言的一個表現,匯編語言能實現精確延時