;======================================================================================== ; Assembler code for Beacon_main.vi created with PICLab ;======================================================================================== LIST p=16F628A #include "P16F628A.INC" ; Include header file __CONFIG (_BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_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 ISR_TEMPPORT8 EQU 0X2E ISR_TEMPX8 EQU 0X2F ISR_TEMPY8 EQU 0X30 ISR_RESULT8 EQU 0X31 ISR_TEMPX16 EQU 0X32 ISR_TEMPX16_H EQU 0X33 ISR_TEMPY16 EQU 0X34 ISR_TEMPY16_H EQU 0X35 ISR_RESULT16 EQU 0X36 ISR_RESULT16_H EQU 0X37 ISR_IDX16 EQU 0X38 ISR_IDX16_H EQU 0X39 ISR_TEMPYY EQU 0X3A ISR_OP_SIGN8 EQU 0X3B ISR_STATUS EQU 0X3C ISR_W EQU 0X3D TMP1_8 EQU 0X3E PROGRAM_STATE EQU 0X3F WAIT_TIME EQU 0X40 WAIT_TIME_H EQU 0X41 ID_NUMBER EQU 0X42 HIGHEST_BEACON_ID EQU 0X43 NUMBER_OF_FLASHES EQU 0X44 TMP_8 EQU 0X45 VALID_RX_MESSAGE EQU 0X46 WAIT_INDEX EQU 0X47 WAIT_INDEX_H EQU 0X48 MSG_ID_NUMBER EQU 0X49 INDEX EQU 0X4A VALID_RX_FLAG EQU 0X4B FLASH_INDEX EQU 0X4C TX_POINTER EQU 0X4D TX_POINTER_H EQU 0X4E COMPLEMENT EQU 0X4F CHECKSUM EQU 0X50 PARITY EQU 0X51 PA_TEMP EQU 0X52 PA_INDEX EQU 0X53 RX_CHECKSUM EQU 0X54 RX_POINTER EQU 0X55 RX_POINTER_H EQU 0X56 TMP_MESSAGE EQU 0X57 HEADER_POINTER EQU 0X58 HEADER_POINTER_H EQU 0X59 TMP_COMPLEMENT EQU 0X5A CURRENT EQU 0X5B TEST_INDEX EQU 0X5C TEST_INDEX_H EQU 0X5D ;**************************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 GOTO START ORG 0X4 GOTO LABEL_ISR SUBV8 MOVF TEMPY8,W SUBWF TEMPX8 RETURN SUMV8 MOVF TEMPY8,W ADDWF TEMPX8 RETURN NOTV8 COMF TEMPY8,F RETURN XOR_V8 MOVF TEMPY8,W XORWF TEMPX8 RETURN 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 ANDV8 MOVF TEMPY8,W ANDWF TEMPX8 RETURN MULV16 CLRF RESULT16 CLRF RESULT16_H MULU16LOOP BTFSC TEMPY16,0 CALL ADD16 BCF STATUS,C RRF TEMPY16_H,F RRF TEMPY16,F BCF STATUS,C RLF TEMPX16,F RLF TEMPX16_H,F MOVF TEMPY16,F BTFSS STATUS,Z GOTO MULU16LOOP MOVF TEMPY16_H,F BTFSS STATUS,Z GOTO MULU16LOOP RETURN ADD16 MOVF TEMPX16,W ADDWF RESULT16 BTFSC STATUS,C INCF RESULT16_H MOVF TEMPX16_H,W ADDWF RESULT16_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_NOTV8 COMF ISR_TEMPY8,F RETURN ISR_SUMV8 MOVF ISR_TEMPY8,W ADDWF ISR_TEMPX8 RETURN ISR_EQU8U8 MOVF ISR_TEMPX8,W SUBWF ISR_TEMPY8 BTFSS STATUS,Z ;SKIP IF ZERO ->IDENTICAL 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 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 ;***************************************BEGIN OF MAIN PROGRAM*************************************** START ;INITIALIZE PORT A BANK0 CLRF PORTA MOVLW 0X07 MOVWF CMCON BANK1 MOVLW 0X0 MOVWF TRISA ;INITIALIZE PORT B BANK0 CLRF PORTB BANK1 MOVLW 0X0 MOVWF TRISB ;WAIT BANK0 MOVLW 0XDA MOVWF TEMPYY LABEL_1002 MOVLW 0X88 MOVWF IDX16 LABEL_1003 MOVLW 0X9A MOVWF IDX16_H LABEL_1004 DECFSZ IDX16_H,F GOTO LABEL_1004 DECFSZ IDX16,F GOTO LABEL_1003 DECFSZ TEMPYY,F GOTO LABEL_1002 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;CONFIGURE SINGLE PIN BANK1 BSF TRISB,7 ;CONFIGURE VIRTUAL PORT ;CONFIGURE PORT INPUTS MOVF TRISB,W IORLW 0X70 MOVWF TRISB ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X7 BANK0 MOVWF TMP_8 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP_8,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VIRTUAL PORT VALUE CALL IN_GENERIC_PORT0 BANK0 MOVF TEMPPORT8,W MOVWF TEMPY8 CALL SUBV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF TMP_8 ;BEGIN OF IF-STRUCTURE (DEPENDING ON BIT/PIN) BTFSS PORTB,7 GOTO LABEL_1013 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TMP_8,W MOVWF ID_NUMBER ;SET VARIABLE U8 WITH CONSTANT MOVLW 0XF MOVWF HIGHEST_BEACON_ID ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF ID_NUMBER,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1014 GOTO LABEL_1015 LABEL_1014 CALL LABEL_ERROR_ LABEL_1015 ;END OF IF-STRUCTURE GOTO LABEL_1016 LABEL_1013 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF ID_NUMBER ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP_8,W MOVWF HIGHEST_BEACON_ID LABEL_1016 ;END OF IF-STRUCTURE ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XFA BANK0 MOVWF WAIT_TIME MOVLW 0X0 MOVWF WAIT_TIME_H ;SET VARIABLE U8 WITH VARIABLE U8 MOVF ID_NUMBER,W MOVWF NUMBER_OF_FLASHES CALL LABEL_FLASH ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XE8 BANK0 MOVWF WAIT_TIME MOVLW 0X3 MOVWF WAIT_TIME_H CALL LABEL_WAIT ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X19 BANK0 MOVWF WAIT_TIME MOVLW 0X0 MOVWF WAIT_TIME_H ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X14 MOVWF NUMBER_OF_FLASHES CALL LABEL_FLASH ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XE8 BANK0 MOVWF WAIT_TIME MOVLW 0X3 MOVWF WAIT_TIME_H CALL LABEL_WAIT ;CONFIGURE PWM CLRF TMR2 BANK1 MOVLW 0X78 MOVWF PR2 BANK0 MOVLW 0X3C MOVWF CCPR1L ;SET 8MSB CLRF CCP1CON MOVLW B'00001111' IORWF CCP1CON,F ;SET PWM MODE MOVLW 0X20 IORWF CCP1CON,F ;SET 2 LSB BANK1 BCF TRISB,3 ;CONFIGURE PIN TO OUTPUT BANK0 BSF T2CON,TMR2ON ;TIMER2 ON MOVLW 0X0 IORWF T2CON,F ;PRESCALE 0->1; 1->4; 2->16 BANK1 BCF PIE1,TMR2IE ;ALLOW PR2 OVERFLOW BANK0 BCF T2CON,2 ;CONFIGURE UART BANK1 BSF TRISB,1 BSF TRISB,2 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 BSF TXSTA,6 ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XA0 BANK0 MOVWF TX_POINTER MOVLW 0X0 MOVWF TX_POINTER_H ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVLW 0X55 MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVLW 0XFF MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVLW 0X0 MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVLW 0XF7 MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;SET INDIRECT VARIABLE WITH CONSTANT ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVLW 0X8 MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_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 ;SET SINGLE OUPUT PIN BANK0 BSF PORTA,1 ;SET SINGLE OUPUT PIN BCF PORTA,2 ;BEGIN OF 16-BIT FOR-LOOP ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XE8 MOVWF TEST_INDEX MOVLW 0X3 MOVWF TEST_INDEX_H INCF TEST_INDEX,F BTFSC STATUS,Z INCF TEST_INDEX_H,F LABEL_1050 BANK0 MOVF TEST_INDEX,F BTFSC STATUS,Z DECF TEST_INDEX_H,F BANK0 DECF TEST_INDEX,F MOVF TEST_INDEX_H,F BTFSS STATUS,Z GOTO LABEL_1049 BANK0 MOVF TEST_INDEX,F LABEL_1049 BTFSC STATUS,Z GOTO LABEL_1051 ;OPERATION ;SET VARIABLE U8 WITH SFR BANK0 MOVF PORTA,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X6 MOVWF TEMPY8 CALL XOR_V8 ;SET SFR WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF PORTA ;WAIT MOVLW 0X3B MOVWF TEMPYY LABEL_1052 MOVLW 0X5 MOVWF IDX16 LABEL_1053 MOVLW 0X5 MOVWF IDX16_H LABEL_1054 DECFSZ IDX16_H,F GOTO LABEL_1054 DECFSZ IDX16,F GOTO LABEL_1053 DECFSZ TEMPYY,F GOTO LABEL_1052 ;OPERATION ;SET VARIABLE U8 WITH SFR BANK0 MOVF PORTA,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X6 MOVWF TEMPY8 CALL XOR_V8 ;SET SFR WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF PORTA ;WAIT MOVLW 0X3B MOVWF TEMPYY LABEL_1055 MOVLW 0X5 MOVWF IDX16 LABEL_1056 MOVLW 0X5 MOVWF IDX16_H LABEL_1057 DECFSZ IDX16_H,F GOTO LABEL_1057 DECFSZ IDX16,F GOTO LABEL_1056 DECFSZ TEMPYY,F GOTO LABEL_1055 GOTO LABEL_1050 LABEL_1051 ;END OF FOR/WHILE-LOOP ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ID_NUMBER,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1058 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF PROGRAM_STATE GOTO LABEL_1059 LABEL_1058 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 BANK0 MOVWF PROGRAM_STATE LABEL_1059 ;END OF IF-STRUCTURE LABEL_0 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF PROGRAM_STATE,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1060 GOTO LABEL_1067 LABEL_1060 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ID_NUMBER,W MOVWF MSG_ID_NUMBER ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF ID_NUMBER,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1061 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF PROGRAM_STATE GOTO LABEL_1062 LABEL_1061 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF HIGHEST_BEACON_ID,W MOVWF TMP1_8 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP1_8,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X10 MOVWF TEMPY8 CALL MULV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF RESULT8,W MOVWF TMP1_8 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MSG_ID_NUMBER,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP1_8,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF MSG_ID_NUMBER ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF PROGRAM_STATE LABEL_1062 ;END OF IF-STRUCTURE CALL LABEL_SEND_UART_MESSAGE ;BEGIN OF FOR-LOOP ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X32 BANK0 MOVWF INDEX INCF INDEX,F LABEL_1063 BANK0 DECF INDEX,F BTFSC STATUS,Z GOTO LABEL_1064 ;OPERATION ;SET VARIABLE U8 WITH SFR BANK0 MOVF PORTA,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X6 MOVWF TEMPY8 CALL XOR_V8 ;SET SFR WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF PORTA ;WAIT MOVLW 0XB MOVWF TEMPYY LABEL_1065 DECFSZ TEMPYY,F GOTO LABEL_1065 NOP NOP ;OPERATION ;SET VARIABLE U8 WITH SFR BANK0 MOVF PORTA,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X6 MOVWF TEMPY8 CALL XOR_V8 ;SET SFR WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF PORTA ;WAIT MOVLW 0XB MOVWF TEMPYY LABEL_1066 DECFSZ TEMPYY,F GOTO LABEL_1066 NOP NOP GOTO LABEL_1063 LABEL_1064 ;END OF FOR/WHILE-LOOP ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X14 BANK0 MOVWF WAIT_TIME MOVLW 0X0 MOVWF WAIT_TIME_H ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X5 MOVWF NUMBER_OF_FLASHES CALL LABEL_FLASH LABEL_1067 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF PROGRAM_STATE,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1068 GOTO LABEL_1073 LABEL_1068 ;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_1069 GOTO LABEL_1072 LABEL_1069 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF VALID_RX_MESSAGE,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 VALID_RX_MESSAGE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF VALID_RX_MESSAGE,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1070 GOTO LABEL_1071 LABEL_1070 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 BANK0 MOVWF PROGRAM_STATE LABEL_1071 ;END OF IF-STRUCTURE BANK0 CLRF VALID_RX_FLAG LABEL_1072 ;END OF IF-STRUCTURE LABEL_1073 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF PROGRAM_STATE,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1074 GOTO LABEL_1077 LABEL_1074 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ID_NUMBER,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1075 ;SET VARIABLE U16 WITH VARIABLE U8 BANK0 MOVF ID_NUMBER,W MOVWF WAIT_TIME CLRF WAIT_TIME_H GOTO LABEL_1076 LABEL_1075 ;SET VARIABLE U16 WITH VARIABLE U8 BANK0 MOVF HIGHEST_BEACON_ID,W MOVWF WAIT_TIME CLRF WAIT_TIME_H INCF WAIT_TIME,F BTFSC STATUS,Z INCF WAIT_TIME_H,F LABEL_1076 ;END OF IF-STRUCTURE ;OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF WAIT_TIME,W MOVWF TEMPX16 MOVF WAIT_TIME_H,W MOVWF TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XE8 MOVWF TEMPY16 MOVLW 0X3 MOVWF TEMPY16_H CALL MULV16 ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF RESULT16,W MOVWF WAIT_TIME MOVF RESULT16_H,W MOVWF WAIT_TIME_H CALL LABEL_WAIT ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 BANK0 MOVWF PROGRAM_STATE LABEL_1077 ;END OF IF-STRUCTURE ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF PROGRAM_STATE,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 MOVWF TEMPY8 CALL GRU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1078 ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ID_NUMBER,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF TEMPY8 CALL EQU8U8 BANK0 MOVWF RESULT8 BTFSC RESULT8,0 GOTO LABEL_1079 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 BANK0 MOVWF PROGRAM_STATE GOTO LABEL_1080 LABEL_1079 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X2 BANK0 MOVWF PROGRAM_STATE LABEL_1080 ;END OF IF-STRUCTURE GOTO LABEL_1081 LABEL_1078 LABEL_1081 ;END OF IF-STRUCTURE GOTO LABEL_0 LABEL_1082 GOTO LABEL_1082 ;***************************************SUBROUTINES*************************************** LABEL_WAIT ;BEGIN OF 16-BIT FOR-LOOP ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF WAIT_TIME,W MOVWF WAIT_INDEX MOVF WAIT_TIME_H,W MOVWF WAIT_INDEX_H INCF WAIT_INDEX,F BTFSC STATUS,Z INCF WAIT_INDEX_H,F LABEL_1006 BANK0 MOVF WAIT_INDEX,F BTFSC STATUS,Z DECF WAIT_INDEX_H,F BANK0 DECF WAIT_INDEX,F MOVF WAIT_INDEX_H,F BTFSS STATUS,Z GOTO LABEL_1005 BANK0 MOVF WAIT_INDEX,F LABEL_1005 BTFSC STATUS,Z GOTO LABEL_1007 ;WAIT BANK0 MOVLW 0X3B MOVWF TEMPYY LABEL_1008 MOVLW 0X5 MOVWF IDX16 LABEL_1009 MOVLW 0X5 MOVWF IDX16_H LABEL_1010 DECFSZ IDX16_H,F GOTO LABEL_1010 DECFSZ IDX16,F GOTO LABEL_1009 DECFSZ TEMPYY,F GOTO LABEL_1008 GOTO LABEL_1006 LABEL_1007 ;END OF FOR/WHILE-LOOP RETURN LABEL_FLASH ;BEGIN OF FOR-LOOP ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF NUMBER_OF_FLASHES,W MOVWF FLASH_INDEX INCF FLASH_INDEX,F LABEL_1011 BANK0 DECF FLASH_INDEX,F BTFSC STATUS,Z GOTO LABEL_1012 ;SET SINGLE OUPUT PIN BANK0 BSF PORTA,0 CALL LABEL_WAIT ;SET SINGLE OUPUT PIN BANK0 BCF PORTA,0 CALL LABEL_WAIT GOTO LABEL_1011 LABEL_1012 ;END OF FOR/WHILE-LOOP RETURN LABEL_ERROR_ ;SET VARIABLE U16 WITH CONSTANT MOVLW 0X20 BANK0 MOVWF WAIT_TIME MOVLW 0X0 MOVWF WAIT_TIME_H ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X1 MOVWF NUMBER_OF_FLASHES LABEL_1 CALL LABEL_FLASH GOTO LABEL_1 RETURN LABEL_SEND_UART_MESSAGE ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XA5 BANK0 MOVWF TX_POINTER MOVLW 0X0 MOVWF TX_POINTER_H ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVF MSG_ID_NUMBER,W MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;SET VARIABLE U8 WITH CONSTANT MOVLW 0XF7 BANK0 MOVWF CHECKSUM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF CHECKSUM,W MOVWF TEMPX8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MSG_ID_NUMBER,W MOVWF TEMPY8 CALL SUMV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPX8,W MOVWF CHECKSUM ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 MOVF MSG_ID_NUMBER,W MOVWF TEMPY8 CALL NOTV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPY8,W MOVWF COMPLEMENT ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVF COMPLEMENT,W MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVF CHECKSUM,W MOVWF INDF INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CHECKSUM,W MOVWF TEMPY8 CALL NOTV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF TEMPY8,W MOVWF COMPLEMENT ;SET INDIRECT VARIABLE WITH VARIABLE U8 ;SET U16 POINTER BCF STATUS,IRP BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVF COMPLEMENT,W MOVWF INDF ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XA0 MOVWF TX_POINTER MOVLW 0X0 MOVWF TX_POINTER_H BSF T2CON,2 ;START MONITORING INTERRUPTS BCF PIR1,TXIF BANK1 BSF PIE1,TXIE BSF INTCON,GIE BSF INTCON,PEIE 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 IN_GENERIC_PORT0 BANK0 CLRF TEMPPORT8 BCF TEMPPORT8,0 BTFSC PORTB,4 BSF TEMPPORT8,0 BCF TEMPPORT8,1 BTFSC PORTB,5 BSF TEMPPORT8,1 BCF TEMPPORT8,2 BTFSC PORTB,6 BSF TEMPPORT8,2 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 BANK1 BTFSS PIE1,TXIE GOTO LABEL_1083 BANK0 BTFSS PIR1,TXIF GOTO LABEL_1083 CALL LABEL_EVENT0 BANK0 BCF PIR1,TXIF LABEL_1083 BANK1 BTFSS PIE1,RCIE GOTO LABEL_1084 BANK0 BTFSS PIR1,RCIF GOTO LABEL_1084 CALL LABEL_EVENT1 BANK0 BCF PIR1,RCIF LABEL_1084 BANK0 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_EVENT0 ;SET VARIABLE U8 WITH INDIRECT VARIABLE ;SET U16 POINTER BCF STATUS,IRP BANK0 BTFSC TX_POINTER_H,0 BSF STATUS,IRP BANK0 MOVF TX_POINTER,W MOVWF FSR MOVF INDF,W MOVWF TMP_8 ;SET VARIABLE U8 WITH VARIABLE U8 MOVF TMP_8,W MOVWF PA_TEMP CLRF PARITY ;BEGIN OF FOR-LOOP ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X8 MOVWF PA_INDEX INCF PA_INDEX,F LABEL_1017 BANK0 DECF PA_INDEX,F BTFSC STATUS,Z GOTO LABEL_1018 ;BEGIN OF IF-STRUCTURE (DEPENDING ON BIT/PIN) BANK0 BTFSS PA_TEMP,0 GOTO LABEL_1019 GOTO LABEL_1020 LABEL_1019 ;OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF PARITY,W MOVWF ISR_TEMPY8 CALL ISR_NOTV8 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF ISR_TEMPY8,W MOVWF PARITY LABEL_1020 ;END OF IF-STRUCTURE BCF STATUS,C BANK0 RRF PA_TEMP,F GOTO LABEL_1017 LABEL_1018 ;END OF FOR/WHILE-LOOP ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF PARITY,W MOVWF ISR_TEMPX8 ;SET VARIABLE U8 WITH CONSTANT MOVLW 0X0 MOVWF ISR_TEMPY8 CALL ISR_EQU8U8 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1021 BANK1 BCF TXSTA,TX9D GOTO LABEL_1022 LABEL_1021 BANK1 BSF TXSTA,TX9D LABEL_1022 ;END OF IF-STRUCTURE ;SEND MAIL BANK0 LABEL_1023 BTFSS PIR1,TXIF GOTO LABEL_1023 ;SET SFR WITH VARIABLE U8 BANK0 MOVF TMP_8,W MOVWF TXREG INCF TX_POINTER,F BTFSC STATUS,Z INCF TX_POINTER_H,F ;BEGIN OF IF-STRUCTURE ;COMPARE-OPERATION ;SET VARIABLE U16 WITH VARIABLE U16 BANK0 MOVF TX_POINTER,W MOVWF ISR_TEMPX16 MOVF TX_POINTER_H,W MOVWF ISR_TEMPX16_H ;SET VARIABLE U16 WITH CONSTANT MOVLW 0XAA MOVWF ISR_TEMPY16 MOVLW 0X0 MOVWF ISR_TEMPY16_H CALL ISR_GRU16U16 BANK0 MOVWF ISR_RESULT8 BTFSC ISR_RESULT8,0 GOTO LABEL_1024 ;STOP MONITORING INTERRUPTS BANK1 BCF PIE1,TXIE BANK0 BCF T2CON,2 GOTO LABEL_1025 LABEL_1024 LABEL_1025 ;END OF IF-STRUCTURE RETURN LABEL_EVENT1 ;CLEAR MAIL ERROR BANK0 BTFSS RCSTA,OERR GOTO LABEL_1026 BCF RCSTA,CREN BSF RCSTA,CREN LABEL_1026 ;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_1027 GOTO LABEL_1028 LABEL_1027 ;SET VARIABLE U8 WITH VARIABLE U8 BANK0 MOVF CURRENT,W MOVWF RX_CHECKSUM LABEL_1028 ;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_1029 GOTO LABEL_1032 LABEL_1029 ;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_1030 CALL LABEL_ISR_RESET_RX_BUFFER GOTO LABEL_1031 LABEL_1030 LABEL_1031 ;END OF IF-STRUCTURE LABEL_1032 ;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_1033 GOTO LABEL_1034 LABEL_1033 ;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_1034 ;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_1035 GOTO LABEL_1038 LABEL_1035 ;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_1036 CALL LABEL_ISR_RESET_RX_BUFFER GOTO LABEL_1037 LABEL_1036 LABEL_1037 ;END OF IF-STRUCTURE LABEL_1038 ;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_1039 GOTO LABEL_1042 LABEL_1039 ;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_1040 CALL LABEL_ISR_RESET_RX_BUFFER GOTO LABEL_1041 LABEL_1040 LABEL_1041 ;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_1042 ;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_1043 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_1048 LABEL_1043 ;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_1044 GOTO LABEL_1047 LABEL_1044 ;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_1045 ;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_1046 LABEL_1045 LABEL_1046 ;END OF IF-STRUCTURE LABEL_1047 ;END OF IF-STRUCTURE CALL LABEL_ISR_RESET_RX_BUFFER LABEL_1048 ;END OF IF-STRUCTURE RETURN ;ßß END