![]() |
發布時間: 2023-11-25 13:14
正文摘要:調試超聲波測距程序時,由測得的時間計算距離時發生錯誤,單片機程序如下: #include <stc15.h> void main() { unsigned int i; &nb ... |
coody_sz 發表于 2023-11-25 21:27 這樣的話,其實程序中變量S沒有必要定義為32位,只需Time定義為32位就可以了 |
coody_sz 發表于 2023-11-25 21:27 確實是這樣,原來Time*17的結果仍然是存放在Time中,不是存放在S中,所以造成溢出丟失,所以把Time變量也改為32位就對了。謝謝各位的幫助! |
csmyldl 發表于 2023-11-25 20:50 Time溢出了唄。 |
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。 |
Hephaestus 發表于 2023-11-25 15:21 Keil中還隱藏著不為人知的一面嗎? |
Hephaestus 發表于 2023-11-25 15:21 這樣確實也對,但很多程序中均用S=(Time*17)/1000;來計算,他們是如何實現的?但我的為何不能實現?這個表達式的關鍵問題在哪里? |
S=((S<<4)+S>>4)/1000; |
S=Time; S=((S<<4)+S)/1000; |