第62節(jié):大數(shù)據(jù)的加法運(yùn)算
從業(yè)近十年!手把手教你單片機(jī)程序框架 第62講
開場白:
直接用C語言的“+”運(yùn)算符進(jìn)行加法運(yùn)算時,“被加數(shù)”,“加數(shù)”,“和”,這三個數(shù)據(jù)的最大范圍是unsigned long 類型,也就是數(shù)據(jù)最大范圍是4個字節(jié),十進(jìn)制的范圍是0至4294967295。一旦超過了這個范圍,則運(yùn)算會出錯。因此,當(dāng)進(jìn)行大數(shù)據(jù)加法運(yùn)算時,我們要額外編程序,實現(xiàn)大數(shù)據(jù)的算法。其實這種算法并不難,就是我們在小學(xué)里學(xué)的四則運(yùn)算算法。
我們先要弄清楚一個新的概念。不考慮小數(shù)點(diǎn)的情況下,數(shù)據(jù)有兩種表現(xiàn)形式。一種是常用的變量形式,另外一種是上一節(jié)講到的BCD碼數(shù)組形式。變量的最大范圍有限,而BCD碼數(shù)組的形式是無限的,正因為這個特點(diǎn),所以我們可以進(jìn)行大數(shù)據(jù)運(yùn)算。
這一節(jié)要教大家兩個知識點(diǎn):
第一個:如何通過用for循環(huán)語句改寫上一節(jié)的組合BCD碼跟非組合BCD碼的轉(zhuǎn)換函數(shù)。
第二個:如何編寫涉及到大數(shù)據(jù)加法運(yùn)算的算法程序函數(shù),同時也復(fù)習(xí)了指針的用途。
第三個:如何在串口程序中通過關(guān)鍵字來截取所需要的數(shù)據(jù)。
具體內(nèi)容,請看源代碼講解。
(1)硬件平臺:
基于朱兆祺51單片機(jī)學(xué)習(xí)板。
(2)實現(xiàn)功能:
波特率是:9600 。
通過電腦串口調(diào)試助手模擬上位機(jī),往單片機(jī)發(fā)送組合BCD碼的被加數(shù)和加數(shù)。單片機(jī)把組合BCD碼的運(yùn)算結(jié)果返回到上位機(jī)。最大范圍4位,從0到9999,如果超范圍則返回EE EE EE報錯。往單片機(jī)發(fā)送的數(shù)據(jù)格式:EB 00 55 XX XX 0d 0a YY YY 0d 0a指令,其中EB 00 55是數(shù)據(jù)頭,XX 是被加數(shù),可以是1個字節(jié),也可以是2個字節(jié)。YY是加數(shù),可以是1個字節(jié),也可以是2個字節(jié)。0d 0a是固定的結(jié)束標(biāo)志。
例如:
(a)1234+5678=6912
上位機(jī)發(fā)送數(shù)據(jù):eb 00 55 12 34 0d 0a 56 78 0d 0a
單片機(jī)返回:69 12
(b)9999+56=10055 超過4位的9999,所以報錯
上位機(jī)發(fā)送數(shù)據(jù):eb 00 55 99 99 0d 0a 56 0d 0a
單片機(jī)返回:EE EE EE 表示出錯了
(3)源代碼講解如下:
總結(jié)陳詞:
既然這節(jié)講了加法程序,那么下一節(jié)接著講常用的減法程序,這種大數(shù)據(jù)的減法程序是什么樣的?欲知詳情,請聽下回分解----大數(shù)據(jù)的減法運(yùn)算。