国产粉嫩小泬在线观看泬-亚洲中文字幕无码乱线-色呦呦官网-国产色爽-偷窥村妇洗澡毛毛多-亚洲狠狠做深爱婷婷影院-国产精品1-国产精彩视频在线-无码精品人妻一区二区三区免费看-国产av老师丝袜美腿丝袜-久久99婷婷-成人性生生活性生交3-性xxxx狂欢老少配o-九九九久久久久-黄色免费网站在线看-亚洲综合色区另类小说-欧美a∨-av在线免费观看网址-岛国av在线免费观看-国产精品v片在线观看不卡

你的位置:首頁 > 電源管理 > 正文

專家支招:單片機中無符號數運算出現的問題

發布時間:2015-10-05 責任編輯:susan

【導讀】在單片機編程中,我們經常會用到一些無符號數與有符號數的混合運算,另外我們所用的單片機很有可能是16位或者8位的,這樣,編程時所用的一些變量的取值范圍會對我們的運算有所限制。
 
比如說8位的單片機無符號數最大值為255,有符號最大數為127;16位單片機無符號數最大值為65535,有符號數最大值為32767.對于32的單片機來說,因為我們一般所處理的值很少能超過有符號數的最大取值,所以比較少遇到下面出現的問題.
 
在一些運算中,我們希望有些數能表示正負,這就得用有符號數,而有些數的取值會超過有符號數的最大值,這時我們就得用無符數來表示.下面是我編程時遇到的兩個問題(用的是MC9S12XS128處理器,16位的單片機).
 
變量的聲明如下:
 
int iError;
 
unsigned int uiExpectSpeed;
 
unsigned int uiCurrentSpeed;
 
語句如下:
 
iError = (uiExpectSpeed - uiCurrentSpeed)/3; //(1) 第一個語句
 
在調試的過程中發現這個iError的值有時候會特別大,最后才發現是上面的這句語句出錯了!然后修改成下面兩句結果就對了:
 
iError = uiExpectSpeed - uiCurrentSpeed; //(2)第二個語句
 
iError = iError/3; //(3)第三個語句
 
不同類型的數據在進行混合運算時會有一個隱試的類型轉換過程,有符號數與無符號數混合運算,有符號數會被轉換成無符號數后再參加運算.
 
在上面的第一個語句中,如果uiExpectSpeed 比uiCurrentSpeed的值大,也就是uiExpectSpeed - uiCurrentSpeed結果為一正值,那不會出現啥問題,但當uiExpectSpeed 比uiCurrentSpeed的值小時就出現問題了,此時uiExpectSpeed - uiCurrentSpeed的臨時結果存放在16位的寄存器中,且最高位1,對于有符號數來說會把這一個位解釋為符號位,1表示負數,而對于無符號來說這個位就表示數值,接著這個臨時的結果除以3后,所得到的結果的最高位變為了0此時該結果會轉換為一個有符合數(不管是有符號數,還是無符號數,最高位為0時,所表示的數值就是一樣的),賦給iError.本應該得到一個負數的,但最終卻得到了一個比較大的正數!在第一個語句中,如果沒有除以3,而是兩個數作差后直接賦給iError則是不會出錯的,雖然uiExpectSpeed - uiCurrentSpeed運算的結果是一個很大的正數(寄存器的最高位為1),但在這個臨時結果賦給iError這個變量時,會先把這個值轉換為一個有符號數賦給iError.其實,在把uiExpectSpeed - uiCurrentSpeed運算的結果賦給iError時是把所有的位原封不動的復制到iErrorr所表示的內存單元中的,只是我們是以有符號數來解釋這個內存單元中的內容,所以這個很大的正數就變成了一個負數!(數據在處理器內是以補碼表示的,對于數據是正還是負只是人們的解釋不同而已).所以我就用后面的兩句替換了第一句,這樣不管uiExpectSpeed - uiCurrentSpeed的差值是正還是負都能得到正確的結果了.
 
下面是我在做超聲波測距時遇到的又一個很隱蔽的問題:
 
unsigned int start; //表示計時開始時計數器的值
 
unsigned int end; //表示計時結束時計數器的值
 
unsigned int error;
 
unsigned int distance; //表示距離
 
unsigned int time; //表示從計時開始到結束所用的時間
 
unsigned int remainder;//余數
 
start = TCNT;// 計時開始, TCNT為16位的計時器寄存器
 
..............一段時間后(這段時間小于計時器TCNT從0計數到最大值65535所表示的時間)...........
 
end = TCNT; //計時結束
 
error = end - start; //注意,end有可能比start小,但由于都是無符號數,所以最后得到的差值就是這段時間內計數器TCNT的增量.
 
time = error/625; //單位為ms TCNT每1ms內數值增加625(這個數與TCNT所用的時鐘有關)
 
distance = 17*time; //單位為cm, 距離為速度乘以時間再除以2就是聲波所傳波的距離
 
這塊由于是分步計算的,所以會有比較大的誤差(主要是由于error/625后的余數被丟棄了) 于是我改成如下語句:
 
start = TCNT;// 計時開始, TCNT為16位的計時器寄存器
 
..............一段時間后(這段時間小于計時器TCNT從0計數到最大值65535所表示的時間)...........
 
end = TCNT; //計時結束
 
error = end - start; //注意,end有可能比start小,但由于都是無符號數,所以最后得到的差值就是這段時間內計數器TCNT的增量.
 
distance = (17*error)/625; //單位為cm, 將上面的最后兩句結合成一句,先乘后除就會減小誤差
 
但改后上面distance = (17*error)/625; 這句就錯了,因為error的值可能很大,最大可以達到65535,所以17*error結果很有可能會超過65535,但這個處理器是16位的,也就是說這個處理器的數據寄存器為16位,最大的表示數值也就65535,所以17*error大于65535后就會被截斷存入寄存器中.也就是說存入寄存器中的值為(17*error)%65536,當再用這個值除以625時得到的很有可能就是0或者個位數的值,不管怎樣,此時得到的結果都是錯誤的值了!!
 
結合上面兩種情況,最后我改成如下:
 
start = TCNT;// 計時開始, TCNT為16位的計時器寄存器
 
..............一段時間后(這段時間小于計時器TCNT從0計數到最大值65535所表示的時間)...........
 
end = TCNT; //計時結束
 
error = end - start; //注意,end有可能比start小,但由于都是無符號數,所以最后得到的差值就是這段時間內計數器TCNT的增量.
 
time = error/625; //單位為ms
 
remainder = error - time*625;//計算上一句中丟棄的余數,沒有用remainder = error%625,是因為除法很耗時!!
 
distance = 17*time + (17*remainder + 312)/625; //單位為cm,此處的312(625/2)是考慮到四舍五入的.
特別推薦
技術文章更多>>
技術白皮書下載更多>>
熱門搜索

關閉

?

關閉

