登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
聊天休息闲聊灌水
>
HMC833LP6GE控制程序问题
发帖
回复
1507
阅读
0
回复
[工作讨论]
HMC833LP6GE控制程序问题
离线
1430099892
UID :101862
注册:
2012-11-21
登录:
2013-02-16
发帖:
8
等级:
旁观者
0楼
发表于: 2012-11-21 14:09:27
— 本帖被 hefang 从 经验心得原创分享 移动到本区(2012-11-29) —
-SM_JR3<
以下是我用P89LPC925单片机写HMC833LP6GE的源程序,不知道哪儿写错了,调试始终不对,求高人帮忙看看程序哪儿有问题,还有配置寄存器有顺序吗?我按照数据手册上写的程序,可就是不对!拜谢高人指教!
~wDXjn"U&
I0zx'x)F
VH]}{i"`
//说明:利用HMC833LP6GE二分频产生1030M频率,晶振是20M,鉴相频率是20M ,该程序为整数分频
%!nI]|
#include <reg922.h>
}8 z:L<
#include<stdio.h>
+u Iq]tqe
#include "intrins.h"
eI$V2
sbit SEN=P0^0;
FB?~:7+'
sbit SDI = P0^1;
F^gTID
sbit CLK = P0^2;
FJZ'P;3
sbit SD_LD0=P0^3;
y-3'qq'E
//函数声明
wU+r]SK@
void PORT_INIT();
u"qVT9C$=
void Delay_us(unsigned int n);
T>asH
void Write_REG(unsigned char ADD,unsigned long int WR_DAT);
I.3~ctzu
unsigned long int Read_REG(unsigned char ADD);
6 ^3RfF^W
/****************************************/
8Ij<t{Lps
void main()
,)[9RgsE
{
~g=&wT11
// unsigned long int return_dat;
7_2D4CI
Delay_us(500); //HMC833开机时间为250US,所以单片机工作要延时
o>8~rtl
Delay_us(500);
m&gd<rt/
PORT_INIT();
d2UidDU5qa
SEN=0; //选择模式,如果首先是SEN的上升沿,就选择一个从机模式;如果首先是CLK的上升沿则选择多从机的模式
Z}$sY>E
_nop_();
JhFn"(O
_nop_();
1M&Lb.J6
SEN=1;
qhY+<S9
_nop_();
Yc]V+NxxQ
_nop_();
<ZSXOh,'
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
L4Jm8sy{
Write_REG(0x00,0x000020); //从复位状态释放出来
INr1bAe$
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
Ts !g=F
Write_REG(0x02,0x000001); //设定R=1值
qt@/
Write_REG(0x06,0x2027ca); //选择整数模式
1 .+O2qB
Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
>}* W$i
// Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
OY{fxBb
Write_REG(0x05,0x000d88); //配置VCO
<u\Hy0g
Write_REG(0x05,0x006110); //配置2分频
tG$O[f@U6
Write_REG(0x03,0x000067); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
o08g]a
// Write_REG(0x04,0x000000); //小数分频的N
#S?^?3d
Write_REG(0x05,0x002898); //不倍频
!-}Q{<2@W
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
DKt98;
gttsxOgktH
while(1)
our ^J8
{
`;}`>!8j
Delay_us(500);
iKaX8c,zI
Acw`ytV
if(SD_LD0==0)
P6GTgQ<'BA
{
,pD sU @
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
0FcDO5ia
Write_REG(0x00,0x000020); //从复位状态释放出来
D Yf2V6'
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
i) e6U(H
Write_REG(0x02,0x000001); //设定R=1值
A.r7 ks
Write_REG(0x06,0x2027ca); //选择整数模式
u9f^wn
Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
<CVX[R]U
// Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
}9\_s*
Write_REG(0x05,0x000f88); //配置VCO
{%3WHGr%L
Write_REG(0x05,0x006110); //配置2分频
"yw{A%J
Write_REG(0x03,0x000067); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
@ 3=pFYW)
// Write_REG(0x04,0x000000); //小数分频的N
Z (6.e8fK
Write_REG(0x05,0x000898); //不倍频
+=J$:/&U
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
s-rc0:I
}
"]=OR>
else;
&)k=ccm
}
VkJ">0k
}
w3(G!:
void PORT_INIT()
n0 l|7:Mk
{
hOB<6Tm[
P0M1 = 0X08;
@HbRfD/!
P0M2 = 0X00;
3q/Us0jr
}
Ij(<(y{?Q1
/*延时函数
+ -Rf@
/****************************************************************************************/
hhPQ.{]>
void Delay_us(unsigned int n)
.F7?}8>Z
{
g*b`o87PI
unsigned int i;
%J1'>nI!q
for(i=0;i<n;i++)
8j>V?'Szk
{
W]eILCo
_nop_();
z~h?"'
}
@;eH~3P
}
#tKks:eL
/**************给HMC833寄存器写数据函数*************************/
[ojL9.6
void Write_REG(unsigned char ADD,unsigned long int WR_DAT)
fSbLkd 9
{
B7uK:J:c*H
unsigned int m=0,j=0;
[UXVL}tk
unsigned long int temp1=0x800000;
>;Hx<FKxP
unsigned char temp2=0x20;
;t +p2i
// SEN=0;
?-c|c_|$
_nop_();
T@ESMPeU:X
_nop_();
:(XyiF<Ud
SEN=1;
5Yv*f:
SDI=0;
:0y-n.-{
CLK=0;
x,^-a
_nop_();
iqR6z\p&
_nop_();
^rfR<Q`
_nop_();
AHs%?5YTY;
_nop_();
X >7Pqn'
CLK=1;
IB# ua:
for(m=0;m<6;m++)
:? B4q#]N
{
/rZk^/'
CLK=1;
@\F7nhSfa
_nop_();
4C?{p%3c
_nop_();
c{Z "'t7
if(( ADD&temp2)==0x0)
6k0Awcr
SDI=0;
0 8L;u7u
else
9!=4}:+
SDI=1;
,5zY1C==Ut
_nop_();
K{_~W yRF
CLK=0;
N>3{!K>/Y:
_nop_();
aiX&`
temp2=temp2>>1;
9c]$d
RCTqV.L
}
C2R"96M7q
f ..
UhW{KIW
kKF=%J?X
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复