📄 ad7711a.dt
字号:
;Z-04RTD--D1 ,USE EM78P458 WITH WDT OFF TO CONTROL AD7711AN
;page0: STAT(主程序)
;page1: INTRT(中断处理子程序)
;page2: DCR_UP,D_TRANS,DLY0,DLY10,SQUARE,MUL_AB(子程序)
;**************page0***********************************
R0 EQU 00H
R1 EQU 01H
R2 EQU 02H
R3 EQU 03H
R4 EQU 04H
P5 EQU 05H
P6 EQU 06H
DAX EQU 07H
DAY EQU 08H
RF EQU 0FH
D_C0 EQU 10H
D_C1 EQU 11H
D_C2 EQU 12H
D_C3 EQU 13H
D_C4 EQU 14H
D_C5 EQU 15H
D_C6 EQU 16H
D_C7 EQU 17H
D_C8 EQU 18H
D_C9 EQU 19H
D_CA EQU 1AH
D_CB EQU 1BH
D_CC EQU 1CH
D_CD EQU 1DH
D_CE EQU 1EH
D_CF EQU 1FH
DAT0 EQU 20H
DAT1 EQU 21H
DAT2 EQU 22H
DCR0 EQU 23H
DCR1 EQU 24H
DCR2 EQU 25H
CH_N EQU 26H
CH_TY EQU 27H
FLAG EQU 28H
D_NUM EQU 29H
T_HH EQU 2AH
T_HL EQU 2BH
T_LH EQU 2CH
T_LL EQU 2DH
SQUR0 EQU 2CH
SQUR1 EQU 2DH
SQUR2 EQU 2EH
SQUR3 EQU 2FH
T10H EQU 30H
T10L EQU 31H
KPTH EQU 32H
KPTL EQU 33H
PSWB EQU 34H
ML_A0 EQU 35H
ML_A1 EQU 36H
MUL_B EQU 37H
MUL_A EQU 38H
BB EQU 39H
LF_N EQU 3AH
LF_B EQU 3BH
DK_0 EQU 3CH
DK_1 EQU 3DH
DK_2 EQU 3EH
DK_3 EQU 3FH
;*************************************************
;IOC50 EQU 0X05
;IOC60 EQU 0X06
IOCE0 EQU 0X0E
IOCF0 EQU 0X0F
;*************************************************
;P50==/DRDY
;P51==CH1 (NUMBER OF USED CHANAL 1)
;P52==CH2 (NUMBER OF USED CHANAL 2)
;P53==TYP1 (TYPE OF INPUT SIGNAL 1)
;P54==TYP2 (TYPE OF INPUT SIGNAL 2)
;P55==TYP3 (TYPE OF INPUT SIGNAL 3)
;P56==TYP4 (TYPE OF INPUT SIGNAL 4)
;P57==DATA
;P67==READY
;P66==A1
;P65==A0
;P64==AA0
;P63==/RFS
;P62==/TFS
;P61==SCLK
;P60==SDATA
;*************************************************
ORG 0X00
JMP STAR
; ORG 0X08
; JMP INTR
ORG 0X30
STAR:
;**************************
;* 上电延时 *
;**************************
MOV A,@0X02
MOV DAT0,A
CYC0:
MOV A,@0X02
MOV DAT1,A
CYC1:
MOV A,@0X02
MOV DAT2,A
CYC2:
DJZ DAT2
JMP CYC2
DJZ DAT1
JMP CYC1
DJZ DAT0
JMP CYC0
;*********************************
BEGIN:
MOV A,@0B01111111
IOW P5
BC P5,7
MOV A,@0B10000000
IOW P6
MOV A,@0X0C
MOV P6,A
CLR FLAG
CLR SQUR0
CLR SQUR1
CLR SQUR2
CLR SQUR3
;Set AD7711 to Background Calibration
MOV A,@0X0A0
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BS R3,6
BC R3,5
CALL DLY100
CALL DLY100
BC R3,6
;*****************************
;* 接收用户设置 *
;*****************************
MOV A,P5
MOV CH_N,A
MOV CH_TY,A
RRC CH_N
MOV A,@0X03
AND CH_N,A ;CH_N=输入通道数寄存器
RLC CH_TY
SWAP CH_TY
MOV A,@0X0F
AND CH_TY,A ;CH_TY=输入类型寄存器
;*****************************
; 判断输入类型 *
;*****************************
MOV A,CH_TY
MOV DAX,A
XOR A,@0X00
JBC R3,2
JMP PT_100
MOV A,DAX
XOR A,@0X01
JBC R3,2
JMP PT_200
MOV A,DAX
XOR A,@0X02
JBC R3,2
JMP PT_500
MOV A,DAX
XOR A,@0X03
JBC R3,2
JMP PT_1000
MOV A,DAX
XOR A,@0X04
JBC R3,2
JMP PT_10K
MOV A,DAX
XOR A,@0X05
JBC R3,2
JMP Cu_9035
JMP POWR_DWN
;*****************************
;* 定义控制寄存器 *
;*****************************
;DCR=[MD2,MD1,MD0,G2; G1,G0,CH,PD;;
; WL, RO,BO,B/U; FS11...FS8 ;;
; FS7....................FS0 ;;]
PT_100:
MOV A,@0X014 ;G=32
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
PT_200:
MOV A,@0X010 ;G=16
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
PT_500:
MOV A,@0X08 ;G=4
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
PT_1000:
MOV A,@0X04 ;G=2
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
PT_10K:
MOV A,@0X00 ;G=1
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
Cu_9035:
MOV A,@0X01C ;G=128
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
POWR_DWN:
MOV A,@0X01
MOV DCR0,A
MOV A,@0X0F7
MOV DCR1,A
MOV A,@0X0A1
MOV DCR2,A
BS R3,6
BC R3,5
CALL DCR_UP
BC R3,6
JMP DCROV
DCROV:
JBC DCR0,0
JMP BEGIN
BS R3,6
BC R3,5
CALL DLY100
CALL DLY100
CALL DLY100
BC R3,6
;*****************************
;* 开中断 *
;*****************************
MOV A,@0B00111111
IOW IOCE0
MOV A,@0B00000100
IOW IOCF0
CLR RF
MOV A,@0B10011111
CONTW
; ENI
;NEXT:
; JBS P5,0
; JMP NEXT
; BS R3,6
; BC R3,5
; CALL DLY8
; BC R3,6
; JBS P5,0
; JMP NEXT
NEXT1:
JBC P5,0
JMP NEXT1
BS R3,6
BC R3,5
CALL DLY8
BC R3,6
JBC P5,0
JMP NEXT1
CALL INTR
BS R3,6
BC R3,5
CALL D_TRANS
BC R3,6
BC R3,5
JMP NEXT1
;*************************************************
INTR:
BC R3,6
BS R3,5
CALL INTRT
BC R3,6
BC R3,5
; CLR RF
RET
;*************************************************
EOP
;*******************page1******************************
ORG 0X0410
;*****************************
; 中断处理 *
;*****************************
INTRT:
MOV A,@0B10000001
IOW P6
MOV A,CH_N
XOR A,@0X00
JBC R3,2
JMP CHNO_1
MOV A,CH_N
XOR A,@0X01
JBC R3,2
JMP CHNO_2
MOV A,CH_N
XOR A,@0X02
JBC R3,2
JMP CHNO_3
JMP CHNO_4
CHNO_1:
BC P6,6
BC P6,6
JMP D_RECIVE
CHNO_2:
JBC P6,5
JMP P6521
JMP P6520
P6520:
BC P6,6
BS P6,5
JMP D_RECIVE
P6521:
BC P6,6
BC P6,5
JMP D_RECIVE
CHNO_3:
JBS P6,6
JMP P6630
BC P6,6
BC P6,5
JMP D_RECIVE
P6630:
JBC P6,5
JMP P6531
BC P6,6
BS P6,5
JMP D_RECIVE
P6531:
BS P6,6
BC P6,5
JMP D_RECIVE
CHNO_4:
JBS P6,6
JMP P660
JMP P661
P660:
JBS P6,5
JMP NCHNL1
JMP NCHNL2
P661:
JBS P6,5
JMP NCHNL3
JMP NCHNL0
NCHNL0:
BC P6,6
BC P6,5
JMP D_RECIVE
NCHNL1:
BC P6,6
BS P6,5
JMP D_RECIVE
NCHNL2:
BS P6,6
BC P6,5
JMP D_RECIVE
NCHNL3:
BS P6,6
BS P6,5
D_RECIVE:
BS R3,6
BC R3,5
CALL DLY10
BC R3,6
BS R3,5
BS FLAG,0
BS P6,2 ;/TFS=1('写'无效)
BS P6,4 ;A0=1(访问数据寄存器)
BC P6,3 ;/RFS=0('读'有效)
MOV A,@0X18
MOV D_NUM,A ;24bit的循环
NOP
NXT_B:
BS P6,1
MOV A,P6
MOV DAX,A
RRC DAX
RLC DAT2
BC P6,1
RLC DAT1
RLC DAT0
DJZ D_NUM
JMP NXT_B
BC P6,1
BS P6,3
;;;;;;;;;;;;;;;;;;;;;;;;;;;
; JMP INTOV
;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,DAT0
AND A,DAT1
AND A,DAT2
XOR A,@0X0FF
JBS R3,2
JMP NOPENER
JMP OPENER
NOPENER:
;把接收到的数据转换成温度
;****接收到的数据四舍五入
JBS DAT2,7
JMP FOURMIS
INC DAT1
MOV DAT1,DAT1
JBC R3,2
INC DAT0
;***********************
FOURMIS:
MOV A,CH_TY
MOV DAX,A
XOR A,@0X00
JBC R3,2
JMP K_PT100
MOV A,DAX
XOR A,@0X01
JBC R3,2
JMP K_PT200
MOV A,DAX
XOR A,@0X02
JBC R3,2
JMP K_PT500
MOV A,DAX
XOR A,@0X03
JBC R3,2
JMP K_PT1000
MOV A,DAX
XOR A,@0X04
JBC R3,2
JMP K_PT10K
MOV A,DAX
XOR A,@0X05
JBC R3,2
JMP K_Cu9035
K_PT100:
MOV A,@0X28
MOV KPTH,A
MOV A,@0X51
MOV KPTL,A
JMP KMULC
K_PT200:
MOV A,@0X28
MOV KPTH,A
MOV A,@0X51
MOV KPTL,A
JMP KMULC
K_PT500:
MOV A,@0X40
MOV KPTH,A
MOV A,@0X82
MOV KPTL,A
JMP KMULC
K_PT1000:
MOV A,@0X40
MOV KPTH,A
MOV A,@0X82
MOV KPTL,A
JMP KMULC
K_PT10K:
MOV A,@0X0FF
MOV T10H,A
MOV T10L,A
JMP INTOV
K_Cu9035:
;对于铜热电阻,原始公式:
; Rt=Ro*[1+a*t+b*t*(t-100)+c*(t**2)*(t-100)]
;其中,Rt=温度为t摄氏度时的铜热电阻的阻值
; Ro=温度为0摄氏度时的铜热电阻的阻值
; a=4.280*10**(-3)
; b=-9.31*10**(-8)
; c=1.23*10**(-9)
;整理后,关于温度T(=10*t)的函数?
;F(T)={[(T**3)-1757*(T**2)]/1024}+340551*T+793953252-130946*CODE=0
;即
;F(T)=(T*T*T-6|DD*T*T)/4|00+5|32|47*T+2F|52|C3|E4-1|FF|82*CODE=0 (全是16进制)
;?
;CODE=从AD7711接收到的16进制数据
;用逐次逼近法计算F(T)=0的根,置初值:
; T=500(01F4)
; [TLH::TLL]=FE0C --HEX
; [THH::THL]=05DC --HEX
MOV A,@0X01
MOV T10H,A
MOV A,@0X0F4
MOV T10L,A
MOV A,@0X0FE
MOV T_LH,A
MOV A,@0X0C
MOV T_LL,A
MOV A,@0X05
MOV T_HH,A
MOV A,@0X0DC
MOV T_HL,A
MOV A,@0X0B
MOV DAY,A
NXTIM:
;首先,计算1|FF|82*CODE
;DAT1*0X82-->D_C4,D_C5
CLR D_C0
CLR D_C1
CLR D_C2
CLR D_C3
CLR D_C4
CLR D_C5
MOV A,DAT1
MOV BB,A
MOV A,@0X82
BS R3,6
BC R3,5
CALL MUL_AB
BC R3,6
BS R3,5
MOV D_C5,A
MOV A,BB
MOV D_C4,A
;***DAT0*0X82-->D_C3,D_C4
MOV A,DAT0
MOV BB,A
MOV A,@0X82
BS R3,6
BC R3,5
CALL MUL_AB
BS R3,6
BC R3,5
ADD D_C4,A
JBS R3,0
JMP NCU00
INC D_C3
MOV D_C3,D_C3
JBS R3,2
JMP NCU00
INC D_C2
NCU00:
MOV A,BB
ADD D_C3,A
JBC R3,0
INC D_C2
;***DAT1*0X0FF-->D_C3,D_C4
MOV A,DAT1
MOV BB,A
MOV A,@0X0FF
BS R3,6
BC R3,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -