第61節(jié):組合BCD碼,非組合BCD碼,以及數(shù)值三者之間的相互轉(zhuǎn)換和關(guān)系
從業(yè)近十年!手把手教你單片機(jī)程序框架 第61講
開(kāi)場(chǎng)白:
本來(lái)這一節(jié)打算講大數(shù)據(jù)的加法運(yùn)算的,但是考慮大數(shù)據(jù)運(yùn)算的基礎(chǔ)是非組合BCD碼,所以多增加一節(jié)講BCD碼的內(nèi)容。
計(jì)算機(jī)中的BCD碼,經(jīng)常使用的有兩種格式,即組合BCD碼,非組合BCD碼。
組合BCD碼,是將兩位十進(jìn)制數(shù),存放在一個(gè)字節(jié)中,例如:十進(jìn)制數(shù)51的存放格式是0101 0001。
非組合BCD碼,是將一個(gè)字節(jié)的低四位編碼表示十進(jìn)制數(shù)的一位,而高4位都為0。例如:十進(jìn)制數(shù)51的占用了兩個(gè)字節(jié)的空間,存放格式為:00000101 00000001。
這一節(jié)要教大家兩個(gè)知識(shí)點(diǎn):
第一個(gè):如何編寫組合BCD碼,非組合BCD碼,以及數(shù)值三者之間的相互轉(zhuǎn)換函數(shù)。
第二個(gè):通過(guò)轉(zhuǎn)換函數(shù)的編寫,重溫前面幾節(jié)所講到的指針用法。
具體內(nèi)容,請(qǐng)看源代碼講解。
(1)硬件平臺(tái):
基于朱兆祺51單片機(jī)學(xué)習(xí)板。
(2)實(shí)現(xiàn)功能:
波特率是:9600 。
通過(guò)電腦串口調(diào)試助手模擬上位機(jī),往單片機(jī)發(fā)送EB 00 55 XX YY YY … YY YY 指令,其中EB 00 55是數(shù)據(jù)頭,XX 是指令類型。YY是具體的數(shù)據(jù)。
指令類型01代表發(fā)送的是數(shù)值,需要轉(zhuǎn)成組合BCD碼和非組合BCD碼,并且返回上位機(jī)顯示。
指令類型02代表發(fā)送的是組合BCD碼,需要轉(zhuǎn)成數(shù)值和非組合BCD碼,并且返回上位機(jī)顯示。
指令類型03代表發(fā)送的是非組合BCD碼,需要轉(zhuǎn)成數(shù)值和組合BCD碼,并且返回上位機(jī)顯示。
返回上位機(jī)的數(shù)據(jù)中,中間3個(gè)數(shù)據(jù)EE EE EE是分割線,為了方便觀察,沒(méi)實(shí)際意義。
例如:十進(jìn)制的數(shù)據(jù)52013140,它的十六進(jìn)制數(shù)據(jù)是03 19 A8 54。
(a)上位機(jī)發(fā)送數(shù)據(jù):eb 00 55 01 03 19 a8 54
單片機(jī)返回:52 01 31 40 EE EE EE 05 02 00 01 03 01 04 00
(b)上位機(jī)發(fā)送組合BCD碼:eb 00 55 02 52 01 31 40
單片機(jī)返回:03 19 A8 54 EE EE EE 05 02 00 01 03 01 04 00
(c)發(fā)送非組合BCD碼:eb 00 55 03 05 02 00 01 03 01 04 00
單片機(jī)返回:03 19 A8 54 EE EE EE 52 01 31 40
(3)源代碼講解如下:
總結(jié)陳詞:
有了這一節(jié)非組合BCD的基礎(chǔ)知識(shí),下一節(jié)就開(kāi)始講大數(shù)據(jù)的算法程序。這些算法程序經(jīng)常要用在計(jì)算器,工控,以及高精度的儀器儀表等領(lǐng)域。C語(yǔ)言的語(yǔ)法中不是已經(jīng)提供了+,-,*,/這些運(yùn)算符號(hào)嗎?為什么還要專門寫算法程序?因?yàn)槟切┻\(yùn)算符只能進(jìn)行簡(jiǎn)單的運(yùn)算,一旦數(shù)據(jù)超過(guò)了unsigned long(4個(gè)字節(jié))的范圍就會(huì)出錯(cuò)。而這種大數(shù)據(jù)算法的程序是什么樣的?欲知詳情,請(qǐng)聽(tīng)下回分解----大數(shù)據(jù)的加法運(yùn)算。