📄 hst1l.asm
字号:
;******************************************************************************
; 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 + -