主站蜘蛛池模板: 激情伊人网 | 精品国产污污免费网站入口爱酱 | 中文字幕大香视频蕉免费 | 亚洲国产成人无码专区 | 又色又爽又黄的视频国内 | 久久亚洲精精品中文字幕早川悠里 | 日韩免费人妻av无码专区蜜桃 | 欧美老妇大p毛茸茸 | 理论片午夜| 色婷婷亚洲十月十月色天 | 国产精品久久人妻无码网站一区 | 五月丁香色综合久久4438 | 性欧美长视频免费观看不卡 | 欧美成人二区 | 五月婷婷激情第四季 | 粉嫩呦福利视频导航大全 | 久久久看片 | 狠狠躁夜夜躁av网站中文字幕 | 成人无码潮喷在线观看 | 玩爽少妇人妻系列视频 | 免费看毛片的网站 | 新普新京亚洲欧美日韩国产 | 在线观看视频免费 | 91操视频| 亚洲天堂v | 精品久久久久久国产潘金莲 | 亚洲精品国产自在现线最新 | 免费无码国产欧美久久18 | 久久亚洲精品情侣 | 日本久久久久 | 欧美国产日韩a在线视频 | 水密桃av| 国产欧美日韩一区二区搜索 | 少妇人妻偷人精品无码视频新浪 | 自拍日韩亚洲一区在线 | 亚洲国产日韩在线人高清 | 午夜99| 欧美黑人与白人精品a片 | 日韩啪啪网站 | 久久婷婷丁香五月综合五 | 国内自拍99 | 精品无码一区二区三区不卡 | 摸进她的内裤里疯狂揉她动图视频 | 国产一级做a爱免费视频 | 国产精品网站在线观看 | 少妇群交换bd高清国语版 | 中文字幕色婷婷在线视频 | 女人被狂躁60分钟视频 | 仙踪林久久久久久久999 | 无码国产精品一区二区高潮 | 国产基佬gv在线观看网站 | 久久日本三级韩国三级 | 制服丝袜人妻综合第一页 | 国产卡一卡二卡三无线乱码新区 | 日本高清一二三区视频在线 | 亚洲精品无amm毛片 久久无码喷吹高潮播放不卡 | 亚洲熟妇av欧差aa片爽 | 亚洲精品偷拍无码不卡av | 免费观看添你到高潮视频 | 黑人大荫道bbwbbb高潮潮喷 | 精品久久久久久国产 | 成人国产精品免费观看 | 操操操免费视频 | 韩国一级淫片免费看 | 中文字幕无码热在线视频 | 久久国产精 | 欧美日韩精品久久久免费观看 | 玖玖在线播放 | 精品一区二区三区免费 | 色偷偷女人的天堂亚洲网 | 草1024榴社区成人 | 美女人人操 | 精品成人一区二区 | 一区二区免费视频 | 久久午夜精品 | 国产成人mv在线播放 | 国产一卡2卡3卡四卡精品免费 | 综合色天天鬼久久鬼色 | 性高朝大尺度少妇大屁股 | 茄子视频色| 亚洲最大成人网 色香蕉 | 全部av―极品视觉盛宴 | 肉大榛一进一出免费视频 | 人人妻人人做人人爽夜欢视频 | 亚洲成av人片天堂网 | 巨爆乳无码视频在线观看 | 蜜桃一区二区 | 91蜜桃视频| av片网站 | 欧美精品亚洲精品日韩专区一乛方 | 国产精品999 | 99久热re在线精品视频 | 免费国产一二三区四区乱码 | 国产在线观看你懂的 | 天天躁夜夜躁狠狠喷水 | 成人av激情网| www.97ai| 开心激情五月婷婷 | 久久久看片 | 主站蜘蛛池模板: 国内精品嫩模av私拍在线观看 | 92精品成人国产在线观看 | 久久东京伊人一本到鬼色 | 侵犯人妻女教师中文字幕 | 向日葵bp色板视频 | 欧美肥妇毛多水多bbxx水蜜桃 | 无遮挡国产高潮视频免费观看 | 亚洲欧美日韩偷拍 | 国产香蕉尹人综合在线观看 | 亚洲gv猛男gv无码男同 | 人妻无码免费一区二区三区 | 日韩精品一区二区在线 | 人狥杂交一区欧美二区 | 伊人婷婷综合 | 熟睡中被义子侵犯在线播放 | www一区二区乱码www | 99久久爱re热6在播放 | 一级黄色片免费播放 | 99久热re在线精品99re8热视频 | 色片在线播放 | 亚洲色中文字幕无码av | 好大好湿好硬顶到了好爽视频 | 国产福利视频一区二区精品 | 菠萝蜜视频在线观看入口 | www.成人免费 | av中文国产 | 日韩在线不卡免费视频一区 | 秋霞鲁丝片av无码中文字幕 | 黄色福利网站 | 超级碰在线视频 | 性色av蜜臀av浪潮av老女人 | 91精品影视 | 久久精品国产免费观看 | 亚州久久久久区1区2少妇 | 国产成人精品午夜2022 | 亚洲色大成网站www在线 | 国产妇女精品 | 亚洲激情婷婷 | 亚洲漂亮少妇毛茸茸 | 欧美草逼网 | 激情瑟瑟 | 欧美激情五月 | 久久精品国产99 | 久久中文视频 | 婷婷欧美| 婷婷婷国产在线视频 | 日韩精品一区二区三 | 久久亚洲精品国产亚洲老地址 | 久久青草欧美一区二区三区 | 国产成人a区在线观看 | 亚洲图片中文字幕 | 好想被狂躁无码视频在线观看 | 大香线蕉伊人久久爱 | 国产精品久久久久无码人妻 | 横恋母在线观看 | 免费无码又爽又刺激网站直播 | 国产真人无码作爱视频免费 | 粉嫩久久久久久久极品 | 中文字幕成人av | 91久久国产综合久久91精品网站 | 一区二区三区四区视频在线观看 | 亚洲一区二区三区加勒比 | 国产精品-区区久久久狼 | 伊人久久综合 | 中国毛茸茸性xxxx | 已婚少妇美妙人妻系列 | 色女孩综合 | 国产乱子伦精品免费视频 | 亚洲第一精品在线 | 尤物在线精品视频 | 亚洲欧美国产毛片在线 | 操操操操操操操操操操 | 黄色高潮视频 | 午夜草草| 人妻被按摩到潮喷中文不卡 | 中文文字幕一区二区三三 | 亚洲第一福利网站在线观看 | 加勒比色老久久综合网 | 日本电影一区二区三区 | 中文字幕在线观看1 | av片网| 国产人久久 | 天天狠天天天天透在线 | 日本国产在线观看 | 在线点播亚洲日韩国产欧美 | 亚洲天堂精品在线观看 | 国产中文在线观看 | 精品久久亚洲中文无码 | 一区二区三区视频在线观看 | 国产69久久精品成人看 | 日韩精品123 | 91网站在线看 | 久久人妻无码中文字幕第一 | 无码区a∨视频体验区30秒 | 无码少妇精品一区二区免费动态 | 野外做受三级视频 | 欧洲人免费视频网站在线 | 香蕉精品久久 | 欧美一级日韩 | 主站蜘蛛池模板: 小视频在线播放 | 黄网在线观看免费网站 | 人与动人物xxxx毛片人与狍 | 久久白浆| 欧美区在线| 人妻饥渴偷公乱中文字幕 | 伊人7| 欧美日韩在线视频播放 | 国内精品久久毛片一区二区 | 奇米网7777 | 精品国产va久久久久久久冰 | 免费无码又爽又刺激高潮虎虎视频 | 亚洲国产成人无码精品 | av综合在线观看 | 国产福利一区二区三区高清 | 激情无遮挡| 色一情一乱一伦一区二区三欧美 | 1区2区3区高清视频 粉嫩高中生无码视频在线观看 | 亚洲日韩成人av无码网站 | 国产欧美国日产高清 | 精品国产sm最大网站蜜芽 | 很黄很色60分钟在线观看 | 亚洲人成自拍网站在线观看 | 亚洲综合色成在线观看 | 啊v天堂在线观看 | 久久精品亚洲精品无码白云tv | 免费看黄在线 | 男女猛烈无遮挡免费视频在线观看 | 国产精品久久久久精囗交 | 真人真事免费毛片 | 天天射天天操天天干 | 大屁股大乳丰满人妻 | 综合免费视频 | 亚洲欧美在线不卡 | 国产亚洲情侣一区二区无 | 男女激情爽爽爽免费视频 | 奇米狠狠干 | 国产成人欧美日本在线观看 | 久久www免费人成一看片 | av中文国产| 高h震动喷水双性1v1 | 亚洲免费视频网 | 天堂视频免费在线观看 | 四川老熟女下面又黑又肥 | 国产三级韩国三级日本带黄 | 精品日产一卡2卡三卡4卡在线 | 午夜香蕉视频 | 水蜜桃亚洲一二三四在线 | 久久精品国语 | 精品无码一区二区三区的天堂 | 欧美日韩一区二区三区不卡视频 | 久久久久久草 | 日本一级一片免费视频 | 国产午夜精品一区二区三区 | 丨国产丨调教丨91丨 | 无限看片在线版免费视频大全 | 国产欧美日韩亚洲一二三区 | 熟女人妻aⅴ一区二区三区60路 | 国产精品videossex久久发布 | 日韩高清在线 | 色视频在线播放 | 国产精品日韩在线 | 国产午夜在线观看 | 日产国产精品精品a∨ | 中文字幕亚洲制服在线看 | 国产精品超碰 | 国产蜜芽尤物在线一区 | 东京无码熟妇人妻av在线网址 | 性欧美久久久 | 亚洲日韩国产av无码无码精品 | 97精品伊人久久久大香线蕉 | 18禁免费无码无遮挡不卡网站 | 在线观看视频亚洲 | 无码人妻精品一区二区三区不卡 | 中文字幕 欧美精品 第1页 | 成年入口无限观看免费完整大片 | 中文字幕无线乱码人妻 | 国产无套一区二区三区浪潮 | 久久久久蜜桃精品成人片公司 | 久久二区三区 | 无码人妻一区二区三区在线视频 | 性生大片免费观看668 | 午夜福利电影网站鲁片大全 | 91精品国产99久久久久久红楼 | 欧美激情精品久久久久久变态 | 女人被狂躁c到高潮 | 欧美变态暴力牲交videos | 亚洲国产精品一区二区第一页 | 国产成人午夜福利院 | 国产男女色诱视频在线播放 | 亚洲欧美日韩综合一区在线观看 | 国产精品福利网红主播 | 国产剧情无码播放在线观看 | 夜夜夜夜曰天天天天拍国产 | 一本色综合久久 | 中文字幕一区二区av | 久久婷婷伊人 | 成人免费视频国产免费麻豆 | 亚洲视频一二区 |