⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad7711a.dt

📁 用汇编语言实现温度采集芯片ad7711的源程序
💻 DT
📖 第 1 页 / 共 3 页
字号:
;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 + -