在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)查表程序的自動(dòng)生成技術(shù)

            單片機(jī)查表程序的自動(dòng)生成技術(shù)

            作者: 時(shí)間:2012-11-15 來源:網(wǎng)絡(luò) 收藏

            摘要:介紹用高級(jí)語言C,用的方法取代繁瑣復(fù)雜的數(shù)學(xué)運(yùn)算,計(jì)算精度高、時(shí)間短。包括的原理以及D/A輸出復(fù)雜波形、非線性插值的示例。

            本文引用地址:http://www.biyoush.com/article/170687.htm

            應(yīng)用系統(tǒng)中,常用到許多復(fù)雜的數(shù)學(xué)計(jì)算,如計(jì)算sin(x)、cos(x)、有效值計(jì)算、非線性插值等。這些在高級(jí)語言中是簡單的工作,而在的匯編語言中卻是非常復(fù)雜的。因?yàn)?,這些運(yùn)算大都要用乘除運(yùn)算來進(jìn)行近似運(yùn)算,計(jì)算的精度很難滿足要求。更難以接受的是其運(yùn)算時(shí)間太長,這對(duì)于無乘除指令的單片機(jī)系統(tǒng)更是如此。采用取代復(fù)雜的計(jì)算是一個(gè)明智的選擇。但是,這種查表表格往往都較長,通常為幾十條到一二百條,如果采用手工輸入不但要花費(fèi)大量的時(shí)間,而且還容易出錯(cuò)。利用高級(jí)語言的單片機(jī)查表程序的可以大大減小工作量,而且不易出錯(cuò)。

            用過Microchip公司的PIC16系列單片機(jī)的讀者都知道,該系列單片機(jī)具有許多優(yōu)點(diǎn),唯感遺憾的是在該指令中沒有乘除指令(PIC17以系列才有乘指令)。在應(yīng)用中常要自編乘除了程序以完成乘除運(yùn)算,這種程序執(zhí)行都要花費(fèi)較多的時(shí)間,如雙字節(jié)的乘法,運(yùn)算一次需要花費(fèi)100多個(gè)指令周期,而如果要用乘除進(jìn)行sin(x)、cos(x)、開方的計(jì)算,則花費(fèi)的時(shí)間就更多。因此,利用高級(jí)語言進(jìn)行單片機(jī)查表程序的自動(dòng)笥成在PIC16系列單片機(jī)中就顯得更有意義。

            現(xiàn)以目前在我國正大量使用的Microchip公司的PIC16系列單片機(jī)為例,用幾個(gè)例子說明該的應(yīng)用。當(dāng)然,這種方法也可以用在其它單片機(jī)中,只是所給的示例程序中有關(guān)單片機(jī)的語句要改為相應(yīng)的單片機(jī)語言。本文采用Tubro

            C作為高級(jí)語言的編程工具,也可以采用其它高級(jí)語言。

            1 原理

            利用高級(jí)語言自動(dòng)生成查表程序的實(shí)質(zhì)就是利用高級(jí)語言的計(jì)算功能,把原本復(fù)雜的計(jì)算轉(zhuǎn)換為簡單的查表結(jié)果,以文本文件的形式輸出查表程序,在單片機(jī)編程中將該段程序插入相應(yīng)的程序中去。在應(yīng)用中需要注意的是:查表結(jié)果沒有小數(shù),故在計(jì)算輸出時(shí)要四舍五入;查表結(jié)果只能在0~255之間,超出此范圍要加以處理。PIC16系列單片機(jī)的匯編程序默認(rèn)數(shù)制為十六進(jìn)制,如要使用十進(jìn)制,要在數(shù)前加“.”。還有一點(diǎn)要注意的是,在插入查表程序時(shí)特別要注意查表程序不能跨過0~255的頁面。

            2 示例

            2.1 用D/A輸出復(fù)雜的波形

            用D/A器件可以輸出復(fù)雜的波形,如sin(x)、雙音多頻信號(hào)等復(fù)雜的波形。這里以并行D/A、輸出sin(x)為例,假設(shè)電源電壓為5V,D/A的參考電壓也為5V;同時(shí)假設(shè)在sin(x)的半波中共輸出90個(gè)點(diǎn)(2°輸出1個(gè)點(diǎn)),相應(yīng)的C語言源程序如下:

            /*程序A.C*/
            #includeSTdio.h>
            #includemath.h>
            main()
            {
            FILE *fp;
            char f[15];
            float Vmax,v,w;
            int i,k;
            puts (the output file name:);
            gets (f); /*輸入要輸出的文件名*/
            if((fp=fopen(f,w))= =NULL)
            {puts(cON't open output file);
            exit(0);
            }
            puts(Vmax:);
            scanf(%f,Vmax); /*輸入要輸出的sin波形峰值*/
            fprintf(fp,SUB1 MOVWF BUF); /*輸出查表程序的第1行*/
            fprintf(fp,SUBLW .%d,90); /*輸出查表程序的第2行*/
            fprintf(fp,BTFSS STATUS,C);/*輸出查表程序的第3行*/
            fprintf(fp,RETLW .0); /*輸出查表程序的第4行*/
            fprintf(fp,MOVLW HIGH($+4)); /*輸出查表程序的第5行*/
            fprintf(fp,MOVWF PCLATH); /*輸出查表程序的第6行*/
            fprintf(fp,MOVF BUF,W); /*輸出查表程序的第7行*/
            fprintf(fp,ADDWF PCL,F); /*輸出查表程序的第8行*/
            for(i=0;i=90;i++)
            {w=i*2; /*2°輸出1個(gè)點(diǎn)*/
            w=w*3.14159/180; /*轉(zhuǎn)換成弧度*/
            v=sin(w)*255*Vmax*5; /*根據(jù)電壓峰值計(jì)算該點(diǎn)的輸出值*/
            k=v+0.5; /*四舍五入*/
            if(k0)k=0;
            if(k>255)k=255;
            fprinft(fp,RETLW.%d;%.d,k,i); /*輸出查表表格*/
            }
            fclose(fp);
            printf(Press any key to end
            ……);
            getch();
            }

            晶振相關(guān)文章:晶振原理

            上一頁 1 2 3 下一頁

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