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

📄 hst1l.asm

📁 能实现对三相电流的实时检测功能,并具有长延时 短延时 瞬时 接地四断保护功能.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;******************************************************************************
;   This file is a basic template for assembly code for a PIC18C658. Copy     *
;   this file into your project directory and modify or add to it as needed.  *
;                                                                             *
;   The PIC18CXXX architecture allows two interrupt configurations. This      *
;   template code is written for priority interrupt levels and the IPEN bit   *
;   in the RCON register must be set to enable priority levels. If IPEN is    *
;   left in its default zero state, only the interrupt vector at 0x008 will   *
;   be used and the WREG_TEMP, BSR_TEMP and STATUS_TEMP variables will not    *
;   be needed.                                                                *
;                                                                             *
;   Refer to the MPASM User's Guide for additional information on the         *
;   features of the assembler.                                                *
;                                                                             *
;   Refer to the PIC18CXX8 Data Sheet for additional information on the       *
;   architecture and instruction set.                                         *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Filename:                                                                *
;    Date:                                                                    *
;    File Version:                                                            *
;                                                                             *
;    Author:                                                                  *
;    Company:                                                                 *
;                                                                             * 
;******************************************************************************
;                                                                             *
;    Files required:         P18F6585.INC                                      *
;                                                                             *
;******************************************************************************

	LIST P=18C658		;list directive to define processor
	#include <P18F6585.INC>	;processor specific variable definitions

;******************************************************************************
;Configuration bits
; The __CONFIG directive defines configuration data within the .ASM file.
; The labels following the directive are defined in the P18C658.INC file.
; The PIC18CXX8 Data Sheet explains the functions of the configuration bits.

	;__CONFIG    _CONFIG0, _CP_OFF_0
	;__CONFIG    _CONFIG1, _OSCS_OFF_1 & _HS_OSC_1
	;__CONFIG    _CONFIG2, _BOR_OFF_2 & _PWRT_ON_2
	;__CONFIG    _CONFIG3, _WDT_OFF_3
	;__CONFIG    _CONFIG6, _STVR_ON_6

;Configuration byte 0 options
;_CP_ON_0 _CP_OFF_0
;Configuration byte 1 options
;_OSCS_ON_1 _OSCS_OFF_1 _LP_OSC_1 _XT_OSC_1 _HS_OSC_1
;_RC_OSC_1 _EC_OSC_1 _ECIO_OSC_1 _HSPLL_OSC_1 _RCIO_OSC_1
;Configuration byte 2 options
;_BOR_ON_2 _BOR_OFF_2 _PWRT_OFF_2 _PWRT_ON_2
;_BORV_25_2 _BORV_27_2 _BORV_42_2 _BORV_45_2
;Configuration byte 3 options
;_WDT_ON_3 _WDT_OFF_3 _WDTPS_128_3 _WDTPS_64_3 _WDTPS_32_3
;_WDTPS_16_3 _WDTPS_8_3 _WDTPS_4_3 _WDTPS_2_3 _WDTPS_1_3
;Configuration byte 6 options
;_STVR_ON_6 _STVR_OFF_6

;******************************************************************************
;Variable definitions
;These variables are only needed if low priority interrupts are used. 
;More variables may be needed to store other special function registers used
;in the interrupt routines.

		CBLOCK	0x04F

		WREG_TEMP	;variable used for context saving WHEN LOWER PRIORITY
		STATUS_TEMP	;variable used for context saving
		BSR_TEMP	;variable used for context saving
		ENDC				
;******************************************************************************
;ACCESS BANK
IT1 	EQU 	000H        	;VALUE OF THE ENCODER Ir1 &tr1
IT2 	EQU 	001H        	;VALUE OF THE ENCODER Ir2 &tr2
IT3 	EQU 	002H        	;VALUE OF THE ENCODER Ir3
IT4 	EQU 	003H       	;VALUE OF THE ENCODER Ir4 &tr4
II11 	EQU 	004H        	;ORIGINAL VALUE OF THE CURRENT IN LONG DELAY,HIGH BYTE 
II10 	EQU 	005H        	;LOWER BYTE
TT11 	EQU 	006H		;ORIGINAL VALUE OF THE TIME IN LONG DELAY,HIGH BYTE
TT10 	EQU 	007H		;LOWER BYTE
II21 	EQU 	008H		;ORIGINAL VALUE OF THE CURRENT IN SHORT DELAY,HIGH BYTE
II20 	EQU 	009H		;LOWER BYTE
TT20 	EQU 	00AH		;ORIGINAL VALUE OF THE TIME IN SHORT DELAY
II31 	EQU 	00BH		;ORIGINAL VALUE OF THE CURRENT IN NO TIME,HIGH BYTE
II30 	EQU 	00CH		;LOWER BYTE
II41 	EQU 	00DH		;ORIGINAL VALUE OF THE CURRENT OF CONNECT WITH GND,HIGH BYTE
II40 	EQU 	00EH		;LOWER BYTE
TT40 	EQU 	00FH		;ORIGINAL VALUE OF THE CURRENT OF CONNECT WITH GND
A1		EQU		010H
TEMP00 	EQU 	011H		;PORTD0~2
IeH 	EQU 	012H		;THE VALUE OF THE MAXIMUM CURRENT FROM SAMPLING,THE HIGH BYTE
IeL 	EQU 	013H		;THE LOWER BYTE
COM0H	EQU	014H		;TEMPORARY UNIT OF FIBJ SUBROUTINE,HIGH BYTE
COM0L	EQU	015H		;LOWER BYTE
COM1H	EQU	016H		;TEMPORARY UNIT OF FIBJ SUBROUTINE,HIGH BYTE
COM1L	EQU	017H
A0		EQU	018H
EEDATA1	EQU	019H

		;LOWER BYTE
TEMP06	EQU 	01AH		;TEMPORARY UNIT OF BLOWUP MULTIPLE'S NUMERATOR
TEMP07	EQU 	01BH		;TEMPORARY UNIT OF THE VIRTEL CURRENT,LOWER BYTE 
TEMP08	EQU 	01CH		;HIGH BYTE
SIGN1	EQU 	01DH		;FLAG BYTE 
OPER0	EQU 	01EH		;TEMPORARY UNIT A OF ALL THE OPERRATION,LOWER BYTE
OPER1	EQU 	01FH		;TEMPORARY UNIT A,HIGH BYTE
OPER2	EQU 	020H		;TEMPORARY UNIT B OF ALL THE OPERRATION,LOWER BYTE
OPER3	EQU 	021H		;TEMPORARY UNIT B OF ALL THE OPERRATION,HIGH BYTE
RES0	EQU 	022H		;THE RESULT OF ALL THE OPERATION,LOWER BYTE
RES1	EQU		023H		;HIGH BYTE
RES2	EQU		024H		;THE RESULT OF OPERATION,LOWER BYTE
RES3	EQU		025H		;LOWER BYTE
TMP7	EQU		026H
TEM00	EQU		027H		;TEMPORARY UNIT OF ENCODER IR1,IR2,IR4
GZQL	EQU		028H
COUNT1	EQU		029H		;COUNTER OF 10ms++
COUNT2	EQU		02AH		;COUNTER OF 1s++
COUNT3	EQU		02BH		;COUNTER OF 100s++
COUNT0	EQU		02CH		;COUNTER OF 1s
BZW		EQU		02DH   
FLAG1	EQU		02FH		;FLAG BYTE
SIGN2	EQU		030H		;FLAG BYTE
II00	EQU		031H		;TEMPORARY UNIT OF THE 1.15*IR1'S VALUE,LOWER BYTE
II01	EQU		032H		;TEMPORARY UNIT OF THE 1.15*IR1'S VALUE,HIGH BYTE
TR2COUNT	EQU	033H	;COUNTER OF TR2
TR4COUNT	EQU	034H	;COUNTER OF TR4
EEADDR		EQU	035H
CHANEL	EQU	036H		;TEMPORARY UNIT	OF A/D SAMPLE'S CHANNEL
IAMINH	EQU	037H		;TEMPORARY UNIT OF A/D SAMPLE'S INITIAL VALUE,IA'S LITTLE CHANNEL,HIGH BYTE
IAMINL	EQU	038H		;TEMPORARY UNIT OF A/D SAMPLE'S INITIAL VALUE,IA'S LITTLE CHANNEL,LOWER BYTE
IAMAXH	EQU	039H		;TEMPORARY UNIT	OF IA'S BIG CHANNEL,HIGH BYTE
IAMAXL	EQU	03AH		;TEMPORARY UNIT	OF IA'S BIG CHANNEL,LOWER BYTE
IBMAXH	EQU	03BH		;TEMPORARY UNIT	OF IB'S BIG CHANNEL,HIGH BYTE
IBMAXL	EQU	03CH		;TEMPORARY UNIT	OF IB'S BIG CHANNEL,LOWER BYTE
IBMINH	EQU	03DH		;TEMPORARY UNIT	OF IB'S LITTLE CHANNEL,HIGH BYTE
IBMINL	EQU	03EH		;TEMPORARY UNIT	OF IB'S LITTLE CHANNEL,LOWER BYTE
ICMINH	EQU	03FH		;TEMPORARY UNIT	OF IC'S LITTLE CHANNEL,HIGH BYTE
ICMINL	EQU	040H		;TEMPORARY UNIT	OF IC'S LITTLE CHANNEL,LOWER BYTE
ICMAXH	EQU	041H		;TEMPORARY UNIT	OF IC'S BIG CHANNEL,HIGH BYTE
ICMAXL	EQU	042H		;TEMPORARY UNIT	OF IC'S BIG CHANNEL,LOWER BYTE
INMINH	EQU	043H		;TEMPORARY UNIT	OF IN'S LITTLE CHANNEL,HIGH BYTE
INMINL	EQU	044H		;TEMPORARY UNIT	OF IN'S LITTLE CHANNEL,LOWER BYTE
INMAXH	EQU	045H		;TEMPORARY UNIT	OF IN'S BIG CHANNEL,HIGH BYTE
INMAXL	EQU	046H		;TEMPORARY UNIT	OF IN'S BIG CHANNEL,LOWER BYTE
IGMINH	EQU	047H		;TEMPORARY UNIT	OF IG'S LITTLE CHANNEL,HIGH BYTE
IGMINL	EQU	048H		;TEMPORARY UNIT	OF IG'S LITTLE CHANNEL,LOWER BYTE
IGMAXH	EQU	049H		;TEMPORARY UNIT	OF IG'S BIG CHANNEL,HIGH BYTE
IGMAXL	EQU	04AH		;TEMPORARY UNIT	OF IG'S BIG CHANNEL,LOWER BYTE
COUNT4	EQU	04BH		;COUNTER OF 10ms
ERR1	EQU	04CH
ERR2	EQU	04DH
ERR		EQU	04EH		;TEMPORARY UNIT	OF PORTD0~2 IN TEST SUBROUTINE 
TMP0	EQU	04FH		;THE VALUE OF THE FOUR SWITCH(PORTF,4~7)
TMP1	EQU	050H		;THE VALUE OF READ THE TABLE(TEMPORARY UNIT OF ENCODER)
TMP2	EQU	051H		;THE VALUE OF READ THE TABLE(TEMPORARY UNIT OF SWITCH)
IA00	EQU	052H		;TEMPORARY UNIT	OF IA CHANNEL IN COMPARE SUBROUTINE,LOWER BYTE 
IA01	EQU	053H		;TEMPORARY UNIT	OF IA CHANNEL IN COMPARE SUBROUTINE,HIGH BYTE 
IB00	EQU	054H		;TEMPORARY UNIT	OF IB CHANNEL IN COMPARE SUBROUTINE,LOWER BYTE
IB01	EQU	055H		;TEMPORARY UNIT	OF IB CHANNEL IN COMPARE SUBROUTINE,HIGH BYTE
IC00	EQU	056H		;TEMPORARY UNIT	OF IC CHANNEL IN COMPARE SUBROUTINE,LOWER BYTE
IC01	EQU	057H		;TEMPORARY UNIT	OF IC CHANNEL IN COMPARE SUBROUTINE,HIGH BYTE
IN00	EQU	058H		;TEMPORARY UNIT	OF IN CHANNEL IN COMPARE SUBROUTINE,LOWER BYTE
IN01	EQU	059H		;TEMPORARY UNIT	OF IN CHANNEL IN COMPARE SUBROUTINE,HIGH BYTE
IG00	EQU	05AH		;TEMPORARY UNIT	OF IG CHANNEL IN COMPARE SUBROUTINE,LOWER BYTE
IG01	EQU	05BH		;TEMPORARY UNIT	OF IG CHANNEL IN COMPARE SUBROUTINE,HIGH BYTE
PDBACK	EQU	05CH		;TEMPORARY UNIT OF READ AND WRITE EEPROM (PORTF0~4)
NOTIME	EQU	05DH		;THE FLAG BIT OF NO TIME
NOTM	EQU	05EH		;THE FLAG BIT OF NO TIME SHUT OFF
IR200	EQU	05FH		

;BANK 0
IAH	EQU	060H		;RESULT OF IA CHANNEL IN A/D CONVERSION ,HIGH BYTE
IAL	EQU	061H		;LOWER BYTE
IBH	EQU	062H		;RESULT OF IB CHANNEL IN A/D CONVERSION ,HIGH BYTE
IBL	EQU	063H		;LOWER BYTE
ICH	EQU	064H		;RESULT OF IC CHANNEL IN A/D CONVERSION ,HIGH BYTE
ICL	EQU	065H		;LOWER BYTE
INH	EQU	066H		;RESULT OF IN CHANNEL IN A/D CONVERSION ,HIGH BYTE
INL	EQU	067H		;LOWER BYTE
IGH	EQU	068H		;RESULT OF IG CHANNEL IN A/D CONVERSION ,HIGH BYTE
IGL	EQU	069H		;LOWER BYTE
IT41 EQU	06AH
LOAD02U	EQU	070H		;TEMPORARY UNIT OF 0.2IR1
LOAD02H	EQU	071H		;TEMPORARY UNIT OF 0.2IR1,HIGH BYTE
LOAD02L	EQU	072H		;TEMPORARY UNIT OF 0.2IR1,LOWER BYTE
COUNT5		EQU	07AH		;COUNTER OF 30'HOT MEMORY SUBROUTINE OF LONG DELAY(10ms++)	
COUNT6		EQU	07BH		;COUNTER OF 30'HOT MEMORY SUBROUTINE OF LONG DELAY(7ms++)
ENERGY0		EQU	07CH		;TEMPORARY UNIT OF ENERGY IN LONG DELAY(1)
ENERGY1		EQU	07DH		;(2)
ENERGY2		EQU	07EH		;(3)
ENERGY3		EQU	07FH		;(4)
ENERGY4		EQU	080H		;(5)
ENERGY5		EQU	081H		;TEMPORARY UNIT OF ENERGY CUMULATION(1)
ENERGY6		EQU	082H		;(2)
ENERGY7		EQU	083H		;(3)
ENERGY8		EQU	084H		;(4)
ENERGY9		EQU	085H		;(5)
ENERGY10	EQU	086H		;TEMPORARY UNIT OF 1/255 ENERGY(1)
ENERGY11	EQU	087H		;(2)
ENERGY12	EQU	088H		;(3)
ENERGY13	EQU	089H		;(4)
DEY0		EQU	08AH		;TEMPORARY UNIT IN 10 ms SOFTDELAY SUBROUTINE
DEY1		EQU	08BH		;TEMPORARY UNIT IN 10 ms SOFTDELAY SUBROUTINE 
GZA0		EQU	08CH
NE3			EQU	08FH		;TEMPORARY UNIT IN ONE SECOND MANAGE SUBROUTINE
LOAD04		EQU	090H		;TEMPORARY UNIT OF 0.4IR1,HIGH BYTE	
LOAD05		EQU	091H		;TEMPORARY UNIT OF 0.5IR1,HIGH BYTE
LOAD06		EQU	092H		;TEMPORARY UNIT OF 0.6IR1,HIGH BYTE
LOAD07		EQU	093H		;TEMPORARY UNIT OF 0.7IR1,HIGH BYTE
LOAD08		EQU	094H		;TEMPORARY UNIT OF 0.8IR1,HIGH BYTE
LOAD09		EQU	095H		;TEMPORARY UNIT OF 0.9IR1,HIGH BYTE
LOAD04L		EQU	096H		;TEMPORARY UNIT OF 0.4IR1,LOWER BYTE
LOAD05L		EQU	097H		;TEMPORARY UNIT OF 0.5IR1,LOWER BYTE
LOAD06L		EQU	098H		;TEMPORARY UNIT OF 0.6IR1,LOWER BYTE
LOAD07L		EQU	099H		;TEMPORARY UNIT OF 0.7IR1,LOWER BYTE
LOAD08L		EQU	09AH		;TEMPORARY UNIT OF 0.8IR1,LOWER BYTE
LOAD09L		EQU	09BH		;TEMPORARY UNIT OF 0.9IR1,LOWER BYTE
EPA0		EQU	09CH
EPA1		EQU	09DH
EPA2		EQU	09EH         ;TK error 临时存放单元
EPA3		EQU	09FH
		

