C語言中的記憶體問題(51微控制器應用中出現的問題)

2021-08-02 09:24:39 字數 536 閱讀 3784

這幾天跟同學一起做模電大作業,有一次用到久違的微控制器,使用c語言編寫微控制器控制程式,有一塊用到數模轉換物體重量並顯示到lcd1602上,其中出現了乙個小問題,**如下

void valuetostring(unsigned char *str, unsigned char val)
先解釋一下**,我希望將pcf8591檢測到的電壓值乘5後保留一位小數輸出,按理來說最多應該輸出50kg,但每次都會出現在25.6kg以後不能正常輸出,開始時很困擾,我明明將sum定義位unsigned long int 型別的了,應該沒有理由會溢位呀,難道1602有毒,臥槽,好絕望…

躺在床上突然覺得**不對,8591是8位adc,也就是說val最大是255,那val*500的中間結果是127500,這個結果會放在**呢,肯定是放在val的記憶體空間呀,而val是char 型,只有255個空間,這肯定溢位啊,所以我們應該在最初時就將val擴容,

`unsigned long int sum=val;

這樣就可以了。

51微控制器C語言

使用c語言已成為微控制器應用系統開發的趨勢。include 包含微控制器暫存器的標頭檔案這個檔案對微控制器內部各種暫存器進行了定義。如果將 sfr p0 0x80 語句中的 p0 改為其他名字,如 q0 那麼在程式設計時,使用第一行的 檔案包含 處理命令後,微控制器以後就不再認識 p0 而是只認識 ...

51微控制器的內部結構 51微控制器儲存器記憶體詳解

51微控制器當中的儲存器從功能性上來劃分可以分為程式儲存器與資料儲存器。一般來說微控制器儲存器的儲存空間是能夠進行儲存空間拓展的,但是如何進行拓展則需要根據不同的儲存器型別進行選擇。訪問儲存空間時,需要用到兩個指標變數,為dptr和pc。其中pc為程式計數器,指向下一條需要執行的指令的位址,dptr...

微控制器add怎麼計算 51微控制器的記憶體對映(一)

51微控制器內部有256個位元組的ram空間,低128個位元組為工作暫存器組區 0x00h 0x1fh 位定址區 0x02h 0x2fh 通用ram區 0x30h 0x70h sfr寄存區 0x80 0xff 這段空間定義51微控制器所有的控制暫存器和狀態暫存器。下面我們就以上圖中自底向上的順序逐一...