论坛风格切换切换到宽版
  • 3957阅读
  • 11回复

我也来一段控制AD9851的程序 [复制链接]

上一主题 下一主题
离线BG7TCM
 
发帖
173
只看楼主 倒序阅读 0楼 发表于: 2004-05-08
;================================================
;在程序一开始就运行这段程序,用来初始化ad9851的输入方式
;运行一次即可
;------------------------------------------------
setup_ad9851:
          clr   w_clk   ;初始化信号脚
          clr   fq_ud

          setb   w_clk   ;设置为串行输入
          clr   w_clk
          setb   fq_ud
          clr   fq_ud
          ret
;-------------------------------------------------
;=================================================


;=================================================
;写频率数据到ad9851,时钟三倍频已经打开,如果晶振是30000000hz
;则时钟等于18000000hz
;r3-r2-r1-r0四个字节,这个32位的数据代表了将输出频率值(注意,不是等于)
;单位hz
;32位的数据=所需输出的频率值(hz)乘以2的32次方得到的积再除以18000000
;-------------------------------------------------
w_ad9851:     clr   fq_ud
          mov   a,r0       ;数据低位字节
          lcall   send_data
          mov   a,r1
          lcall   send_data
          mov   a,r2
          lcall   send_data
          mov   a,r3           ;数据高位字节
          lcall   send_data
          mov   a,#001b
          lcall   send_data
          setb   fq_ud
          clr   fq_ud
          ret
;--------------------------------------------------
;==================================================


;==================================================
;--------------------------------------------------
send_data:
          mov   c,acc.0
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.1
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.2
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.3
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.4
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.5
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.6
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.7
          mov   data7,c
          setb   w_clk
          clr   w_clk
          ret
;-------------------------------------
;=====================================
离线bd3si
发帖
13704
只看该作者 1楼 发表于: 2004-05-08
来个完整的!!!!!

[quote=大多数];================================================
;在程序一开始就运行这段程序,用来初始化ad9851的输入方式
;运行一次即可
;------------------------------------------------
setup_ad9851:
          clr   w_clk   ;初始化信号脚
          clr   fq_ud

          setb   w_clk   ;设置为串行输入
          clr   w_clk
          setb   fq_ud
          clr   fq_ud
          ret
;-------------------------------------------------
;=================================================


;=================================================
;写频率数据到ad9851,时钟三倍频已经打开,如果晶振是30000000hz
;则时钟等于18000000hz
;r3-r2-r1-r0四个字节,这个32位的数据代表了将输出频率值(注意,不是等于)
;单位hz
;32位的数据=所需输出的频率值(hz)乘以2的32次方得到的积再除以18000000
;-------------------------------------------------
w_ad9851:     clr   fq_ud
          mov   a,r0       ;数据低位字节
          lcall   send_data
          mov   a,r1
          lcall   send_data
          mov   a,r2
          lcall   send_data
          mov   a,r3           ;数据高位字节
          lcall   send_data
          mov   a,#001b
          lcall   send_data
          setb   fq_ud
          clr   fq_ud
          ret
;--------------------------------------------------
;==================================================


;==================================================
;--------------------------------------------------
send_data:
          mov   c,acc.0
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.1
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.2
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.3
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.4
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.5
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.6
          mov   data7,c
          setb   w_clk
          clr   w_clk
          mov   c,acc.7
          mov   data7,c
          setb   w_clk
          clr   w_clk
          ret
;-------------------------------------
;=====================================[/quote]
离线BG7TCM
发帖
173
只看该作者 2楼 发表于: 2004-05-08
;=================================
;ol-om-oh 为一个从低到高三字节的数据,是二
;进制的,代表输出频率,单位hz
;---------------------------------
set_f:       ;-----------------
          mov   r0,#0
          mov   r1,#0
          mov   r2,#0
          mov   r3,#0;此小段程序相当于把频率数据乘以2的32次方
          ;-----------------
          mov   r4,ol
          mov   r5,om
          mov   r6,oh
          mov   r7,#0
          mov   buff8,#40h
          mov   buff9,#77h
          mov   buff10,#1bh
          mov   buff11,#0
          mov   buff12,#0
          mov   buff13,#0
          mov   buff14,#0
          mov   buff15,#0
          lcall   div8_8
          lcall      w_ad9851
          ret
;---------------------------------
;=================================



;=================================
;---------------------------------
div8_8:
          mov   buff16,#64     ;设置移位次数,8字节共64次
          mov   buff0,#0     ;商清零
          mov   buff1,#0
          mov   buff2,#0
          mov   buff3,#0
          mov   buff4,#0
          mov   buff5,#0
          mov   buff6,#0
          mov   buff7,#0

