單片機(jī)查表程序的自動(dòng)生成技術(shù)
假設(shè)定時(shí)器用TMR0,預(yù)分頻系數(shù)為256,晶振的振蕩頻率為4MHz,則最大延時(shí)為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)的延時(shí)時(shí)間*/
T0=256-T*1000*256; /*轉(zhuǎn)換為時(shí)間常數(shù)*/
k=T0+0.5;
if(k0)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í)時(shí)間常數(shù)W。
3 結(jié)論
利用高級(jí)語言自動(dòng)生成單片機(jī)的查表程序,可以完成許多單片機(jī)難以完成或需要進(jìn)行大量計(jì)算才能完成的復(fù)雜運(yùn)算,計(jì)算精度高。單片機(jī)利用此結(jié)果進(jìn)行插值運(yùn)行速度要快得多。典型的4MHz晶振時(shí),需要的運(yùn)算時(shí)間為10μs。限于篇幅,本文只給出兩個(gè)實(shí)例,實(shí)際上它可以用于單片機(jī)測(cè)控系統(tǒng)中的許多方面,如模糊控制中的模糊規(guī)則的推理、非線性傳感器的特性讀取以及其它方面。
晶振相關(guān)文章:晶振原理
評(píng)論