⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.c

📁 基于可编程滤波器max261、262等的单片机c语言代码
💻 C
字号:
/***************************程控滤波函数***********************************************/
/*        使用程控滤波芯片Max261
                     用IO口方式
                     MCU      --- MAX261
                     P0.3~P0.0--- A3~A0
                     P0.5~P0.4--- D1~D0
                     P1.0     --- WR
*/

#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define nop _nop_()
#define uchar unsigned char
#define uint  unsigned int
#define fclk 2     //2Mhz 即2000khz,和后面0.637恰好抵消小数部分
sbit WrMax261=P1^0;
void Filter(uchar way,float f,float q,uchar whichone);
void TransFilter(uchar ContrData);
uchar Fn(float f);
uchar Qn(float q);

/*---------控制方式way,中心频率f,品质因数q,滤波器选择whichone 0表示A,1表示B--------*/
void Filter(uchar way,float f,float q,uchar whichone)  
{
    uchar i;
    uchar fn0;
    uchar qn0;
    uchar fn[3];
    uchar qn[4];
    
    fn0=Fn(f);
    fn[0]=fn0&0x03;
    fn[1]=(fn0&0x0c)>>2;
    fn[2]=(fn0&0x30)>>4;

    qn0=Qn(q);
    qn[0]=qn0&0x03;
    qn[1]=(qn0&0x0c)>>2;
    qn[2]=(qn0&0x30)>>4;
    qn[3]=(qn0&0x40)>>6;
    
    way=way&0x03;
    whichone=whichone&0x01;
    
    TransFilter((way<<4)+(whichone<<3));
    
    for(i=0;i<3;i++)
    {
        TransFilter((fn[i]<<4)+i+1+(whichone<<3));
    }
    
    for(i=0;i<4;i++)
    {
        TransFilter((qn[i]<<4)+i+4+(whichone<<3));
    }
    
}

uchar Fn(float f)      //频率关键字
{
    uchar temp;
    temp=fclk*637/f-64;     //原本是*2/pi;即*0.637  fclk用M单位,f单位khz
    return temp;  
}

uchar Qn(float q)        //品质因数关键字
{
    uchar temp;
    temp=128-64/q;
    return temp; 
}

void TransFilter(uchar ContrData)     //送关键字函数
{
    WrMax261=0;
    P0=ContrData;
    nop;
    nop;
    WrMax261=1;
}

void main()
{
    Filter(1,11.9,32,0);
    while(1);
}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -