以經驗看來你是要做單片機方面波形輸出,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
----
這個程序,是根據兩個位元組的數據來查表,查出的,也是兩個位元組。
如果先弄懂了一個位元組的查表程序,看這個程序,也就沒有什麼難的了。