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

📄 pll.c

📁 ADI公司鉴相器锁相程序(51单片机代码)
💻 C
字号:

 
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int


sbit    LE4113=P1^7;
sbit    DI4113=P1^6;        /*改为实际硬件i/o口*/
sbit    CK4113=P1^5;

void set_LO(uint freq);

 
void set_uart(void);
void receive(void);
void command_process(void);

 
void delay_ms(uint);                      /*毫秒延时程序*/
void delay_us(uchar time);
 
 
 main()
 
 {	
        DI4113=CK4113=LE4113=0;
	set_LO(3240);                      /*改为PLL输出频率*/  
        while(1)
	{;
	}
  }
 
 

/************************************************************************/
void set_LO(uint x)
       {
	uint 	temp;
	uint	B,R;
	uchar	A, i;
	x=x/2;                    /* x=x/鉴相频率 */
		
	CK4113 = 0 ;
	/* Initialization Latch input */
	for(i=0;i<24;i++)
	{
		switch(i)
		{
		case	0:
			DI4113	= 0 ;	/*DB23	Prescaler Value P2P1 == 0 0 */
			break;
		case	1:
			DI4113	= 0 ;	/*DB22	Prescaler Value P2P1 == 0 0 */
			break;          /*P=8/9      前置分频比设定     */
		case	2:
			DI4113	= 0 ;	/*DB21	PD2=0,1*/
			break;
		case	3:
			DI4113	= 1 ;	/*DB20  CP16~CP11, current setting*/
			break;
		case	4:
			DI4113	= 1 ;	/*DB19	``````*/
			break;
		case	5:
			DI4113	= 0 ;	/*DB18   ```````*/
			break;
		case	6:
			DI4113	= 1 ;	/*DB17   ``````` */
			break;
		case	7:
			DI4113	= 1 ;	/*DB16     `````````*/
			break;
		case	8:
			DI4113	= 1 ;	/*DB15   ````` */
			break;
		case	9:
			DI4113	= 1 ;	/*DB14   Tc4~Tc1,timeout=35(PFD cycles) */
			break;
	        case	10:
			DI4113	= 0 ;	/*DB13   ``````` */
			break;
		case	11:
			DI4113	= 0 ;	/*DB12   ````````` */
			break;
		case	12:
			DI4113	= 0 ;	/*DB11    ```````` */
			break;
		case	13:
			DI4113	= 0 ;	/*DB10  F5F4=0 0 Fastlock disabled  */
			break;
		case	14:
			DI4113	= 0 ;	/*DB9    ````````````  */
			break;
		case	15:
			DI4113	= 0 ;	/*DB8   F3=0,CP=Normal  */
			break;
		case	16:
			DI4113	= 1 ;	/*DB7   F2=1,PD Polarity=Positive */
			break;
		case	17:
			DI4113	= 0 ;	/*DB6   M3~M1,Muxout output=Digital lock detect */
			break;
		case	18:
			DI4113	= 0 ;	/*DB5   ``````  */
			break;
		case	19:
			DI4113	= 1 ;	/*DB4    ```````  */
			break;
		case	20:
			DI4113	= 0 ;	/*DB3   PD1=0,Normal operation */
			break;
		case	21:
			DI4113	= 0;	/*DB2  F1=0; Normal */
			break;
		case	22:
			DI4113	= 1 ;	/*DB1   C2C1=11 Initialization Latch register */
			break;
		case	23:
			DI4113	= 1 ;	/*DB0   ````````   */
			break;
	 	default:break;
		       }
		delay_us(5);
		CK4113 = 1 ;
		delay_us(5);
		CK4113 = 0 ;
	              }
	         LE4113=1;  
                 delay_ms(15);	
                 LE4113 = 0;	
                 delay_us(5);
		 /*R Counter Input  */
	         for(i=0;i<8;i++)
	     {
		switch(i)
		{
		case	0:
			DI4113	= 0 ;	/*DB23	Any Value */
			break;
		case	1:
			DI4113	= 0;	/*DB22	DLY,SYNC=0 0 Normal Operation */
			break;
		case	2:
			DI4113	= 0 ;	/*DB21	``````````` */
			break;
		case	3:
			DI4113	= 0 ;	/*DB20  LDP=0,Lock detector precision  */
			break;
		case	4:
			DI4113	= 0 ;	/*DB19	T2T1=0 0 Normal Operation  */
			break;
		case	5:
			DI4113	= 0 ;	/*DB18   ```````   */
			break;
		case	6:
			DI4113	= 0 ;	  /*DB17   ABP2,ABP1=0 0,Antibacklash                                           Pulsewidth=3.0ns */
			break;
		case	7:
			DI4113	= 0 ;	/*DB16     `````````   */
			break;
             default:   break;
		        }
		delay_us(5);
		CK4113 = 1 ;
		delay_us(5);
		CK4113 = 0 ;
	              }
	/*divider ratio(R COUNTER),R15..R1.   R	= 13. fosc/R =	10MHz/5 = 2MHz */
   	R=5;
	for(i=0; i<14; i++)
	{
		temp = R & (0x0001 << (13-i)) ;
		if (temp)
			DI4113	= 1 ;
		else
			DI4113	= 0 ;
		delay_us(5);
		CK4113 = 1 ;
		delay_us(5);
		CK4113 = 0 ;
	          }
	/*control bits ,c2c1 ==	B00 -->  R	counter  */
	DI4113	= 0 ;	delay_us(5); /*C2  */
	CK4113  = 1 ;	delay_us(5);	CK4113 = 0 ;
	DI4113  = 0 ;   delay_us(5);/*C1  */
	CK4113  = 1 ;	delay_us(5);	CK4113 = 0 ;
	LE4113=1;   delay_ms(15);	LE4113 = 0;	delay_us(5);
		
	/*  N counter input*/
		
	DI4113	= 0 ;	
        delay_us(5);    /*DB23 Any Value;*/
	CK4113 = 1 ;	
        delay_us(5);	
        CK4113 = 0 ;
		
	DI4113	= 0 ;	
         delay_us(5);    /*DB22 Any Value; */
	CK4113 = 1 ;	
        delay_us(5);	 
        CK4113 = 0 ;
		
	 DI4113	= 0 ;	
         delay_us(5);	  /*DB21 G1=0,CP Current seting 1 is Permanently Used; */                    CK4113 = 1 ;	
          delay_us(5);
	CK4113 = 0 ;
		
	 /*divider ratio(N COUNTER)  input B18..B1     */
	 /*******************************************************************/
	B=x/8;                     /*B=x/前置分频比*/
	for(i=0; i<13; i++)		
	{	//B
		temp = B & (0x0001 << (12-i))	;
		if (temp)
			DI4113	= 1 ;
		else
			DI4113	= 0 ;
		delay_us(5);
		CK4113 = 1;	delay_us(5);	CK4113 = 0 ;
	}
	/* input A6..A1 */
	/*******************************************************************/
	A=x%8;                   /*A=x%前置分频比*/
	for(i=0; i<6; i++)		
	{	//A
		temp = A & (0x01 <<	(5-i))	;
		if (temp)
			DI4113	= 1 ;
		else
			DI4113	= 0 ;
		delay_us(5);
		CK4113 = 1;		delay_us(5);	CK4113 = 0 ;
	}
	/*control bits ,c2c1 ==	B01 -->  N	counter*/
	DI4113	= 0 ;	delay_us(5);  /*C2 */
	CK4113  = 1 ;	delay_us(5);	CK4113 = 0 ;
		
	DI4113	= 1 ;	delay_us(5); /*C1*/
	CK4113  = 1 ;	delay_us(5);	CK4113 = 0 ;
		
	LE4113=1;   delay_ms(15);	LE4113 = 0;	delay_us(5);
               }
		

 
 

/*延时毫秒程序*/
void delay_ms(uint time)
       {
	    uint i;
            while(time--)
	    for(i=0;i<114;i++);
                   }

/*微秒延时函数*/
void delay_us(uchar time)
       {
 	while(time--);
           }

 
 

⌨️ 快捷键说明

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