;------------------------------
loopdiv:     clr   c
          mov   a,r0
          rlc   a
          mov   r0,a
          ;--------------
          mov   a,r1
          rlc   a
          mov   r1,a
          ;--------------
          mov   a,r2
          rlc   a
          mov   r2,a
          ;--------------
          mov   a,r3
          rlc   a
          mov   r3,a
          ;--------------
          mov   a,r4
          rlc   a
          mov   r4,a
          ;--------------
          mov   a,r5
          rlc   a
          mov   r5,a
          ;--------------
          mov   a,r6
          rlc   a
          mov   r6,a
          ;--------------
          mov   a,r7
          rlc   a
          mov   r7,a
          ;--------------
          ;--------------

          mov   a,buff0
          rlc   a
          mov   buff0,a
          ;--------------
          mov   a,buff1
          rlc   a
          mov   buff1,a
          ;--------------
          mov   a,buff2
          rlc   a
          mov   buff2,a
          ;--------------
          mov   a,buff3
          rlc   a
          mov   buff3,a
          ;--------------
          mov   a,buff4
          rlc   a
          mov   buff4,a
          ;--------------
          mov   a,buff5
          rlc   a
          mov   buff5,a
          ;--------------
          mov   a,buff6
          rlc   a
          mov   buff6,a
          ;--------------
          mov   a,buff7
          rlc   a
          mov   buff7,a
;------------------------------
yujian:
          ;--------------
          clr   c
          mov   a,buff0
          subb   a,buff8
          ;-------------
          mov   a,buff1
          subb   a,buff9
          ;-------------
          mov   a,buff2
          subb   a,buff10
          ;-------------
          mov   a,buff3
          subb   a,buff11
          ;-------------
          mov   a,buff4
          subb   a,buff12
          ;-------------
          mov   a,buff5
          subb   a,buff13
          ;-------------
          mov   a,buff6
          subb   a,buff14
          ;-------------
          mov   a,buff7
          subb   a,buff15
          ;-------------
          jc   loop22
          inc   r0
          ajmp   zhengshijian
loop22:       ljmp   loop222
zhengshijian:
          ;--------------
          clr   c
          mov   a,buff0
          subb   a,buff8
          mov   buff0,a
          ;-------------
          mov   a,buff1
          subb   a,buff9
          mov   buff1,a
          ;-------------
          mov   a,buff2
          subb   a,buff10
          mov   buff2,a
          ;-------------
          mov   a,buff3
          subb   a,buff11
          mov   buff3,a
          ;-------------
          mov   a,buff4
          subb   a,buff12
          mov   buff4,a
          ;-------------
          mov   a,buff5
          subb   a,buff13
          mov   buff5,a
          ;-------------
          mov   a,buff6
          subb   a,buff14
          mov   buff6,a
          ;-------------
          mov   a,buff7
          subb   a,buff15
          mov   buff7,a
          ;-------------
loop222:
          djnz   buff16,loop11
          ret
loop11:       ljmp   loopdiv
;------------------------------------------------
;================================================


;================================================
;在程序一开始就运行这段程序,用来初始化ad9851的输入方式
;运行一次即可
;------------------------------------------------
setup_ad9851:
clr w_clk ;初始化信号脚
clr fq_ud

setb w_clk ;设置为串行输入
clr w_clk
setb fq_ud
clr fq_ud
ret
;-------------------------------------------------
;=================================================


;=================================================
;写频率数据到ad9851,时钟三倍频已经打开,如果晶振是3000000hz
;则时钟等于18000000hz
;r3-r2-r1-r0四个字节,这个32位的数据代表了将输出频率值(注意,不是等于)
;单位hz
;32位的数据=所需输出的频率值(hz)乘以2的32次方得到的积再除以18000000
;-------------------------------------------------
w_ad9851:
clr fq_ud
mov a,r0 ;数据低位字节
lcall send_data
mov a,r1
lcall send_data
mov a,r2
lcall send_data
mov a,r3 ;数据高位字节
lcall send_data
mov a,#001b
lcall send_data
setb fq_ud
clr fq_ud
ret
;--------------------------------------------------
;==================================================


;==================================================
;--------------------------------------------------
send_data:
mov c,acc.0
mov data7,c
setb w_clk
clr w_clk
mov c,acc.1
mov data7,c
setb w_clk
clr w_clk
mov c,acc.2
mov data7,c
setb w_clk
clr w_clk
mov c,acc.3
mov data7,c
setb w_clk
clr w_clk
mov c,acc.4
mov data7,c
setb w_clk
clr w_clk
mov c,acc.5
mov data7,c
setb w_clk
clr w_clk
mov c,acc.6
mov data7,c
setb w_clk
clr w_clk
mov c,acc.7
mov data7,c
setb w_clk
clr w_clk
ret
;-------------------------------------
;=====================================
离线BD7RC
发帖
3283
只看该作者 3楼 发表于: 2004-05-09
好!我带的毕业设计的学生要是早些时候看到这个帖子保证乐开花,现在正用c语言苦苦研究呢。
离线BG7TCM
发帖
173
只看该作者 4楼 发表于: 2004-05-09
再来一段,BCD码转二进制码的程序
mul0       data   20h
mul1       data   21h
mul2       data   22h
mul3       data   23h

