;======================================================================================== ; Assembler code for Receiver_main_v.4.vi created with PICLab ;======================================================================================== LIST p=16F88 #include "P16F88.INC" ; Include header file __CONFIG _CONFIG1, _BODEN_OFF&_CCP1_RB3&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLR_OFF&_HS_OSC ;***************************************Variable definitions*************************************** TEMPPORT8 EQU 0X20 TEMPX8 EQU 0X21 TEMPY8 EQU 0X22 RESULT8 EQU 0X23 TEMPX16 EQU 0X24 TEMPX16_H EQU 0X25 TEMPY16 EQU 0X26 TEMPY16_H EQU 0X27 RESULT16 EQU 0X28 RESULT16_H EQU 0X29 IDX16 EQU 0X2A IDX16_H EQU 0X2B TEMPYY EQU 0X2C OP_SIGN8 EQU 0X2D ADHBYTE EQU 0X2E ADLBYTE EQU 0X2F AD_RESULT EQU 0X30 AD_RESULT_H EQU 0X31 ISR_TEMPPORT8 EQU 0X32 ISR_TEMPX8 EQU 0X33 ISR_TEMPY8 EQU 0X34 ISR_RESULT8 EQU 0X35 ISR_TEMPX16 EQU 0X36 ISR_TEMPX16_H EQU 0X37 ISR_TEMPY16 EQU 0X38 ISR_TEMPY16_H EQU 0X39 ISR_RESULT16 EQU 0X3A ISR_RESULT16_H EQU 0X3B ISR_IDX16 EQU 0X3C ISR_IDX16_H EQU 0X3D ISR_TEMPYY EQU 0X3E ISR_OP_SIGN8 EQU 0X3F ISR_STATUS EQU 0X40 ISR_W EQU 0X41 ISR_FSR EQU 0X42 VALID_RX_FLAG EQU 0X43 SURVEY_SECONDS EQU 0X44 HOURS EQU 0X45 MINUTES EQU 0X46 SECONDS EQU 0X47 HUNDREDTH EQU 0X48 WATCH_IDX1 EQU 0X49 WATCH_IDX2 EQU 0X4A I2C_CHANNEL_STATE EQU 0X4B LAST_I2C_STATE EQU 0X4C TMP_I2C_MESSAGE EQU 0X4D DATA_ITEM EQU 0X4E DATA_BUFFER_POINTER EQU 0X4F DATA_BUFFER_POINTER_H EQU 0X50 BUFFER_WRITE_MODE EQU 0X51 DATA_SELECTION EQU 0X52 REGISTER_INDEX EQU 0X53 INDEX_OFFSET EQU 0X54 I2C_BUFFER_POINTER EQU 0X55 I2C_BUFFER_POINTER_H EQU 0X56 TMP_I2C_OUT EQU 0X57 REGISTER_SELECTION_POINTER EQU 0X58 REGISTER_SELECTION_POINTER_H EQU 0X59 TEST_I2C EQU 0X5A RETRIES EQU 0X5B RETRIES_H EQU 0X5C HEADER_POINTER EQU 0X5D HEADER_POINTER_H EQU 0X5E RX_CHECKSUM EQU 0X5F TMP_MESSAGE EQU 0X60 RX_POINTER EQU 0X61 RX_POINTER_H EQU 0X62 TMP_COMPLEMENT EQU 0X63 VALID_RX_MESSAGE EQU 0X64 CURRENT EQU 0X65 DIST_L EQU 0X66 DISTANCE_CM EQU 0X67 DISTANCE_CM_H EQU 0X68 DIST_H EQU 0X69 MESSAGE_CHECKSUM EQU 0X6A NUMBER_OF_BEACONS EQU 0X6B BEACON_ID EQU 0X6C ;**************************Makro definitions and definitions of used operations************************** BANK0 MACRO BCF STATUS,RP0 BCF STATUS,RP1 ENDM BANK1 MACRO BSF STATUS,RP0 BCF STATUS,RP1 ENDM BANK2 MACRO BCF STATUS,RP0 BSF STATUS,RP1 ENDM BANK3 MACRO BSF STATUS,RP0 BSF STATUS,RP1 ENDM GOTO START ORG 0X4 GOTO LABEL_ISR MULV8 CLRF RESULT8 MULU8LOOP MOVF TEMPX8,W BTFSC TEMPY8,0 ADDWF RESULT8 BCF STATUS,C RRF TEMPY8,F BCF STATUS,C RLF TEMPX8,F MOVF TEMPY8,F BTFSS STATUS,Z GOTO MULU8LOOP RETURN SUMV8 MOVF TEMPY8,W ADDWF TEMPX8 RETURN SUMV16 MOVF TEMPY16,W ADDWF TEMPX16 BTFSC STATUS,C INCF TEMPX16_H MOVF TEMPY16_H,W ADDWF TEMPX16_H RETURN ANDV8 MOVF TEMPY8,W ANDWF TEMPX8 RETURN DIVV8 MOVF TEMPY8,F BTFSC STATUS,Z ;SKIP IF NON-ZERO RETURN CLRF RESULT8 MOVLW 1 MOVWF IDX16 SHIFT_IT8 BCF STATUS,C RLF IDX16,F BCF STATUS,C RLF TEMPY8,F BTFSS TEMPY8,7 GOTO SHIFT_IT8 DIVU8LOOP MOVF TEMPY8,W SUBWF TEMPX8 BTFSC STATUS,C GOTO COUNT8 ADDWF TEMPX8 GOTO FINAL8 COUNT8 MOVF IDX16,W ADDWF RESULT8 FINAL8 BCF STATUS,C RRF TEMPY8,F BCF STATUS,C RRF IDX16,F BTFSS STATUS,C GOTO DIVU8LOOP RETURN DIVV16 MOVF TEMPY16,F BTFSS STATUS,Z GOTO ZERO_TEST_SKIPPED MOVF TEMPY16_H,F BTFSC STATUS,Z RETURN ZERO_TEST_SKIPPED MOVLW 1 MOVWF IDX16 CLRF IDX16_H CLRF RESULT16 CLRF RESULT16_H SHIFT_IT16 BCF STATUS,C RLF IDX16,F RLF IDX16_H,F BCF STATUS,C RLF TEMPY16,F RLF TEMPY16_H,F BTFSS TEMPY16_H,7 GOTO SHIFT_IT16 DIVU16LOOP CALL SUB16 BTFSC STATUS,C GOTO COUNTX CALL ADD16BIS GOTO FINALX COUNTX MOVF IDX16,W ADDWF RESULT16 BTFSC STATUS,C INCF RESULT16_H,F MOVF IDX16_H,W ADDWF RESULT16_H FINALX BCF STATUS,C RRF TEMPY16_H,F RRF TEMPY16,F BCF STATUS,C RRF IDX16_H,F RRF IDX16,F BTFSS STATUS,C GOTO DIVU16LOOP RETURN SUB16 MOVF TEMPY16_H,W MOVWF TEMPYY MOVF TEMPY16,W SUBWF TEMPX16 BTFSS STATUS,C INCF TEMPYY,F MOVF TEMPYY,W SUBWF TEMPX16_H RETURN ADD16BIS MOVF TEMPY16,W ADDWF TEMPX16 BTFSC STATUS,C INCF TEMPX16_H,F MOVF TEMPY16_H,W ADDWF TEMPX16_H RETURN EQU8U8 MOVF TEMPX8,W SUBWF TEMPY8 BTFSS STATUS,Z ;SKIP IF ZERO ->IDENTICAL RETLW 0 RETLW 1 GRU8U8 MOVF TEMPX8,W SUBWF TEMPY8 BTFSS STATUS,C RETLW 0 RETLW 1 ISR_ORV8 MOVF ISR_TEMPY8,W IORWF ISR_TEMPX8 RETURN ISR_ANDV8 MOVF ISR_TEMPY8,W ANDWF ISR_TEMPX8 RETURN ISR_SUMV16 MOVF ISR_TEMPY16,W ADDWF ISR_TEMPX16 BTFSC STATUS,C INCF ISR_TEMPX16_H MOVF ISR_TEMPY16_H,W ADDWF ISR_TEMPX16_H RETURN ISR_NOTV8 COMF ISR_TEMPY8,F RETURN ISR_SUMV8 MOVF ISR_TEMPY8,W ADDWF ISR_TEMPX8 RETURN ISR_GRU8U8 MOVF ISR_TEMPX8,W SUBWF ISR_TEMPY8 BTFSS STATUS,C RETLW 0 RETLW 1 ISR_EQU8U8 MOVF ISR_TEMPX8,W SUBWF ISR_TEMPY8 BTFSS STATUS,Z ;SKIP IF ZERO ->IDENTICAL RETLW 0 RETLW 1 ISR_EQU16U16 MOVF ISR_TEMPX16,W SUBWF ISR_TEMPY16 BTFSS STATUS,Z RETLW 0 MOVF ISR_TEMPX16_H,W SUBWF ISR_TEMPY16_H BTFSS STATUS,Z RETLW 0 RETLW 1 ISR_GRU16U16 MOVF ISR_TEMPX16,W SUBWF ISR_TEMPY16 MOVF ISR_TEMPX16_H,W BTFSS STATUS,C INCFSZ ISR_TEMPX16_H,W SUBWF ISR_TEMPY16_H BTFSS STATUS,C RETLW 0 RETLW 1 ;***************************************BEGIN OF MAIN PROGRAM*************************************** START ;INITIALIZE PORT A BANK0 CLRF PORTA BANK1 CLRF ANSEL MOVLW 0X07 MOVWF CMCON MOVLW 0X0 MOVWF TRISA ;INITIALIZE PORT B BANK0 CLRF PORTB BANK1 MOVLW 0X0 MOVWF TRISB BANK0 CLRF HOURS CLRF MINUTES CLRF SECONDS CLRF HUNDREDTH CLRF WATCH_IDX1 CLRF WATCH_IDX2 CLRF SURVEY_SECONDS ;CONFIGURE TMR0 BANK1 MOVLW B'11010000' ANDWF OPTION_REG MOVLW B'101' IORWF OPTION_REG ;CLEAR TIMER BANK0 CLRF TMR0 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;CONFIGURE UART BANK1 BSF TRISB,2 BSF TRISB,5 MOVLW 0X77 MOVWF SPBRG BCF TXSTA,BRGH BCF TXSTA,SYNC BANK0 BSF RCSTA,SPEN BCF RCSTA,RX9 BSF RCSTA,CREN BANK1 BCF TXSTA,TX9 BSF TXSTA,TXEN ;CONFIGURE SINGLE PIN BSF TRISA,0 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF I2C_CHANNEL_STATE,W MOVWF LAST_I2C_STATE ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X90 MOVWF REGISTER_SELECTION_POINTER MOVLW 0X1 MOVWF REGISTER_SELECTION_POINTER_H ;CONFIGURE I2C-SLAVE MODE BCF PIR1,SSPIF ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF I2C_CHANNEL_STATE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF LAST_I2C_STATE ;CONFIGURE PORT INPUTS BANK1 MOVF TRISB,W IORLW 0X12 MOVWF TRISB ;SET SFR WITH CONSTANT MOVLW 0X36 BANK0 MOVWF SSPCON ;SET SFR WITH CONSTANT MOVLW 0X40 BANK1 MOVWF SSPADD ;SET VARIABLE U8 WITH SFR BANK0 MOVF SSPBUF,W MOVWF TMP_I2C_MESSAGE ;START MONITORING INTERRUPTS BCF PIR1,SSPIF BANK1 BSF PIE1,SSPIE BSF INTCON,GIE BSF INTCON,PEIE ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XA0 BANK0 MOVWF HEADER_POINTER MOVLW 0X0 MOVWF HEADER_POINTER_H ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BTFSC HEADER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF HEADER_POINTER,W MOVWF FSR MOVLW 0X55 MOVWF INDF INCF HEADER_POINTER,F BTFSC STATUS,Z INCF HEADER_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC HEADER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF HEADER_POINTER,W MOVWF FSR MOVLW 0XFF MOVWF INDF INCF HEADER_POINTER,F BTFSC STATUS,Z INCF HEADER_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC HEADER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF HEADER_POINTER,W MOVWF FSR MOVLW 0X0 MOVWF INDF INCF HEADER_POINTER,F BTFSC STATUS,Z INCF HEADER_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC HEADER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF HEADER_POINTER,W MOVWF FSR MOVLW 0XF7 MOVWF INDF INCF HEADER_POINTER,F BTFSC STATUS,Z INCF HEADER_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC HEADER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF HEADER_POINTER,W MOVWF FSR MOVLW 0X8 MOVWF INDF INCF HEADER_POINTER,F BTFSC STATUS,Z INCF HEADER_POINTER_H,F ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XA0 BANK0 MOVWF HEADER_POINTER MOVLW 0X0 MOVWF HEADER_POINTER_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XAB MOVWF RX_POINTER MOVLW 0X0 MOVWF RX_POINTER_H ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF RX_CHECKSUM BSF RCSTA,6 ;START MONITORING INTERRUPTS BCF PIR1,RCIF BANK1 BSF PIE1,RCIE BSF INTCON,GIE BSF INTCON,PEIE ;CONFIGURE TMR1 MOVLW B'100001' BANK0 MOVWF T1CON ;WAIT MOVLW 0XE1 MOVWF TEMPYY LABEL_1072 MOVLW 0XBD MOVWF IDX16 LABEL_1073 MOVLW 0XB3 MOVWF IDX16_H LABEL_1074 DECFSZ IDX16_H,F GOTO LABEL_1074 DECFSZ IDX16,F GOTO LABEL_1073 DECFSZ TEMPYY,F GOTO LABEL_1072 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;START MONITORING INTERRUPTS BANK0 BCF INTCON,TMR0IF BANK1 BSF INTCON,TMR0IE BSF INTCON,GIE BSF INTCON,PEIE BANK0 BCF T1CON,0 ;SET SINGLE OUPUT PIN BSF PORTA,1 ;WAIT MOVLW 0XA1 MOVWF TEMPYY LABEL_1075 MOVLW 0X5 MOVWF IDX16 LABEL_1076 MOVLW 0X5E MOVWF IDX16_H LABEL_1077 DECFSZ IDX16_H,F GOTO LABEL_1077 DECFSZ IDX16,F GOTO LABEL_1076 DECFSZ TEMPYY,F GOTO LABEL_1075 NOP NOP NOP ;SET SINGLE OUPUT PIN BANK0 BCF PORTA,1 ;WAIT MOVLW 0XCF MOVWF TEMPYY LABEL_1078 MOVLW 0X1F MOVWF IDX16 LABEL_1079 MOVLW 0XED MOVWF IDX16_H LABEL_1080 DECFSZ IDX16_H,F GOTO LABEL_1080 DECFSZ IDX16,F GOTO LABEL_1079 DECFSZ TEMPYY,F GOTO LABEL_1078 NOP NOP NOP NOP NOP NOP LABEL_0 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF VALID_RX_FLAG,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1081 GOTO LABEL_1095 LABEL_1081 BANK0 BCF PIR1,0 ;CLEAR TIMER CLRF TMR1L CLRF TMR1H BSF T1CON,0 ;SET SINGLE OUPUT PIN BSF PORTB,3 ;BEGIN OF WHILE-LOOP (POLLING BIT/PIN) LABEL_1082 BANK0 BTFSS PORTA,0 GOTO LABEL_1083 ;BEGIN OF IF-STRUCTURE (DEPENDING ON BIT/PIN) BANK0 BTFSS PIR1,0 GOTO LABEL_1084 BANK0 BCF T1CON,0 GOTO LABEL_2 GOTO LABEL_1085 LABEL_1084 LABEL_1085 ;END OF IF-STRUCTURE GOTO LABEL_1082 LABEL_1083 ;END OF FOR/WHILE-LOOP BANK0 BCF T1CON,0 ;SET SINGLE OUPUT PIN BSF PORTA,1 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF VALID_RX_MESSAGE,W MOVWF BEACON_ID ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0XF MOVWF TEMPY8 CALL ANDV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF BEACON_ID ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X7 MOVWF TEMPY8 CALL GRU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1086 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF BEACON_ID,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X7 MOVWF TEMPY8 CALL ANDV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF BEACON_ID ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM GOTO LABEL_1087 LABEL_1086 LABEL_1087 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF BEACON_ID,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1088 GOTO LABEL_1091 LABEL_1088 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF VALID_RX_MESSAGE,W MOVWF NUMBER_OF_BEACONS ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF NUMBER_OF_BEACONS,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X10 MOVWF TEMPY8 CALL DIVV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF RESULT8,W MOVWF NUMBER_OF_BEACONS INCF NUMBER_OF_BEACONS,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF NUMBER_OF_BEACONS,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X8 MOVWF TEMPY8 CALL GRU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1089 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM GOTO LABEL_1090 LABEL_1089 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X4 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF NUMBER_OF_BEACONS,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM LABEL_1090 ;END OF IF-STRUCTURE LABEL_1091 ;END OF IF-STRUCTURE ;SET VARIABLE U16 WITH 16-BIT SFR BANK0 MOVF TMR1L,W MOVWF DISTANCE_CM MOVF TMR1H,W MOVWF DISTANCE_CM_H ;OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 MOVF DISTANCE_CM,W MOVWF TEMPX16 MOVF DISTANCE_CM_H,W MOVWF TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X22 MOVWF TEMPY16 MOVLW 0X0 MOVWF TEMPY16_H CALL DIVV16 ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RESULT16,W MOVWF DISTANCE_CM MOVF RESULT16_H,W MOVWF DISTANCE_CM_H ;SET 16-BIT REGISTER HIGH-BYTE THROUGH 8-BIT REGISTER MOVF DISTANCE_CM_H,W MOVWF DIST_H ;SET VARIABLE U8 WITH VARIABLE U16 MOVF DISTANCE_CM,W MOVWF DIST_L ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF HOURS,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF MESSAGE_CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF HOURS,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MINUTES,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF MESSAGE_CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MINUTES,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF SECONDS,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF MESSAGE_CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF SECONDS,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X4 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF HUNDREDTH,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF MESSAGE_CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF HUNDREDTH,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X5 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF DIST_H,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF MESSAGE_CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF DIST_H,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X6 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF DIST_L,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF MESSAGE_CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF DIST_L,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MESSAGE_CHECKSUM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X7 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MESSAGE_CHECKSUM,W MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF BUFFER_WRITE_MODE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF REGISTER_INDEX ;SET VARIABLE U8 WITH VARIABLE U8 MOVF BEACON_ID,W MOVWF INDEX_OFFSET ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF DATA_SELECTION ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF DATA_ITEM CALL LABEL_SET_BUFFER_ITEM ;WAIT BANK0 MOVLW 0X92 MOVWF TEMPYY LABEL_1092 MOVLW 0X11 MOVWF IDX16 LABEL_1093 MOVLW 0X3D MOVWF IDX16_H LABEL_1094 DECFSZ IDX16_H,F GOTO LABEL_1094 DECFSZ IDX16,F GOTO LABEL_1093 DECFSZ TEMPYY,F GOTO LABEL_1092 NOP NOP NOP ;SET SINGLE OUPUT PIN BANK0 BCF PORTA,1 LABEL_2 ;SET SINGLE OUPUT PIN BANK0 BCF PORTB,3 CLRF VALID_RX_FLAG LABEL_1095 ;END OF IF-STRUCTURE GOTO LABEL_0 LABEL_1096 GOTO LABEL_1096 ;***************************************SUBROUTINES*************************************** LABEL_SET_BUFFER_ITEM ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF BUFFER_WRITE_MODE,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1025 BANK0 INCF DATA_BUFFER_POINTER,F BTFSC STATUS,Z INCF DATA_BUFFER_POINTER_H,F ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC DATA_BUFFER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF DATA_BUFFER_POINTER,W MOVWF FSR MOVF DATA_ITEM,W MOVWF INDF GOTO LABEL_1028 LABEL_1025 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF REGISTER_INDEX,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1026 GOTO LABEL_1027 LABEL_1026 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF INDEX_OFFSET,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X8 MOVWF TEMPY8 CALL MULV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF RESULT8,W MOVWF INDEX_OFFSET ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF INDEX_OFFSET,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF DATA_SELECTION,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF INDEX_OFFSET ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF REGISTER_INDEX,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF INDEX_OFFSET,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF REGISTER_INDEX LABEL_1027 ;END OF IF-STRUCTURE ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X90 BANK0 MOVWF DATA_BUFFER_POINTER MOVLW 0X1 MOVWF DATA_BUFFER_POINTER_H ;OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 MOVF DATA_BUFFER_POINTER,W MOVWF TEMPX16 MOVF DATA_BUFFER_POINTER_H,W MOVWF TEMPX16_H ;SET VARIABLE U16 WITH VARIABLE U8 MOVF REGISTER_INDEX,W MOVWF TEMPY16 CLRF TEMPY16_H CALL SUMV16 ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF TEMPX16,W MOVWF DATA_BUFFER_POINTER MOVF TEMPX16_H,W MOVWF DATA_BUFFER_POINTER_H ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BTFSC DATA_BUFFER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF DATA_BUFFER_POINTER,W MOVWF FSR MOVF DATA_ITEM,W MOVWF INDF LABEL_1028 ;END OF IF-STRUCTURE RETURN LABEL_ISR_RESET_I2C_CONFIG ;CONFIGURE I2C-SLAVE MODE BCF PIR1,SSPIF ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF I2C_CHANNEL_STATE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF LAST_I2C_STATE ;CONFIGURE PORT INPUTS BANK1 MOVF TRISB,W IORLW 0X12 MOVWF TRISB ;SET SFR WITH CONSTANT MOVLW 0X36 BANK0 MOVWF SSPCON ;SET SFR WITH CONSTANT MOVLW 0X40 BANK1 MOVWF SSPADD ;SET VARIABLE U8 WITH SFR BANK0 MOVF SSPBUF,W MOVWF TMP_I2C_MESSAGE RETURN LABEL_ISR_WRITE_I2C BANK0 CLRF RETRIES CLRF RETRIES_H ;BEGIN OF WHILE-LOOP (POLLING BIT/PIN) LABEL_1029 BANK1 BTFSS SSPSTAT,0 GOTO LABEL_1030 BANK0 INCF RETRIES,F BTFSC STATUS,Z INCF RETRIES_H,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RETRIES,W MOVWF ISR_TEMPX16 MOVF RETRIES_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X0 MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1031 GOTO LABEL_1032 LABEL_1031 CALL LABEL_ISR_RESET_I2C_CONFIG GOTO LABEL_3 LABEL_1032 ;END OF IF-STRUCTURE GOTO LABEL_1029 LABEL_1030 ;END OF FOR/WHILE-LOOP ;SET VARIABLE U8 WITH INDIRECT VARIABLE ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC I2C_BUFFER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF I2C_BUFFER_POINTER,W MOVWF FSR MOVF INDF,W MOVWF TMP_I2C_OUT CLRF RETRIES CLRF RETRIES_H LABEL_1 BANK0 BCF SSPCON,7 ;SET SFR WITH VARIABLE U8 MOVF TMP_I2C_OUT,W MOVWF SSPBUF ;BEGIN OF IF-STRUCTURE (DEPENDING ON BIT/PIN) BTFSS SSPCON,7 GOTO LABEL_1033 BANK0 INCF RETRIES,F BTFSC STATUS,Z INCF RETRIES_H,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RETRIES,W MOVWF ISR_TEMPX16 MOVF RETRIES_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X0 MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1034 GOTO LABEL_1 GOTO LABEL_1035 LABEL_1034 CALL LABEL_ISR_RESET_I2C_CONFIG GOTO LABEL_3 LABEL_1035 ;END OF IF-STRUCTURE GOTO LABEL_1036 LABEL_1033 LABEL_1036 ;END OF IF-STRUCTURE BANK0 BSF SSPCON,4 LABEL_3 RETURN LABEL_ISR_RESET_RX_BUFFER ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XA0 BANK0 MOVWF HEADER_POINTER MOVLW 0X0 MOVWF HEADER_POINTER_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XAB MOVWF RX_POINTER MOVLW 0X0 MOVWF RX_POINTER_H ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF RX_CHECKSUM ;SET VARIABLE U8 WITH SFR MOVF RCREG,W MOVWF TMP_MESSAGE ;SET VARIABLE U8 WITH SFR MOVF RCREG,W MOVWF TMP_COMPLEMENT RETURN ;**********************************INTERRUPT SERVICE ROUTINE********************************** LABEL_ISR MOVWF 0X7F SWAPF STATUS,W BANK0 MOVWF ISR_STATUS MOVF 0X7F,W MOVWF ISR_W MOVF TEMPPORT8,W MOVWF ISR_TEMPPORT8 MOVF FSR,W MOBWF ISR_FSR BANK1 BTFSS PIE1,SSPIE GOTO LABEL_1097 BANK0 BTFSS PIR1,SSPIF GOTO LABEL_1097 CALL LABEL_EVENT0 BANK0 BCF PIR1,SSPIF LABEL_1097 BANK1 BTFSS PIE1,RCIE GOTO LABEL_1098 BANK0 BTFSS PIR1,RCIF GOTO LABEL_1098 CALL LABEL_EVENT1 BANK0 BCF PIR1,RCIF LABEL_1098 BANK1 BTFSS INTCON,TMR0IE GOTO LABEL_1099 BANK0 BTFSS INTCON,TMR0IF GOTO LABEL_1099 CALL LABEL_EVENT2 BANK0 BCF INTCON,TMR0IF LABEL_1099 BANK0 MOVF ISR_FSR,W MOVWF FSR MOVF ISR_TEMPPORT8,W MOVWF TEMPPORT8 MOVF ISR_W,W MOVWF 0X7F SWAPF ISR_STATUS,W MOVWF STATUS SWAPF 0X7F,F SWAPF 0X7F,W RETFIE ;**************************************EVENT-ROUTINES************************************** LABEL_EVENT2 BANK0 INCF WATCH_IDX2,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF WATCH_IDX2,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0XE MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1002 BANK0 CLRF WATCH_IDX2 GOTO LABEL_1024 LABEL_1002 BANK0 INCF WATCH_IDX1,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF WATCH_IDX1,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1003 BANK0 CLRF WATCH_IDX1 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF I2C_CHANNEL_STATE,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF LAST_I2C_STATE,W MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1004 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF SURVEY_SECONDS,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X5 MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1005 ;SET SINGLE OUPUT PIN BANK0 BSF PORTB,0 BANK1 BCF PIE1,SSPIE BCF PIE1,RCIE BANK0 CLRF SSPCON ;WAIT MOVLW 0XCF MOVWF ISR_TEMPYY LABEL_1006 MOVLW 0X1F MOVWF ISR_IDX16 LABEL_1007 MOVLW 0XED MOVWF ISR_IDX16_H LABEL_1008 DECFSZ ISR_IDX16_H,F GOTO LABEL_1008 DECFSZ ISR_IDX16,F GOTO LABEL_1007 DECFSZ ISR_TEMPYY,F GOTO LABEL_1006 NOP NOP NOP NOP NOP NOP ;CONFIGURE PORT OUTPUTS BANK1 MOVF TRISB,W ANDLW 0X36 MOVWF TRISB ;OPERATION ;SET VARIABLE U8 WITH SFR BANK0 MOVF PORTB,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X36 MOVWF ISR_TEMPY8 CALL ISR_ORV8 ;SET SFR WITH VARIABLE U8 BANK0 MOVF ISR_TEMPX8,W MOVWF PORTB ;WAIT MOVLW 0X23 MOVWF ISR_TEMPYY LABEL_1009 MOVLW 0X53 MOVWF ISR_IDX16 LABEL_1010 DECFSZ ISR_IDX16,F GOTO LABEL_1010 DECFSZ ISR_TEMPYY,F GOTO LABEL_1009 ;OPERATION ;SET VARIABLE U8 WITH SFR BANK0 MOVF PORTB,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0XC9 MOVWF ISR_TEMPY8 CALL ISR_ANDV8 ;SET SFR WITH VARIABLE U8 BANK0 MOVF ISR_TEMPX8,W MOVWF PORTB ;WAIT MOVLW 0X23 MOVWF ISR_TEMPYY LABEL_1011 MOVLW 0X53 MOVWF ISR_IDX16 LABEL_1012 DECFSZ ISR_IDX16,F GOTO LABEL_1012 DECFSZ ISR_TEMPYY,F GOTO LABEL_1011 ;CONFIGURE I2C-SLAVE MODE BCF PIR1,SSPIF ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF I2C_CHANNEL_STATE ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF LAST_I2C_STATE ;CONFIGURE PORT INPUTS BANK1 MOVF TRISB,W IORLW 0X12 MOVWF TRISB ;SET SFR WITH CONSTANT MOVLW 0X36 BANK0 MOVWF SSPCON ;SET SFR WITH CONSTANT MOVLW 0X40 BANK1 MOVWF SSPADD ;SET VARIABLE U8 WITH SFR BANK0 MOVF SSPBUF,W MOVWF TMP_I2C_MESSAGE ;CONFIGURE UART BANK1 BSF TRISB,2 BSF TRISB,5 MOVLW 0X77 MOVWF SPBRG BCF TXSTA,BRGH BCF TXSTA,SYNC BANK0 BSF RCSTA,SPEN BCF RCSTA,RX9 BSF RCSTA,CREN BANK1 BCF TXSTA,TX9 BSF TXSTA,TXEN BANK0 CLRF SURVEY_SECONDS BANK1 BSF PIE1,SSPIE BSF PIE1,RCIE ;SET SINGLE OUPUT PIN BANK0 BCF PORTB,0 GOTO LABEL_4 GOTO LABEL_1013 LABEL_1005 LABEL_1013 ;END OF IF-STRUCTURE GOTO LABEL_1014 LABEL_1004 BANK0 CLRF SURVEY_SECONDS LABEL_1014 ;END OF IF-STRUCTURE BANK0 INCF HUNDREDTH,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF HUNDREDTH,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X63 MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1015 BANK0 CLRF HUNDREDTH INCF SURVEY_SECONDS,F LABEL_4 BANK0 INCF SECONDS,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF SECONDS,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3B MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1016 BANK0 CLRF SECONDS INCF MINUTES,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MINUTES,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3B MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1017 BANK0 CLRF MINUTES INCF HOURS,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF HOURS,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X3B MOVWF ISR_TEMPY8 CALL ISR_GRU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1018 BANK0 CLRF HOURS GOTO LABEL_1019 LABEL_1018 LABEL_1019 ;END OF IF-STRUCTURE GOTO LABEL_1020 LABEL_1017 LABEL_1020 ;END OF IF-STRUCTURE GOTO LABEL_1021 LABEL_1016 LABEL_1021 ;END OF IF-STRUCTURE GOTO LABEL_1022 LABEL_1015 LABEL_1022 ;END OF IF-STRUCTURE GOTO LABEL_1023 LABEL_1003 LABEL_1023 ;END OF IF-STRUCTURE LABEL_1024 ;END OF IF-STRUCTURE RETURN LABEL_EVENT0 ;SET VARIABLE U8 WITH SFR BANK1 MOVF SSPSTAT,W BANK0 MOVWF TEST_I2C ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TEST_I2C,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2D MOVWF ISR_TEMPY8 CALL ISR_ANDV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ISR_TEMPX8,W MOVWF TEST_I2C ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TEST_I2C,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X9 MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1037 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEST_I2C,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X29 MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1038 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEST_I2C,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0XC MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1039 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEST_I2C,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2C MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1040 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEST_I2C,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X28 MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1041 CALL LABEL_ISR_RESET_I2C_CONFIG GOTO LABEL_1042 LABEL_1041 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF I2C_CHANNEL_STATE LABEL_1042 ;END OF IF-STRUCTURE GOTO LABEL_1045 LABEL_1040 BANK0 INCF I2C_BUFFER_POINTER,F BTFSC STATUS,Z INCF I2C_BUFFER_POINTER_H,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF I2C_BUFFER_POINTER,W MOVWF ISR_TEMPX16 MOVF I2C_BUFFER_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XEF MOVWF ISR_TEMPY16 MOVLW 0X1 MOVWF ISR_TEMPY16_H CALL ISR_GRU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1043 ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X90 BANK0 MOVWF I2C_BUFFER_POINTER MOVLW 0X1 MOVWF I2C_BUFFER_POINTER_H GOTO LABEL_1044 LABEL_1043 LABEL_1044 ;END OF IF-STRUCTURE CALL LABEL_ISR_WRITE_I2C LABEL_1045 ;END OF IF-STRUCTURE GOTO LABEL_1046 LABEL_1039 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 BANK0 MOVWF I2C_CHANNEL_STATE ;OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 MOVF I2C_BUFFER_POINTER,W MOVWF ISR_TEMPX16 MOVF I2C_BUFFER_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH INDIRECT VARIABLE ;SET U16 POINTER BCF STATUS,IRP BTFSC REGISTER_SELECTION_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF REGISTER_SELECTION_POINTER,W MOVWF FSR MOVF INDF,W MOVWF ISR_TEMPY16 CLRF ISR_TEMPY16_H CALL ISR_SUMV16 ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF ISR_TEMPX16,W MOVWF I2C_BUFFER_POINTER MOVF ISR_TEMPX16_H,W MOVWF I2C_BUFFER_POINTER_H CALL LABEL_ISR_WRITE_I2C LABEL_1046 ;END OF IF-STRUCTURE GOTO LABEL_1047 LABEL_1038 ;OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF I2C_BUFFER_POINTER,W MOVWF ISR_TEMPX16 MOVF I2C_BUFFER_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH INDIRECT VARIABLE ;SET U16 POINTER BCF STATUS,IRP BTFSC REGISTER_SELECTION_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF REGISTER_SELECTION_POINTER,W MOVWF FSR MOVF INDF,W MOVWF ISR_TEMPY16 CLRF ISR_TEMPY16_H CALL ISR_SUMV16 ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF ISR_TEMPX16,W MOVWF I2C_BUFFER_POINTER MOVF ISR_TEMPX16_H,W MOVWF I2C_BUFFER_POINTER_H ;SET INDIRECT VARIABLE WITH SFR ;SET U16 POINTER BCF STATUS,IRP BTFSC I2C_BUFFER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF I2C_BUFFER_POINTER,W MOVWF FSR MOVF SSPBUF,W MOVWF INDF LABEL_1047 ;END OF IF-STRUCTURE GOTO LABEL_1048 LABEL_1037 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 BANK0 MOVWF I2C_CHANNEL_STATE ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X90 MOVWF I2C_BUFFER_POINTER MOVLW 0X1 MOVWF I2C_BUFFER_POINTER_H ;SET U16 POINTER BCF STATUS,IRP BTFSC REGISTER_SELECTION_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF REGISTER_SELECTION_POINTER,W MOVWF FSR CLRF INDF ;SET VARIABLE U8 WITH SFR MOVF SSPBUF,W MOVWF TMP_I2C_MESSAGE LABEL_1048 ;END OF IF-STRUCTURE RETURN LABEL_EVENT1 ;CLEAR MAIL ERROR BANK0 BTFSS RCSTA,OERR GOTO LABEL_1049 BCF RCSTA,CREN BSF RCSTA,CREN LABEL_1049 ;SET VARIABLE U8 WITH SFR BANK0 MOVF RCREG,W MOVWF CURRENT ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BTFSC RX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF RX_POINTER,W MOVWF FSR MOVF CURRENT,W MOVWF INDF ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 MOVF RX_POINTER,W MOVWF ISR_TEMPX16 MOVF RX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XAE MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1050 GOTO LABEL_1051 LABEL_1050 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF RX_CHECKSUM LABEL_1051 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RX_POINTER,W MOVWF ISR_TEMPX16 MOVF RX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XAF MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_GRU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1052 GOTO LABEL_1055 LABEL_1052 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH INDIRECT VARIABLE ;SET U16 POINTER BCF STATUS,IRP BTFSC HEADER_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF HEADER_POINTER,W MOVWF FSR MOVF INDF,W MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1053 CALL LABEL_ISR_RESET_RX_BUFFER GOTO LABEL_1054 LABEL_1053 LABEL_1054 ;END OF IF-STRUCTURE LABEL_1055 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RX_POINTER,W MOVWF ISR_TEMPX16 MOVF RX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XB0 MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1056 GOTO LABEL_1057 LABEL_1056 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF TMP_MESSAGE ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF CURRENT,W MOVWF ISR_TEMPY8 CALL ISR_NOTV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ISR_TEMPY8,W MOVWF TMP_COMPLEMENT ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF RX_CHECKSUM,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF CURRENT,W MOVWF ISR_TEMPY8 CALL ISR_SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ISR_TEMPX8,W MOVWF RX_CHECKSUM LABEL_1057 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RX_POINTER,W MOVWF ISR_TEMPX16 MOVF RX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XB1 MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1058 GOTO LABEL_1061 LABEL_1058 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP_COMPLEMENT,W MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1059 CALL LABEL_ISR_RESET_RX_BUFFER GOTO LABEL_1060 LABEL_1059 LABEL_1060 ;END OF IF-STRUCTURE LABEL_1061 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RX_POINTER,W MOVWF ISR_TEMPX16 MOVF RX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XB2 MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1062 GOTO LABEL_1065 LABEL_1062 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF RX_CHECKSUM,W MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1063 CALL LABEL_ISR_RESET_RX_BUFFER GOTO LABEL_1064 LABEL_1063 LABEL_1064 ;END OF IF-STRUCTURE ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF ISR_TEMPY8 CALL ISR_NOTV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ISR_TEMPY8,W MOVWF TMP_COMPLEMENT LABEL_1065 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RX_POINTER,W MOVWF ISR_TEMPX16 MOVF RX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XB3 MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_EQU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1066 BANK0 INCF HEADER_POINTER,F BTFSC STATUS,Z INCF HEADER_POINTER_H,F BANK0 INCF RX_POINTER,F BTFSC STATUS,Z INCF RX_POINTER_H,F GOTO LABEL_1071 LABEL_1066 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP_COMPLEMENT,W MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1067 GOTO LABEL_1070 LABEL_1067 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF VALID_RX_FLAG,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1068 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 BANK0 MOVWF VALID_RX_FLAG ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP_MESSAGE,W MOVWF VALID_RX_MESSAGE GOTO LABEL_1069 LABEL_1068 LABEL_1069 ;END OF IF-STRUCTURE LABEL_1070 ;END OF IF-STRUCTURE CALL LABEL_ISR_RESET_RX_BUFFER LABEL_1071 ;END OF IF-STRUCTURE RETURN ;ßß END