女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 在單片機(jī)應(yīng)用系統(tǒng)中,常用到許多復(fù)雜的數(shù)學(xué)計算,如計算sin(x)、cos(x)、有效值計算、非線性插值等。這些在高級語言中是簡單的工作,而在單片機(jī)的匯編語言中卻是非常復(fù)雜的。因為,這些運(yùn)算大都要用乘

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

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

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

1 原理

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

2 示例

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

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

/*程序A.C*/

#include

#include

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個點*/

w=w*3.14159/180; /*轉(zhuǎn)換成弧度*/

v=sin(w)*255*Vmax*5; /*根據(jù)電壓峰值計算該點的輸出值*/

k=v+0.5; /*四舍五入*/

if(k<0)k=0;

if(k>255)k=255;

fprinft(fp,"RETLW.%d;%.d",k,i); /*輸出查表表格*/

}

fclose(fp);

printf("Press any key to end ……");

getch();

}

利用以上程序,計算時輸入文件名為A.ASM,Vmax=3,得至的A.ASM的內(nèi)容如下(共90行表格,略去其中的大部分表格):

;A.ASM

SUB1 MOVWF BUF

SUBLW .90

BTFSS STATUS,C

RETLW .0

MOVLW HIGH($+4)

MOVWF PCLATH

MOVF BUF,W

ADDWF PCL,F(xiàn)

RETLW .0;0

RETLW .5;1

……

RETLW .90;72

RETLW .86;73

RETLW .81;74

……

RETLW .11;88

RETLW .5;89

RETLW .0;90

把以下程序插入單片機(jī)程序的適當(dāng)?shù)胤?,查表時中要賦以W相應(yīng)的值,再CALL SUB1就可以得到sin(x)第W點上的值。整個計算約10個指令周期(如采用4MHz晶振,為10μs左右)。如果采用乘除的方法計算,至少要花幾百甚至上千個指令周期,而且得到的結(jié)果精度也差。

2.2 非線性插值

在單片機(jī)應(yīng)用中會遇到非線性元件,例如熱敏電阻的電阻-溫度特性、斷路器的保護(hù)特性等都是非線性關(guān)系。這里以斷路器的保護(hù)特性為例,說明自動編程的應(yīng)用。假設(shè)現(xiàn)在要仿真的斷路器的特性為雙曲線,如圖1所示。

據(jù)此,可以設(shè)延時時間與電流的關(guān)系為

(I+I0)(t+t0)=K (1)

由圖1的三個點可以得到以下聯(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è)在硬件線路中,電流信號是轉(zhuǎn)換為電壓信號經(jīng)A/D后得到的,其相應(yīng)點的關(guān)系為:0A→0V,100A→3V,A/D為8位,A/D參考電壓為5V。轉(zhuǎn)換計算首先將A/D值轉(zhuǎn)換為對應(yīng)的電壓值,再將電壓值轉(zhuǎn)換為對應(yīng)的電流值I,再根據(jù)式(3)求相應(yīng)的延時時間T,最后將延時時間T再轉(zhuǎn)換為延時的間常數(shù) T0。T0按式(4)計算:

(256-t0)·Tcy·K=T (4)

t0=256-t/(Tcy·K) (5)

其中,Tcy為指令周期,在4MHz晶振時,Tcy=1μs;K為預(yù)分頻系數(shù);t為欲延時的時間,單位為μs。

假設(shè)定時器用TMR0,預(yù)分頻系數(shù)為256,晶振的振蕩頻率為4MHz,則最大延時為65.535ms。程序如下(其中與程序A.C相同或類似的均略去):

/*程序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開始,避免跨頁*/

fprintf(fp,"ADDWF PLC,F");

for(i=0;i<=254;i++)

{ad=i;

v=ad*5/255; /*求相應(yīng)于A/D值的電壓V*/

I=100*v/3; /*求相應(yīng)的電流I*/

T=1033.58/(I+11.1111)-0.2222; /*按式(3)求相應(yīng)的延時時間*/

T0=256-T*1000*256; /*轉(zhuǎn)換為時間常數(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.asm

SUB2 MOVWF BUF

MOVLW HIGH($+4)

MOVWF PCLATH

MOVF BUF,W

ORG 200H

ADDWF PCL,F

RETLW .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)行電流采樣A/D,把A/D結(jié)果賦給W,CALL SUB2便可得到相應(yīng)的延時時間常數(shù)W。

3 結(jié)論

利用高級語言自動生成單片機(jī)的查表程序,可以完成許多單片機(jī)難以完成或需要進(jìn)行大量計算才能完成的復(fù)雜運(yùn)算,計算精度高。單片機(jī)利用此結(jié)果進(jìn)行插值運(yùn)行速度要快得多。典型的4MHz晶振時,需要的運(yùn)算時間為10μs。限于篇幅,本文只給出兩個實例,實際上它可以用于單片機(jī)測控系統(tǒng)中的許多方面,如模糊控制中的模糊規(guī)則的推理、非線性傳感器的特性讀取以及其它方面。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

8位單片機(jī)在嵌入式設(shè)計領(lǐng)域已經(jīng)成為半個多世紀(jì)以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復(fù)雜,8位單片機(jī)依然不斷發(fā)展,積極應(yīng)對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機(jī)系列,配備了先進(jìn)的獨立...

關(guān)鍵字: 單片機(jī) 嵌入式 CPU

在嵌入式系統(tǒng)開發(fā)中,程序燒錄是連接軟件設(shè)計與硬件實現(xiàn)的關(guān)鍵環(huán)節(jié)。當(dāng)前主流的單片機(jī)燒錄技術(shù)已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應(yīng)用編程)三大技術(shù)體系,分別對應(yīng)開發(fā)調(diào)試、量產(chǎn)燒錄、遠(yuǎn)程升級等不同場景。...

關(guān)鍵字: 單片機(jī) ISP ICP IAP 嵌入式系統(tǒng)開發(fā)

在嵌入式系統(tǒng)開發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時機(jī)的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構(gòu)、軟件流程、安全規(guī)范三個維度,系統(tǒng)分析看門狗初始化的最佳實踐...

關(guān)鍵字: 單片機(jī) 看門狗 嵌入式系統(tǒng)

本文中,小編將對單片機(jī)予以介紹,如果你想對它的詳細(xì)情況有所認(rèn)識,或者想要增進(jìn)對它的了解程度,不妨請看以下內(nèi)容哦。

關(guān)鍵字: 單片機(jī) 開發(fā)板 Keil

隨著單片機(jī)系統(tǒng)越來越廣泛地應(yīng)用于消費(fèi)類電子、醫(yī)療、工業(yè)自動化、智能化儀器儀表、航空航天等各領(lǐng)域,單片機(jī)系統(tǒng)面臨著電磁干擾(EMI)日益嚴(yán)重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問題。

關(guān)鍵字: 單片機(jī) 電磁兼容

以下內(nèi)容中,小編將對單片機(jī)的相關(guān)內(nèi)容進(jìn)行著重介紹和闡述,希望本文能幫您增進(jìn)對單片機(jī)的了解,和小編一起來看看吧。

關(guān)鍵字: 單片機(jī) 復(fù)位電路

在這篇文章中,小編將為大家?guī)韱纹瑱C(jī)的相關(guān)報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 單片機(jī) 異常復(fù)位

今天,小編將在這篇文章中為大家?guī)韱纹瑱C(jī)的有關(guān)報道,通過閱讀這篇文章,大家可以對它具備清晰的認(rèn)識,主要內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 仿真器

單片機(jī)將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關(guān)情況以及信息有所認(rèn)識和了解,詳細(xì)內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 中斷 boot

一直以來,單片機(jī)都是大家的關(guān)注焦點之一。因此針對大家的興趣點所在,小編將為大家?guī)韱纹瑱C(jī)的相關(guān)介紹,詳細(xì)內(nèi)容請看下文。

關(guān)鍵字: 單片機(jī) 數(shù)字信號 模擬信號
關(guān)閉