|

楼主 |
发表于 2011-12-19 00:01:51
|
显示全部楼层
/************PLL_MB1504**************/
/**********HCL***********/
/*************2006.9.10**************/
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define nop _nop_();
sbit MB1504_CLK =P0^5; //1504clock
sbit MB1504_DATA=P0^6; //1504data
sbit MB1504_LE = P0^7; //1504lock
sbit led=P1^0;
uchar divider;
ulong DATA1504;
ulong fredata,swalldata,setdata,fm;
void delay(unsigned int x)
{
unsigned int y,t;
for(y=0;y<x;y++)
{
for(t=0;t<100;t++)
;
} ;
}
/**********************************/
//Set Ref Fre
//Ref Osc=6MHz
//Ref Fre=10KHz
/**********************************/
void RefFreq(uint Ref,bit divider)
{
uchar i;
if(divider==0)
MB1504_DATA=0;
else
MB1504_DATA=1;
MB1504_CLK=0;
nop;
MB1504_CLK=1;
nop;
nop;
nop;
nop;
nop;
MB1504_CLK=0;
MB1504_CLK=0;
i=14;
while(i--)
{ nop;
MB1504_DATA = Ref & 0x2000;
nop;
MB1504_CLK= 0;
nop;
MB1504_CLK = 1;
nop;
Ref = Ref<<1 ;
MB1504_CLK=0;
}
MB1504_CLK=0;
MB1504_DATA =1;
nop;
MB1504_CLK=1;
nop;
nop;
nop;
nop;
MB1504_CLK=0;
MB1504_DATA =0;
MB1504_LE=1;
}
/**********************************/
//Set Frequence
/**********************************/
void SetFre(ulong ProgFre,uchar SwallFre)//
{ uchar i;
MB1504_LE=0;
i=11;
MB1504_CLK=0;
while(i--)
{
MB1504_DATA = ProgFre & 0x400;
nop;
MB1504_CLK= 0;
nop;
MB1504_CLK = 1;
nop;
ProgFre= ProgFre<<1;
MB1504_CLK=0;
}
i=7;
while(i--)
{
MB1504_CLK=0;
MB1504_DATA = SwallFre & 0x40;
nop;
MB1504_CLK= 0;
nop;
MB1504_CLK = 1;
nop;
nop;
SwallFre= SwallFre<<1 ;
MB1504_CLK=0;
MB1504_CLK=0;
}
MB1504_DATA =0;
nop;
MB1504_CLK=0;
nop;
MB1504_CLK=1;
nop;
nop;
nop;
nop;
nop;
MB1504_CLK=0;
MB1504_DATA =0;
MB1504_LE=1;
nop;
nop;
MB1504_LE=0;
}
/******************************/
//Frequency
/******************************/
void freq1504(ulong x)
{
MB1504_LE=0;
MB1504_CLK=0;
MB1504_DATA =0;
fredata=x;
DATA1504=fredata;
setdata=DATA1504/32;
swalldata=DATA1504%32;
RefFreq(600,1); //晶振6MHz,除以600,所以参考频率10KHz
//如果除以6000,那么参考频率是1KHz
SetFre(setdata,swalldata);
}
/******************************/
//Main
/******************************/
main()
{
delay(20);
led=0; //程序跑动指示
delay(5);
freq1504(4870); //本振48.7M,对应接收频率f=48.7-10.7=38M
//如果参考频率是1khz,入口数值是48700
while(1);
} |
|