登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
聊天休息闲聊灌水
>
HMC833LP6GE控制程序问题
发帖
回复
1505
阅读
0
回复
[工作讨论]
HMC833LP6GE控制程序问题
离线
1430099892
UID :101862
注册:
2012-11-21
登录:
2013-02-16
发帖:
8
等级:
旁观者
0楼
发表于: 2012-11-21 14:09:27
— 本帖被 hefang 从 经验心得原创分享 移动到本区(2012-11-29) —
B 3eNvUFZg
以下是我用P89LPC925单片机写HMC833LP6GE的源程序,不知道哪儿写错了,调试始终不对,求高人帮忙看看程序哪儿有问题,还有配置寄存器有顺序吗?我按照数据手册上写的程序,可就是不对!拜谢高人指教!
M-5zsN
&wB?ks
Rx4O?7;
//说明:利用HMC833LP6GE二分频产生1030M频率,晶振是20M,鉴相频率是20M ,该程序为整数分频
{"^#CSi
#include <reg922.h>
zQx7qx
#include<stdio.h>
MLn?t^v-
#include "intrins.h"
j,g.Eo
sbit SEN=P0^0;
h{Y#. j~aS
sbit SDI = P0^1;
,,(BW7(
sbit CLK = P0^2;
_MGhG{p7t
sbit SD_LD0=P0^3;
(a8oI)~
//函数声明
u=B,i#>s
void PORT_INIT();
;Z#DB$o\
void Delay_us(unsigned int n);
mvBUm-X
void Write_REG(unsigned char ADD,unsigned long int WR_DAT);
:sekMNM
unsigned long int Read_REG(unsigned char ADD);
$!"*h
/****************************************/
6H!"oC&
void main()
dRLvej,
{
ZSW`/}Dp;
// unsigned long int return_dat;
Ks^EGy+O:-
Delay_us(500); //HMC833开机时间为250US,所以单片机工作要延时
JOH=)+xj
Delay_us(500);
Fy]j33E
PORT_INIT();
,m.IhnCV\
SEN=0; //选择模式,如果首先是SEN的上升沿,就选择一个从机模式;如果首先是CLK的上升沿则选择多从机的模式
f<( ysl1[
_nop_();
Og<UW^VR
_nop_();
Y&`nB,'
SEN=1;
.JL?RH2@8
_nop_();
0t}&32lL&
_nop_();
}Gm/9@oKc
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
#3Jn_Y%P.
Write_REG(0x00,0x000020); //从复位状态释放出来
MQGR-WV=5
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
(:T\<
Write_REG(0x02,0x000001); //设定R=1值
NpY zN|W:
Write_REG(0x06,0x2027ca); //选择整数模式
9p<ZSh
Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
ZfN%JJOz(
// Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
c*x5t"{
Write_REG(0x05,0x000d88); //配置VCO
[?Q$b5j/M
Write_REG(0x05,0x006110); //配置2分频
mGqT_
Write_REG(0x03,0x000067); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
+t PqU6
// Write_REG(0x04,0x000000); //小数分频的N
E:ocx2dp
Write_REG(0x05,0x002898); //不倍频
khtSZ"8X
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
+eD+Z.{
3.s.&^
while(1)
uvf}7
{
Kdwt^8Umh
Delay_us(500);
B>M @ '
`>cBR,)r
if(SD_LD0==0)
|Ptv)D
{
<;Bv6.Z
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
X,8]g.<
Write_REG(0x00,0x000020); //从复位状态释放出来
%2D9]L2Up
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
rik0F
Write_REG(0x02,0x000001); //设定R=1值
/<$\)|r
Write_REG(0x06,0x2027ca); //选择整数模式
?ydqmj2[F
Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
,P9q[
// Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
YCd[s[
Write_REG(0x05,0x000f88); //配置VCO
rt[w yz8
Write_REG(0x05,0x006110); //配置2分频
qE&R.I!o
Write_REG(0x03,0x000067); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
Wc+)EX~KS
// Write_REG(0x04,0x000000); //小数分频的N
S @MO
Write_REG(0x05,0x000898); //不倍频
X]OVc<F
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
{"uLV{d
}
:v!e8kM\x
else;
G F-\WD
}
CQx#Xp>=s
}
'=2/0-;Jf
void PORT_INIT()
]l WEdf+
{
hc;8Vsa
P0M1 = 0X08;
%`[Oz[V
P0M2 = 0X00;
9zKrFqhNo
}
#r}O =izi
/*延时函数
-6OgM}
/****************************************************************************************/
fGtUr_D
void Delay_us(unsigned int n)
U\ Et
{
eJJD'Z
unsigned int i;
N1 }#6YNw
for(i=0;i<n;i++)
l$~3_3+
{
%|:Gn) 8
_nop_();
pp#xN/V#a
}
uwcm%N;I"
}
?B"k9+%5ej
/**************给HMC833寄存器写数据函数*************************/
$6evK~
void Write_REG(unsigned char ADD,unsigned long int WR_DAT)
5QjM,"`mp
{
<n)J~B^
unsigned int m=0,j=0;
[%alnY
unsigned long int temp1=0x800000;
-<[MM2Y
unsigned char temp2=0x20;
`EUufTYi
// SEN=0;
6{ql.2 Fa
_nop_();
qBKRm0<W
_nop_();
x9s7:F
SEN=1;
.m&JRzzV
SDI=0;
/7 CF f&4
CLK=0;
s^{hdCCl67
_nop_();
Cz%tk}2
_nop_();
ok"v`76~f5
_nop_();
w@&4dau
_nop_();
`5V=U9zdE
CLK=1;
`m.).Hda
for(m=0;m<6;m++)
pu:Ie#xTDf
{
D+Ke)-/
CLK=1;
'Olp2g8=
_nop_();
xpWx6
_nop_();
G^`IfF-j
if(( ADD&temp2)==0x0)
h~]G6>D9)>
SDI=0;
3 %ppvvQ
else
o"te7nBI
SDI=1;
vU:FDkx*nn
_nop_();
4$);x/ a
CLK=0;
csceu+IA
_nop_();
<QlpIgr
temp2=temp2>>1;
G% |$3
INi9`M.h
}
qgT~yDm
f ..
Ry@QJn I<
`OL@@`'^{S
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复