#include <br />#include <br />#include <br />typedef unsigned char uchar ;<br />typedef unsigned int uint;<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 />sbit PFS0=P2^3;//工作模式工作模式选择0<br />sbit PFS1=P2^4;//工作模式工作模式选择1<br />long FLCK = 1000000 ; //MAX262工作频率<br />uchar Mod=2;//工作模式0,1,2,3<br />#define PI 3.1415926<br /><br />#define delay_262() _nop_();_nop_();_nop_()<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 />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 />//设置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 />//根据截止频率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 />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 (1==mod)<br /> {<br /> return ((float)((FLCK*2.8284271247/f0)/PI)-26);<br /> }<br />else<br /> {<br /> return ((float)((FLCK*2/f0)/PI)-26);<br /> }<br />}<br />//根据Q求设定值QN<br />uchar CopQn(uchar mod, float q)<br />{<br />if (1==mod)<br /> {<br /> return (128-(float)(90.51/q));<br /> }<br />else<br /> {<br /> return (128-(float)(64/q));<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 />Set_AF(CopFn(mod,f0));<br />Set_BF(CopFn(mod,f0));<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 />//uint Tx;<br /><br />float Tx;<br />void main(void)<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 /> delay(10000);delay(10000);delay(10000);<br /> Set_AM(Mod);<br /> Set_AQ(CopQn(Mod,1));<br /> Set_BM(Mod);<br /> Set_BQ(CopQn(Mod,1));<br /> //Set_AF(CopFn(Mod,5000));<br /> //Set_BF(CopFn(Mod,5000));<br /> Set_PFmod(2);<br /> Set_F0(Mod,8000);<br /> for(;;);<br />}<br /><br /><br />请各位帮忙看看。这个程序中52单片机的时钟信号是怎么输入给MAX262的。硬件应该怎么样连接? |
|