EESLAVE		EQU	0A0H		;DEVICE ADDRESS(1010000X)
SLAVEADDR	EQU	0A1H		;SLAVE ADDRESS LITERAL
COM00H		EQU 0A2H
COM00L		EQU 0A3H
COM10H		EQU 0A4H
COM10L 		EQU 0A5H
JSQ1    	EQU 0A6H
YANSHI  	EQU 0A7H
AA3			EQU	0A8H		;USED FOR ERROR CHECK,FLAG BYTE
ERRCOUNT0	EQU	0A9H		;ERROR CHECK DELAY COUNT-->1S
ERRCOUNT1	EQU	0AAH		;ERROR CHECK DELAY COUNT-->10S
SMPLE		EQU	0ADH		;LOAD THE SAMPLE TIME(30ms) TO SMPLE AFTER SHUT OFF OF NO DELAY
JSQ			EQU	0AFH


;BANK 1
REG1		EQU	1A5H		;TEMPORARY UNIT IN FILTER SUBROUTINE
REG2		EQU	1A6H		;TEMPORARY UNIT IN FILTER SUBROUTINE
REG3		EQU	1A7H		;TEMPORARY UNIT IN FILTER SUBROUTINE
REG4		EQU	1A8H		;TEMPORARY UNIT IN FILTER SUBROUTINE
REG5		EQU	1A9H		;TEMPORARY UNIT IN FILTER SUBROUTINE
IAeL		EQU	1B0H		;LAST RESULT OF IA CHANNEL,LOWER BYTE
IAeH		EQU	1B1H		;HIGH BYTE
IBeL		EQU	1B2H		;LAST RESULT OF IB CHANNEL,LOWER BYTE
IBeH		EQU	1B3H		;HIGH BYTE
ICeL		EQU	1B4H		;LAST RESULT OF IC CHANNEL,LOWER BYTE
ICeH		EQU	1B5H		;HIGH BYTE
INeL		EQU	1B6H		;LAST RESULT OF IN CHANNEL,LOWER BYTE
INeH		EQU	1B7H		;HIGH BYTE
IGeL		EQU	1B8H		;LAST RESULT OF IG CHANNEL,LOWER BYTE
IGeH		EQU	1B9H		;HIGH BYTE
;*****************************************************************************
;Reset vector
;This code will start executing when a reset occurs.


		ORG	0x0000

     	goto	Main		;go to start of main code
;******************************************************************************
;High priority interrupt vector
;This code will start executing when a high priority interrupt occurs or
;when any interrupt occurs if interrupt priorities are not enabled.

		ORG	0x0008
		bra	HighInt		;go to high priority interrupt routine
;******************************************************************************
;Low priority interrupt vector and routine
;This code will start executing when a low priority interrupt occurs.
;This code can be removed if low priority interrupts are not used.
;		ORG	0x0018
;		movff	STATUS,STATUS_TEMP	;save STATUS register
;		movff	WREG,WREG_TEMP		;save working register
;		movff	BSR,BSR_TEMP		;save BSR register		
;LOWERINT0
;		BTFSS	INTCON3,0
;		BRA	    LOWERINT1
;		CALL	ERRCHCK1		;LOAD FAILURE CHECK SUBROUTINE
;		BRA		INTL_OUT

;LOWERINT1
;		BTFSS   PIR2,TMR3IF
;		BRA		INTL_OUT
;		CALL	ERRCHCK2
;		BRA		INTL_OUT
			
;INTL_OUT
;	  	movff	BSR_TEMP,BSR		;restore BSR register
;		movff	WREG_TEMP,WREG		;restore working register
;		movff	STATUS_TEMP,STATUS	;restore STATUS register
;		RETFIE
;******************************************************************************
;High priority interrupt routine
;The high priority interrupt code is placed here to avoid conflicting with
;the low priority interrupt vector.
HighInt:
    	BTFSS	PIR1,1
		BRA 	HIGHINT2
		CALL	TWUS
		RETFIE	FAST
HIGHINT2
    	BTFSS	PIR1,6			;BE AD CONVERTER INTERRUPT
		BRA	    HIGHINT1
		CALL	ADINT
		RETFIE	FAST
HIGHINT1
    	BTFSS	INTCON,1		;BE INT0 INTERRUPT?
		BRA	    HIGHINT3
		CALL	CESHI
		RETFIE	FAST
HIGHINT3
		BTFSS	INTCON3,0
		BRA		HIGHINT0
		BSF	    BZW,0
		BCF		INTCON3,3
		BCF		INTCON3,0
		CALL	ERRCHCK2	
		RETFIE	
	
HIGHINT0
    	BTFSC	PIR1,2			;BE CCP1(1ms) INTERRUPT?
		CALL	OMSINT
		RETFIE	FAST
;******************************************************************************
;Start of main program
;The main program code is placed here.

Main:
;	*** main code write here ***
	MOVF	PORTB,0
	CLRF	INTCON
	MOVF	LATB,0
;initialize PORT A
	MOVLW	2FH
	MOVWF	TRISA
	CLRF	PORTA
	CLRF 	LATA
	BSF		PORTA,4
;initialize PORT B
	MOVLW	0FH
	MOVWF	TRISB
	MOVLW	0FCH
	MOVWF	PORTB
	MOVWF 	LATB
;initialize PORT C
	MOVLW	10H
	MOVWF	TRISC
	CLRF 	PORTC
	CLRF 	LATC
	MOVLW	10H
	MOVWF	PORTC	
	MOVWF	LATC
;initialize PORT D
	CLRF	TRISD
	CLRF 	PORTD
	CLRF 	LATD
	SETF	PORTD
	
;initialize PORT E
	CLRF	PORTE	
	CLRF	LATE
	MOVLW	0F8H
	MOVWF	TRISE	
;initialize PORT F
	CLRF	TRISF
    MOVLW	0CFH
	MOVWF	PORTF
	MOVWF 	LATF
	MOVLW 	0x07
	MOVWF 	CMCON
;initialize PORT G

	CLRF 	PORTG
	CLRF 	LATG
	MOVLW	1FH
	MOVWF	TRISG
;initialize A/D CHANNEL
	MOVLW 	01H
	MOVWF 	ADCON0
	MOVLW 	1AH
	MOVWF 	ADCON1
	MOVLW 	0AAH
	MOVWF 	ADCON2
;INITIALIZE TIME1 AND CCP1, 1ms INTERRUPT
	MOVLW	00H
	MOVWF	T1CON
	CLRF	TMR1L
	CLRF	TMR1H
	MOVLW	0AH
	MOVWF	CCP1CON
	MOVLW	13H
	MOVWF	CCPR1H
	MOVLW	88H
	MOVWF	CCPR1L
;INITIALIZE TIME2, 20us INTERRUPT
	CLRF	T2CON
	MOVLW	64H	
	MOVWF	PR2
	CLRF	TMR2
;INITIALIZE TIME0   50MS
	MOVLW   0X30			;$$$$$$$$$$$$$$
	MOVWF	T3CON			;$$$$$$$$$$$$$$$

;INITIALIZE INTERRUPT
	CLRF	INTCON
	MOVLW	0E4H
	MOVWF	INTCON2
	MOVLW	48H
	MOVWF	INTCON3
	MOVLW	0DFH
	MOVWF	RCON
	CLRF	PIR1
	CLRF	PIR2
	CLRF	PIR3
	MOVLW	46H
	MOVWF	PIE1
	MOVLW	01H
	MOVWF	PIE2
	CLRF	PIE3
	MOVLW	46H
	MOVWF	IPR1
	CLRF	IPR2
	BCF		IPR2,TMR3IP		;$$$$$$$$$$$$$$
	CLRF	IPR3
	CLRF	JSQ
	CLRF	JSQ1
	CLRF	A0
	CLRF	A1
	CLRF	GZA0
;***********************************8CLEAR EEPROM*****************
	MOVLW	01H
	MOVWF	EEADR
	CALL	RD_EEPROM
	MOVFF	EEDATA1,A0
	MOVLW	0FFH
	CPFSEQ	A0
    BRA	    CSH0	
	SETF	EEADDR
CSH	CLRF    EEDATA1	
	CALL	WR_EEPROM
	DECFSZ	EEADDR
    BRA	     CSH
	CLRF	EEDATA1
	CALL	WR_EEPROM
	BRA		CSH1
CSH0    CLRF	TMP7
		MOVFF	PORTG,TMP7
		MOVLW	0FH
		ANDWF	TMP7,1
		MOVLW	09H
		MOVWF	EEADR
		CALL	RD_EEPROM
		MOVF	EEDATA1,W
		CPFSEQ	TMP7
		BRA		$+4
		BRA		CSH1
		SETF	EEADDR
		BRA		CSH
CSH1   NOP
	   NOP




;clear work cell
	LFSR	FSR0,0X000	;CLEAR	THE  RAM
LOOP
	CLRF	POSTINC0
	BTFSS	FSR0H,1
	BRA		LOOP
	MOVLB	00H		;POINT TO BANK 0 
	MOVLW	0AH
	MOVWF	COUNT4		;INITIALIZE THE 10ms COUNTER
	MOVLW	64H
	MOVWF	COUNT0		;INITIALIZE THE 1s COUNTER
	MOVLW	0FH
	MOVWF	PDBACK
	BSF		ADCON0,1
	BCF		PIR1,6
	MOVLW	01H
	MOVWF	ADCON0

	RCALL	RDP
	MOVLW	0F0H
	MOVWF	INTCON		;ENABLE THE INTERRUPT
	BSF		T1CON,0		;1ms START
	BSF		WDTCON,0	;WATCHDOG ENABLE
	MOVLB	01H
	MOVLW	07H
	MOVWF	REG1
	NOP
	NOP
LOOP1	BTFSC	SIGN2,0		;10ms?
		BRA		LOOPGO
		CLRWDT
		BRA		LOOP1
LOOPGO
	CALL	COMP		;LOAD THE VIRTUAL VALUE CONVERSION AND CARE SUBROUTINE
	CLRWDT		
	CALL	FILTI		;CALL FILTER SUBROUTINE
	CALL	SECOND
	CALL	ACTION1
	MOVLW	0C0H
	ANDWF	SIGN2
	BTFSS	BZW,0
	BRA		LOOP3
	BCF		INTCON3,3
	BCF		INTCON3,0
	CALL	ERRCHCK2
	CLRF	BZW
	BSF		INTCON3,3
	
LOOP3
	BTFSS	AA3,0		;BE DELAY OF ERR CHECK DISPLAY
	BRA		LOOP1
	DECFSZ	ERRCOUNT0
	BRA		LOOP1
	MOVLW	64H
	MOVWF	ERRCOUNT0
	DECFSZ	ERRCOUNT1
	BRA		LOOP1
	CLRF	AA3
	CLRF	GZA0
	BSF		PDBACK,0
	BSF		PDBACK,1
	BSF		PDBACK,2
	BSF		PDBACK,3
	BSF		PDBACK,6
	BSF		PDBACK,7
	MOVFF	PDBACK,PORTF
	BRA		LOOP1

;****************SUBROUTINE AND INTERRUPT SUBROUTINE***************
;****************20us TIME2:PR2 INTERRUPT SUBROUTINE ************************		
TWUS	
	BCF		PIR1,1		;CLEAR TMR2 INTERRUPT  FLAG BIT
	BCF		PIE1,1		
	CLRF	TMR2
	BCF		T2CON,2
	BSF		PIE1,6		
	BSF		ADCON0,1
	RETURN
;******************** READ PANEL SUBROUTINE ***********************
RDP	CLRF	TMP0
	MOVFF	PORTG,TMP0
	BTFSS	PORTG,4
	MOVLW	0FH
	ANDWF	TMP0,1	
	MOVLW	09H
	MOVWF	EEADDR
	MOVFF	TMP0,EEDATA1
	CALL	WR_EEPROM	
	BCF		PORTE,0		;POINT TO ENCODER IR1
	BCF		PORTE,1
	BCF		PORTE,2		
	MOVFF	PORTE,TEMP00
	MOVLW	0F0H
	ANDWF	TEMP00,1
	SWAPF	TEMP00
	MOVLW	04H
	CPFSEQ	TEMP00		;THE LONG DELAY IS DISABLE?
	BRA		RDPIR10
	MOVLB	00H
	MOVLW	0F0H		
	ANDWF	IT1,1		;TEMP00(3~0) -> IT1(3~0)
 	BRA		RDPIR2
RDPIR10	
    MOVLW	00H
	CPFSEQ	TEMP00
	BRA		RDPIR100
	MOVLB	00H
	BTFSC	SIGN2,6
	BRA		RDPIR11
	BSF		SIGN2,6
	MOVLW	08H
	MOVWF	TEMP00
	MOVFF	TEMP00,IT1
	BRA		RDPIR1
RDPIR100	MOVLB	00H
	BTFSC	SIGN2,6
	BRA		RDPIR11
	BSF		SIGN2,6		;THE FIRST TIME TO READ PANEL,SET FLAG BIT OF FIRST TIMES
	BRA		RDPIR15
RDPIR11	
	MOVFF	IeH,COM1H
	MOVFF	IeL,COM1L
	MOVFF	II11,COM0H
	MOVFF	II10,COM0L
	CALL	FIBJ
	BTFSS	FLAG1,1
	BRA		RDPTR1			;IEH:IEL<II11:II10
RDPIR14
	MOVLW	0FH			;IEH:IEL>=II11:II10
	ANDWF	IT1,0
	CPFSEQ	TEMP00
	BRA		RDPIR13
RDPIR12	
	BCF		SIGN2,7
	GOTO	RDPTR1
RDPIR13
	MOVLW	0FH
	ANDWF	IT1,0
	CPFSGT	TEMP00
	BRA		RDPIR12		;IN LONG DELAY,CAN'T ADJUST FROM BIGGER TO SHORTER
RDPIR15
	MOVLW	0F0H		;TEMP00->IT1:THE NEW REPLACE THE OLD ONE
	ANDWF	IT1,0
	IORWF	TEMP00,0
	MOVWF	IT1
	;++++++++++++++++++++
RDPIR1
	MOVLW	TABKEY	
	MOVWF	TBLPTRL
	MOVLW	79H
	MOVWF	TBLPTRH			   
	MOVF	TMP0,0	
	ADDWF	TBLPTRL,1	;ADD THE SWITCH'S OFFSET
	TBLRD*
	MOVFF	TABLAT,TMP2	;READ THE FIRST ADDRESS OF IR1(13In)
	MOVLW	7EH

⌨️ 快捷键说明

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