以经验看来你是要做单片机方面波形输出,DAC输出,或者做模拟示波器什么的。
有两种办法:
一是查表法,优点是计算量少,占用RAM少,算法简单,缺点是占用储存内存较多,参数比较固定。
查表法的基本思路就是,通过把sin函数进行采样,得到的值记录成一个表,将表以数组的形式放在程序中,通过循环读取数组的值达到查表的目的。
二是计算值法,优缺点跟查表法恰好相反。
计算值法的基本思路是通过特定算法,将特定时间所需的特定值计算出来。
这里给你提供一个计算值法的核心代码,作为指导建议,根据实际情况修调。
doubleSinWave(doublescale,intcycle_time)
{
inta;
doublePI=3.1416;
intresolution_ratio=100;//分辨率,描述采样量,越高的分辨率计算越多
for(a=0;a<resolution_ratio;a++)
{
DAC_OUT(scale*sin(2*PI*a/resolution_ratio));
delay(cycle_time/resolution_ratio);
}
}
voiddelay(intus)
{
//......
}
voidDAC_OUT(intdata)
{
//......
}
Ⅱ 单片机 查表程序设计
LTB2:
;-------------------下面是R2R3乘以2
MOV A, R3
CLR C
RLC A
MOV R3, A
XCH A, R2
RLC A
XCH R2, A
;------------------下面是表首地址加上R2R3
MOV DPTR, #TAB2
ADD A, DPL ;(R2R3)+(DPTR)→(DPTR)
MOV DPL, A
MOV A, DPH
ADDC A, R2
MOV DPH, A
;------------------下面是查表,查出两个字节
CLR A
MOVC A, @A + DPTR
MOV R2,A
CLR A
INC DPTR
MOVC A, @A + DPTR
MOV R3,A
RET
----
这个程序,是根据两个字节的数据来查表,查出的,也是两个字节。
如果先弄懂了一个字节的查表程序,看这个程序,也就没有什么难的了。