📄 ad674.asm
字号:
;************************************************
;ad674.asm
;程序模快功能介绍:读取AD转换的电压值
;返回参数:电压值:AD674_DATA
;************************************************
;--------------在导通测试时读取导通值------------
read_ad674_cond:
LD AX,#05000H
DJNZW AX,$
;ORB PORT1_DA,#02H
;LDB PORT1,PORT1_DA ;对R/C 置1
;NOP
;NOP
;NOP
;NOP
;NOP
;LD AX,#5000H
;DJNZW AX,$
;LDB MXL,#10
;LD AX,#0000H
;read_ad674_cond1:
;ANDB PORT1_DA,#0FDH ;对R/C 置0,即开始转换
;LDB PORT1,PORT1_DA
;NOP
;NOP
;read_ad674_cond2:
;LDB FXL,PORT2
;JBS FXL,7,read_ad674_cond2 ;检查忙信号
;ORB PORT1_DA,#02H
;LDB PORT1,PORT1_DA ;对R/C 置1
;NOP
;NOP
;NOP
;NOP
;NOP
;NOP
;LDB CXL,AD_DATALO_ADD[0]
;LDB CXH,AD_DATAHI_ADD[0]
;ANDB CXH,#0FH
;ADD AX,CX
;DJNZ MXL,read_ad674_cond1
;
;LD BX,#0
;LD CX,#10
;DIVU AX,CX ;AX为10次测试的平均值
;
;LD BX,#0
;LD CX,#244 ;0.00244 V
;MULU AX,CX
;
;LD CX,#100 ;因为在测试导通时,只要精确到1mV 即0.01 OHM
;DIVU AX,CX ;将小数点向前移三位
CALL read_ad674
LD AD674_DATA,AX
RET
;---------------------------绝缘测试测量----------------------------
;输入参数:REG_64H为测试规格,REG_5AH测试电压
;输出参数:REG_6AH为测量出来的不良值,REG_67H为00时表示测试通过
;计算时的最小值为10K,0.010000M
read_ad674_ins:
DI
ORB PORT1_DA,#02H
LDB PORT1,PORT1_DA ;对R/C 置1
NOP
NOP
LDB REG_67H,#00H ;对测试结果寄存器初始化
LDB AXL,#11000000B ;切换测试电压信号
STB AXL,CHUNNEL_ADD[0]
NOP
NOP
LD AX,#01FFH
DJNZW AX,$
NOP
NOP
CALL read_ad674 ;测量测试电压
LD BX,#00H
LD CX,#3034 ;缩小倍数
MULU AX,CX
LD CX,#1000 ;精确到0.01V
DIVU AX,CX
LD CX,#100
MULU AX,CX
LD REG_5AH,AX ;REG_5AH存放的为所测试电压的值
LD REG_5AH_H,BX
LDB AXL,#11000111B ;切换到放大了200倍绝缘电压信号
STB AXL,CHUNNEL_ADD[0]
NOP
NOP
LD AX,#01FFH
DJNZW AX,$
NOP
NOP
CALL read_ad674 ;测量测试信号电压
CMP AX,#9991
JE read_ad674_ins1
CMP AX,#671;#792
JNH ins200_au1
SUB AX,#670;#361;#561
LD USUMB1,#2000 ;Au=200.0
JMP read_ad674_ins3
ins200_au1:
LD USUMB1,#2000 ;Au=200.0
LD AX,#9
JMP read_ad674_ins3
read_ad674_ins1:
LDB AXL,#11000110B ;切换到放大了20倍绝缘电压信号
STB AXL,CHUNNEL_ADD[0]
NOP
NOP
LD AX,#01FFH
DJNZW AX,$
NOP
NOP
CALL read_ad674 ;测量测试信号电压
CMP AX,#9991
JE read_ad674_ins2
CMP AX,#63
JNH ins20_au
SUB AX,#63
ins20_au:
LD USUMB1,#200 ;Au=20.O
JMP read_ad674_ins3
read_ad674_ins2:
LDB AXL,#11000100B ;切换到放大了2倍绝缘电压信号
STB AXL,CHUNNEL_ADD[0]
NOP
NOP
LD AX,#01FFH
DJNZW AX,$
NOP
NOP
CALL read_ad674 ;测量测试信号电压
LD USUMB1,#20 ;Au=2.0
read_ad674_ins3:
CMP AX,#00H ;若测试到的电压为0V则绝缘阻值大于500M
JE read_ad674_ins_pass
LD IAX,AX
;------------------------------计算绝缘阻值 OHM=(Vt/Vc)*Au-2
LD AX,REG_5AH
LD BX,REG_5AH_H
LD CX,ZERO
LD DX,ZERO
LD EX,IAX
LD FX,ZERO
CALL UDIV
LD CX,AX
LD DX,USUMB1
MULU AX,CX,DX ;(Vt/Vc)*Au
LD CX,ZERO
LD DX,ZERO
LD EX,#10
LD FX,ZERO
CALL UDIV
CMP BX,#0
JNE read_ad674_ins_pass
;------------------------------PASS
read_ad674_ins18:
CMP AX,#2
JNH read_ad674_ins_ng1
LD BX,#2
SUB AX,BX
read_ad674_ins17:
LD BX,#0
LD CX,#10
DIVU AX,CX
CMP AX,REG_64H
JE read_ad674_ins_pass
CMP AX,REG_64H
JH read_ad674_ins_pass
;------------------------------ERROR
CMP AX,#0
JE read_ad674_ins_ng1
CMP AX,#9
JNH read_ad674_ins_ng1
LD REG_6AH,AX
LDB REG_67H,#01H
EI
RET
read_ad674_ins_pass:
LD REG_6AH,#0
EI
RET
read_ad674_ins_ng1:
LD REG_6AH,#0FFFFH ;但高位字节为0FFH时表示绝缘阻值小于1M
LDB REG_67H,#01H
EI
RET
;--------------------------------------读取AD值 1mV
;返回参数:AX 单位:1mV
read_ad674:
LD MXL,#100h;#900;1000;#500
LD USUMB1,#0000H
LD USUMB2,#0000H
read_ad674_1:
ANDB PORT1_DA,#0FDH ;对R/C 置0,即开始转换
LDB PORT1,PORT1_DA
read_ad674_2:
LDB FXL,PORT2
JBS FXL,7,read_ad674_2 ;检查忙信号
ORB PORT1_DA,#02H
LDB PORT1,PORT1_DA ;对R/C 置1
NOP
NOP
LDB IAXL,AD_DATALO_ADD[0]
LDB IAXH,AD_DATAHI_ADD[0]
ANDB IAXH,#0FH
ADD USUMB1,IAX
ADDC USUMB2,ZERO
LD AX,#10h;#35;#75
DJNZW AX,$
DJNZW MXL,read_ad674_1
LD AX,USUMB1
LD BX,USUMB2
LD EX,#100h;#900;1000;#500
DIVU AX,EX
LD BX,#0
LD CX,#244
MULU AX,CX
LD CX,#100
DIVU AX,CX ;将小数点向前移三位
RET
;--------------------------------------读取AD值 10mV
;返回参数:CX 单位:10mV
read_10ad674:
LD MXL,#800
LD USUMB1,#0000H
LD USUMB2,#0000H
read_10ad674_1:
ANDB PORT1_DA,#0FDH ;对R/C 置0,即开始转换
LDB PORT1,PORT1_DA
read_10ad674_2:
LDB FXL,PORT2
JBS FXL,7,read_10ad674_2 ;检查忙信号
ORB PORT1_DA,#02H
LDB PORT1,PORT1_DA ;对R/C 置1
NOP
NOP
LDB IAXL,AD_DATALO_ADD[0]
LDB IAXH,AD_DATAHI_ADD[0]
ANDB IAXH,#0FH
ADD USUMB1,IAX
ADDC USUMB2,ZERO
ADDC USUMB3,ZERO
LD AX,#32;#75
DJNZW AX,$
DJNZW MXL,read_10ad674_1
LD AX,USUMB1
LD BX,USUMB2
LD CX,ZERO
LD DX,ZERO
LD EX,#800
LD FX,ZERO
CALL UDIV
LD BX,#0
LD CX,#244
MULU AX,CX
LD CX,#1000
DIVU AX,CX ;将小数点向前移三位
RET
;--------------------------------------
;单端读取 返回参数:AXL
ad674_single:
PUSH GX
;CALL read_ad674
LDB MXL,#5H
LD GX,#0020H
ad674_single1:
ANDB PORT1_DA,#0FDH ;对R/C 置0,即开始转换
LDB PORT1,PORT1_DA
ad674_single2:
LDB FXL,PORT2
JBS FXL,7,ad674_single2 ;检查忙信号
ORB PORT1_DA,#02H
LDB PORT1,PORT1_DA ;对R/C 置1
NOP
NOP
LDB FXL,AD_DATALO_ADD[0]
LDB FXH,AD_DATAHI_ADD[0]
ANDB FXH,#0FH
STB FXL,[GX]+
STB FXH,[GX]+
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ MXL,ad674_single1
CALL taxisdata
LDB CXL,#2
DIVUB AX,CXL ;将小数点向前移三位
;CMPB AXL,#127
;JH ad674_single3
;LDB BXL,#02
;MULUB AX,BXL
;POP GX
;RET
ad674_single3:
CMPB AXL,#0FEH
JH ad674_single31
POP GX
RET
ad674_single31:
LDB AXL,#0FEH
POP GX
RET
;----------------------------------------------------
;END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -