📄 text10(新算法).asm
字号:
;被除数R2、R3、R4、R5,除数R6、R7
;出口:OV=0时,商R4R5,余数R2R3,OV=1,益出,占用PSW、A、B、R1--R7。
DIV_2V2:
MOV B,#10H
DIVL:CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
JB F0,DVME
JC DMDE
DVME:MOV R2,A
MOV A,R1
MOV R3,A
INC R5
DMDE:DJNZ B,DIVL
CLR F0
RET
RET
;****************************求平均数子程序 和/8
; 和R2R3R4R5,商R4R5,余数R2R3
PINGJUN:
MOV R5,#00
MOV R4,#00
MOV R0,#00
MOV R7,#8
MOV R3,#0
PDV_1:
INC R0
MOVX A,@R0
ADD A ,R5
MOV R5,A
MOV R4,A
ADDC A,#0
MOV R4,A
INC R0
DJNZ R7,PDV_1
MOV R0,#00
MOV R7,#8
PDV_2:
MOVX A ,@R0
ADD A ,R4
MOV R4,A
MOV A,R3
ADDC A,#0
MOV R3,A
INC R0
INC R0
DJNZ R7,PDV_2
MOV R2,#0
MOV R6,#0
MOV R7,#8
LCALL DIV_2V2
RET
RET
;****************************数据校准
CHULI_II: ;电流
SETB RS1
MOV C,P2.2
JNC k_1 ; 200mA
MOV C,P2.3
JNC K_2 ; 320mA
MOV C,P1.5
JNC K_3 ; 820mA
SJMP SHIBAI
K_3: ; K3
MOV R7,55H
MOV R6,56H
MOV R5,5EH
MOV R4,5DH
LCALL MULD
CJNE R1,#1,SHIBAI_6
SHIBAI_6:JNC SHIBAI
CJNE R2,#23H,SHIBAI_7
CJNE R3,#3CH,SHIBAI_7
SHIBAI_7:JNC SHIBAI
CJNE R2,#1CH,SHIBAI_8
CJNE R3,#0D4H,SHIBAI_8
SHIBAI_8:JNC SHIBAI
SJMP WIN_0
K_1: ;K1
MOV R7,55H
MOV R6,56H
MOV R5,5EH
MOV R4,5DH
LCALL MULD ;转校准子程序
CJNE R1,#1,SHIBAI_0
SHIBAI_0:JNC SHIBAI
CJNE R2,#8,SHIBAI_1
CJNE R3,#098H,SHIBAI_1
SHIBAI_1:JNC SHIBAI
CJNE R2,#7,SHIBAI_2
CJNE R3,#08H,SHIBAI_2
SHIBAI_2:
JC SHIBAI
WIN_0:
LCALL WRITE_LOOP ; 参数写保护
CPL P2.1
LCALL SHAN_1 ;调用闪烁子程序
CPL P2.1
LCALL SHAN_1
CPL P2.1
LCALL SHAN_1
SETB P2.1
MOV A,5EH
MOV 7EH,A
MOV A,5DH
MOV 7DH,A
;MOV 59H,#02 ;置请求保存参数标志
MOV 57H,#8 ;调试计算次数
CLR RS1
RET
RET
SHIBAI:
CLR RS1
RET
RET
K_2: ;K2
MOV R7,55H
MOV R6,56H
MOV R5,5EH
MOV R4,5DH
LCALL MULD
CJNE R1,#1,SHIBAI_3
SHIBAI_3:JNC SHIBAI
CJNE R2,#0DH,SHIBAI_4
CJNE R3,#0C0H,SHIBAI_4
SHIBAI_4:JNC SHIBAI
CJNE R2,#0BH,SHIBAI_5
CJNE R3,#40H,SHIBAI_5
SHIBAI_5:JC SHIBAI
SJMP WIN_0
CHULI_VV: ;电压
SETB RS1
MOV C,P2.2
JNC k_11 ; 60V X100
MOV C,P2.3
JNC K_22 ; 110V X100
MOV C,P1.5
JNC K_33 ; 220V X100
SJMP SHIBAI
K_11: ; K11 误差范围为20%
MOV R7,62H
MOV R6,63H
MOV R5,60H
MOV R4,5FH
LCALL MULD ; 转校准子程序
CJNE R1,#1,SHIBAI_9
SHIBAI_9:JNC SHIBAI
CJNE R2,#1CH,SHIBAI_10
CJNE R3,#20H,SHIBAI_10
SHIBAI_10:JNC SHIBAI
CJNE R2,#12H,SHIBAI_11
CJNE R3,#0C0H,SHIBAI_11
SHIBAI_11:
JC SHIBAI ;********失败后选择放大倍数暂不写
SJMP WIN_00
SHIBAI_GD:LJMP SHIBAI
K_22: ;K22
MOV R7,62H
MOV R6,63H
MOV R5,60H
MOV R4,5FH
LCALL MULD ; 转校准子程序
CJNE R1,#1,SHIBAI_12
SHIBAI_12:JNC SHIBAI_GD
CJNE R2,#33H,SHIBAI_13
CJNE R3,#90H,SHIBAI_13
SHIBAI_13:JNC SHIBAI
CJNE R2,#22H,SHIBAI_14
CJNE R3,#60H,SHIBAI_14
SHIBAI_14:
JC SHIBAI_GD ;*******失败后选择放大倍数暂不写
SJMP WIN_00
K_33: ;K33
MOV R7,62H
MOV R6,63H
MOV R5,60H
MOV R4,5FH
LCALL MULD ; 转校准子程序
CJNE R1,#1,SHIBAI_15
SHIBAI_15:JNC SHIBAI_GD
CJNE R2,#67H,SHIBAI_16
CJNE R3,#20H,SHIBAI_16
SHIBAI_16:JNC SHIBAI_GD
CJNE R2,#44H,SHIBAI_17
CJNE R3,#0C0H,SHIBAI_17
SHIBAI_17:
JC SHIBAI_GD ;********失败后选择放大倍数暂不写
WIN_00:
LCALL WRITE_LOOP ; 参数写保护
CPL P2.1
LCALL SHAN_1 ;调用闪烁子程序
CPL P2.1
LCALL SHAN_1
CPL P2.1
LCALL SHAN_1
SETB P2.1
MOV A,60H
MOV 7CH,A
MOV A,5FH
MOV 7BH,A
;MOV 59H,#02 ;置请求保存参数标志
MOV 57H,#8 ;调试计算次数
CLR RS1
RET
RET
;************************数据处理子程序,电流优先
CHULI_I:
SETB RS0
MOV R7,55H
MOV R6,56H
MOV R5,7EH
MOV R4,7DH
LCALL MULD
;******************减电流固定值
;SUBB_0:
MOV A,R2 ;电流值高字节
CJNE A,66H, SUBB_1 ; 判断固定值大小
SUBB_1:JC JIANWAN
XRL A,66h
JZ SUBB_2
SJMP SUBB_3
SUBB_2:
MOV A,R3
CJNE A,67H,SUBB_4
SUBB_4:JC JIANWAN
SUBB_3:CLR C
MOV A,R3
SUBB A,67H
MOV 69H,A ; 电流中间值低八位
MOV A,R2
SUBB A,66H
MOV 68H,A ; 电流中间值高八位
;CLR RS0
SJMP GOON
JIANWAN:
;CLR RS0
MOV 68H,#00
MOV 69H,#00
;*********************电流告警等级判断
GOON:
MOV A,68H ;严重告警高八位
CJNE A,6AH,GOON_0
GOON_0:
JC ZHONGYAO
XRL A,6AH
JZ GOON_1
SJMP LMD_3 ;转开定时器
GOON_1:
MOV A,69H ;严重告警低八位
CJNE A,6BH,GOON_2
GOON_2:
JC ZHONGYAO
LMD_3:
MOV R1,#0B4H
MOV @R1,#0AAH ;电流告警标志置位
INC R1
MOV @R1,#00
INC R1
MOV @R1,#00
MOV A,6FH
CJNE A,#1,OVER_0
OVER_0:JC OVER_1
SETB TR0
CLR RS0
RET
RET
OVER_1:
MOV A,70H
CJNE A,#1,OVER_2
OVER_2:
JC OVER3
MOV R1,#0B4H
MOV @R1,#0AAH ;电流告警标志置位
SETB TR0
CLR RS0
RET
RET
OVER3:
CLR TR0
CLR RS0
CLR P2.0 ;亮电流告警灯
MOV 79H,#03 ;严重告警类型
MOV 77H,68H ;严重告警电流值高八位
MOV 78H,69H ;严重告警电流低八位
MOV R1,#0B9H
MOV 71H,@R1
INC R1
MOV 72H,@R1
INC R1
MOV 73H,@R1
INC R1
MOV 74H,@R1
RET
RET
;*******************重要告警
ZHONGYAO:
MOV A,68H
CJNE A,6CH,GOON_3
GOON_3:
JC YIBAN
XRL A,6CH
JZ GOON_4
SJMP LMD_2
GOON_4:
MOV A,69H
CJNE A,6DH,GOON_5
GOON_5:
JC YIBAN
LMD_2:
MOV R1,#0B5H
MOV @R1,#0AAH ;电流告警标志置位
DEC R1
MOV @R1,#00
MOV R1,#0B6H
MOV @R1,#00
MOV A,71H
CJNE A,#1,OVER_3
OVER_3:JC OVER_4
SETB TR0
CLR RS0
RET
RET
OVER_4:
MOV A,72H
CJNE A,#1,OVER_5
OVER_5:
JC OVER2
MOV R1,#0B5H
MOV @R1,#0AAH ;电流告警标志置位
SETB TR0
CLR RS0
RET
RET
OVER2:
CLR TR0
CLR RS0
CLR P2.0;亮电流告警灯
MOV 79H,#02;重要告警类型
MOV 77H,68H ;重要告警电流值高八位
MOV 78H,69H ;重要告警电流低八位
MOV R1,#0B7H
MOV 6FH,@R1
INC R1
MOV 70H,@R1
MOV R1,#0BBH
MOV 73H,@R1
INC R1
MOV 74H,@R1
RET
RET
;*************************一般告警
YIBAN:
MOV A,68H
CJNE A,5CH,GOON_6
GOON_6:
JC SHUNPENG
XRL A,5CH
JZ GOON_7
SJMP LMD_1
GOON_7:
MOV A,69H
CJNE A,6EH,GOON_8
GOON_8:
JC SHUNPENG
LMD_1:
MOV R1,#0B6H
MOV @R1,#0AAH ;电流告警标志置位
DEC R1
MOV @R1,#00
DEC R1
MOV @R1,#00
MOV A,73H
CJNE A,#1,OVER_6
OVER_6:JC OVER_7
SETB TR0
CLR RS0
RET
RET
OVER_7:
MOV A,74H
CJNE A,#1,OVER_8
OVER_8:
JC OVER1
MOV R1,#0B6H
MOV @R1,#0AAH ;电流告警标志置位
SETB TR0
CLR RS0
RET
RET
OVER1:
CLR TR0
CLR RS0
CLR P2.0;亮电流告警灯
MOV 79H,#01;一般告警类型
MOV 77H,68H ;一般告警电流值高八位
MOV 78H,69H ;一般告警电流低八位
MOV R1,#0B7H
MOV 6FH,@R1
INC R1
MOV 70H,@R1
INC R1
MOV 71H,@R1
INC R1
MOV 72H,@R1
RET
RET
;*******************电流瞬碰判断 子程序,没有达到告警时间恢复正常的定为瞬碰信息
SHUNPENG:
MOV A,6FH
CJNE A,#1,SHUNPENG_0
SHUNPENG_0:
JNC SHUNPENG_6
MOV A,70H
CJNE A,#1,SHUNPENG_1
SHUNPENG_1:
JNC SHUNPENG_6
MOV A,71H
CJNE A,#1,SHUNPENG_2
SHUNPENG_2:
JNC SHUNPENG_6
MOV A,72H
CJNE A,#1,SHUNPENG_3
SHUNPENG_3:
JNC SHUNPENG_6
MOV A,73H
CJNE A,#1,SHUNPENG_4
SHUNPENG_4:
JNC SHUNPENG_6
MOV A,74H
CJNE A,#1,SHUNPENG_5
SHUNPENG_5:
JC ZHENGCHANG
SHUNPENG_6:
MOV R1,#0BDH
MOV A,68H ;电流值大于等于190mA,瞬碰有效
CJNE A,#1,SHUNPENG_7
SHUNPENG_7:
JNC SHUNGPENG_8
MOV A,69H
CJNE A,#190,SHUNPENG_9
SHUNPENG_9:
JC ZHENGCHANG
SHUNGPENG_8:
MOV @R1,68H
INC R1
MOV @R1,69H
MOV 2FH,#19 ;瞬碰
;*********************正常,无电流告警
ZHENGCHANG:
MOV R1,#00B4H
MOV @R1,#00 ; 电流告警标志清零
INC R1
MOV @R1,#00
INC R1
MOV @R1,#00
CLR TR0
CLR RS0
SETB P2.0
MOV R1,#0B7H
MOV 6FH,@R1
INC R1
MOV 70H,@R1
INC R1
MOV 71H,@R1
INC R1
MOV 72H,@R1
INC R1
MOV 73H,@R1
INC R1
MOV 74H,@R1
MOV 79H,#0
MOV 77H,68H
MOV 78H,69H
RET
RET
;********************电压数据处理
CHULI_V:
SETB RS0
MOV R7,62H
MOV R6,63H
MOV R5,7CH
MOV R4,7BH
LCALL MULD
;********************减电压固定值
;SUBB_0:
MOV A,R2 ;电压值高字节
CJNE A,#01H, SUBB_5 ;判断固定值是否超范围
SUBB_5:JC SUBB_6
MOV R3,#0FFH
SUBB_6:
MOV A,R3
CJNE A,2EH,SUBB_7
SUBB_7:JC JIANWAN1
CLR C
MOV A,R3
MOV 2DH,A ; 电压值中间寄存器
SUBB A,2EH
SJMP GAOJING_V
JIANWAN1:
MOV 2DH,#00
;*************************电压告警判断
GAOJING_V:
MOV A,2DH
CJNE A,2BH,GAOJING_V0
GAOJING_V0:JC LIGHT_OFF
MOV A,75H
CJNE A,#1 ,GAOJING_V1
GAOJING_V1:
JC GAOJING_V2
SETB TR1
CLR RS0
RET
RET
GAOJING_V2:
MOV A,76H
CJNE A,#1,GAOJING_V3
GAOJING_V3:
JC LIGHT_ON
SETB TR1
CLR RS0
RET
RET
LIGHT_ON:
SETB P2.1 ;亮电压告警黄灯
CLR TR1
CLR RS0
MOV 2CH,2DH
RET
RET
LIGHT_OFF:
CLR P2.1
MOV R1,#0BFH ;电压告警灵敏度中间寄存器
MOV 75H,@R1
INC R1
MOV 76H,@R1
CLR TR1
CLR RS0
RET
RET
;*******************延时子程序
DELAY: ;延时 100.74us
MOV 52H,#0BEH
DELAY1:
NOP
DJNZ 52H, DELAY1
RET
RET
SHAN_1:
MOV 5BH,#6
DELAY4:MOV 5AH,#0FFH
DELAY5:MOV 42H,#0FFH
DELAY3:NOP
DJNZ 52H,DELAY3
NOP
DJNZ 5AH,DELAY5
NOP
DJNZ 5BH,DELAY4
RET
RET
;*************************;电压延时中断子程序
TIME_V:
PUSH PSW
PUSH ACC
SETB RS0
DJNZ 76H, TIME_V1
DJNZ 75H, TIME_V2
SJMP S2
TIME_V2:
MOV 76H,#0FFH
TIME_V1:
MOV TH1,#00
MOV TL1,#00
CLR RS0
POP ACC
POP PSW
RETI
RETI
S2:
CLR TR1
CLR RS0
POP ACC
POP PSW
RETI
RETI
;**************************;电流延时中断子程序
TIME_0:
PUSH PSW
PUSH ACC
SETB RS0
MOV R1,#0B4H
MOV A,@R1
CJNE A,#0AAH,YANZHONG_0
DJNZ 70H,TIME_1
DJNZ 6FH,TIME_2
SJMP S0
YANZHONG_0:INC R1
MOV A,@R1
CJNE A ,#0AAH,ZHONGYAO_0
DJNZ 72H,TIME_1
DJNZ 71H,TIME_3
SJMP S0
ZHONGYAO_0:INC R1
MOV A,@R1
CJNE A,#0AAH,S0;YIBAN_0
DJNZ 74H,TIME_1
DJNZ 73H,TIME_4
;SJMP S0
S0:
CLR TR0
CLR RS0
POP ACC
POP PSW
RETI
RETI
TIME_1:
MOV TH0,#00
MOV TL0,#00
CLR RS0
POP ACC
POP PSW
RETI
RETI
TIME_2:
MOV 70H,#0FFH
SJMP S1
TIME_3:
MOV 72H,#0FFH
SJMP S1
TIME_4:
MOV 74H,#0FFH
S1:
MOV TH0,#00
MOV TL0,#00
CLR RS0
POP ACC
POP PSW
RETI
RETI
;****************************比较求波峰值
MAX:
MOV A,50H ; 比较高八位
CJNE A,53H,MAX1
MOV A,51H ; 比较低八位
CJNE A,54H,MAX1
MAX1:
JC MAX2
MOV 53H,50H
MOV 54H,51H
RET
RET
MAX2:
RET
RET
;*********************************标志子程序
BIAOZHI_0: ;电流
LCALL PJXH_0 ;转平均系数子程序
SETB RS0
MOV R0,#00
MOV 57H,#8
CLR RS0
RET
RET
BIAOZHI_1: ;电压
LCALL PJXH_1 ;转平均系数子程序
SETB RS0
MOV R0,#00
MOV 57H,#8
CLR RS0
RET
RET
;**************************电流平均系数子程序
PJXH_0:
CLR F0
MOV R0,#0016H
MOVX A,@R0
CJNE A,#0AAH ,JIXU_0
INC R0
MOVX A,@R0
CJNE A,#0AAH,JIXU_0
INC R0
MOVX A,@R0
CJNE A,#0AAH,JIXU_0
MOV A,#00H
MOVX @R0,A;#00H
DEC R0
MOV A,#00H
MOVX @R0,A;#00H
DEC R0
MOV A,#00H
MOVX @R0,A;#00H
MOV 61H,#0BBH ;置电流调试标志位
ACALL DIV_HEV3
MOV A,R5
MOV 5DH,A ;电流最终系数小数
MOV A,R4
MOV 5EH,A ;电流最终系数整数
RET
RET
JIXU_0:
RET
RET
;*****************************电压平均系数子程序
PJXH_1:
CLR F0
MOV R0,#001DH
MOVX A,@R0
CJNE A,#0AAH ,JIXU_0
INC R0
MOVX A,@R0
CJNE A,#0AAH,JIXU_0
INC R0
MOVX A,@R0
CJNE A,#0AAH,JIXU_0
MOV A,#00H
MOVX @R0,A;#00H
DEC R0
MOV A,#00H
MOVX @R0,A;#00H
DEC R0
MOV A,#00H
MOVX @R0,A;#00H
MOV 65H,#0BBH ;置电压调试标志位
ACALL DIV_HEV3
MOV A,R5
MOV 5FH,A ;电压最终系数小数
MOV A,R4
MOV 60H,A ;电压最终系数整数
RET
RET
;****************************求平均数子程序 和/3
;和R2R3R4R5,商R4R5,余数R2R3
DIV_HEV3:
MOV R5,#00
MOV R4,#00
MOV R0,#0010H
MOV R7,#3
MOV R3,#0
PDV_13:
INC R0
MOVX A,@R0
ADD A ,R5
MOV R5,A
MOV R4,A
ADDC A,#0
MOV R4,A
INC R0
DJNZ R7,PDV_13
MOV R0,#10H
MOV R7,#3
PDV_23:
MOVX A ,@R0
ADD A ,R4
MOV R4,A
MOV A,R3
ADDC A,#0
MOV R3,A
INC R0
INC R0
DJNZ R7,PDV_23
MOV R2,#0
MOV R6,#0
MOV R7,#3
LCALL DIV_2V2
RET
RET
JIXI_0:
RET
RET
;************************校准子程序,被乘数R7R6,乘数R5R4,积R0R1R2R3
MULD:
MOV A,R6
MOV B,R4
MUL AB
MOV R3,A
MOV R2,B
MOV A,R7
MOV B,R4
MUL AB
ADD A,R2
MOV R2,A
MOV A,B
ADDC A,#0
MOV R1,A
MOV A,R6
MOV B,R5
MUL AB
ADD A,R2
MOV R2,A
MOV R0,#0
MOV A,R1
ADDC A,B
MOV R1,A
JNC LAST
INC R0
LAST:
MOV R7,A
MOV B,R5
MUL AB
ADD A,R1
MOV R1,A
MOV A,B
ADDC A,R0
MOV R0,A
RET
RET
;**********************参数写保护子程序
WRITE_LOOP:
MOV DEECON,#00H;初始化DEECON
MOV DEEDAT,#01H;预写入一个测试值
MOV DEEADR,#00H;地址初始值
WRITE_COMPLETE:
MOV A,DEECON
ANL A,#80H
JZ WRITE_COMPLETE
MOV DEECON,#00H;清0写完成标志位
READ1:
MOV DEEADR,#00H
READ_COMPLETE:
MOV A,DEECON
ANL A,#80H
JZ READ_COMPLETE
MOV A,DEEDAT
XRL A,#01
JNZ WRITE_LOOP
MOV A,61H
CJNE A,#0BBH,CANSHU_V
MOV DEECON ,#00
MOV DEEDAT,7EH
MOV DEEADR,#01H
WRITE_COMPLETE1:
MOV A,DEECON
ANL A,#80H
JZ WRITE_COMPLETE1
MOV DEECON,#00
MOV DEEDAT,7DH
MOV DEEADR,#02H
WRITE_COMPLETE2:
MOV A,DEECON
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -