登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
聊天休息闲聊灌水
>
HMC833LP6GE控制程序问题
发帖
回复
1506
阅读
0
回复
[工作讨论]
HMC833LP6GE控制程序问题
离线
1430099892
UID :101862
注册:
2012-11-21
登录:
2013-02-16
发帖:
8
等级:
旁观者
0楼
发表于: 2012-11-21 14:09:27
— 本帖被 hefang 从 经验心得原创分享 移动到本区(2012-11-29) —
!jlLF:v|1A
以下是我用P89LPC925单片机写HMC833LP6GE的源程序,不知道哪儿写错了,调试始终不对,求高人帮忙看看程序哪儿有问题,还有配置寄存器有顺序吗?我按照数据手册上写的程序,可就是不对!拜谢高人指教!
Io_bS+
hK^(Y
X.}i9a 6
//说明:利用HMC833LP6GE二分频产生1030M频率,晶振是20M,鉴相频率是20M ,该程序为整数分频
8LuM eGs
#include <reg922.h>
w]L^)_'Th
#include<stdio.h>
SFqY*:svOw
#include "intrins.h"
?-M?{De
sbit SEN=P0^0;
r{\c.\
sbit SDI = P0^1;
t Sibzl~
sbit CLK = P0^2;
C\2 rSyo
sbit SD_LD0=P0^3;
{<ms;Oi'
//函数声明
;IyA"C(i
void PORT_INIT();
wr);+.T9R
void Delay_us(unsigned int n);
g{PEplk
void Write_REG(unsigned char ADD,unsigned long int WR_DAT);
E$O-\)wY0
unsigned long int Read_REG(unsigned char ADD);
EZs"?A
/****************************************/
s1 mKz0q
void main()
Gbj^o o
{
FK;3atrz
// unsigned long int return_dat;
U<<@(d%T
Delay_us(500); //HMC833开机时间为250US,所以单片机工作要延时
m8[XA!,
Delay_us(500);
_EPfeh;
PORT_INIT();
<c'0-=
SEN=0; //选择模式,如果首先是SEN的上升沿,就选择一个从机模式;如果首先是CLK的上升沿则选择多从机的模式
JR6r3W
_nop_();
fh%|6k?#M
_nop_();
U]Y</>xGI
SEN=1;
Yzr)UJl*I
_nop_();
9-:\ NH^;
_nop_();
)LC"rSNx%
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
/3Y\s&y
Write_REG(0x00,0x000020); //从复位状态释放出来
!ZxK+Xqx[
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
pW&K=,7|
Write_REG(0x02,0x000001); //设定R=1值
M'gGoH}B+q
Write_REG(0x06,0x2027ca); //选择整数模式
KXrZ:4bg
Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
iYaS
// Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
*Wj]e%
Write_REG(0x05,0x000d88); //配置VCO
;f?suawMv
Write_REG(0x05,0x006110); //配置2分频
ZLIt3
Write_REG(0x03,0x000067); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
xP{)+$n
// Write_REG(0x04,0x000000); //小数分频的N
h~EGRg
Write_REG(0x05,0x002898); //不倍频
(>.lkR
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
{,NF'x4$
jouA ]E
while(1)
W6c]a/
{
jw5ldC>U
Delay_us(500);
^sVr#T
IL>VH`D
if(SD_LD0==0)
8 $qj&2 N
{
xeNj@\jdC5
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
8sus$:Ry
Write_REG(0x00,0x000020); //从复位状态释放出来
&9Kni/
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
mNA=<O;i)'
Write_REG(0x02,0x000001); //设定R=1值
B\54e Tn
Write_REG(0x06,0x2027ca); //选择整数模式
{ )g $
Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
G!T_X*^q2U
// Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
,A%p9
Write_REG(0x05,0x000f88); //配置VCO
/7N&4FrG
Write_REG(0x05,0x006110); //配置2分频
)JrG`CvdU
Write_REG(0x03,0x000067); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
?lca#@f(
// Write_REG(0x04,0x000000); //小数分频的N
LWdA3%
Write_REG(0x05,0x000898); //不倍频
\>$3'i=mQ
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
2A=q{7s
}
9Bao~(j/k
else;
+)xjw9b
}
!!k^M"e2
}
xovsh\s
void PORT_INIT()
c_4K
{
{8* d{0l
P0M1 = 0X08;
(S~kNbIa
P0M2 = 0X00;
*^oL$_Y
}
QYg V[\&
/*延时函数
"5HSCl$r%
/****************************************************************************************/
nEt{ltsS0
void Delay_us(unsigned int n)
=u-q#<h4;
{
:%-w/QwTR
unsigned int i;
EVlj#~mV
for(i=0;i<n;i++)
H)k V8wU
{
q6PG=9d0B
_nop_();
F|a'^:Qs
}
9?iA~r|+
}
?}e^-//*i
/**************给HMC833寄存器写数据函数*************************/
+OI <0
void Write_REG(unsigned char ADD,unsigned long int WR_DAT)
R53^3"q~
{
4mHk,Dd9,
unsigned int m=0,j=0;
F| jl=i
unsigned long int temp1=0x800000;
hmkm^2
unsigned char temp2=0x20;
s*Nb=v.e9
// SEN=0;
N:q\i57x
_nop_();
>[2;
_nop_();
eo*l^7
SEN=1;
2@N9Zk{{J
SDI=0;
hd*GDjmRQ/
CLK=0;
t6uYFxE
_nop_();
OO2uE ;( 3
_nop_();
Vk> &
_nop_();
VqUCcT
_nop_();
4/ WKR3X
CLK=1;
@<.ei)cqb
for(m=0;m<6;m++)
b:5-0uxjs
{
@O`T|7v
CLK=1;
$cWt^B'
_nop_();
{/j gB"9
_nop_();
fK^W6)uuV
if(( ADD&temp2)==0x0)
Ht:\ z;cu
SDI=0;
+ \]-"
else
jF-:e;-
SDI=1;
G?v!Uv8O
_nop_();
43 vF(<r&f
CLK=0;
f(G1xw]]@Y
_nop_();
= GyABK
temp2=temp2>>1;
h,?%,GI
%VGW]!QR
}
9W0*|!tQ,+
f ..
8@[S,[
$1$0M
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复