亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于單片機(jī)數(shù)字拆分的一種高效算法

        2015-06-01 18:19:30閆海環(huán)劉國華劉晨
        中國科技縱橫 2015年10期
        關(guān)鍵詞:單片機(jī)效率算法

        閆海環(huán) 劉國華 劉晨

        【摘 要】為了提高單片機(jī)在數(shù)據(jù)拆分程序中的執(zhí)行效率,提出采用“二分拆分”算法。該方法不需要做16位的余數(shù)算法及16位的除法算法,采用簡單的判斷語句即可獲得各位對應(yīng)數(shù)值。文章對該算法在數(shù)據(jù)拆分中的應(yīng)用進(jìn)行原理分析,同時進(jìn)行了軟件設(shè)計(jì),通過實(shí)驗(yàn)驗(yàn)證“二分拆分”算法的高效性。

        【關(guān)鍵詞】單片機(jī) “二分拆分”算法 效率

        隨著科技的發(fā)展,在以單片機(jī)為核心的智能儀表系統(tǒng)中,常常遇到,需要將數(shù)據(jù)直觀地顯示出來,以方便人們監(jiān)視智能系統(tǒng)的工作情況或直接讀取各儀表測量的結(jié)果,此時就需要將程序中的數(shù)據(jù)進(jìn)行拆分。目前國內(nèi)許多單片機(jī)書籍或網(wǎng)絡(luò)上介紹并提供了許多子程序,但程序執(zhí)行效率不高。本文重點(diǎn)介紹了一種“二分拆分”算法,可以大大提高數(shù)據(jù)拆分的效率。

        1“傳統(tǒng)拆分”算法

        “傳統(tǒng)拆分”算法思想:兩個整型數(shù)據(jù)進(jìn)行除法或求余運(yùn)算。C語言中,兩個整數(shù)相除、求余運(yùn)算的結(jié)果是整數(shù)。

        三位數(shù)的“傳統(tǒng)拆分”算法軟件實(shí)現(xiàn):假設(shè)預(yù)拆分的三位數(shù)data(569),首先進(jìn)行高位數(shù)字的拆分:data(569)/100,得到高位數(shù)字5;其次進(jìn)行中間位數(shù)字的拆分:data(569)% 100得到數(shù)據(jù)69,69/10得到中間位數(shù)字6;最后低位數(shù)據(jù)的拆分:data(569)% 10,得到低位數(shù)字9。

        “傳統(tǒng)拆分”算法C語言代碼簡單。但是大部分的C編譯器的求余運(yùn)算都是調(diào)用子程序來完成,代碼長,執(zhí)行速度慢。

        2“二分拆分”算法

        “二分拆分”的思想:首先確定有限區(qū)間,將區(qū)間分成兩部分,通過判斷數(shù)據(jù)的單調(diào)性,逐步將有限區(qū)間縮小,直至有限區(qū)間在所求范圍內(nèi),便可拆分出滿足要求的數(shù)值。“二分拆分”算法主要采用“if(表達(dá)式)語句1 else 語句2”,每次判斷即可篩掉一半數(shù)據(jù)。針對單片機(jī)來說, “二分拆分”算法的效率遠(yuǎn)遠(yuǎn)高于全遍歷的線性判斷及傳統(tǒng)的取余算法。

        三位數(shù)的“二分拆分”算法軟件實(shí)現(xiàn)方法:假設(shè)預(yù)拆分的三位數(shù)data(569),首先進(jìn)行高位數(shù)字的拆分:①三位數(shù)的有限區(qū)間為[0,999],將該區(qū)間劃分成兩部分[0,599]和B(599,999]。數(shù)據(jù)data(569)與599進(jìn)行比較,小于599,確定查找區(qū)域?yàn)閇0,599]。②需要將區(qū)間[0,599]再劃分成兩部分[0,299]和(299,599]。數(shù)據(jù)data(569)與299進(jìn)行比較,大于299,確定查找區(qū)域?yàn)椋?99,599]。③需要將區(qū)間(299,599]再劃分成兩部分(299,399]和(399,599]。數(shù)據(jù)data(569)與399進(jìn)行比較,大于399,確定查找區(qū)域?yàn)椋?99,599]。④需要將區(qū)間(399,599]再劃分成兩部分(399,499]和(499,599]。數(shù)據(jù)data(569)與499進(jìn)行比較,此時數(shù)據(jù)data(569)>499且<599,因此可以確定百位數(shù)字為5,剩余兩位數(shù)為data(569)-500。以此類推在有限區(qū)間為:[0,999],可將數(shù)據(jù)劃分成區(qū)域10個區(qū)域,每個區(qū)域?qū)?yīng)百位數(shù)字:[0,99]→0,(99,199]→1,(199,299]→2,(299,399]→3,(399,499]→4,(499,599]→5,(599,699]→6,(699,799]→7,(799,899]→8,(899,999]→9。其次進(jìn)行中間位數(shù)字的拆分:①兩位數(shù)的有限區(qū)間為[0,99],將該區(qū)間劃分成兩部分[0,59]和B(59,99]。數(shù)據(jù)data(69)與59進(jìn)行比較,大于59,確定查找區(qū)域?yàn)椋?9,99]。②需要將區(qū)間(59,99]再劃分成兩部分(59,79]和(79, 99]。數(shù)據(jù)data(69)與79進(jìn)行比較,小于79,確定查找區(qū)域?yàn)椋?9,79]。③需要將區(qū)間(59,79]再劃分成兩部分(59,69]和(69,79]。數(shù)據(jù)data(69)與69進(jìn)行比較,等于69,確定查找區(qū)域?yàn)椋?9,69]。因此可以確定中間位數(shù)字為6,剩余一位數(shù)為data(69)-60。以此類推在有限區(qū)間為:[0,99],可將數(shù)據(jù)劃分成區(qū)域10個區(qū)域,每個區(qū)域?qū)?yīng)百位數(shù)字:[0,9]→0,(9,19]→1,(19,29]→2,(29,39]→3,(39,49]→4,(49,59]→5,(59,69]→6,(69,79]→7,(79,89]→8,(89,99]→9。最后獲得低位數(shù)字為9。

        高位數(shù)字、中間位數(shù)字的拆分函數(shù),采用數(shù)組名作為函數(shù)參數(shù),由于數(shù)組名代表的是數(shù)組元素的首地址,傳遞的值是地址,因此要求形參為數(shù)組名或指針變量。通俗理解,形參指針變量與實(shí)參數(shù)組共占同一段內(nèi)存單元,在調(diào)用函數(shù)期間,如果改變了形參數(shù)組的值,也就改變了實(shí)參數(shù)組的值。中間數(shù)字的拆分函數(shù)需特別注意:形參獲得的地址是數(shù)組首地址,此時需要將形參地址+1,并賦給形參。如圖1。

        在C語言中,用指針編寫的程序比用數(shù)組下標(biāo)編寫的程序執(zhí)行速度快。因此形參采用指針變量。

        static unsigned int high_data, mid_data, low_data; //高位、中間位、低位數(shù)字定義

        static void baiwei(unsigned int *p); //高位數(shù)字的拆分函數(shù)

        static void shiwei(unsigned int *p); //中間數(shù)字的拆分函數(shù)

        static void dispose_datafunc(unsigned int data) //數(shù)據(jù)拆分函數(shù)定義

        {

        unsigned int array[3];

        *array = data;

        baiwei(array);

        shiwei(array);

        high_data = array[0];

        mid_data = array[1];

        low_data = array[2];

        }

        圖1 中間數(shù)字的獲取流程 圖2 “二分拆法”與“傳統(tǒng)拆分”的響應(yīng)時間對比

        3“二分拆分”算法的實(shí)驗(yàn)驗(yàn)證

        編寫簡單的測試程序?qū)ⅰ岸植鸱帧彼惴ㄅc“傳統(tǒng)拆分”算法同時運(yùn)行,采用單片機(jī)ATmega64的PA0的高低電平變換測試兩段程序的運(yùn)行時間,并用示波器測量,如圖2。相同數(shù)據(jù)進(jìn)行拆分,“二分拆分”算法運(yùn)行時間為3us,傳統(tǒng)拆分算法運(yùn)行時間為18us。“二分拆分”算法的效率遠(yuǎn)遠(yuǎn)高于傳統(tǒng)拆分算法。測試程序:

        PORTA |= 0x01; //高電平開始

        dispose_datafunc(569); //二分法數(shù)據(jù)處理,

        PORTA &= ~0x01; //低電平

        for (i=0;i<10;i++) delay_1us();

        PORTA |= 0x01; //高電平

        hex_bcd(569); //傳統(tǒng)數(shù)字拆分法

        PORTA &= ~0x01;

        for (i=0;i<30;i++) delay_1us();

        4結(jié)語

        通過實(shí)驗(yàn)驗(yàn)證,“二分拆法”算法確實(shí)較“傳統(tǒng)拆分”算法大大提高了MCU的執(zhí)行效率。由此看來,好的單片機(jī)代碼,并不是僅僅局限于各種功能的實(shí)現(xiàn),還應(yīng)該從執(zhí)行效率、減少運(yùn)算的強(qiáng)度、便于移植等方面綜合考慮,選擇合適的算法。

        參考文獻(xiàn):

        [1]鄧勇,劉琪.智能儀表多字節(jié)二進(jìn)制數(shù)轉(zhuǎn)換BCD碼.《電子產(chǎn)品世界》,1999年12期.

        [2]沈文,詹衛(wèi)前.AVR單片機(jī)C語言開發(fā)入門指導(dǎo).

        作者簡介:閆海環(huán)(1982一),女,漢族,山西省交城縣,本科,助理工程師,從事逆變電源的開發(fā)。

        猜你喜歡
        單片機(jī)效率算法
        提升朗讀教學(xué)效率的幾點(diǎn)思考
        甘肅教育(2020年14期)2020-09-11 07:57:42
        基于單片機(jī)的SPWM控制逆變器的設(shè)計(jì)與實(shí)現(xiàn)
        電子制作(2019年13期)2020-01-14 03:15:28
        基于MapReduce的改進(jìn)Eclat算法
        Travellng thg World Full—time for Rree
        基于單片機(jī)的層次漸變暖燈的研究
        電子制作(2019年15期)2019-08-27 01:12:10
        基于單片機(jī)的便捷式LCF測量儀
        電子制作(2019年9期)2019-05-30 09:42:02
        進(jìn)位加法的兩種算法
        一種改進(jìn)的整周模糊度去相關(guān)算法
        跟蹤導(dǎo)練(一)2
        Microchip推出兩個全新PIC單片機(jī)系列
        黄色成人网站免费无码av| 蜜桃视频网站在线观看一区| 色一情一乱一伦麻豆| 人人妻人人澡人人爽欧美二区| 免费无码中文字幕A级毛片| 丝袜美腿av免费在线观看| 日本二区三区视频免费观看| 人妻久久999精品1024| 久久精品国产久精国产69| 91精品国产九色综合久久香蕉 | 国产精品天天狠天天看| 白丝美女被狂躁免费视频网站 | 丝袜美腿亚洲第一免费| 国产人妻丰满熟妇嗷嗷叫| 久久国产精品不只是精品 | 久久97精品久久久久久久不卡 | 国产精品久久久久久久久KTV| 三男一女吃奶添下面| 亚洲阿v天堂网2021| av免费在线观看在线观看 | 67194熟妇人妻欧美日韩| 中文字幕亚洲欧美日韩在线不卡| 美腿丝袜av在线播放| 国产色视频一区二区三区不卡| 无码吃奶揉捏奶头高潮视频| 乱子伦视频在线看| 中国女人a毛片免费全部播放| 久久久精品国产亚洲av网麻豆| 蜜臀av无码人妻精品| 欧洲色综合| 色婷婷av一区二区三区不卡| 激情人妻另类人妻伦| 97se亚洲国产综合自在线| 国产激情一区二区三区成人免费| 在线国产丝袜自拍观看| 国产二级一片内射视频播放| 亚洲无毛片| 久久亚洲一区二区三区四区五 | 日本一区二区三区丰满熟女| 亚洲人成人无码www影院| 国产美女精品aⅴ在线|