OK. Ya lo corregí
Hola de nuevo gente, había desaparecido un poco debido que estaba aplicando las recomendaciones que ustedes me dieron. Logré avanzar bastante, hice modificaciones, tales como no llamar subrutinas, si el contenido de estas se ejecutan una sola vez, así evito hacer un “call”, con lo que el pcl no realiza “saltos”.
Estoy teniendo algunos inconvenientes cuando hago un “go to”, espero resolverlos, creo que con todo lo que he aprendido con ustedes será así, tengo otra consulta sobre parte del desarrollo del programa en cuestión, la parte en la que hago una lectura secuencial de la memoria externa, en este caso leo 16 posiciones de esta, y cada dato leído lo deposito en 16 registros diferentes, le busqué la vuelta y no pude resolverlo tal como figura a continuación:
;*** PROCESO DE CARGA DE LOS VALORES LEÍDOS EN LA MEMORIA EN LOS REGISTROS CORRESPONDIENTES ***
LER_MEM_INI movlw 0x01 ;SE MUEVE EL VALOR 0x01 A CON_DAT_I2C, DE ESTA FORMA, SE VAN A
movwf CON_DAT_I2C ;DEPOSITAR CORRECTAMENTE, EN EL REGISTRO QUE CORRESPONDE, LOS
;DATOS LEÍDOS DE LA MEMORIA
movf DAT_OBT_I2C,W ;SE MUEVE DAT_OBT_I2C A W
movwf NVL_SEC ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
REP_LEC_MEM incf CON_DAT_I2C,F ;CON_DAT_I2C SE INCREMENTA EN UNA UNIDAD
movlw 0xA1 ;SE MUEVE EL VALOR 0xA1 A SEL_DIS, DE ESTA FORMA SE VUELVE A
movwf SEL_DIS_I2C ;SELECCIONAR LA MEMORIA EXTERNA Y SE INDICA QUE SE VA A LEER EN
;ELLA
pagesel SEC_SEL_DIS ;SE PASA A LA SEGUNDA PÁGINA
call SEC_SEL_DIS
call LER_I2C
call DET_I2C
pagesel $ ;SE PASA A LA PRIMERA PÁGINA
movf CON_DAT_I2C,W ;SE MUEVE CON_DAT_I2C A W
sublw 0x02 ;SE LE RESTA EL VALOR 0x02
btfsc STATUS,2 ;¿ES EL SEGUNDO DATO?
goto DAT_002 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x03 ;SE LE RESTA EL VALOR 0x03
btfsc STATUS,2 ;¿ES EL TERCER DATO?
goto DAT_003 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x04 ;SE LE RESTA EL VALOR 0x04
btfsc STATUS,2 ;¿ES EL CUARTO DATO?
goto DAT_004 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x05 ;SE LE RESTA EL VALOR 0x05
btfsc STATUS,2 ;¿ES EL QUINTO DATO?
goto DAT_005 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x06 ;SE LE RESTA EL VALOR 0x06
btfsc STATUS,2 ;¿ES EL SEXTO DATO?
goto DAT_006 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x07 ;SE LE RESTA EL VALOR 0x07
btfsc STATUS,2 ;¿ES EL SÉPTIMO DATO?
goto DAT_007 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x08 ;SE LE RESTA EL VALOR 0x08
btfsc STATUS,2 ;¿ES EL OCTAVO DATO?
goto DAT_008 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x09 ;SE LE RESTA EL VALOR 0x09
btfsc STATUS,2 ;¿ES EL NOVENO DATO?
goto DAT_009 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x0A ;SE LE RESTA EL VALOR 0x0A
btfsc STATUS,2 ;¿ES EL DÉCIMO DATO?
goto DAT_010 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x0B ;SE LE RESTA EL VALOR 0x0B
btfsc STATUS,2 ;¿ES EL NÚMERO 11?
goto DAT_011 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x0C ;SE LE RESTA EL VALOR 0x0C
btfsc STATUS,2 ;¿ES EL NÚMERO 12?
goto DAT_012 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x0D ;SE LE RESTA EL VALOR 0x0D
btfsc STATUS,2 ;¿ES EL NÚMERO 13?
goto DAT_013 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x0E ;SE LE RESTA EL VALOR 0x0E
btfsc STATUS,2 ;¿ES EL NÚMERO 14?
goto DAT_014 ;SI
movf CON_DAT_I2C,W ;NO, SE MUEVE CON_DAT_I2C A W
sublw 0x0F ;SE LE RESTA EL VALOR 0x0A
btfsc STATUS,2 ;¿ES EL NÚMERO 15?
goto DAT_015 ;SI
goto DAT_016 ;NO, ES EL ÚLTIMO, EL NÚMERO 16
DAT_002 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf RET_DIS ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_003 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf NVL_CON ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_004 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf NVL_BRL ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_005 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf NVL_REF_INF ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_006 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf NVL_REF_NOR ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_007 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf NVL_REF_SUP ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_008 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf VEL_PRO ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_009 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf EST_BUZ ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_010 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf PEL_PRO ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_011 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf FLG_INI_PRO ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_012 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf FLG_FIN_PRO ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_013 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf DIG_MEM_001 ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_014 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf DIG_MEM_002 ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_015 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf DIG_MEM_003 ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
goto REP_LEC_MEM
DAT_016 movf DAT_OBT_I2C,W ;IDEM A LÍNEA
movwf DIG_MEM_004 ;SE COPIA EL DATO EN EL REGISTRO QUE CORRESPONDE
;**********************************************************************************************