level 1
;lowPassFunction,一阶低通滤波器算法
;计算公式为Y(k)=a*X(k)+(1-a)Y(k-1),当采样周期T足够小时a=T/RC,
;宏中变量的定义:LPFOutputH与LPFOutputL分别为上次低通滤波器输出值高
;位和低位,LPFInput为当前低通滤波器输入采样值,Q15表示a为与低通滤波
;器参数和采样周期有关的常量假定宏参数全部在同一数据段中
lowPassFilter .macro LPFOutputH LPFOutputL,a,LPFInput
setc OVM; 设置溢出模式位
spm 1; PREG移位模式,左移一位
ldp #LPFOutputL; 设定页指针
lacl LPFOutputL; 装载上一次低通滤波器输出值到ACC低位,小数部分主要是防止可能因为每次舍去尾数而使输出不会变化
add LPF OutputH,16; 装载上一次低通滤波器输出值到ACC高位,整数部分此时ACC中为Y(k-1)
lt a; 与低通滤波器有关的常量
mpy LPFInput; 计算a*X*(k)
apac; 结果左移一位加入ACC,高位得Q15格式
mpy LPFOutputH; 计算a*Y(k-1)
spac; 左移一位,-a*Y(k-1)加到ACC中
sach LPFOutputH;
sacl LPFOutputL; 得到本次低通滤波输出
spm 0; PM置零
clrc OVM; 溢出模式位清空
endm;
2009年11月16日 06点11分