![]() |
樓主不光是不懂不同類型都有多大范圍,函數調用也完全理解錯誤。想把延遲增加3倍,把Delay里面的參數增加3倍就可以了,而不要去瞎改已經寫好的Delay函數。 |
i定義的uchar型,程序執行LED=~LED后,就一直在delay中,調不出來了 |
unchar最大值255,要改為int類型,這是一個延時函數,參數要選對! |
我也曾經遇到過同樣的問題,不能大于255。 |
i 被定義為unchar, 變化范圍在0-255, i<150 ,i增加到151后就退出循環了. i<500, i增加到255后就不能再增加了條件式一直滿足,所以就是死循環. i 定義改為unsigned int ,就又能愉快的玩耍了. |
188610329 發表于 2021-11-3 16:54 寫法屬實有問題,如果這個delayms是一個延時固定毫秒級函數的話,調用處應該是改寫傳入參數(括號里的數值),而不是改這個for循環,如果多處調用delayms函數,按樓主的改法,到處都得改了,費時費力了,僅僅是測試的話,無所謂 |
188610329 發表于 2021-11-6 22:34 論壇很多提問的都是這樣,有時候真的懶得回復。這個帖子很早就看到了,一直沒有回復的興趣。 |
QWE4562012 發表于 2021-11-6 17:22 說明你雖然上論壇求助, 也只是問問而以。 連答復都懶得看…… 在5樓已經跟你說過為什么是120這個數字了,你居然還問…… |
QWE4562012 發表于 2021-11-6 17:22 你改成60跑一下就知道了。 |
這個變量i用的<120,為什么是120這個數字? |
這個變量i用的<120,為什么是120這個數字? |
unsigned char最大數值255,改成500后會一直循環,將unsigned char改為unsigned int,就可以了,這是C語言里數據類型,建議看一下 |
跟我一樣,一開始看不懂拿程序來改數值看效果 |
i的值為255最大,超過之后,數值無法確定 |
你的那個定義的變量i是無符號字符型,賦給i的值超出這個這個變量的取值范圍了。要在0~255之間進行選擇 |
謝謝網友熱線支持 對C不會 |
溢出了,改成unsigned int i 就行了。那個i意思就是讓CPU在for循環里面轉圈圈,i就是記了多少圈,超過了范圍就出去了。依次來達到延時目的 |
既然是仿真,那么在P1.0接示波器看看一個波形的時間是多少。 |
因為,i++ 到255之后又變回0,所以, 你的 i 永遠小于500,因此,for(i=0;i<500;i++) 可以近似的看成 while(1); 進了循環之后不會出來。程序就卡死在那里了。 最后,這個帶參delayms 應該是計算過的,看上去是12T的單片機 配合前面的while 延時1ms 就需要 for 120 次。所以就算你要改也不應該改 i 這里,而應該改 Delayms() 括號里的數字才對。 |
建議,學習一下各種類型得定義,以及范圍 |
unsigned char范圍0~255 |
因為你的i最大255 |