新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机查表程序的自动生成技术

单片机查表程序的自动生成技术

作者:时间:2012-11-15来源:网络收藏

摘要:介绍用高级语言C,用的方法取代繁琐复杂的数学运算,计算精度高、时间短。包括的原理以及D/A输出复杂波形、非线性插值的示例。

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

应用系统中,常用到许多复杂的数学计算,如计算sin(x)、cos(x)、有效值计算、非线性插值等。这些在高级语言中是简单的工作,而在的汇编语言中却是非常复杂的。因为,这些运算大都要用乘除运算来进行近似运算,计算的精度很难满足要求。更难以接受的是其运算时间太长,这对于无乘除指令的单片机系统更是如此。采用取代复杂的计算是一个明智的选择。但是,这种查表表格往往都较长,通常为几十条到一二百条,如果采用手工输入不但要花费大量的时间,而且还容易出错。利用高级语言的单片机查表程序的可以大大减小工作量,而且不易出错。

用过Microchip公司的PIC16系列单片机的读者都知道,该系列单片机具有许多优点,唯感遗憾的是在该指令中没有乘除指令(PIC17以系列才有乘指令)。在应用中常要自编乘除了程序以完成乘除运算,这种程序执行都要花费较多的时间,如双字节的乘法,运算一次需要花费100多个指令周期,而如果要用乘除进行sin(x)、cos(x)、开方的计算,则花费的时间就更多。因此,利用高级语言进行单片机查表程序的自动笥成在PIC16系列单片机中就显得更有意义。

现以目前在我国正大量使用的Microchip公司的PIC16系列单片机为例,用几个例子说明该的应用。当然,这种方法也可以用在其它单片机中,只是所给的示例程序中有关单片机的语句要改为相应的单片机语言。本文采用Tubro

C作为高级语言的编程工具,也可以采用其它高级语言。

1 原理

利用高级语言自动生成查表程序的实质就是利用高级语言的计算功能,把原本复杂的计算转换为简单的查表结果,以文本文件的形式输出查表程序,在单片机编程中将该段程序插入相应的程序中去。在应用中需要注意的是:查表结果没有小数,故在计算输出时要四舍五入;查表结果只能在0~255之间,超出此范围要加以处理。PIC16系列单片机的汇编程序默认数制为十六进制,如要使用十进制,要在数前加“.”。还有一点要注意的是,在插入查表程序时特别要注意查表程序不能跨过0~255的页面。

2 示例

2.1 用D/A输出复杂的波形

用D/A器件可以输出复杂的波形,如sin(x)、双音多频信号等复杂的波形。这里以并行D/A、输出sin(x)为例,假设电源电压为5V,D/A的参考电压也为5V;同时假设在sin(x)的半波中共输出90个点(2°输出1个点),相应的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个点*/
w=w*3.14159/180; /*转换成弧度*/
v=sin(w)*255*Vmax*5; /*根据电压峰值计算该点的输出值*/
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();
}

晶振相关文章:晶振原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