谁懂?请指点一下. AT89C2051单片机对锁相环(KB8825)编程?

AT89C2051单片机控制锁相环芯片:KB8825,频率合成
P1.4 使能端(EN)
P1.5 数据(DATA)
P1.6 clk
使能端为低电平 CLK在上升沿 数据开始发送 CLK下降 发送完一组编码之后 让EN保持一定时间的高电平 把编码锁存 再发送另一组数据.....
哪位做过相关的或者是有兴趣,指点一下
PS:KB8825是三星的锁相IC,谁要资料可以向我索取,或者自己搜
我的QQ:564801847
我是新手,临时磨的刀,但做了好久结果都没有对,实在心急,好郁闷了!我把代码贴出来大家帮忙看看好吗,这个是最基本的实现了,就是要求得到一个频点而已.

我是用4M基频,12.5K参考,VCO输出830M
P1.4,P1.5,P1.6分别接8825的8, 7 ,6
控制编码是 0010 0111 0110 00(MSB...LSB)
参考数是 0000 0101 0000 1100(MSB...LSB)
分频数是0000 1101 1000 0001 010(MSB...LSB)
--------不知道有没有错?
就写了一个输出830M单频率点的程序,现在没添加控制功能呢

;******************************************************************
EN EQU P1.4 ;定义使能端口
DATA EQU P1.5 ;定义数据端口
CLK EQU P1.6 ;定义时钟端口

ORG 0000H
SJMP START
ORG 0030H
;******************************************************************
; 主程序开始
START:CLR EN ;使能置0
CLR CLK ;时钟置0
CLR DATA ;数据口清零
;******************************************************************

UP0: MOV A,#27H
ACALL UP8DATA
MOV A,#60H
ACALL UP6DATA
NOP
NOP
SETB EN
NOP
NOP
NOP
CLR EN
NOP
NOP
NOP

;送数据十六进制数#2760H
;分2次送,先送高8位,再送低8位中的高6位
UP1: MOV A,#05H
ACALL UP8DATA ;发送
MOV A,#0CH
ACALL UP6DATA ;发送完毕

NOP
NOP
SETB EN
NOP
NOP
NOP
CLR EN
NOP
NOP
NOP

;
;送数据十六进制数对应二进制数
;分3次送,先送高8位,再送中间8位,再送3位
UP2: MOV A,#0DH
ACALL UP8DATA ;发送
MOV A,#81H
ACALL UP8DATA ;发送
MOV A,#40H
ACALL UP3DATA ;送完毕

NOP
NOP
SETB EN
NOP
NOP
NOP
CLR EN
NOP
NOP
NOP
RET
;******************************************************************
UP8DATA: MOV R3,#08H ;数据发送8次子程序
CLR C

UPDATA1: RLC A ;左移一位
MOV DATA,C
NOP
NOP
NOP
NOP
SETB CLK
NOP
NOP
NOP
NOP
CLR CLK
DJNZ R3,UPDATA1 ;8次减1循环发送,未发完转UPDATA1再发
RET ;子程序返回
UP6DATA: MOV R3,#06H
CLR C
UPDATA2: RLC A ;左移一位
MOV DATA,C
NOP
NOP
NOP
NOP
SETB CLK
NOP
NOP
NOP
NOP
CLR CLK
DJNZ R3,UPDATA2 ;6次减1循环发送,未发完转UPDATA2再发
RET
UP3DATA: MOV R3,#03H ;数据发送3次子程序
CLR C
UPDATA3: RLC A ;左移一位
MOV DATA,C
NOP
NOP
NOP
NOP
SETB CLK
NOP
NOP
NOP
NOP
CLR CLK
DJNZ R3,UPDATA3 ;3次减1循环发送,未发完转UPDATA2再发
RET ;子程序返回

END ;程序结束
[2768 byte] By [momiao123] at [2008-1-9]