'
修改了程序,改变了位移顺序,不用倒位换算,直接添加参考分频/编程分频/吞脉冲分频数就可以了
;程序功能: 设置mb1504频率为102mhz
;
; 晶振6.4mhz,基准频率25k,参考分频256,编程分频63,吞脉冲分频48
;
;******************************************************************
le8 equ p2.0 ;定义使能端口
da8 equ p2.1 ;定义数据端口
ck8 equ p2.2 ;定义时钟端口
ckfh equ 40h ;参考分频高位
ckfl equ 41h ;参考分频低位
bcfh equ 42h ;编程分频高位
bcfl equ 43h ;编程分频低位
tmcf equ 44h ;吞脉冲分频
org 0000h
sjmp start
org 0030h
;******************************************************************
start: mov ckfh,#1
mov ckfl,#1
mov tmcf, #48
mov bcfh,#0h
mov bcfl,#63
clr le8 ;使能置0
clr ck8 ;时钟置0
clr da8 ;数据口清零
;******************************************************************
mov a,ckfl ;控制位,数据位整合
setb c
rlc a ;控制位,数据位整合
mov ckfl,a ;控制位,数据位整合
mov a,ckfh ;控制位,数据位整合
rlc a ;控制位,数据位整合
clr acc.7 ;预分频控制位lre为64 setb为32
mov ckfh,a ;控制位,数据位整合
up1: mov a,ckfh
acall up8data ;发送参考分频高位
mov a,ckfl
acall up8data ;;发送参考分频低位
nop
nop
setb le8
nop
nop
nop
clr le8
nop
nop
nop
up2:
mov a, bcfh
swap a
rl a
acall up3data ;发送编程分频高3位
mov a, bcfl
acall up8data ;发送编程分频低8位
clr c
mov a,tmcf
rlc a ;吞脉冲控制位数据位整合
acall up8data ;送吞脉冲分频
nop
nop
setb le8
nop
nop
nop
clr le8
nop
nop
nop
setb le8
setb ck8 ;
ajmp$
ret
;******************************************************************
up8data: mov r3,#08h ;数据发送8次子程序
clr c
updata1: rlc a ;左移一位
mov da8,c
nop
nop
nop
nop
setb ck8
nop
nop
nop
nop
clr ck8
djnz r3,updata1 ;8次减1循环发送,未发完转updata1再发
ret ;子程序返回
up3data: mov r3,#03h ;数据发送3次子程序
clr c
updata2: rlc a ;左移一位
mov da8,c
nop
nop
nop
nop
setb ck8
nop
nop
nop
nop
clr ck8
djnz r3,updata2 ;3次减1循环发送,未发完转updata2再发
ret ;子程序返回
end ;程序结束
'
老兄,这程式是通过试验了的吗?好象有点问题哦,我烧到我板子上怎么也不能正常工作,后来改了一点点,才可正常!
;程序功能: 设置mb1504频率为102mhz
;
; 晶振6.4mhz,基准频率25k,参考分频256,编程分频63,吞脉冲分频48
;
;******************************************************************
power bit p3.6
le8 equ p2.7 ;定义使能端口
da8 equ p2.6 ;定义数据端口
ck8 equ p2.5 ;定义时钟端口
ckfh equ 40h ;参考分频高位
ckfl equ 41h ;参考分频低位
bcfh equ 42h ;编程分频高位
bcfl equ 43h ;编程分频低位
tmcf equ 44h ;吞脉冲分频
org 0000h
sjmp start
org 0030h
;******************************************************************
start:
clr power
mov ckfh,#1
mov ckfl,#0;修改了这里mov tmcf, #48
mov bcfh,#0h
mov bcfl,#63
clr le8 ;使能置0
clr ck8 ;时钟置0
clr da8 ;数据口清零
;******************************************************************
mov a,ckfl ;控制位,数据位整合
setb c
rlc a ;控制位,数据位整合
mov ckfl,a ;控制位,数据位整合
mov a,ckfh ;控制位,数据位整合
rlc a ;控制位,数据位整合
clr acc.7 ;预分频控制位lre为64 setb为32
mov ckfh,a ;控制位,数据位整合
up1: mov a,ckfh
acall up8data ;发送参考分频高位
mov a,ckfl
acall up8data ;;发送参考分频低位
nop
nop
nop
nop
setb le8
nop
nop
nop
clr le8 ;这里加了几个nop(其它几点也一样)
nop
nop
nopup2:
mov a, bcfh
swap a
rl a
acall up3data ;发送编程分频高3位
mov a, bcfl
acall up8data ;发送编程分频低8位
clr c
mov a,tmcf
rlc a ;吞脉冲控制位数据位整合
acall up8data ;送吞脉冲分频
nop
nop
nop
nop
setb le8
nop
nop
nop
clr le8
nop
nop
nop
;setb le8;这两句不用的
;setb ck8 ;ajmp $
ret
;******************************************************************
up8data: mov r3,#08h ;数据发送8次子程序
clr c
updata1: rlc a ;左移一位
mov da8,c
nop
nop
nop
nop
setb ck8
nop
nop
nop
nop
clr ck8
nop
nop
nop
nop
djnz r3,updata1 ;8次减1循环发送,未发完转updata1再发
ret ;子程序返回
up3data: mov r3,#03h ;数据发送3次子程序
clr c
updata2: rlc a ;左移一位
mov da8,c
nop
nop
nop
nop
setb ck8
nop
nop
nop
nop
clr ck8
nop
nop
nop
nop
djnz r3,updata2 ;3次减1循环发送,未发完转updata2再发
ret ;子程序返回
end ;程序结束
start: mov ckfh,#1
mov ckfl,#1
这里有问题:参考分频为256没错,256=100000000b,这样,应该是ckfh=1,ckfl=0
另外,发送数据子程式时钟下降沿没留多少时间,我加了几个nop之后就ok了!