各位大侠,我才接触ADF4118。用51进行控制,但为什么我的程序老是控制不了频率呢?锁不住。那位大侠帮我看一下<br />//*****************************<br />//*** L BAND PLL ***<br />//*** ODU C 4.9GHz 数字锁定 p=32 pd=10M<br />//*****************************<br />#include <intrins.h><br />#include "math.h"<br />#include "absacc.h"<br />#include "reg51.h"<br /><br />#define LOW 0<br />#define HIGH 1<br />#define TRUE 1<br />#define FALSE ~TRUE<br /><br />sbit CLK=P3^1; // 时钟信号<br />sbit DATA=P3^0; // 数据信号<br />sbit LE=P2^7; // 使能信号 <br />sbit key=P2^6; // <br /><br />unsigned char REFCOUNT1=0x00;<br />unsigned char REFCOUNT2=0x01;<br />unsigned char REFCOUNT3=0x00;<br />unsigned char NCOUNT1=0x00;<br />unsigned char NCOUNT2=0x17;<br />unsigned char NCOUNT3=0x9d;<br />unsigned char FUNCTION1=0x00;<br />unsigned char FUNCTION2=0x00;<br />unsigned char FUNCTION3=0x93;<br /><br />void delay(void)<br />{<br /> unsigned int i;<br /> for(i=0;i<100;i++);<br />}<br />/****************************************************************************<br />* Prototype: void I_start(void);<br />* Function: start I2C,start condition:when SCL=HIGH,SDA from HIGH to LOW<br />* I2C是一种芯片间的通讯方式,采用两条线进行通讯,一条数据线,一条时钟线。<br />****************************************************************************/<br />void PLL_start( void ) {<br /> <br /> <br /> LE=LOW; //0,START<br /><br /> }<br /><br />/****************************************************************************<br />* Prototype: void I_stop(void);<br />* Function: stop I2C,stop condition:when SCL=HIGH,SDA from LOW to HIGH<br />****************************************************************************/<br />void PLL_stop( void ) {<br /> <br /><br /><br /> LE=HIGH; //1,STOP<br /><br />}<br /><br /><br />/****************************************************************************<br />* Prototype: bit I_clock(void);<br />* Function: Provide CLK for I2C BUS,return SDA when CLK is HIGH,<br />* the function can be used in data transmitting and receiving <br />****************************************************************************/<br />void PLL_clock( void ) {<br /> CLK = LOW ; <br /> CLK = HIGH ;<br /> _nop_();<br /> CLK = LOW ; <br /><br /> }<br /><br />/****************************************************************************<br />* Prototype: bit I_send(byte I_data);<br />* Function: send 8 bit data and ask an ACK signal<br />* if receive ACK return 1(TRUE),or else return 0(FALSE) <br />****************************************************************************/<br />void PLL_send( unsigned char I_data ) {<br /> unsigned char i ;<br /> // send 8 bit data<br /> for ( i=0 ; i<8 ; i++ ) //发8位<br /> {<br /> DATA = (bit)( I_data & 0x80) ; //置DATA为最高位和1与的结果<br /> I_data = I_data << 1 ; //I_data左移1位<br /> PLL_clock() ; //发送DATA值<br /> }<br />}<br />/****************************************************************************<br />* Prototype: bit I_send(byte I_data);<br />* Function: send 8 bit data and ask an ACK signal<br />* if receive ACK return 1(TRUE),or else return 0(FALSE) <br />****************************************************************************/<br />void PLL_send5( unsigned char I_data ) {<br /> unsigned char i ;<br /> I_data = I_data << 3 ; //I_data左移1位<br /> // send 8 bit data<br /> for ( i=0 ; i<5 ; i++ ) //发8位<br /> {<br /> DATA = (bit)( I_data & 0x80) ; //置DATA为最高位和1与的结果<br /> I_data = I_data << 1 ; //I_data左移1位<br /> PLL_clock() ; //发送DATA值<br /> }<br />}<br /><br /><br /><br />void main(){<br />unsigned char j;<br />PLL_start();<br />PLL_send5(FUNCTION1);<br />PLL_send(FUNCTION2);<br />PLL_send(FUNCTION3);<br />PLL_stop();<br /><br />PLL_start();<br />PLL_send5(REFCOUNT1);<br />PLL_send(REFCOUNT2);<br />PLL_send(REFCOUNT3);<br />PLL_stop();<br /><br />PLL_start();<br />PLL_send5(NCOUNT1);<br />PLL_send(NCOUNT2);<br />PLL_send(NCOUNT3);<br />PLL_stop();<br />key=0;<br />PLL_start();<br />while(1)<br />{<br /> delay();<br /> if(key)<br /> {<br /> PLL_start();<br /> PLL_send5(FUNCTION1);<br /> PLL_send(FUNCTION2);<br /> PLL_send(FUNCTION3);<br /> PLL_stop();<br /><br /> PLL_start();<br /> PLL_send5(REFCOUNT1);<br /> PLL_send(REFCOUNT2);<br /> PLL_send(REFCOUNT3);<br /> PLL_stop();<br /><br /> PLL_start();<br /> PLL_send5(NCOUNT1);<br /> PLL_send(NCOUNT2);<br /> PLL_send(NCOUNT3);<br /> PLL_stop(); <br /> PLL_start();<br /> }<br />}<br /><br /><br />} |
|