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

📄 ad7711a.dt

📁 用汇编语言实现温度采集芯片ad7711的源程序
💻 DT
📖 第 1 页 / 共 3 页
字号:
       JBC	R3,0
       INC	T10H
       MOV	A,T_HH
       ADD	T10H,A
       RRC	T10H
       RRC	T10L
       JMP	NCY_V
D_POS:       
       ;T10-->TH,  T10=(TL+T10)/2
       MOV	A,T10H
       MOV	T_HH,A
       MOV	A,T10L
       MOV	T_HL,A
       MOV	A,T_LL
       ADD	T10L,A
       JBC	R3,0
       INC	T10H
       MOV	A,T_LH
       ADD	T10H,A
       RRC	T10H
       RRC	T10L
NCY_V:
       DJZ	DAY
       JMP    NXTIM
       JMP	INTOV
KMULC:

    ;对于铂热电阻,原始公式:Rt=Ro*[1+A*t+B*(t**2)]
    ;其中,Rt=温度为t摄氏度时的铂热电阻的阻值 
    ;     Ro=温度为0摄氏度时的铂热电阻的阻值
    ;      A=3.9083*10**(-3)
    ;      B=-5.775*10**(-7)
    ;      C=-4.183*10**(-12)
    ;整理后通过CPU由下式计算温度值:
    ;T=842E-(4E91C85F-K*CODE)**0.5  (全是16进制)
    ;其中,T为10*t,K为系数 
    ;       K_PT100=K_PT200=2851
    ;       K_PT500=K_PT10K=4082
    ;CODE=从AD7711接收到的16进制数据
       CLR	SQUR0      ;双字节乘法
       CLR	SQUR1
       CLR	SQUR2
       CLR	SQUR3
       
       MOV	A,DAT1
       MOV	BB,A
       MOV	A,KPTL
       BS	 R3,6
       BC	 R3,5
       CALL   MUL_AB	;数据低字节X系数低字节
       BC 	R3,6
       BS 	R3,5         
       MOV	SQUR3,A
       MOV	A,BB
       MOV	SQUR2,A	;结果存入被开方数的16位
       
       MOV	A,KPTL
       MOV	BB,A
       MOV	A,DAT0
       BS	 R3,6
       BC	 R3,5
       CALL   MUL_AB	;数据高字节X系数低字节
       BC 	R3,6
       BS 	R3,5         
       ADD	SQUR2,A
       JBS	R3,0
       JMP	NC0
       INC	SQUR1
       MOV	SQUR1,SQUR1
       JBC	R3,2
       INC	SQUR0
NC0:       
       MOV	A,BB
       ADD	SQUR1,A
       JBC	R3,0
       INC	SQUR0
       
       MOV	A,KPTH
       MOV	BB,A
       MOV	A,DAT1
       BS	 R3,6
       BC	 R3,5
       CALL   MUL_AB	;数据低字节X系高数字节
       BC 	R3,6
       BS 	R3,5         
       ADD	SQUR2,A
       JBS	R3,0
       JMP	NC1
       INC	SQUR1
       MOV	SQUR1,SQUR1
       JBC	R3,2
       INC	SQUR0
NC1:       
       MOV	A,BB
       ADD	SQUR1,A
       JBC	R3,0
       INC	SQUR0
       
       MOV	A,KPTH
       MOV	BB,A
       MOV	A,DAT0
       BS	 R3,6
       BC	 R3,5
       CALL   MUL_AB	;数据高字节X系高数字节
       BC 	R3,6
       BS 	R3,5         
       ADD	SQUR1,A
       JBC	R3,0
       INC	SQUR0
       MOV	A,BB
       ADD	SQUR0,A
       
       ;***************
;       MOV	A,SQUR0
;       SUB	A,@0X4E
;       JBS	R3,0
;       JMP	SQURER
;       JBS	R3,2
;       JMP	SQRNER
;       MOV	A,SQUR1
;       SUB	A,@0X91
;       JBS	R3,0
;       JMP	SQURER
;       JBS	R3,2
;       JMP	SQRNER
;       MOV	A,SQUR2
;       SUB	A,@0X0C8
;       JBS	R3,0
;       JMP	SQURER
;       JBS	R3,2
;       JMP	SQRNER
;       MOV	A,SQUR3
;       SUB	A,@0X5F
;       JBS	R3,0
;       JMP	SQURER       
;SQRNER:       
       CLR	DK_0
       CLR	DK_1
       CLR	DK_2
       CLR	DK_3
       COM	SQUR0
       COM	SQUR1
       COM	SQUR2
       COM	SQUR3
       INC	SQUR3
       MOV	SQUR3,SQUR3
       JBS	R3,2
       JMP	ADDSQR
       INC	SQUR2
       MOV	SQUR2,SQUR2
       JBS	R3,2
       JMP	ADDSQR
       INC	SQUR1
       MOV	SQUR1,SQUR1
       JBS	R3,2
       JMP	ADDSQR
       INC	SQUR0
