📄 new.asm
字号:
RET ;24
;************************************************************
;中断响应子程序
X0_ZHD: ;中断处理
JNB X0_BZ,X0_ZHDE
JB CTL_UI,DIANLIU
;电压控制
MOV A,ADC_CV
MOV R2,ADC_FV
X0_ZHD3: LCALL CTL_VA
X0_ZHDE: CLR X0_BZ
RET
DIANLIU: ;电流控制
MOV A,ADC_CV
MOV R2,ADC_FI
LJMP X0_ZHD3
;0000000000000000000000000000000000000000000000000000
VA0_COM: ;调整0值 qxwcn
CLR CY
MOV A,qxwcn
SUBB A,#01H
JC VA0_END
MOV qxwcn,#00H
;如果移相已经到达或者超过最大移相时,零电平输出调整结束
MOV A,TX_H
CJNE A,MAX_XYH,VA0_COM3
MOV A,TX_L
CJNE A,MAX_XYL,VA0_COM3
MOV A,#01H
MOV R1,UMIN_H
LCALL C46_WD
MOV A,#02H
MOV R1,UMIN_L
LCALL C46_WD
CLR A
MOV R1,#0A5H
LCALL C46_WD
LJMP BEGIN
VA0_END: RET
VA0_COM3: ;保存最小值及触发点数值
MOV A,UMIN ;R2
CLR C
SUBB A,R2 ;UMIN
JC VA0_COM2
MOV UMIN,R2
MOV UMIN_H,TX_H
MOV UMIN_L,TX_L
VA0_COM2: MOV R3,#01H
LJMP CTL_UP
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;控制量控制过程,控制电压或者控制电流在运算器A中,反馈量在R2中
CTL_VA: JB OUT0_BZ,VA0_COM ;
MOV R3,A
CLR CY
SUBB A,R2
JC CTL_VA02 ;控制电压小于反馈电压
;控制电压大于反馈电压
MOV R3,A
CTL_UP: MOV A,TX_L
CLR CY
ADD A,R3
MOV DPL,A
MOV A,TX_H
ADDC A,#00H
MOV DPH,A
JC CTL_VA3 ;出现回绕
MOV A,DPH
; CLR CY
SUBB A,MAX_XYH
JC CTL_VA1 ;未到达电压最大量TH_H>=MAX_XYH
MOV A,DPL
CLR CY
SUBB A,MAX_XYL
JC CTL_VA1 ;未到达电压最大量
CTL_VA3: MOV DPL,MAX_XYL
MOV DPH,MAX_XYH
CTL_VA1: MOV TX_L,DPL
MOV TX_H,DPH
;但不得小于最小电压
RET
CTL_VA02: ;控制电压小于反馈电压
MOV A,R2
CLR CY
SUBB A,R3
MOV R3,A
CTL_DOWN: CLR CY
MOV A,TX_L
SUBB A,R3
MOV DPL,A
MOV A,TX_H
SUBB A,#00H
MOV DPH,A
JC CTL_VA03 ;出现回绕
MOV A,MIN_XYH
SUBB A,DPH
JC CTL_VA11 ;未到达电压最小量
MOV A,MIN_XYL
SUBB A,DPL
JC CTL_VA11
CTL_VA03: MOV DPH,MIN_XYH
MOV DPL,MIN_XYL
CTL_VA11: MOV TX_L,DPL
MOV TX_H,DPH
RET
;==========================================================================
;==========================================================================
T_RETI: RETI
;T0中断###################################
T0_00: LCALL T_RETI
CLR ET0 ;关闭T0中断
CLR TR0 ;关闭T0计数
SETB T0ZHD_BZ
T0_T1: SETB EX0 ;允许外部INT0中断
SETB EA
PUSH PSW
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
JNB T0ZHD_BZ,T0_T11
MOV TL0,#T3msL ;3.3mS计时T0中断
MOV TH0,#T3msH
CLR TF0
SETB TR0
SETB ET0 ;开启T0中断
INC T0_jsh ;
MOV A,T0_jsh
LJMP T0_T12
T0_T11: JNB T1ZHD_BZ,T0_0e
MOV TL1,#T3msL ;3.3mS计时T0中断
MOV TH1,#T3msH
CLR TF1
SETB TR1
SETB ET1 ;开启T0中断
INC T1_jsh ;
MOV A,T1_jsh
T0_T12: JNB XWEI_BZ,Fxwei ;相位判别 正相位xwei=0:执行T1_02~T1_07
clr CY ;反相位xwei=1:执行T1_102~T1_107
ADD A,#06H
Fxwei: MOV B,#03H
MUL AB
MOV DPTR,#go_0tab
JMP @A+DPTR
go_0tab: NOP
NOP
NOP
LJMP T0_02
;==========================================================================
LJMP T0_03
;==========================================================================
LJMP T0_04
;==========================================================================
LJMP T0_05
;==========================================================================
LJMP T0_06
;==========================================================================
LJMP T0_07
;==========================================================================
LJMP T0_102
;==========================================================================
LJMP T0_103
;==========================================================================
LJMP T0_104
;==========================================================================
LJMP T0_105
;==========================================================================
LJMP T0_106
;==========================================================================
LJMP T0_107
;==========================================================================
T0_02: LCALL TOUT_NA
JNB CHUFA_BZ,T0_0e
LCALL TOUT_C
T0_0e: POP DPL
POP DPH ;0549 D0 83
POP B ;054B D0 F0
POP ACC ;054D D0 E0
POP PSW ;054F D0 D0
RET ;0551 32
;==========================================================================
T0_03: LCALL TOUT_C
JNB CHUFA_BZ,T0_031
LCALL TOUT_NB
T0_031: LJMP T0_0e
;==========================================================================
T0_04: LCALL TOUT_NB
JNB CHUFA_BZ,T0_041
LCALL TOUT_A
T0_041: LJMP T0_0e
;==========================================================================
T0_05: LCALL TOUT_A
JNB CHUFA_BZ,T0_051
LCALL TOUT_NC
T0_051: LJMP T0_0e
;==========================================================================
T0_06: LCALL TOUT_NC
JNB CHUFA_BZ,T0_061
LCALL TOUT_B
T0_061: LJMP T0_0e
;==========================================================================
T0_07: LCALL TOUT_B
JNB CHUFA_BZ,T0_08
LCALL TOUT_NA
T0_08: JNB T0ZHD_BZ,T0_081
MOV T0_jsh,#00H
INC qxwcn
CLR ET0 ;关闭T0中断
CLR TR0 ;关闭T0计数
CLR TF0
CLR T0ZHD_BZ
LJMP T0_0e
T0_081: JNB T1ZHD_BZ,T0_082
MOV T1_jsh,#00H
INC qxwcn
CLR ET1 ;关闭T0中断
CLR TR1 ;关闭T0计数
CLR TF1
CLR T1ZHD_BZ
T0_082: LJMP T0_0e
;==========================================================================
;*******************************************************************
T0_102: LCALL TOUT_NA
JNB CHUFA_BZ,T0_1021
LCALL TOUT_B
T0_1021: LJMP T0_0e
;==========================================================================
T0_103: LCALL TOUT_B
JNB CHUFA_BZ,T0_1031
LCALL TOUT_NC
T0_1031: LJMP T0_0e
;==========================================================================
T0_104: LCALL TOUT_NC
JNB CHUFA_BZ,T0_1041
LCALL TOUT_A
T0_1041: LJMP T0_0e
;==========================================================================
T0_105: LCALL TOUT_A
JNB CHUFA_BZ,T0_1051
LCALL TOUT_NB
T0_1051: LJMP T0_0e
;==========================================================================
T0_106: LCALL TOUT_NB
JNB CHUFA_BZ,T0_1061
LCALL TOUT_C
T0_1061: LJMP T0_0e
;==========================================================================
T0_107: LCALL TOUT_C
JNB CHUFA_BZ,T0_1071
LCALL TOUT_NA
T0_1071: LJMP T0_08
;==========================================================================
TOUT_A: SETB out_a
LCALL ych_64us
CLR out_a ;截至输出
LCALL ych_24us
SETB out_a ;输出有效
LCALL ych_64us
CLR out_a ;截至输出
RET
;////////////////////////////
TOUT_B: SETB out_b
LCALL ych_64us
CLR out_b
LCALL ych_24us
SETB out_b
LCALL ych_64us
CLR out_b
RET
;///////////////////////
TOUT_C: SETB out_c
LCALL ych_64us
CLR out_c
LCALL ych_24us
SETB out_c
LCALL ych_64us
CLR out_c
RET
;////////////////////////////
TOUT_NA: SETB out_na
LCALL ych_64us
CLR out_na
LCALL ych_24us
SETB out_na
LCALL ych_64us
CLR out_na
RET
;////////////////////
TOUT_NB: SETB out_nb
LCALL ych_64us
CLR out_nb
LCALL ych_24us
SETB out_nb
LCALL ych_64us
CLR out_nb
RET
;/////////////////
TOUT_NC: SETB out_nc ;输出有效
LCALL ych_64us
CLR out_nc
LCALL ych_24us
SETB out_nc
LCALL ych_64us
CLR out_nc
RET
;==========================================================================
;T1中断
T1_00: LCALL T_RETI
CLR ET1 ;关闭T1中断
CLR TR1 ;关闭T1计数
SETB T1ZHD_BZ
LJMP T0_T1
;==========================================================================
ych_24us: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
;==========================================================================
ych_64us: LCALL ych_24us
LCALL ych_24us
NOP
NOP
NOP
NOP
RET
;==========================================================================
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
;93c46操作程序,初始化C46_SK=0,C46_CS=0,C46_DI=0,C46_DO=1
;93C46读操作
C46_RD: ;地址=A,取回数据在=A
LCALL C46_STR
LCALL CMD_RD
LCALL C46_ADD
nop
nop
nop
MOV R0,#80H
C46_RD2: JNB C46_DO,C46_RD3
DJNZ R0,C46_RD2
SETB C46_FAL
CLR C46_CS
RET
C46_RD3: MOV R0,#08H
C46_RD1: LCALL RD_BIT
RLC A
DJNZ R0,C46_RD1
CLR C46_CS
RET
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;写入数据
C46_WD: ;地址=A,数据=R1,使用R0,R1,R2
LCALL C46_WY
LCALL C46_WD0
LCALL C46_WN
RET
;93C46写入的允许10011、禁止10000
C46_WY: LCALL C46_STR
SETB C
LCALL WD_BIT
CLR C
LCALL WD_BIT
LCALL WD_BIT
SETB C
MOV R0,#07H
C46_WY1: LCALL WD_BIT
DJNZ R0,C46_WY1
CLR C46_CS
RET
;93C46写入的允许10011、禁止10000
C46_WN: LCALL C46_STR
SETB C
LCALL WD_BIT
CLR C
MOV R0,#09H
C46_WN1: LCALL WD_BIT
DJNZ R0,C46_WN1
CLR C46_CS
RET
;93C46写入操作
C46_WD0: ;地址=A,数据=R1,使用R0,R1,R2
MOV R2,A
LCALL C46_STR
LCALL CMD_WD
LCALL C46_ADD
MOV R0,#08H
MOV A,R1
C46_WD1: RLC A
LCALL WD_BIT
DJNZ R0,C46_WD1
CLR C46_CS ;保持0.5
mov r0,#04h
DJNZ R0,$
SETB C46_CS
mov r0,#04h
DJNZ R0,$
MOV R0,#80H
C46_WD2: JNB C46_DO,C46_WD5 ;2*0.83μ需要5ms
DJNZ R0,C46_WD2 ;2 =5ms*Fosc/(12*N)
C46_WD4: CLR C46_CS
MOV A,R2
LCALL C46_RD
CLR C
SUBB A,R1
JZ C46_WD8
C46_WD3: SETB C46_FAL
C46_WD8: CLR C46_CS
RET
C46_WD5: MOV A,#10H
mov r0,#0E2H
C46_WD6: JB C46_DO,C46_WD4 ;2
DJNZ R0,C46_WD6 ;2
djnz ACC,c46_wd6 ;2
LJMP C46_WD4
C46_ADD: MOV R0,#07H
RLC A
C46_ADD1: RLC A
LCALL WD_BIT
DJNZ R0,C46_ADD1
RET
C46_STR: SETB C46_DO
CLR C46_SK
SETB C46_CS
RET
CMD_RD: SETB CY
LCALL WD_BIT
LCALL WD_BIT
CLR CY
LCALL WD_BIT
RET
CMD_WD: SETB C
LCALL WD_BIT
CLR C
LCALL WD_BIT
SETB C
LCALL WD_BIT
RET
WD_BIT: MOV C46_DI,C
SETB C46_SK
NOP
NOP
NOP
CLR C46_SK
RET
RD_BIT: SETB C46_SK
NOP
NOP
NOP
CLR C46_SK
MOV C,C46_DO
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
YUSHE: ;初始预置
CLR A
LCALL C46_RD
CJNE A,#0A5H,YUSHE1
MOV A,#01H
LCALL C46_RD
MOV MIN_XYH,A
MOV A,#02H
LCALL C46_RD
MOV MIN_XYL,A
ADD A,#T10msL
MOV MAX_XYL,A
MOV A,MIN_XYH
ADDC A,#T10msH
MOV MAX_XYH,A
JNC YUSHE2
YUSHE1: SETB C46_FAL
YUSHE2: RET
;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -