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

📄 ddcmain.c.txt

📁 dsp实现软件无线电数字下变频得主体程序部分
💻 TXT
字号:
#include<reg5402.h>
#include<math.h> 
interrupt void int0handle(); 
interrupt void int1handle();
//count,count1中断标志,在主循环中判断这两个标志,若为 1,表示有中断,就开始处理
unsigned char count=0;
unsigned char count1=0;
unsigned int fcnt=0;
ioport unsigned port0;//AD端口 
ioport unsigned port1;//DA端口 
int rev33buf[256]; 
int branchcosbuf[256]; 
int branchsinbuf[256];
main()
{
 int fsinval,fcosval;
 int i
 int freq;
 int revcnt;
 int frctval;
 PMST=0x00a0;//把中断向量表放在 0x0080开始的地址
 SWWSR=0;
 //freq=1,接收的载波频率为10khz,freq=2,接收的载波频率为20khz,以此类推
 freq=10;//载波频率为 100khz 
 IFR=IFR|0x003; 
 IMR=IMR|0x0003; 
 asm("openallint:  rsbx INTM");
 while(1)
 {
  if(count=1)//通知主程序,FIFO1半满,DSP应该取256个数据
  {
  count=0;
  //数据读取,数据转化
  for(revcnt=O;revcnt<256;revcnt++)
  {
   frctval=port0-0x200;//输入的值转化为Q9定点小数
   rev33buf[revcnt]=frctval<<6;//转化为Q15定点小数,我们的数据精度就只有10位,所以不关心后面的6位数据
  }
  //混频
  for(i=0;i<256;i++)
  {
    fsinval=sin(2*3.1415926*freq*fcnt/2000)*32768; 
    fcosval=cos(2*3.1415926*freq*fcnt/2000)*32768; 
    branchsinbuf[i]=_smpy(fsinval,rev33buf[i]); 
    branchcosbutTi]=_smpy(fcosval,rev33buf[i]); 
    fcnt++; //fcnt加到65535后,再加1就会变成 0
  }  
  //CIC滤波 
  //半带滤波
  //FIR滤波
  }
 }
}
interrupt void int0handle()
{
count=1;
}
interrupt void int1handle()
{
count1=1;
}

⌨️ 快捷键说明

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