ADDSQR:
       MOV	A,SQUR3
       ADD	A,@0X5F
       JBC	R3,0
       INC	DK_2
       MOV	DK_3,A
       
       MOV	A,SQUR2
       ADD	A,@0X0C8
       JBC	R3,0
       INC	DK_1
       ADD	DK_2,A
       JBC	R3,0
       INC	DK_1
       
       MOV	A,SQUR1
       ADD	A,@0X91
       JBC	R3,0
       INC	DK_0
       ADD	DK_1,A
       JBC	R3,0
       INC	DK_0
       
       MOV	A,SQUR0
       ADD	A,@0X4E
       ADD	DK_0,A
       BS	 R3,6
       BC	 R3,5
       CALL   SQUARE	
       BC 	R3,6
       BS 	R3,5         
       
       CLR	T10H
       CLR	T10L
       COM	DK_0	
       COM	DK_1
       INC	DK_1
       MOV	DK_1,DK_1
       JBC	R3,2
       INC	DK_0
       MOV	A,DK_1
       ADD	A,@0X2E
       JBC	R3,0
       INC	T10H
       MOV	T10L,A
       MOV	A,DK_0
       ADD	A,@0X84
       ADD	T10H,A
       JMP	INTOV
;SQURER:
OPENER:
       MOV	A,@0X0FF
       MOV	T10H,A  
       MOV	T10L,A                     
INTOV:     
       RET
       EOP
;*************************************************  

;****************page2*********************************      
      
     ;*****************************
     ;*      控制寄存器更新       *
     ;*****************************
       ORG	0X0810
DCR_UP:
       MOV	A,@0B10000000
       IOW	P6
       MOV	A,@0X18
       MOV	D_NUM,A
       BS	 P6,3	;/RFS=1('读'无效)
       BC	 P6,4	;A0=0(访问控制寄存器)
       BC 	P6,2	;/TFS=0('写'有效)
NXT_BT:
       JBS	DCR0,7
       JMP	KKK0  
       JMP	KKK1
KKK0:
       BC	 P6,0
       JMP	CR72
KKK1:
       BS	 P6,0
CR72:
       NOP
       NOP
       BS	 P6,1
       RLC	DCR2
       RLC	DCR1
       RLC	DCR0
       CALL   DLY0    
       BC	 P6,1
       DJZ	D_NUM
       JMP	NXT_BT
       BC	 P6,1
       BS	 P6,2
       RET
     ;*****************************
     ;*      数据传输子程序       *
     ;*****************************
D_TRANS:
 ;      JBS	P6,7
 ;      JMP	D_TRANS
 ;      CALL   DLY8
 ;      JBS	P6,7
 ;      JMP	D_TRANS
 ;      CALL   DLY8
 ;      JBS	P6,7
 ;      JMP	D_TRANS
       MOV	A,P6
       AND	A,@0X60
       MOV	BB,A
       RRC	BB
       RRC	BB
       RRC	BB
       RRC	BB
       RRC	BB
       MOV	A,@0X03
       AND	BB,A
       MOV	A,@0X18
       MOV	D_NUM,A
       
       BS	 P5,7
       CALL   DLY30
NBID:
       JBS	BB,7
       JMP	KK0
       JMP	KK1
KK0:
       BC	 P5,7
       JMP	NDOV
KK1:                  
       BS	 P5,7
       JMP	NDOV
NDOV:
       CALL   DLY_30
       RLC	T10L
       RLC	T10H
       RLC	BB
       DJZ	D_NUM
       JMP	NBID
       CLR	FLAG
       BC	 P5,7
       RET
     ;*****************************
     ;*        延时子程序         *
     ;*****************************
DLY0:       
       MOV	A,@0X02
       MOV	DAX,A
LP0:
       DJZ	DAX
       JMP	LP0
       RET
;**********************************  
DLY8:       
       MOV	A,@0X0B
       MOV	DAX,A
LP8:
       DJZ	DAX
       JMP	LP8
       RET
;**********************************  
DLY30:       
       MOV	A,@0X34
       NOP
       MOV	DAX,A
LP30:
       DJZ	DAX
       JMP	LP30
       RET
;**********************************   
DLY_30:       
       
       MOV	A,@0X31
       MOV	DAX,A
