



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 摘要:介紹用高級(jí)語(yǔ)言C自動(dòng)生成單片機(jī)的查表程序,用查表的方法取代繁瑣復(fù)雜的數(shù)學(xué)運(yùn)算,計(jì)算精度高、時(shí)間短。包括自動(dòng)生成程序的原理以及D/A輸出復(fù)雜波形、非線性插值的示例。 在單片機(jī)應(yīng)用系統(tǒng)中,常用到許多復(fù)雜的數(shù)學(xué)計(jì)算,如計(jì)算sin(x)、cos(x)、有效值計(jì)算、非線性插值等。這些在高級(jí)語(yǔ)言中是簡(jiǎn)單的工作,而在單片機(jī)的匯編語(yǔ)言中卻是非常復(fù)雜的。因?yàn)?,這些運(yùn)算大都要用乘除運(yùn)算來(lái)進(jìn)行近似運(yùn)算,計(jì)算的精度很難滿足要求。更難以接受的是其運(yùn)算時(shí)間太長(zhǎng),這對(duì)于無(wú)
2、乘除指令的單片機(jī)系統(tǒng)更是如此。采用查表取代復(fù)雜的計(jì)算是一個(gè)明智的選擇。但是,這種查表程序表格往往都較長(zhǎng),通常為幾十條到一二百條,如果采用手工輸入不但要花費(fèi)大量的時(shí)間,而且還容易出錯(cuò)。利用高級(jí)語(yǔ)言的單片機(jī)查表程序的自動(dòng)生成技術(shù)可以大大減小工作量,而且不易出錯(cuò)。用過(guò)Microchip公司的PIC16系列單片機(jī)的讀者都知道,該系列單片機(jī)具有許多優(yōu)點(diǎn),唯感遺憾的是在該指令中沒(méi)有乘除指令(PIC17以系列才有乘指令)。在應(yīng)用中常要自編乘除了程序以完成乘除運(yùn)算,這種程序執(zhí)行都要花費(fèi)較多的時(shí)間,如雙字節(jié)的乘法,運(yùn)算一次需要花費(fèi)100多個(gè)指令周期,而如果要用乘除進(jìn)行sin(x)、cos(x)、開(kāi)方的計(jì)算,則花
3、費(fèi)的時(shí)間就更多。因此,利用高級(jí)語(yǔ)言進(jìn)行單片機(jī)查表程序的自動(dòng)笥成技術(shù)在PIC16系列單片機(jī)中就顯得更有意義?,F(xiàn)以目前在我國(guó)正大量使用的Microchip公司的PIC16系列單片機(jī)為例,用幾個(gè)例子說(shuō)明該技術(shù)的應(yīng)用。當(dāng)然,這種方法也可以用在其它單片機(jī)中,只是所給的示例程序中有關(guān)單片機(jī)的語(yǔ)句要改為相應(yīng)的單片機(jī)語(yǔ)言。本文采用Tubro C作為高級(jí)語(yǔ)言的編程工具,也可以采用其它高級(jí)語(yǔ)言。1 原理利用高級(jí)語(yǔ)言自動(dòng)生成查表程序的實(shí)質(zhì)就是利用高級(jí)語(yǔ)言的計(jì)算功能,把原本復(fù)雜的計(jì)算轉(zhuǎn)換為簡(jiǎn)單的查表結(jié)果,以文本文件的形式輸出查表程序,在單片機(jī)編程中將該段程序插入相應(yīng)的程序中去。在應(yīng)用中需要注意的是:查表結(jié)果沒(méi)有小數(shù),
4、故在計(jì)算輸出時(shí)要四舍五入;查表結(jié)果只能在0255之間,超出此范圍要加以處理。PIC16系列單片機(jī)的匯編程序默認(rèn)數(shù)制為十六進(jìn)制,如要使用十進(jìn)制,要在數(shù)前加“.”。還有一點(diǎn)要注意的是,在插入查表程序時(shí)特別要注意查表程序不能跨過(guò)0255的頁(yè)面。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語(yǔ)言源程序如下:/*程序A.C*/#include<stdio.h>#
5、include<math.h>main()FILE *fp;char f15;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波形峰值*/fprin
6、tf(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"); /*輸出查
7、表程序的第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(k<0)k=0;if(k>255)k=255;fprinft(fp,"RETLW.%d;%.d&quo
8、t;,k,i); /*輸出查表表格*/fclose(fp);printf("Press any key to end ");getch();利用以上程序,計(jì)算時(shí)輸入文件名為A.ASM,Vmax=3,得至的A.ASM的內(nèi)容如下(共90行表格,略去其中的大部分表格):;A.ASMSUB1 MOVWF BUFSUBLW .90BTFSS STATUS,CRETLW .0MOVLW HIGH($+4)MOVWF PCLATHMOVF BUF,WADDWF PCL,F(xiàn)RETLW .0;0RETLW .5;1RETLW .90;72RETLW .86;73RETLW .81;74RET
9、LW .11;88RETLW .5;89RETLW .0;90把以下程序插入單片機(jī)程序的適當(dāng)?shù)胤?,查表時(shí)中要賦以W相應(yīng)的值,再CALL SUB1就可以得到sin(x)第W點(diǎn)上的值。整個(gè)計(jì)算約10個(gè)指令周期(如采用4MHz晶振,為10s左右)。如果采用乘除的方法計(jì)算,至少要花幾百甚至上千個(gè)指令周期,而且得到的結(jié)果精度也差。2.2 非線性插值在單片機(jī)應(yīng)用中會(huì)遇到非線性元件,例如熱敏電阻的電阻-溫度特性、斷路器的保護(hù)特性等都是非線性關(guān)系。這里以斷路器的保護(hù)特性為例,說(shuō)明自動(dòng)編程的應(yīng)用。假設(shè)現(xiàn)在要仿真的斷路器的特性為雙曲線,如圖1所示。據(jù)此,可以設(shè)延時(shí)時(shí)間與電流的關(guān)系為(I+I0)(t+t0)=K
10、160; (1)由圖1的三個(gè)點(diǎn)可以得到以下聯(lián)立方程組:(I+20)(t+33)=K(I+40)(t+20)=K (2)(I+90)(t+10)=K采用迭代法解得I0=11.111 1,t0=0.222 2,K=1 033.58,代入式(1)得t=1 033.58/(I+11.111 1)-0.222 2 (3)現(xiàn)在假設(shè)在硬件線路中,電流信號(hào)是轉(zhuǎn)換為電壓信號(hào)經(jīng)A/D后得到的,其相應(yīng)點(diǎn)的關(guān)系為:0A0V,100A3V,A/D為8位,A/D參考電壓為5V。轉(zhuǎn)換計(jì)算首先將A/D值轉(zhuǎn)換
11、為對(duì)應(yīng)的電壓值,再將電壓值轉(zhuǎn)換為對(duì)應(yīng)的電流值I,再根據(jù)式(3)求相應(yīng)的延時(shí)時(shí)間T,最后將延時(shí)時(shí)間T再轉(zhuǎn)換為延時(shí)的間常數(shù)T0。T0按式(4)計(jì)算:(256-t0)·Tcy·K=T (4)t0=256-t/(Tcy·K) (5)其中,Tcy為指令周期,在4MHz晶振時(shí),Tcy=1s;K為預(yù)分頻系數(shù);t為欲延時(shí)的時(shí)間,單位為s。假設(shè)定時(shí)器用TMR0,預(yù)分頻系數(shù)為256,晶振的振蕩頻率為4MHz,則最大延時(shí)為65.535ms。程序如下(其中與程序A.C相同或類似的均略去):/*
12、程序B.C*/fprintf(fp,"SUB2 MOVWF BUF");fprintf(fp,"MOVLW HIGH($+4)");fprintf(fp,"MOVWF PCLATH");fprintf(fp,"MOVF BUF,W");fprintf(fp,"ORG 200H,F"); /*表格從200H開(kāi)始,避免跨頁(yè)*/fprintf(fp,"ADDWF PLC,F");for(i=0;i<=254;i+)ad=i;v=ad*5/255; /*求相應(yīng)于A/D值的電壓V
13、*/I=100*v/3; /*求相應(yīng)的電流I*/T=1033.58/(I+11.1111)-0.2222; /*按式(3)求相應(yīng)的延時(shí)時(shí)間*/T0=256-T*1000*256; /*轉(zhuǎn)換為時(shí)間常數(shù)*/k=T0+0.5;if(k<0)k=0;if(k>255)k=255;fprintf(fp,)"RETLW.%d;AD=.%d,I=%5.1f(A),T=%5.1f(ms)",k,i,I,T);形成的查表程序如下(共255行表格,略去其中的大部分表格):;B.asmSUB2 MOVWF BUFMOVLW HIGH($+4)MOVWF PCLATHMOVF BUF,WORG 200HADDWF PCL,FRETLW .0;AD=.0,I=0.0(A),T=92.8(ms)RETLW .116;AD=.27,I=17.6(A),T=35.7(ms)RETLW .120;AD=.28,I=18.3(A),T=34.9(ms)RETLW .123;AD=.29,I=19.0(A),T=34.2(ms)RETLW .125;AD=.30,I=19.6(A),T=33.4(ms)RETLW .234;AD=.254,I=166.0(A),T=5.6(ms)單片機(jī)進(jìn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)處理輪市場(chǎng)調(diào)查研究報(bào)告
- 2024年度浙江省二級(jí)建造師之二建礦業(yè)工程實(shí)務(wù)考前沖刺試卷A卷含答案
- 2025年中國(guó)三斗開(kāi)門(mén)柜市場(chǎng)調(diào)查研究報(bào)告
- 辦公室裝飾工程與室內(nèi)色彩搭配設(shè)計(jì)合同
- 高端養(yǎng)老院餐飲服務(wù)外包合同
- 企業(yè)廠長(zhǎng)任期責(zé)任與權(quán)益保障合同
- 補(bǔ)簽勞動(dòng)合同續(xù)約協(xié)議書(shū)
- 2024-2025學(xué)年全國(guó)小學(xué)一年級(jí)上語(yǔ)文仁愛(ài)版期中考試試卷(含答案解析)
- 2025年人教版小學(xué)一年級(jí)科學(xué)(上冊(cè))期中試卷附答案
- 云南省玉溪市紅塔區(qū)云2025屆七下英語(yǔ)期中綜合測(cè)試試題含答案
- 老年醫(yī)學(xué)科建設(shè)與管理指南(2025年版)
- 商務(wù)英語(yǔ)口語(yǔ)900句(中英對(duì)照)
- 高效課堂五步導(dǎo)學(xué)教學(xué)模式解讀
- 面部水光的盛世秘方
- 靜脈導(dǎo)管的維護(hù)和管理
- 防蛇蟲(chóng)鼠蟻安全教育
- 銀行網(wǎng)點(diǎn)數(shù)字營(yíng)銷整體解決方案
- 杭州市西湖區(qū)部分校教科版六年級(jí)下冊(cè)期末考試科學(xué)試卷(原卷版)
- 雙液注漿施工方案
- 民兵訓(xùn)練管理規(guī)定
- 2025年國(guó)家公務(wù)員考試行測(cè)常識(shí)題庫(kù)及答案(共300題)
評(píng)論
0/150
提交評(píng)論