|
发表于 2005-4-17 21:56:52
|
显示全部楼层
A\D子程序
次程序已经应用中!!!
CPU是LPC932,51兼容的
;*******************************
;;;AD7714模数转换子程序
;;;转换结果存入40H:低字节;41H:中字节;42H:高字节
;*******************************
DRDY BIT P0.2
DOUT BIT P0.3
DIN BIT P0.4
SCLK BIT P0.5
ORG 0000H
AJMP ADZH
ORG 0080H
ADZH:
MOV P0M1,#00H
MOV P0M2,#00H
MOV R7,#08H ;32个复位序列复位接口
RESET:
CLR SCLK
NOP
SETB DIN
NOP
SETB SCLK
DJNZ R7,RESET
MOV A,#00100101B ;写通信寄存器,并选择通道:101,全差分模式
LCALL WRITE8 ;将下一操作设为写滤波器高寄存器
MOV A,#11100001B ;设置滤波器高寄存器:24位数据、单极性
LCALL WRITE8
MOV A,#00110101B ;写通信寄存器,并选择通道:101,全差分模式
LCALL WRITE8 ;将下一操作设为写滤波器低寄存器
MOV A,#10000000B ;设置滤波器低寄存器:第一个凹口频率为50HZ,增益8
LCALL WRITE8
MOV A,#00010101B ;写通信寄存器,并选择通道:101,全差分模式
LCALL WRITE8 ;将下一操作设为写模式寄存器
MOV A,#00100000B ;模式寄存器自校准,增益8,禁止滤波器同步
LCALL WRITE8 ;清除滤波器同步;启动对101通道的自校准
JB DRDY,$ ;等待自校准
MOV A,#01011101B ;写通信寄存器,设置下一次操作为读数据寄存器,并选择通道:101
LCALL WRITE8
JB DRDY,$ ;等待数据转换结束
LCALL READ24 ;此时读24位数据存入40H:高字节;41H;42H:低字节
MOV 53H,#00H ;读10次A/D转换结果累加取平均
MOV 52H,#00H
MOV 51H,#00H
MOV 50H,#00H
mov 54h,#0AH
MOV 55H,#0AH
AADD:
JB DRDY,$
MOV A,#01011101B ;写通信寄存器,下一次操作为读数据寄存器
LCALL WRITE8
LCALL READ24 ;读24位数据存入40H:最高字节,41H,42H:最低字节
MOV A,50H ;
ADD A,42H
MOV 50H,A ;最低字节累加暂存50H
MOV A,51H
ADDC A,41H
MOV 51H,A
MOV A,52H
ADDC A,40H
MOV 52H,A ;最高字节累加暂存52H
MOV A,53H ;累加进位暂存53H
ADDC A,#00H
MOV 53H,A
DJNZ 55H,AADD
MOV R0,50H ;R0:被除数最低字节
MOV R1,51H ;R1:被除数低字节
MOV R2,52H ;R2:被除数高字节
MOV R3,53H
MOV R4,54H ;R4:54H用于除数存放
MOV 20H, #00H
MOV 21H, #00H
MOV 22H, #00H
MOV R7, #18H
ACALL CHU6
MOV 40H,20H ;转换数据低字节
MOV 41H,21H ;
MOV 42H,22H ;转换数据高字节
SJMP $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; 写AD7714 一字节子程序;;;;;;;;;;;;;;;;;;;
;;;;;; 入口A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE8:
MOV R7,#08H
XHH:
RLC A
CLR SCLK
NOP
MOV DIN,C
NOP
SETB SCLK
DJNZ R7,XHH
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;读24位AD7714转换数据存入40H,41H,42H中子程序
;;;;;;出口:40H:高字节,41H:中字节,42H:低字节
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ24:
MOV R7,#08H
YH:
CLR SCLK
NOP
MOV C,DOUT
NOP
SETB SCLK
RLC A
DJNZ R7,YH
MOV 40H,A
MOV R7,#08H
YHH:
CLR SCLK
NOP
MOV C,DOUT
NOP
SETB SCLK
RLC A
DJNZ R7,YHH
MOV 41H,A
MOV R7,#08H
YHHH:
CLR SCLK
NOP
MOV C,DOUT
NOP
SETB SCLK
RLC A
DJNZ R7,YHHH
MOV 42H,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Name: CHU6
;Func: 三字节除单字节商为三字节除法了程序
;Input: 被除数放在R0R1R2中, 除数放在R4中,R3存放被除数扩充位,也是余数存放数
; R0:被除数最低位,R2是被除数最高位
;OutPut:商数放在内部RAM20H-22H单元中,其中20H单元放最低位
;Use:
;;;;;;三字节除单字节除法子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHU6:
MOV A, R0
ADD A, R0 ; 被除数左移,包括扩充位
MOV R0, A
MOV A, R1
ADDC A, R1
MOV R1, A
MOV A, R2
ADDC A, R2
MOV R2, A
MOV A, R3
ADDC A, R3
MOV R3, A
MOV A, 20H; 商数左移
RLC A
MOV 20H, A
MOV A, 21H
RLC A
MOV 21H, A
MOV A, 22H
RLC A
MOV 22H, A
MOV A, R3
SUBB A, R4
JC LOOP
MOV R3, A ;建立余数
INC 20H
LOOP:
DJNZ R7, CHU6
RET
END
|
|