?? fir4.asm
字號:
*******************************************************************
*用循環緩沖區和雙操作數尋址方法實現FIR濾波器
*N=80,y(n)=h0*x(n)+h1*x(n-1)+...+h78*x(n-78)+h79*x(n-79)
*先用matlab,選擇80點漢明窗設計一個截止頻率為0.2pi的低通濾波器
******************************************************************
.title "fir4.asm"
.mmregs
.def start
.bss y,1 ;y
xn .usect "xn",80 ;xn
h .usect "h",80 ;h
PA0 .set 0002H ;數據輸出端口
PA1 .set 0008H ;數據輸入端口
.bss indata,1
.bss outdata,1
.data
table:
.word -1,-4,-8,-12,-18,-25,-33,-42
.word -52,-63,-75,-86,-96,-103,-108,-107
.word -102,-89,-69,-39,0,49,109,179
.word 260,350,449,555,667,782,898,1014
.word 1126,1232,1330,1417,1492,1552,1596,1622
.word 1631,1622,1596,1552,1492,1417,1330,1232
.word 1126,1014,898,782,667,555,449,350
.word 260,179,109,49,0,-39,-69,-89
.word -102,-107,-108,-103,-96,-86,-75,-63
.word -52,-42,-33,-25,-18,-12,-8,-4
start:
SSBX FRCT ;小數乘法
STM #xn,AR1
RPT #79
ST #0,*AR1+ ;把x(n)-x(n-79)賦始值0
STM #h,AR1
RPT #79
MVPD #table,*AR1+ ;把參數表復制到數據存儲區
STM #xn+79,AR3 ;AR3-->x(n-79)
STM #h+79,AR4 ;AR4-->h(n-79)
STM #80,BK ;循環緩沖區大小80
STM #-1,AR0 ;指針調整值-1
LD #xn,DP ;DP指向xn所在頁
PORTR PA1,@xn ;輸入數據
LD #y,DP ;DP指向y所在頁
FIR:
NOP
; MVKD indata,*AR3+0%
RPTZ A,#79
MAC *AR3+0%,*AR4+0%,A ;A=(AR3)*(AR4)+A, AR3=AR3+AR0,AR4=AR4+AR0
STH A,@outdata
NOP
STH A,@y ;保存計算結果
PORTW @y,PA0 ;輸出結果
BD FIR ;延時跳轉
PORTR PA1,*AR3+0% ;新數據覆蓋了最舊的數據
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -