有程序流程图,还有一个基于51单片机的max262的原程序。请帮忙看看。怎样改为2410控制的。2410的输入输出口和51单片机的不同。怎样送控制字。2410的输入输出口还需要先定义功能吗。源码为:#include <br />#include <br />#include <br /> <br />typedef unsigned char uchar ; <br />typedef unsigned int uint; <br /> <br />#define P_262 P1 //口线连线(从高到低):A3,A2,A1,A0,D1,D0,Wr,_ <br /> sbit P_wr = P_262^1; <br /> sbit Fclk_S2=P2^2; //CPLD选择Fclk控制线 <br /> sbit Fclk_S1=P2^1; <br /> sbit Fclk_S0=P2^0; <br /> <br />sbit PFS0=P2^3;//工作模式工作模式选择0 <br />sbit PFS1=P2^4;//工作模式工作模式选择1 <br /> <br />long FLCK = 1000000 ; //MAX262工作频率 <br />uchar Mod=2;//工作模式0,1,2,3 <br />#define PI 3.1415926 <br /> <br /> <br /> <br />#define delay_262() _nop_();_nop_();_nop_() <br /> <br />void delay(unsigned int d) <br />{unsigned char j; <br />while(d!=0) <br /> { <br /> d--; <br /> j=70; <br /> do {j--;} while(j!=0); <br /> } <br /> <br />} <br /> <br />//*************************************************************** <br />//写两比特的数据 <br />void write(uchar add,uchar dat2bit) <br />{ <br /> P_262=(P_262&0x0f)|(add<<4); <br /> P_262=(P_262&0xf3)|((dat2bit<<2)&0x0c); <br /> P_wr=0; <br /> delay_262(); <br /> P_wr=1; <br /> delay_262(); <br /> } <br />//************************************************************** <br /> <br />//设置A通道工作模式 <br />void Set_AM(uchar mod) <br />{ <br /> write(0,mod); <br /> } <br />//设置A通道F值 <br />void Set_AF(uchar datF) <br />{ <br /> write(1,datF); <br /> datF=datF>>2; <br /> write(2,datF); <br /> datF=datF>>2; <br /> write(3,datF); <br /> } <br />//设置A通道Q值 <br />void Set_AQ(uchar datQ) <br />{ <br /> write(4,datQ); <br /> datQ=datQ>>2; <br /> write(5,datQ); <br /> datQ=datQ>>2; <br /> write(6,datQ); <br /> datQ=(datQ>>2)&1; <br /> write(7,datQ); <br /> } <br />//设置B通道工作模式 <br />void Set_BM(uchar mod) <br />{ <br /> write(8,mod); <br /> } <br />//设置A通道F值 <br />void Set_BF(uchar datF) <br />{ <br /> write(9,datF); <br /> datF=datF>>2; <br /> write(10,datF); <br /> datF=datF>>2; <br /> write(11,datF); <br /> } <br />//设置A通道Q值 <br />void Set_BQ(uchar datQ) <br />{ <br /> write(12,datQ); <br /> datQ=datQ>>2; <br /> write(13,datQ); <br /> datQ=datQ>>2; <br /> write(14,datQ); <br /> datQ=(datQ>>2)&1; <br /> write(15,datQ); <br /> } <br /> <br />//*************************************************************** <br />//基本计算 <br />//*************************************************************** <br />//根据截止频率fc计算中心频率f0 <br />// <br />/* <br />uchar CopF0(float q, float fc) <br />{ <br /> q = pow(q, 2); <br /> q = (float)q*2; <br /> q = (float)(q-1)/q;//1-(1/q) <br /> fc = (float)fc * sqrt(sqrt(1+pow(q,2))-q); <br /> } <br /> <br />float CopF0_tx(float q, float fc) <br />{ <br /> q = pow(q, 2); <br /> q = (float)q*2; <br /> q = (float)(q-1)/q;//1-(1/q) <br /> fc = fc * sqrt(sqrt(1+pow(q,2))+q); <br />} <br />*/ <br />//根据中心频率求设定值FN <br />float CopFn(uchar mod, float f0) <br />{ <br /> if (2==mod) <br /> { <br /> return ((float)(FLCK/(1.11072*f0))-26); <br /> } <br /> else <br /> { <br /> return ((float)((FLCK*2/f0)/PI)-26); <br /> } <br /> } <br /> <br />//根据Q求设定值QN <br />uchar CopQn(uchar mod, float q) <br />{ <br /> if (2==mod) <br /> { <br /> return (128-(float)(q/90.51)); <br /> } <br /> else <br /> { <br /> <br /> return (128-(float)(q/64)); <br /> } <br /> <br /> } <br /> <br />//*************************************** <br />//功能接口函数 <br /> <br />//设定频率 <br />Set_F0(uchar mod,float f0 ) <br />{ <br /> if(f0>28612) <br /> { <br /> Fclk_S2=0;Fclk_S1=0;Fclk_S0=0;//Fclk 4M <br /> FLCK=4000000; <br /> } <br /> else if(f0>14306) <br /> { <br /> Fclk_S2=0;Fclk_S1=0;Fclk_S0=1;//Fclk 2M <br /> FLCK=2000000; <br /> } <br /> else if(f0>7153) <br /> { <br /> Fclk_S2=0;Fclk_S1=1;Fclk_S0=0; //Fclk 1M <br /> FLCK=1000000; <br /> } <br /> else if(f0>3683) <br /> { <br /> Fclk_S2=0;Fclk_S1=1;Fclk_S0=1;//Fclk 512K <br /> FLCK=512000; <br /> } <br /> else if(f0>1831) <br /> { <br /> Fclk_S2=1;Fclk_S1=0;Fclk_S0=0;//Fclk 256 <br /> FLCK=256000; <br /> } <br /> else <br /> { <br /> Fclk_S2=1;Fclk_S1=0;Fclk_S0=1;//Fclk 128 <br /> FLCK=128000; <br /> } <br /> <br />Set_AF(CopFn(mod,f0)); <br />Set_BF(CopFn(mod,f0)); <br />} <br /> <br />//设置滤波器模式 , 0为底通、1为高通、2为带通 <br />Set_PFmod(uchar mod) <br />{ <br />if(mod<3) <br /> { <br /> switch(mod) <br /> { case 0: <br /> PFS1=0FS0=0; <br /> Mod=0; <br /> break; <br /> case 1: <br /> PFS1=0FS0=1; <br /> Mod=2; <br /> break; <br /> case 2: <br /> PFS1=1FS0=0; <br /> Mod=0; <br /> break; <br /> } <br /> Set_AM(Mod); Set_BM(Mod); <br /> } <br /> <br />} <br /> <br /> <br />//uint Tx; <br /> <br /> <br />float Tx; <br />void main(void) <br />{ <br /> <br /> /* <br /> Tx=CopFn(Mod,120048); <br /> Tx=CopQn(Mod,1); <br /> Tx=CopF0(0.7,60000); <br /> Tx=CopF0_tx(0.7,Tx); */ <br /> <br /> delay(10000);delay(10000);delay(10000); <br /> <br /> Set_AM(Mod); <br /> Set_AQ(CopQn(Mod,1)); <br /> Set_BM(Mod); <br /> Set_BQ(CopQn(Mod,1)); <br /> <br /> //Set_AF(CopFn(Mod,5000)); <br /> //Set_BF(CopFn(Mod,5000)); <br /> Set_PFmod(2); <br /> Set_F0(Mod,8000); <br /> <br /> for(;;); <br />} <br /> |
|