單片機查表程序的自動生成技術
假設定時器用TMR0,預分頻系數為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; /*求相應于A/D值的電壓V*/
I=100*v/3; /*求相應的電流I*/
T=1033.58/(I+11.1111)-0.2222; /*按式(3)求相應的延時時間*/
T0=256-T*1000*256; /*轉換為時間常數*/
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)
單片機進行電流采樣A/D,把A/D結果賦給W,CALL
SUB2便可得到相應的延時時間常數W。
3 結論
利用高級語言自動生成單片機的查表程序,可以完成許多單片機難以完成或需要進行大量計算才能完成的復雜運算,計算精度高。單片機利用此結果進行插值運行速度要快得多。典型的4MHz晶振時,需要的運算時間為10μs。限于篇幅,本文只給出兩個實例,實際上它可以用于單片機測控系統中的許多方面,如模糊控制中的模糊規則的推理、非線性傳感器的特性讀取以及其它方面。
晶振相關文章:晶振原理
評論