LP_30:
       DJZ	DAX
       JMP	LP_30
       RET
;**********************************  
DLY10:       
       MOV	A,@0X20
       MOV	DAX,A
LP10:
       DJZ	DAX
       JMP	LP10
       RET
;**********************************  
DLY100:       
       MOV	A,@0X0FF
       MOV	DAX,A
LP100:
       DJZ	DAX
       JMP	LP100
       RET
     ;*****************************
     ;*        开方子程序         *
     ;*****************************
;*************************************************       
;四字节的无符号数开方运算小程序                  *
;功能:四字节二进制无符号数开平方(快速)        *
;入口条件:被开方数在R2--DK_0(高),R3--DK_1,       *
;R4--DK_2,R5--DK_3(低)中                         *
;R2(DK_0)为高字节,R5(DK_3)为低字节              *
;出口信息:平方根在 R2--DK_0(高), R3--DK_1(低)中 *
;R7--LF_N,R6--LF_B,B--BB                         *
;占用寄存器:2FH,34H--3FH,共8个寄存器            *
;整数部分的位数为原数的一半,其余为小数。        *
;*************************************************     
SQUARE:
  	MOV  	A,@00H
SH4:  
  	MOV  	A,DK_0
  	OR   	A,DK_1 
  	OR   	A,DK_2
  	OR   	A,DK_3 
  	JBS	  R3,2
  	JMP  	SH40 
  	RET     		     ;被开方数为零,不必运算 
SH40:  
  	CLR  	LF_N     	;左规次数初始化 
  	MOV  	A,DK_0 
SH41:  	
  	AND  	A,@0C0H  	;被开方数高字节小于40H否? 
  	JBS	  R3,2
  	JMP  	SQRH     	;不小于40H,左规格化完成 
  	MOV  	A,@02H 	;每左规一次,被开方数左移两位 
  	MOV	  LF_B,A
SH42:  
  	BC   	R3,0		 ;被开方数左移一位 
  	RLC	  DK_3
  	RLC	  DK_2
  	RLC	  DK_1
  	RLC	  DK_0
  	DJZ 	 LF_B
  	JMP 	 SH42		
  	INC  	LF_N	     ;被开方数左移完两位,左规次数加1   
  	MOV	  A,DK_0
  	JMP  	SH41		 ;继续左规 
SQRH:  				     
  	MOV  	A,DK_0	   ;规格化后高字节按折线法分为三个区间 
  	ADD  	A,@57H 
  	JBC      R3,0
  	JMP  	SQR2 
  	ADD  	A,@45H 
  	JBC      R3,0
  	JMP  	SQR1 
  	ADD  	A,@24H 
  	MOV	  DAX,A
  	MOV  	A,@0E3H	   ;第一区间的斜率 
  	MOV	  BB,A
  	MOV  	A,@80H  	;第一区间的平方根基数 
  	MOV	  DK_2,A
  	MOV	  A,DAX
  	JMP 	 SQR3 
SQR1:  
  	
  	MOV	  A,@0X0B2
  	MOV  	BB,A    		;第二区间的斜率 
  	MOV  	A,@0A0H  	;第二区间的平方根基数 
  	MOV	  DK_2,A
  	JMP 	 SQR3 
SQR2:  
  	MOV  	A,@8DH 		;第三区间的斜率 
  	MOV	  BB,A
  	MOV	  A,@0X0D0
  	MOV  	DK_2,A      	;第三区间的平方根基数 
SQR3:  
       
      CALL	 MUL_AB        	;与区间基点的偏移量乘区间斜率 
  	MOV	  A,BB
  	ADD  	DK_2,A  		;累加到平方根的基数上
  	MOV	  A,DK_2
  	MOV  	BB,A
  	CALL	 MUL_AB  	 	;求当前平方根的幂 
  	MOV	  ML_A0,A
  	MOV	  A,DK_1
  	MOV	  DAX,A
  	MOV	  A,ML_A0
  	MOV	  DK_1,A
  	MOV	  A,DAX      	;A与DK_1互换,求偏移量(存放在 R2R3 中) 
  	BC   	R3,0
  	SUB	  A,DK_1 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
  	INC	  DAX
  	MOV	  A,DAX
  	MOV  	DK_1,A 
  	MOV  	A,DK_0
  	;***************
  	JBS	  R3,0
  	JMP	  SUBC10
  	JMP	  SUBC11
SUBC10:
  	SUB  	A,BB 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
  	INC	  DAX
  	JMP	  SUBOV1
SUBC11:
      SUB  	A,BB 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
SUBOV1:
  	MOV	  A,DAX
  	;***************
  	MOV  	DK_0,A 
