枭龙战机

ADF4360控制频率输出程序

0
阅读(15184)

 

#include  
float fOUT = 1750;
int fREF = 10;
int fPFD = 200;
int R="50";
int NCounter="0";
int PCounter="8";
int BCounter="0";
int ACounter="0";
int N2=0;
int N1=0;
int N0=0;
int bindata[8]={0,0,0,0,0,0,0,0};

void InitSystemClock(void)
{
  unsigned char i;
  BCSCTL1 = RSEL0 + RSEL1 + RSEL2;              
  BCSCTL2=SELM_2+SELS;
  do 
  {
  IFG1 &= ~OFIFG;
  for (i = 0xFF; i > 0; i--); 
  }
  while ((IFG1 & OFIFG) != 0);
}
void PortInit(void)
{
 P1SEL=0X00;
 P1DIR=0XFF;
 P2SEL=0X00;
 P2DIR=0XFF;
 P3SEL=0X00;
 P3DIR=0XFF;
 P4SEL=0X00;
 P4DIR=0XFF;
 P5SEL=0X00;
 P5DIR=0XFF;
 P6SEL=0X00;
 P6DIR=0XFF;
 P1OUT=0X00;
 P2OUT=0X00;
 P3OUT=0X00;  
 P4OUT=0X00;
 P5OUT=0X00;
 P6OUT=0X00;
} 
void delay(int count)
    {
     while(count!=0) count--;
    } 
void MO2(int dbin)
{
    if(dbin==1)
    {
        P5OUT |= BIT1;
    }
    if(dbin==0)
    {
        P5OUT &= ~BIT1;
    }
    P5OUT |= BIT3;
    P5OUT &= ~BIT3;
}
void bin(int n)
{
    int i="0";
    for(i=0;i<8;i++)
    {
        bindata[i]=n%2;
        n="n/2";
    }
}
void data_out(int decidata)
{
    int i="7";
    bin(decidata);
    for(i=7;i>=0;i--)
    {
        MO2(bindata[i]);
    }
}
void set_R(int fref,int fpfd) // fref为晶振频率(单位为MHz),fpfd为鉴相频率(单位为Khz)
{
    int R2 = 0;
    int R1 = 0;
    int R0 = 0;
    fREF = fref;
    fPFD = fpfd;
    R = fREF*1000/fPFD;
    R2 = 0;
    R1 = (R-R&0x003F)/64;
    R0 = (R&0x003F)*4+1;
    P5OUT &= ~BIT4;
    data_out(R2);
    data_out(R1);
    data_out(R0);
    P5OUT |= BIT4;
}
void set_Control(int P)
{
    PCounter = P;
    P5OUT &= ~BIT4;
    if(P == 8)
    {
        MO2(0);MO2(0);
    }
    if(P == 16)
    {
        MO2(0);MO2(1);
    }
    if(P == 32)
    {
        MO2(1);MO2(0);
    }
    MO2(0);MO2(0);MO2(1);MO2(1);MO2(1);MO2(1);
    MO2(1);MO2(1); MO2(1);MO2(1);MO2(1);MO2(0);MO2(0);MO2(1);
    MO2(0);MO2(0); MO2(1);MO2(0);MO2(1);MO2(0);MO2(0);MO2(0);
    
    P5OUT |= BIT4;
}
void set_N(float fOUT) // fOUT为锁相环频综输出频率(单位为MHz)
{
    NCounter = fOUT*(1000/fPFD);
    BCounter = NCounter/PCounter;
    ACounter = NCounter-BCounter*PCounter;
    
    N1 = BCounter&0x00FF;
    N2 = (BCounter-N1)/256;
    N0 = ACounter*4+2;
    P5OUT &= ~BIT4;
    delay(0x18FF);
    data_out(N2);
    data_out(N1);
    data_out(N0);
    P5OUT |= BIT4;
}
void main( void )
{
    WDTCTL="WDTPW"+WDTHOLD;
    InitSystemClock();
    PortInit();
    
    set_R(10,200); // 晶振频率10MHz,鉴相频率200KHz
    set_Control(8); // 此项默认为8
    set_N(1780); // 频综输出频率1780MHz
}