h3         data   30h   ;高位     ;出口
h2         data   31h
h1         data   32h
h0         data   33h   ;低位

bcd0       data   47h   ;低位     ;入口
bcd1       data   46h
bcd2       data   45h
bcd3       data   44h
bcd4       data   43h
bcd5       data   42h
bcd6       data   41h
bcd7       data   40h   ;高位


org         00h

          mov       h0,#0             ;二进制输出
          mov       h1,#0
          mov       h2,#0
          mov       h3,#0

          mov       bcd7,#8           ;入口
          mov       bcd6,#8
          mov       bcd5,#8
          mov       bcd4,#8
          mov       bcd3,#8
          mov       bcd2,#8
          mov       bcd1,#8
          mov       bcd0,#8


          mov       mul0,#80h           ;千万位
          mov       mul1,#96h
          mov       mul2,#98h
          mov       r0,bcd7
          acall     q1
          acall     lh

          mov       mul0,#40h           ;百万位
          mov       mul1,#42h
          mov       mul2,#0fh
          mov       r0,bcd6
          acall     q1
          acall     lh

          mov       mul0,#0a0h           ;十万位
          mov       mul1,#86h
          mov       mul2,#01h
          mov       r0,bcd5
          acall     q1
          acall     lh

          mov       mul0,#10h           ;万位
          mov       mul1,#27h
          mov       mul2,#00h
          mov       r0,bcd4
          acall     q1
          acall     lh

          mov       mul0,#0e8h           ;千位
          mov       mul1,#03h
          mov       mul2,#00h
          mov       r0,bcd3
          acall     q1
          acall     lh

          mov       mul0,#64h           ;百位
          mov       mul1,#00h
          mov       mul2,#00h
          mov       r0,bcd2
          acall     q1
          acall     lh

          mov       mul0,#0ah           ;十位
          mov       mul1,#00h
          mov       mul2,#00h
          mov       r0,bcd1
          acall     q1
          acall     lh

          mov       mul0,#01h           ;个位
          mov       mul1,#00h
          mov       mul2,#00h
          mov       r0,bcd1
          acall     q1
          acall     lh
          ajmp     $
;-----------------------------------------------------
q1:
          clr       c
          mov       a,mul0     ;     mul2,mul1,mul0
          mov       b,r0       ;*             r0            
          mul       ab         ;-------------------------
          mov       mul0,a     ; mul3,mul2,mul1,mul0
          mov       r1,b

          mov       a,mul1
          mov       b,r0
          mul       ab
          addc     a,r1
          mov       mul1,a
          mov       r1,b

          mov       a,mul2
          mov       b,r0
          mul       ab
          addc     a,r1
          mov       mul2,a
          mov       r1,b

          mov       a,#0
          addc     a,r1
          mov       mul3,a
          ret
;--------------------------------------------------------
lh:
          clr       c
          mov       a,h0      
          add       a,mul0     ; h3, h2, h1, h0
          mov       h0,a     ; + mul3,mul2,mul1,mul0
          mov       a,h1     ;--------------------------
          addc     a,mul1     ; h3, h2, h1, h0
          mov       h1,a
          mov       a,h2
          addc     a,mul2
          mov       h2,a
          mov       a,h3
          addc     a,mul3
          mov       h3,a
          ret
          end
离线bg4jj
发帖
5094
只看该作者 5楼 发表于: 2004-08-28
程序验证过没有?
离线h198848
发帖
833
只看该作者 6楼 发表于: 2004-08-28
'
程序验证过没有?
'
??????????????????????????????????????????/
离线BG7TCM
发帖
173
只看该作者 7楼 发表于: 2004-08-28
已经在用了,完全正确
离线h198848
发帖
833
只看该作者 8楼 发表于: 2004-08-28
谢谢``

感谢~~
  你有qq吗
离线ahzds
发帖
7423
只看该作者 9楼 发表于: 2004-08-28
高人!而且是不保守的高人!pf!!pf!!!copy下来再研究研究!!先谢了!!
离线BG7TCM
发帖
173
只看该作者 10楼 发表于: 2004-08-28
这是在C51里面应用时的函数
在程序开始添加函数说明:
extern unsigned long div8_8(unsigned long a);
extern void setup_ad9851();
extern void senddatatoad9851(unsigned long a);
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线庄乾章
发帖
1047
只看该作者 11楼 发表于: 2008-06-19
jh1234