久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: KEIL C語言中32位無符號數的存儲問題 [打印本頁]

作者: csmyldl    時間: 2023-11-25 13:14
標題: KEIL C語言中32位無符號數的存儲問題
調試超聲波測距程序時,由測得的時間計算距離時發生錯誤,單片機程序如下:

#include <stc15.h>

void main()
{
        unsigned int i;
        unsigned long S;
        unsigned int Time;
        AUXR &= 0x7F;                //定時器時鐘12T模式 12M晶振機器周期1us
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0x00;                  //設置定時初值
        TH0 = 0x00;                  //設置定時初值
        TF0 = 0;                    //清除TF0標志
        
        TR0 = 0;                    //定時器0開始計時
        ET0 = 0;
        EA = 1;                      //使能
        
        TR0=1;          //啟動計數
        for (i=0;i<500;i++);                //模擬測量時間
        TR0=0;
        Time=TH0*256+TL0;
        TH0=0;
        TL0=0;
        S=(Time*17)/1000;      //計算距離(此計算結果不對,原因是S不能保存32位結果)
        
}

/*償試使用 S=((Time<<4)+Time)/1000;也不對
    但使用 S=(_lrol_(Time,4)+Time)/1000;就對了*/



作者: Hephaestus    時間: 2023-11-25 15:21
S=Time;
S=((S<<4)+S)/1000;
作者: 624353765    時間: 2023-11-25 19:58
S=((S<<4)+S>>4)/1000;
作者: csmyldl    時間: 2023-11-25 20:50
Hephaestus 發表于 2023-11-25 15:21
S=Time;
S=((S

這樣確實也對,但很多程序中均用S=(Time*17)/1000;來計算,他們是如何實現的?但我的為何不能實現?這個表達式的關鍵問題在哪里?
作者: csmyldl    時間: 2023-11-25 20:51
Hephaestus 發表于 2023-11-25 15:21
S=Time;
S=((S

Keil中還隱藏著不為人知的一面嗎?
作者: coody_sz    時間: 2023-11-25 21:27
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。
作者: Hephaestus    時間: 2023-11-25 21:34
csmyldl 發表于 2023-11-25 20:50
這樣確實也對,但很多程序中均用S=(Time*17)/1000;來計算,他們是如何實現的?但我的為何不能實現?這個 ...

Time溢出了唄。
作者: csmyldl    時間: 2023-11-26 13:29
coody_sz 發表于 2023-11-25 21:27
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。

確實是這樣,原來Time*17的結果仍然是存放在Time中,不是存放在S中,所以造成溢出丟失,所以把Time變量也改為32位就對了。謝謝各位的幫助!
作者: csmyldl    時間: 2023-11-26 13:33
coody_sz 發表于 2023-11-25 21:27
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。

這樣的話,其實程序中變量S沒有必要定義為32位,只需Time定義為32位就可以了




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 免费观看一区二区三区毛片 | 亚洲天堂男人 | 99久久精品国产毛片 | 成人3d动漫 | 在线亚洲一区 | 欧美日韩国产激情 | 青青草精品 | 91精品久久香蕉国产线看观看 | 日韩精品片 | 日本久久久久久久久 | 国产高清成人 | 69av在线播放 | 成人亚洲视频 | 色天天综合 | 免费网站av| 国产区免费 | 欧美福利在线 | 亚洲天天看| 日韩高清一区二区 | 欧美精品99久久久 | 91手机在线视频 | 午夜精品视频在线观看 | 中文字幕网址在线 | 激情小说在线视频 | 国产亚洲视频在线观看 | 欧美福利在线观看 | 欧美精品99 | www.色日本| www.日韩av| 免费看毛片的网站 | 欧美激情三区 | 久久综合久 | 美日韩一区二区三区 | 做爰xxxⅹ性生交 | 日韩在线观看中文字幕 | 欧美天堂 | 一级香蕉视频 | 亚洲综合激情网 | 一色桃子av | 国产精品久久久精品 | 欧美日韩中文在线 |