第65節(jié):大數(shù)據(jù)的除法運算
從業(yè)近十年!手把手教你單片機程序框架 第65講
開場白:
直接用C語言的“/”運算符進行除法運算時,“被除數(shù)”,“ 除數(shù)”,“商”,這三個數(shù)據(jù)的最大范圍是unsigned long 類型,也就是數(shù)據(jù)最大范圍是4個字節(jié),十進制的范圍是0至4294967295。一旦超過了這個范圍,則運算會出錯。因此,當進行大數(shù)據(jù)除法運算時,我們要額外編程序,實現(xiàn)大數(shù)據(jù)的算法。其實這種算法并不難,就是我們在小學(xué)里學(xué)的四則運算算法。
我們先要弄清楚一個新的概念。不考慮小數(shù)點的情況下,數(shù)據(jù)有兩種表現(xiàn)形式。一種是常用的變量形式,另外一種是BCD碼數(shù)組形式。變量的最大范圍有限,而BCD碼數(shù)組的形式是無限的,正因為這個特點,所以我們可以進行大數(shù)據(jù)運算。
這一節(jié)要教大家一個知識點:
第一個:如何編寫涉及到大數(shù)據(jù)除法運算的算法程序函數(shù),同時也復(fù)習(xí)了指針的用途。
具體內(nèi)容,請看源代碼講解。
(1)硬件平臺:
基于朱兆祺51單片機學(xué)習(xí)板。
(2)實現(xiàn)功能:
波特率是:9600 。
通過電腦串口調(diào)試助手模擬上位機,往單片機發(fā)送組合BCD碼的被除數(shù)和除數(shù),單片機把組合BCD碼的運算結(jié)果返回到上位機。被除數(shù)與除數(shù)的最大范圍都是從0到9999,如果運算的商超過允許保存的最大位數(shù)范圍或者除數(shù)為0,則返回EE EE EE報錯。
往單片機發(fā)送的數(shù)據(jù)格式:EB 00 55 XX XX 0d 0a YY YY 0d 0a指令,其中EB 00 55是數(shù)據(jù)頭,XX XX是被除數(shù),是1到2個字節(jié)的組合BCD碼。YY YY是除數(shù),是1到2個字節(jié)的組合BCD碼。0d 0a是固定的結(jié)束標志。
例如:
(a)9816 ÷ 8= 1227
上位機發(fā)送數(shù)據(jù):eb 00 55 98 16 0d 0a 08 0d 0a
單片機返回:12 27
(b)9816 ÷ 0= 出錯了,除數(shù)不能為0。
上位機發(fā)送數(shù)據(jù):eb 00 55 98 16 0d 0a 00 0d 0a
單片機返回:EE EE EE
(3)源代碼講解如下:
總結(jié)陳詞:
前面四個章節(jié)講完了四則運算的大數(shù)據(jù)算法,下一節(jié)講單片機的外部中斷功能。外部中斷是單片機非常重要的內(nèi)部資源,應(yīng)用很廣,它是單片機的高速開關(guān)感應(yīng)器輸入接口,它可以檢測脈沖輸入,可以接收紅外遙控器的輸入信號,可以檢測高速運轉(zhuǎn)的車輪或者電機圓周運動的反饋信號,可以檢測輸液器里瞬間即逝的水滴信號,可以接收模擬串口的數(shù)據(jù)信息,等等。單片機外部中斷的有什么特點?欲知詳情,請聽下回分解----單片機外部中斷的基礎(chǔ)。