![]() |
發(fā)布時間: 2021-3-12 15:19
正文摘要:想請教各位大佬關于STC89C52除法的問題。 大概就是發(fā)現(xiàn)程序在沒有準確算出這個式子的結果,調試出來的結果也很奇怪。 個人猜測是和STC89C52只有8位有關,但是由于自己單片機原理方面不太懂,所以想請教一下大家。 ... |
王快活。 發(fā)表于 2021-3-15 12:09 你修改代碼再試一下, volatile unsigned int temp; 增加一個關鍵字試試 |
王快活。 發(fā)表于 2021-3-15 12:09 我覺得樓上說的對,可能是被優(yōu)化了 |
hefq 發(fā)表于 2021-3-12 22:07 大佬你的keil配色可以分享一下嗎? |
感謝各位大佬的耐心解答,我參考了這篇帖子 https://blog.csdn.net/avideointerfaces/article/details/27512485 應該是溢出了 |
我測試正確的,結果是0x001F |
unsigned int temp; temp=100*155/500; |
51hei瀏覽器截圖20210314234538.png (4.27 KB, 下載次數(shù): 58)
void main(void) { unsigned int temp,a; temp = 200*255/500;a=temp; }.試試這個,然后你再看運算結果。我懷疑你并沒有執(zhí)行運算,你定義temp的時候沒有賦初值,Value=0XFFE可能是temp運算之前的隨機值,按我給出的例子,當你指針指到a=temp;的時候再看temp的值 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
數(shù)字有沒有溢出? |
本帖最后由 wulin 于 2021-3-12 21:48 編輯 強制轉換數(shù)據(jù)類型,200和255默認為unsigned char型,500默認為unsigned int型。類型統(tǒng)一就不會錯了。 tepm=(unsigned int)(200*255)/500;也可以分兩步計算也不會錯。 tepm=200*255; tepm=tepm/500; |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
確實碰到過這類問題,我的解決方案是: unsigned int a , temp; a = 200*255; temp = a / 500; 這樣就不會有錯,估計是編譯器的問題。 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
game灬boy 發(fā)表于 2021-3-12 16:55 這是我特意新建的一個工程,整個代碼就下面幾句 #include <reg52.h> void main(void) { unsigned int temp; temp = 200*255/500; } |
不應該吧,是不是其他地方把改變值了? 計算的時候應該是有高位寄存器和低位寄存器啊, 像定時器初始化時就寫到過(65535 - 1000) / 256 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
這個叫 取模,也就是 除法運算 保留了商 丟棄了余數(shù) ,取余用% |
Powered by 單片機教程網(wǎng)