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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1681|回復: 8
打印 上一主題 下一主題
收起左側(cè)

KEIL C語言中32位無符號數(shù)的存儲問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:235200 發(fā)表于 2023-11-25 13:14 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
調(diào)試超聲波測距程序時,由測得的時間計算距離時發(fā)生錯誤,單片機程序如下:

#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;          //啟動計數(shù)
        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;就對了*/


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:883242 發(fā)表于 2023-11-25 15:21 | 只看該作者
S=Time;
S=((S<<4)+S)/1000;
回復

使用道具 舉報

板凳
ID:526108 發(fā)表于 2023-11-25 19:58 | 只看該作者
S=((S<<4)+S>>4)/1000;
回復

使用道具 舉報

地板
ID:235200 發(fā)表于 2023-11-25 20:50 | 只看該作者

這樣確實也對,但很多程序中均用S=(Time*17)/1000;來計算,他們是如何實現(xiàn)的?但我的為何不能實現(xiàn)?這個表達式的關鍵問題在哪里?
回復

使用道具 舉報

5#
ID:235200 發(fā)表于 2023-11-25 20:51 | 只看該作者

Keil中還隱藏著不為人知的一面嗎?
回復

使用道具 舉報

6#
ID:1034262 發(fā)表于 2023-11-25 21:27 | 只看該作者
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。
回復

使用道具 舉報

7#
ID:883242 發(fā)表于 2023-11-25 21:34 | 只看該作者
csmyldl 發(fā)表于 2023-11-25 20:50
這樣確實也對,但很多程序中均用S=(Time*17)/1000;來計算,他們是如何實現(xiàn)的?但我的為何不能實現(xiàn)?這個 ...

Time溢出了唄。
回復

使用道具 舉報

8#
ID:235200 發(fā)表于 2023-11-26 13:29 | 只看該作者
coody_sz 發(fā)表于 2023-11-25 21:27
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。

確實是這樣,原來Time*17的結果仍然是存放在Time中,不是存放在S中,所以造成溢出丟失,所以把Time變量也改為32位就對了。謝謝各位的幫助!
回復

使用道具 舉報

9#
ID:235200 發(fā)表于 2023-11-26 13:33 | 只看該作者
coody_sz 發(fā)表于 2023-11-25 21:27
S=(Time*17)/1000; 中Time為16位,*17有可能溢出導致不對。你用32為的Time試試。

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜久久久 | 日韩高清三区 | www国产精品 | 一区二区av在线 | 超碰精品在线观看 | 中文字幕在线观看日韩 | av网站免费看 | 一本一道久久a久久精品蜜桃 | 日日干夜夜操 | 国产99精品 | 性一爱一乱一交一视频 | 本道综合精品 | 久久成人一区 | 精品国产一区二区国模嫣然 | aaa天堂 | 伊人春色在线 | 成人h片在线观看 | 日日拍夜夜 | 婷婷久 | 在线视频一区二区 | av在线一区二区三区 | 高清一区二区三区 | 成年男女免费视频网站 | 国户精品久久久久久久久久久不卡 | 欧美mv日韩mv国产网站91进入 | 国产电影一区二区在线观看 | 亚洲精品视频二区 | 国产精品久久久久久吹潮 | 欧美一区二区三区高清视频 | 欧州一区 | 91亚洲国产成人久久精品网站 | 日韩中文字幕一区二区 | 中文字幕成人免费视频 | 国产成人福利在线观看 | 亚洲欧美日韩电影 | 亚洲最新网址 | 久久看看| 成人黄色av网站 | 天堂av中文 | 一级片在线观看 | 欧美精品片 |