我把程序贴上,有兴趣的自己改进吧~
用这段程序在11.0592mhz的极限采样频率大约是200khz~
其实程序很简单。
现在的问题就是改善性能以及和用户通信,不然的话,用stc12c2052就可以搞定了。
我觉得大家应该感兴趣的啊,改一改就可以作为可编程亚音发生器使用了~ -_-|||
;晶振频率11.0592mhz,时钟周期~=1us
;采样频率:约100khz
;令其输出19khz
auxr equ 8eh ;定时器速度控制
org 0000h
jmp init
org 000bh
jmp tmr0_svr
org 0100h
init: mov sp,#7fh
call init_t0 ;初始化t0计数器
setb pt0
setb et0
setb ea
mov r7,#30h ;相位步进值,高位在前
mov r6,#0a3h
mov r5,#0d6h
mov r4,#00h ;累计相位值
mov r3,#00h
mov r2,#00h
clr a
setb p2.6
mov p1,#00h
main: sjmp $
tmr0_svr: clr p2.6
mov a,r2 ;使用mov较节约时间
add a,r5
mov r2,a
mov a,r3
addc a,r6
mov r3,a
mov a,r4
addc a,r7
mov r4,a
setb p2.6
jb acc.7,tm0
mov dptr,#sin_tab ;查512样点表,减少相噪
sjmp tm1
tm0: mov dptr,#sin_tab_2
tm1: mov a,r3
rlc a
mov a,r4
rlc a
movc a,@a+dptr
mov p1,a
reti
init_t0: mov tmod,#02h ;设置t0为8位自动重装
mov tcon,#00h
mov th0,#91h
mov tl0,#91h
mov auxr,#80h ;设置t0为12倍速
setb tr0
ret
;<=== 512 样点正弦表 ===>
;<= 本表采用scilab计算 =>
sin_tab: db 128,129,131,132,134,135,137,138,140,142
db 143,145,146,148,149,151,152,154,155,157
db 158,160,162,163,165,166,167,169,170,172
db 173,175,176,178,179,181,182,183,185,186
db 188,189,190,192,193,194,196,197,198,200
db 201,202,203,205,206,207,208,210,211,212
db 213,214,215,217,218,219,220,221,222,223
db 224,225,226,227,228,229,230,231,232,233
db 234,234,235,236,237,238,238,239,240,241
db 241,242,243,243,244,245,245,246,246,247
db 248,248,249,249,250,250,250,251,251,252
db 252,252,253,253,253,253,254,254,254,254
db 254,255,255,255,255,255,255,255,255,255
db 255,255,255,255,255,255,254,254,254,254
db 254,253,253,253,253,252,252,252,251,251
db 250,250,250,249,249,248,248,247,246,246
db 245,245,244,243,243,242,241,241,240,239
db 238,238,237,236,235,234,234,233,232,231
db 230,229,228,227,226,225,224,223,222,221
db 220,219,218,217,215,214,213,212,211,210
db 208,207,206,205,203,202,201,200,198,197
db 196,194,193,192,190,189,188,186,185,183
db 182,181,179,178,176,175,173,172,170,169
db 167,166,165,163,162,160,158,157,155,154
db 152,151,149,148,146,145,143,142,140,138
db 137,135,134,132,131,129
sin_tab_2: db 128,126,124,123
db 121,120,118,117,115,113,112,110,109,107
db 106,104,103,101,100,98,97,95,93,92
db 90,89,88,86,85,83,82,80,79,77,76
db 74,73,72,70,69,67,66,65,63,62,61
db 59,58,57,55,54,53,52,50,49,48,47
db 45,44,43,42,41,40,38,37,36,35,34
db 33,32,31,30,29,28,27,26,25,24,23
db 22,21,21,20,19,18,17,17,16,15,14
db 14,13,12,12,11,10,10,9,9,8,7,7
db 6,6,5,5,5,4,4,3,3,3,2,2,2
db 2,1,1,1,1,1,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,1,1,1,1,1
db 2,2,2,2,3,3,3,4,4,5,5,5,6
db 6,7,7,8,9,9,10,10,11,12,12,13
db 14,14,15,16,17,17,18,19,20,21,21
db 22,23,24,25,26,27,28,29,30,31,32
db 33,34,35,36,37,38,40,41,42,43,44
db 45,47,48,49,50,52,53,54,55,57,58
db 59,61,62,63,65,66,67,69,70,72,73
db 74,76,77,79,80,82,83,85,86,88,89
db 90,92,93,95,97,98,100,101,103,104
db 106,107,109,110,112,113,115,117,118,120
db 121,123,124,126
end