SQR4:  
  	BS  	 R3,0	   	;用减奇数法校正一个字节的平方根 
  	MOV	  A,DK_2 		;当前平方根的两倍加一存入 R5R6 中 
      MOV      DAX,A 
  	RLC	  DAX
  	MOV	  A,DAX
  	MOV  	LF_B,A 
  	CLR	  DK_3
  	RLC	  DK_3
  	MOV  	A,DK_1 		;偏移量小于该奇数否?
  	;*************** 
  	JBS	  R3,0
  	JMP	  SUBC20
  	JMP	  SUBC21
SUBC20:
      SUB      A,LF_B 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
  	INC	  DAX
  	JMP	  SUBOV2
SUBC21:  	
  	SUB      A,LF_B 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
SUBOV2:  	
  	MOV	  A,DAX
  	;***************
  	MOV  	BB,A 
  	MOV  	A,DK_0 
  	;*************** 
  	JBS	  R3,0
  	JMP	  SUBC30
  	JMP	  SUBC31
SUBC30:
  	SUB  	A,DK_3 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
  	INC	  DAX
  	JMP	  SUBOV3
SUBC31:
  	SUB  	A,DK_3 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
SUBOV3:  	
  	MOV	  A,DAX
  	;***************
  	JBC      R3,0
  	JMP  	SQR5		    ;小于,校正结束,已达到一个字节的精度 
  	INC  	DK_2 	   	;不小于,平方根加一 
  	MOV  	DK_0,A  		;保存新的偏移量 
  	MOV  	A,BB 
  	MOV	  DK_1,A
  	MOV	  A,DK_0
  	JMP      SQR4 	   	;继续校正 
SQR5:  
  	          	       	;将一个字节精度的根存入 R2 
  	RRC	  DK_0
  	MOV	  A,DK_0
  	MOV	  A,DK_2
  	MOV	  DK_0,A
  	MOV  	A,R3 
  	MOV	  PSWB,A 		;保存最终偏移量的最高位 
  	MOV  	A,DK_1 
  	MOV  	DK_3,A  		;将最终偏移量的低八位存入 R5 中 
  	MOV	  A,@08H
  	MOV  	DK_2,A  		;通过( R5R6 / R2 )求根的低字节 
SQR6:  
  	BC	   R3,0 
  	RLC	  DK_1
  	BC	   R3,0 
  	MOV  	A,DK_3
  	;***************
  	SUB  	A,DK_0 
  	JBC	  R3,2
  	BC	   R3,0
  	MOV	  DAX,A
  	COM	  DAX
  	INC	  DAX
  	MOV	  A,DAX
  	;***************
  	JBC      PSWB,0
  	JMP  	SQR7 
  	JBC  	R3,0
  	JMP  	SQR8 
SQR7:  
  	MOV  	DK_3,A 
  	INC  	DK_1 
SQR8:  
  	BC	   R3,0  
  	RLC  	DK_3 
  	MOV  	A,R3 
  	MOV	  PSWB,A
  	DJZ 	 DK_2
  	JMP	  SQR6           ;根的第二字节计算完,在 R3 中 
  	MOV  	A,LF_N  	   ;取原被开方数的左规次数 
  	JBC	  R3,2
  	JMP  	SQRE 	      ;未左规,开方结束 
SQR9:  
  	BC	   R3,0  	 	;按左规次数右移平方根,得到实际根 
  	RRC	  DK_0 
  	RRC	  DK_1
  	DJZ      LF_N
  	JMP	  SQR9 
SQRE:  
  	RET 
;*************************************************
     ;*****************************
     ;*     单字节乘法子程序      *
     ;*****************************
     ;BB--高字节
     ;A--低字节
MUL_AB:
      MOV	  ML_A1,A
      CLR	  ML_A0
      CLR	  MUL_A
      CLR	  MUL_B
      MOV	  A,@08H
      MOV	  DAX,A
NXT_AB:
      JBS	  BB,0
      JMP	  BB0
      JMP	  BB1
BB0:
      JMP	  MULOV
BB1:
      MOV	  A,ML_A1
      ADD	  MUL_A,A  
      JBC	  R3,0
      INC	  MUL_B
      MOV	  A,ML_A0
      ADD	  MUL_B,A    
MULOV:      
      RRC	  BB
      BC	   R3,0
      RLC	  ML_A1
      RLC	  ML_A0
      DJZ	  DAX
      JMP	  NXT_AB
      MOV	  A,MUL_B
      MOV	  BB,A
      MOV	  A,MUL_A
      RET
;*************************************************      
	  END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -