



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 摘要:介绍用高级语言C自动生成单片机的查表程序,用查表的方法取代繁琐复杂的数学运算,计算精度高、时间短。包括自动生成程序的原理以及D/A输出复杂波形、非线性插值的示例。 在单片机应用系统中,常用到许多复杂的数学计算,如计算sin(x)、cos(x)、有效值计算、非线性插值等。这些在高级语言中是简单的工作,而在单片机的汇编语言中却是非常复杂的。因为,这些运算大都要用乘除运算来进行近似运算,计算的精度很难满足要求。更难以接受的是其运算时间太长,这对于无
2、乘除指令的单片机系统更是如此。采用查表取代复杂的计算是一个明智的选择。但是,这种查表程序表格往往都较长,通常为几十条到一二百条,如果采用手工输入不但要花费大量的时间,而且还容易出错。利用高级语言的单片机查表程序的自动生成技术可以大大减小工作量,而且不易出错。用过Microchip公司的PIC16系列单片机的读者都知道,该系列单片机具有许多优点,唯感遗憾的是在该指令中没有乘除指令(PIC17以系列才有乘指令)。在应用中常要自编乘除了程序以完成乘除运算,这种程序执行都要花费较多的时间,如双字节的乘法,运算一次需要花费100多个指令周期,而如果要用乘除进行sin(x)、cos(x)、开方的计算,则花
3、费的时间就更多。因此,利用高级语言进行单片机查表程序的自动笥成技术在PIC16系列单片机中就显得更有意义。现以目前在我国正大量使用的Microchip公司的PIC16系列单片机为例,用几个例子说明该技术的应用。当然,这种方法也可以用在其它单片机中,只是所给的示例程序中有关单片机的语句要改为相应的单片机语言。本文采用Tubro C作为高级语言的编程工具,也可以采用其它高级语言。1 原理利用高级语言自动生成查表程序的实质就是利用高级语言的计算功能,把原本复杂的计算转换为简单的查表结果,以文本文件的形式输出查表程序,在单片机编程中将该段程序插入相应的程序中去。在应用中需要注意的是:查表结果没有小数,
4、故在计算输出时要四舍五入;查表结果只能在0255之间,超出此范围要加以处理。PIC16系列单片机的汇编程序默认数制为十六进制,如要使用十进制,要在数前加“.”。还有一点要注意的是,在插入查表程序时特别要注意查表程序不能跨过0255的页面。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*/#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个点*/w=w*3.14159/180; /*转换成弧度*/v=sin(w)*255*Vmax*5; /*根据电压峰值计算该点的输出值*/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();利用以上程序,计算时输入文件名为A.ASM,Vmax=3,得至的A.ASM的内容如下(共90行表格,略去其中的大部分表格):;A.ASMSUB1 MOVWF BUFSUBLW .90BTFSS STATUS,CRETLW .0MOVLW HIGH($+4)MOVWF PCLATHMOVF BUF,WADDWF PCL,FRETLW .0;0RETLW .5;1RETLW .90;72RETLW .86;73RETLW .81;74RET
9、LW .11;88RETLW .5;89RETLW .0;90把以下程序插入单片机程序的适当地方,查表时中要赋以W相应的值,再CALL SUB1就可以得到sin(x)第W点上的值。整个计算约10个指令周期(如采用4MHz晶振,为10s左右)。如果采用乘除的方法计算,至少要花几百甚至上千个指令周期,而且得到的结果精度也差。2.2 非线性插值在单片机应用中会遇到非线性元件,例如热敏电阻的电阻-温度特性、断路器的保护特性等都是非线性关系。这里以断路器的保护特性为例,说明自动编程的应用。假设现在要仿真的断路器的特性为双曲线,如图1所示。据此,可以设延时时间与电流的关系为(I+I0)(t+t0)=K
10、160; (1)由图1的三个点可以得到以下联立方程组:(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)现在假设在硬件线路中,电流信号是转换为电压信号经A/D后得到的,其相应点的关系为:0A0V,100A3V,A/D为8位,A/D参考电压为5V。转换计算首先将A/D值转换
11、为对应的电压值,再将电压值转换为对应的电流值I,再根据式(3)求相应的延时时间T,最后将延时时间T再转换为延时的间常数T0。T0按式(4)计算:(256-t0)·Tcy·K=T (4)t0=256-t/(Tcy·K) (5)其中,Tcy为指令周期,在4MHz晶振时,Tcy=1s;K为预分频系数;t为欲延时的时间,单位为s。假设定时器用TMR0,预分频系数为256,晶振的振荡频率为4MHz,则最大延时为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开始,避免跨页*/fprintf(fp,"ADDWF PLC,F");for(i=0;i<=254;i+)ad=i;v=ad*5/255; /*求相应于A/D值的电压V
13、*/I=100*v/3; /*求相应的电流I*/T=1033.58/(I+11.1111)-0.2222; /*按式(3)求相应的延时时间*/T0=256-T*1000*256; /*转换为时间常数*/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)单片机进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 编辑中级职称试题及答案
- 深度解读2025年汽车共享平台运营数据与用户忠诚度提升策略报告
- 2025南航招聘笔试题目及答案
- 积极应变面试题及答案
- 有效团队沟通的商务英语试题及答案
- 教师教育教学反思在政策导向下的调整与适应研究试题及答案
- 电池技术进步对市场的效应试题及答案
- 深入解读2025年创业扶持政策与企业责任的关系试题及答案
- 教育游戏化在儿童教育中的创新应用:2025年教学设计策略与实践探索报告
- 深入探讨音符的组合与构建2025年乐理考试试题及答案
- GA/T 751-2024公安视频图像屏幕显示信息叠加规范
- 2025至2030中国长链氯化石蜡行业供需现状与前景策略研究报告
- 租地盖大棚合同协议
- 自体输血知识培训课件
- 人教A版高一下册必修第二册高中数学8.6.2直线与平面垂直【课件】
- 小学生涯课件
- 西藏拉萨中学2024-2025学年高三第二学期英语试题4月月考试卷含解析
- GB/T 45421-2025城市公共设施非物流用智能储物柜服务规范
- 档案相关法律法规知识复习试题及答案
- 汉语方言与地方文化认同的关系研究论文
- 西北四省(陕西山西青海宁夏)2025届高三下学期第一次联考数学试卷含答案
评论
0/150
提交评论