📄 hst1l.asm
字号:
MOVFF IBMAXH,IBH
MOVFF IBMAXL,IBL
BRA ADI4
ADI3 MOVFF IBMINH,IBH
MOVFF IBMINL,IBL
ADI4 BTFSS SIGN2,3 ;JUDGE THE HIGH/LOWER CHANEL OF IC
BRA ADI5
MOVFF ICMAXH,ICH
MOVFF ICMAXL,ICL
BRA ADI6
ADI5 MOVFF ICMINH,ICH
MOVFF ICMINL,ICL
ADI6 BTFSS SIGN2,4 ;JUDGE THE HIGH/LOWER CHANEL OF IN
BRA ADI7
MOVFF INMAXH,INH
MOVFF INMAXL,INL
GOTO ADI8
ADI7 MOVFF INMINH,INH
MOVFF INMINL,INL
ADI8 BTFSS SIGN2,5 ;JUDGE THE HIGH/LOWER CHANEL OF IG
BRA ADI9
MOVFF IGMAXH,IGH
MOVFF IGMAXL,IGL
BRA ADI10
ADI9 MOVFF IGMINH,IGH
MOVFF IGMINL,IGL
ADI10 CALL ACTION2
BTFSC NOTM,3
BRA AD11
CLRF IAMAXH ;CLEAR THE REGESTER
CLRF IAMAXL
CLRF IAMINH
CLRF IAMINL
CLRF IBMAXH
CLRF IBMAXL
CLRF IBMINH
CLRF IBMINL
CLRF ICMAXH
CLRF ICMAXL
CLRF ICMINH
CLRF ICMINL
CLRF INMAXH
CLRF INMAXL
CLRF INMINH
CLRF INMINL
CLRF IGMAXH
CLRF IGMAXL
CLRF IGMINH
CLRF IGMINL
BRA AD11
AD10 CALL ACTION2
BTFSS SIGN2,1
BRA TG4
; BCF ADCON0,5
; BCF ADCON0,4
; BCF ADCON0,3
; BCF ADCON0,2
MOVLW 01H
MOVWF ADCON0
BSF PORTC,0 ;SELECT THE CHANEL OF IAMAX
BCF PORTC,1
BCF PORTC,2
MOVLW 01H
MOVWF CHANEL ;POINT TO NEXT CHANEL:IAMAX
NOP
BRA TGD1
TG4 ;BCF ADCON0,5
;BCF ADCON0,4
;BCF ADCON0,3
;BCF ADCON0,2
MOVLW 01H
MOVWF ADCON0
BCF PORTC,0 ;SELECT THE CHANEL OF IAMIN
BCF PORTC,1
BCF PORTC,2
MOVLW 00H
MOVWF CHANEL ;POINT TO NEXT CHANEL:IAMIN
NOP
TGD1 BCF PIE1,6
RETURN
AD11 CLRF ADRESH ;CLEAR THE RESULT OF AD CONVERTER
CLRF ADRESL
; BCF ADCON0,5
; BCF ADCON0,4
; BCF ADCON0,3
; BCF ADCON0,2
MOVLW 01H ;SELECT THE AN0---CURRENT CHANEL
MOVWF ADCON0
BCF PORTC,0 ;POINT TO CHANEL OF IAMIN---THE ORIGINAL STATUS
BCF PORTC,1
BCF PORTC,2
CLRF CHANEL
NOP
BCF PIE1,6 ;OPEN THE INTERRUPT OF AD
RETURN
;***********VIRTUAL VALUE CONVERSION AND COMPARE SUBROUTINE**************************
COMP MOVLB 00H
MOVLW 79H
MOVWF TBLPTRH
BTFSS SIGN2,1 ;JUDGE THE IA
BRA CMP0 ;BE LITTLE CHANEL
MOVLW 30H ;BE BIG CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1 ;ADD THE OFFSET OF THE SWITCH
TBLRD*+ ;READ THE TABLE
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF IAH,OPER1
MOVFF IAL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IA01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IA00
BRA CMP1
CMP0 MOVLW 60H ;BE LITTLE CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF IAH,OPER1
MOVFF IAL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IA01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IA00
CMP1 BTFSS SIGN2,2 ;JUDGE THE IB
BRA CMP2 ;BE LITTLE CHANEL
MOVLW 30H ;BE BIG CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF IBH,OPER1
MOVFF IBL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IB01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IB00
BRA CMP3
CMP2 MOVLW 60H ;BE LITTLE CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF IBH,OPER1
MOVFF IBL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IB01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IB00
CMP3 BTFSS SIGN2,3 ;JUDGE THE IC
BRA CMP4 ;BE LITTLE CHANEL
MOVLW 30H ;BE BIG CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF ICH,OPER1
MOVFF ICL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IC01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IC00
BRA CMP5
CMP4 MOVLW 60H ;BE LITTLE CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF ICH,OPER1
MOVFF ICL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IC01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IC00
CMP5 BTFSS SIGN2,4 ;JUDGE THE IN
BRA CMP6 ;BE LITTLE CHANEL
MOVLW 30H ;BE BIG CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF INH,OPER1
MOVFF INL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IN01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IN00
BRA CMP7
CMP6 MOVLW 60H ;BE LITTLE CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF INH,OPER1
MOVFF INL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IN01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IN00
CMP7 BTFSS SIGN2,5 ;JUDGE THE IG
BRA CMP8 ;BE LITTLE CHANEL
MOVLW 90H ;BE BIG CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF IGH,OPER1
MOVFF IGL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IG01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IG00
BRA CMP9
CMP8 MOVLW 0F0H ;BE LITTLE CHANEL
MOVWF TBLPTRL
RLNCF TMP0,0
ADDWF TMP0,0
ADDWF TBLPTRL,1
TBLRD*+
MOVFF TABLAT,OPER3
TBLRD*+
MOVFF TABLAT,OPER2
MOVFF IGH,OPER1
MOVFF IGL,OPER0
CALL WORDMUL
TBLRD*
MOVFF TABLAT,TEMP06
CALL WORDIV
MOVFF TEMP08,IG01 ;GET THE VIRTUAL VALUE OF THE CURRENT
MOVFF TEMP07,IG00
CMP9 MOVLW 0C1H
ANDWF SIGN2,1
CMPEND RETURN
;***********SHUTTING OFF OF THE SHORT,LONG AND GND FAIL SUBROUTINE********************
ACTION1 MOVLB 00H
MOVF TT20,0
CPFSLT TT40
BRA ACT20
MOVF IT4,0 ;JUDGE THE Ir4 = OFF?
ANDLW 0FH
MOVWF TEM00
MOVLW 04H
CPFSEQ TEM00
BRA ACT21 ;GND FAIL IR4
BRA ACT22
ACT21 MOVFF IGeH,COM1H
MOVFF IGeL,COM1L
MOVFF II41,COM0H
MOVFF II40,COM0L
CALL FIBJ
BTFSC FLAG1,1
BRA ACT23 ;SHUT OFF OF IG
CLRF TR4COUNT
ACT22 MOVF IT2,0
ANDLW 0FH
MOVWF TEM00
MOVLW 05H
CPFSEQ TEM00 ;JUDGE THE Ir2=OFF??
BRA ACT24
BRA ACT25 ;GO TO LONG DELAY
ACT24 MOVFF IeH,COM1H
MOVFF IeL,COM1L
MOVFF II21,COM0H
MOVFF II20,COM0L
CALL FIBJ
BTFSC FLAG1,1
BRA ACT26 ;SHUT OFF OF Ir2
CLRF TR2COUNT
BRA ACT25 ;GO TO LONG DELAY
ACT20 MOVF IT2,0
ANDLW 0FH
MOVWF TEM00
MOVLW 05H
CPFSEQ TEM00 ;JUDGE THE Ir2=OFF??
BRA ACT27
BRA ACT28
ACT27 MOVFF IeH,COM1H ;THE CURRENT OF SAMPLING >=Ir2??
MOVFF IeL,COM1L
MOVFF II21,COM0H
MOVFF II20,COM0L
CALL FIBJ
BTFSC FLAG1,1
BRA ACT26 ;SHUT OFF OF IR2
CLRF TR2COUNT
ACT28 MOVF IT4,0 ;JUDGE THE Ir4 = OFF?
ANDLW 0FH
MOVWF TEM00
MOVLW 04H
CPFSEQ TEM00
BRA ACT29
BRA ACT25 ;GO TO LONG DELAY
ACT29 MOVFF IGeH,COM1H
MOVFF IGeL,COM1L
MOVFF II41,COM0H
MOVFF II40,COM0L
CALL FIBJ
BTFSC FLAG1,1 ;JUDGE: IG>=Ir4?
BRA ACT23 ;SHUT OFF OF IG
CLRF TR4COUNT
BRA ACT25 ;GO TO LONG DELAY
ACT26 INCF TR2COUNT ;THE TIME OF Ir2 IS OVER?
MOVF TT20,0
CPFSGT TR2COUNT
BRA ACTEND
BSF SIGN1,5
BSF PDBACK,0
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,1
BCF PORTF,1
CLRF TR2COUNT
BRA ACTOFF
ACT23 INCF TR4COUNT ;THE TIME OF IG IS OVER?
MOVF TT40,0
CPFSGT TR4COUNT
BRA ACTEND
BSF SIGN1,7
BSF PDBACK,0
BSF PDBACK,1
BSF PDBACK,2
BCF PDBACK,3
BCF PORTF,3
CLRF TR4COUNT
BRA ACTOFF
;+++++++++++++++ENTER Ir1+++++++++++++++++++
ACT25 MOVF IT1,0 ;THE Ir1 = OFF?
ANDLW 0FH
MOVWF TEM00
MOVLW 00H
CPFSEQ TEM00
BRA ACTIR10
BRA ACTEND
ACTIR10
MOVFF IeL,COM10L
MOVFF IeH,COM10H ;THE CURRENT OF SAMPLING >1.15*Ir1??
MOVFF II01,COM00H
MOVFF II00,COM00L
CALL CFIBJ
BTFSS FLAG1,0
BRA ACTIR11 ;I<1.15*Ir1
;********GET THE TIME OF FAIL****************************
I2CIR10
CLRF PORTD ;SHOW ALL OF THE LOAD LIGHT
BSF SIGN1,6 ;SET THE FLAG BIT OF ENTER LONG DELAY FAILURE
MOVFF IeH,OPER3
MOVFF IeL,OPER2
MOVFF IeH,OPER1
MOVFF IeL,OPER0
CALL WORDMUL
MOVF RES0,0 ;THE ENERGY ADD UP
ADDWF ENERGY5,1
MOVF RES1,0
ADDWFC ENERGY6,1
MOVF RES2,0
ADDWFC ENERGY7,1
MOVF RES3,0
ADDWFC ENERGY8,1
BTFSS STATUS,0
BRA ACTIR12
INCF ENERGY9
ACTIR12
MOVF ENERGY4,0
CPFSGT ENERGY9
BRA ACTIR14
BSF PDBACK,1
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,0
BCF PORTF,0
BRA ACTOFF ;SHUT OFF
ACTIR14 CPFSEQ ENERGY9
BRA ACTIR13 ;THE ENERGY IS NOT ENOUGH TO SHUT OFF
MOVF ENERGY3,0
CPFSGT ENERGY8
BRA ACTIR15
BSF PDBACK,1
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,0
BCF PORTF,0
BRA ACTOFF ;SHUT OFF
ACTIR15 CPFSEQ ENERGY8
BRA ACTIR13 ;THE ENERGY IS NOT ENOUGH
MOVF ENERGY2,0
CPFSGT ENERGY7
BRA ACTIR16
BSF PDBACK,1
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,0
BCF PORTF,0
BRA ACTOFF ;SHUT OFF
ACTIR16 CPFSEQ ENERGY7
BRA ACTIR13 ;THE ENERGY IS NOT ENOUGH
MOVF ENERGY1,0
CPFSGT ENERGY6
BRA ACTIR17
BSF PDBACK,1
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,0
BCF PORTF,0
BRA ACTOFF ;SHUT OFF
ACTIR17 CPFSEQ ENERGY6
BRA ACTIR13 ;THE ENERGY IS NOT ENOUGH
MOVF ENERGY0,0
CPFSGT ENERGY5
BRA ACTIR18
BSF PDBACK,1
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,0
BCF PORTF,0
BRA ACTOFF ;SHUT OFF
ACTIR18 CPFSEQ ENERGY5
BRA ACTIR13 ;THE ENERGY IS NOT ENOUGH
BSF PDBACK,1
BSF PDBACK,2
BSF PDBACK,3
BCF PDBACK,0
BCF PORTF,0
ACTOFF BCF PIE1,6
BCF PIE1,2
BCF PORTB,4
BCF SIGN2,0
BCF PORTB,5 ;SHUT OFF
BCF PORTF,6 ;SHOW THE LIGHT OF SHUT OFF
CALL DELAY10
BSF PORTB,5
BSF PORTB,4
BTFSS BZW,1
CALL ACT12 ;WRITE EEPROM
BCF SIGN2,0
BCF BZW,1
GOTO LOOP1
ACTIR13 BSF PDBACK,0
BSF PORTF,0 ;THE ENERGY IS NOT ENOUGH TO SHUT OFF
INCF COUNT1 ;10ms++
MOVLW 64H
CPFSEQ COUNT1
BRA ACTEND
CLRF COUNT1
INCF COUNT2 ;1"++
CPFSEQ COUNT2
BRA ACTEND
CLRF COUNT2
INCF COUNT3 ;100"++
BSF PIE1,2
ACTEND BSF PIE2,2
BSF PORTA,4
RETURN
;*****************************************************8.16
CFIBJ
; MOVLB 0
MOVF COM10H,0
CPFSGT COM00H ;COM0>COM1
BRA FIBJ31
BRA FIBJ11
FIBJ31 CPFSEQ COM00H
BRA FIBJ21
MOVF COM10L,0
CPFSLT COM00L
BRA FIBJ11
FIBJ21 BSF FLAG1,0 ;COM0<COM1
RETURN
FIBJ11 BCF FLAG1,0 ;COM0>=COM1
RETURN
;****************************************************8.16
ACTIR11 BTFSS SIGN1,6 ;ENTER THE HOT MEMORY??
BRA ACTIR30
MOVFF ENERGY6,ENERGY10 ;1/255*ENERGY(9~5)->ENERGY(10~12)
MOVFF ENERGY7,ENERGY11
MOVFF ENERGY8,ENERGY12
MOVFF ENERGY9,ENERGY13
CALL THERMO
BRA ACTEND
ACTIR30 CLRF COUNT1
CLRF COUNT2
CLRF COUNT3
CLRF ENERGY9
CLRF ENERGY8
CLRF ENERGY7
CLRF ENERGY6
CLRF ENERGY5
BSF PIE1,2
RETURN
;***********30'HOT MEMORY SUBROUTINE OF LONG DELAY**************************************
THERMO MOVLB 00H
INCF COUNT5 ;COUNT5+10ms
MOVLW 64H
CPFSEQ COUNT5
BRA THEREND
CLRF COUNT5
INCF COUNT6 ;COUNT6+1S
MOVLW 07H
CPFSEQ COUNT6 ;7S IS GONE
BRA THEREND
CLRF COUNT6
MOVLW 00H ;COMPARE ENERGY
CPFSEQ ENERGY9
BRA THER0
MOVF ENERGY13,0
CPFSGT ENERGY8
BRA THER1
BRA THER0
THER1 CPFSEQ ENERGY8
BRA THERCLR
MOVF ENERGY12,0
CPFSGT ENERGY7
BRA THER2
BRA THER0
THER2 CPFSEQ ENERGY7
BRA THERCLR
MOVF ENERGY11,0
CPFSGT ENERGY6
BRA THER3
BRA THER0
THER3 CPFSEQ ENERGY6
BRA THERCLR
MOVF ENERGY10,0
CPFSGT ENERGY5
BRA THER4
BRA THER0
THER4 CPFSEQ ENERGY5
BRA THERCLR
THER0 MOVF ENERGY10,0 ;THE ENERGY IS DECREASING
SUBWF ENERGY5,1
MOVF ENERGY11,0
SUBWFB ENERGY6,1
MOVF ENERGY12,0
SUBWFB ENERGY7,1
MOVF ENERGY13,0
SUBWFB ENERGY8,1
BTFSC STATUS,0
BRA THEREND
DECF ENERGY9
THERCLR BCF SIGN1,6 ;CLEAR THE FLAG BIT OF LONG DELAY
CLRF ENERGY5 ;CLEAR THE MEMORY OF ENERGY
CLRF ENERGY6
CLRF ENERGY7
CLRF ENERGY8
CLRF ENERGY9
CLRF ENERGY10
CLRF ENERGY11
CLRF ENERGY12
CLRF ENERGY13
CLRF COUNT5 ;CLEAR THE COUNT
CLRF COUNT6
THEREND RETURN
;***********16B - 16B SUBROUTINE : (OPER3:OPER2-OPER1:OPER0=OPER3:OPER2) ***************
WORDSUB COMF OPER0 ;5 ROWS BLOW WILL BE COMPLEMENT
INCF OPER0
BTFSC STATUS,2
DECF OPER1
COMF OPER1
;***********16 B + 16 B SUBROUTINE :(OPER3:OPER2+OPER1:OPER0=OPER3:OPER2)****************
WORDADD MOVF OPER0,0
ADDWF OPER2 ;ADD THE LOWER 8 BIT
BTFSC STATUS,0 ;ADD THE CARRY
INCF OPER3
MOVF OPER1,0
ADDWF OPER3
RETLW 0 ;THE END
;**************************MY FILTER SUBRO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -