Hola, ante todo gracias por el tiempo.
Estoy usando icd2, cristal 4mhz, el problema surge cuando sale de ejecutar la subrutina de Muestra_Linea_8 la instruccion retfie resetea el programa y vuelve a empesar. Desde ya muchas gracias.
;************** Matriz de LED ***********************************
LIST P=16f873A
#include<p16f873a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _BODEN_OFF & _LVP_OFF & _DEBUG_ON
CBLOCK 0x20
MEMO_A0
MEMO_A1
MEMO_A2
MEMO_A3
MEMO_A4
MEMO_A5
MEMO_A6
MEMO_A7
MEMO_B0
MEMO_B1
MEMO_B2
MEMO_B3
MEMO_B4
MEMO_B5
MEMO_B6
MEMO_B7
MEMO_C0
MEMO_C1
MEMO_C2
MEMO_C3
MEMO_C4
MEMO_C5
MEMO_C6
MEMO_C7
MEMO_D0
MEMO_D1
MEMO_D2
MEMO_D3
MEMO_D4
MEMO_D5
MEMO_D6
MEMO_D7
MEMO_E0
MEMO_E1
MEMO_E2
MEMO_E3
MEMO_E4
MEMO_E5
MEMO_E6
MEMO_E7
MEMO_F0
MEMO_F1
MEMO_F2
MEMO_F3
MEMO_F4
MEMO_F5
MEMO_F6
MEMO_F7
MEMO_G0
MEMO_G1
MEMO_G2
MEMO_G3
MEMO_G4
MEMO_G5
MEMO_G6
MEMO_G7
MEMO_H0
MEMO_H1
MEMO_H2
MEMO_H3
MEMO_H4
MEMO_H5
MEMO_H6
MEMO_H7
Muestra_En_Pantalla
LeeMemoria
NumeroDeVuelta
VUELTA0
VUELTA1
VUELTA2
TMR0_500us
ENDC
#DEFINE I2C_UltimoByteLeer I2C_Flags,0
;#DEFINE TMR0_500us d'200'
ORG 0X02
GOTO Inicio
ORG 0X04
GOTO ServicioDeInterrupciones
Inicio CALL Inicializar_74hc595
CALL RS232_Inicializa
BSF STATUS,RP0
MOVLW B'00000110'
MOVWF ADCON1 ;TODO EL PUERTO A COMO DIGITA
; BCF TRISA,.2
BCF TRISB,.0
BCF TRISB,.1
BCF TRISB,.2
BCF TRISB,.3
BCF TRISB,.4
BCF TRISB,.5
BCF TRISB,.6
MOVLW B'00100000' ;HABILITACION DE INTERRUPCION DE
MOVWF PIE1 ;PERIFERICO POR RECEPCION DE LA USSART.
MOVLW B'00000000' ; VER 00000100
MOVWF OPTION_REG
BCF STATUS,RP0
; BSF PORTA,.2
CALL Desactivar_Alta_Z
MOVLW .0 ;VA 0 CERO
MOVWF Muestra_En_Pantalla
MOVLW .0
MOVWF LeeMemoria
MOVLW .0
MOVWF VUELTA0
MOVLW .0
MOVWF VUELTA1
MOVLW .0
MOVWF VUELTA2
MOVLW .0
MOVWF NumeroDeVuelta
MOVLW .250
MOVWF TMR0_500us
MOVLW B'11100000' ;HABILITACION DE INTERRUPCION GENERAL
MOVWF INTCON ;GIE, PERIFERICOS, TMRO.
MOVLW TMR0_500us
MOVWF TMR0
Principal GOTO $
ServicioDeInterrupciones
goto MuestraEnPantalla
MuestraEnPantalla
; BCF INTCON,T0IF ;LIMPIA BANDERA DEL TMRO
; MOVLW TMR0_500us ;SE CARGA DE NUEVO EL TMR0
; MOVWF TMR0
INCF Muestra_En_Pantalla,F
;****************************** LIEA 1 ***********************************************
MOVLW .1
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_2 ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MA0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW .0
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_A0
CALL I2C_LeeByte
MOVWF MEMO_A1
CALL I2C_LeeByte
MOVWF MEMO_A2
CALL I2C_LeeByte
MOVWF MEMO_A3
CALL I2C_LeeByte
MOVWF MEMO_A4
CALL I2C_LeeByte
MOVWF MEMO_A5
CALL I2C_LeeByte
MOVWF MEMO_A6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_A7
CALL I2C_EnviaStop
MA0 MOVF MEMO_A0,W
CALL Transmision_74hc595
MOVF MEMO_A1,W
CALL Transmision_74hc595
MOVF MEMO_A2,W
CALL Transmision_74hc595
MOVF MEMO_A3,W
CALL Transmision_74hc595
MOVF MEMO_A4,W
CALL Transmision_74hc595
MOVF MEMO_A5,W
CALL Transmision_74hc595
; MOVF MEMO_A6,W
; CALL Transmision_74hc595
; MOVF MEMO_A7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
; MOVLW B'01111111'
; MOVWF PORTB
GOTO FinInterrupcion
;********************************** LINEA 2 ********************************************
Muestra_Linea_2
MOVLW .2
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_3 ;PASA A MOSTRAR LA LINEA 3
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MB0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW .8
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_B0
CALL I2C_LeeByte
MOVWF MEMO_B1
CALL I2C_LeeByte
MOVWF MEMO_B2
CALL I2C_LeeByte
MOVWF MEMO_B3
CALL I2C_LeeByte
MOVWF MEMO_B4
CALL I2C_LeeByte
MOVWF MEMO_B5
CALL I2C_LeeByte
MOVWF MEMO_B6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_B7
CALL I2C_EnviaStop
MB0 MOVF MEMO_B0,W
CALL Transmision_74hc595
MOVF MEMO_B1,W
CALL Transmision_74hc595
MOVF MEMO_B2,W
CALL Transmision_74hc595
MOVF MEMO_B3,W
CALL Transmision_74hc595
MOVF MEMO_B4,W
CALL Transmision_74hc595
MOVF MEMO_B5,W
CALL Transmision_74hc595
; MOVF MEMO_B6,W
; CALL Transmision_74hc595
; MOVF MEMO_B7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
; MOVLW B'10111111'
; MOVWF PORTB
GOTO FinInterrupcion
;************************************* LINEA 3 ***************************************************
Muestra_Linea_3
MOVLW .3
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_4 ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MC0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW 0x10
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_C0
CALL I2C_LeeByte
MOVWF MEMO_C1
CALL I2C_LeeByte
MOVWF MEMO_C2
CALL I2C_LeeByte
MOVWF MEMO_C3
CALL I2C_LeeByte
MOVWF MEMO_C4
CALL I2C_LeeByte
MOVWF MEMO_C5
CALL I2C_LeeByte
MOVWF MEMO_C6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_C7
CALL I2C_EnviaStop
MC0 MOVF MEMO_C0,W
CALL Transmision_74hc595
MOVF MEMO_C1,W
CALL Transmision_74hc595
MOVF MEMO_C2,W
CALL Transmision_74hc595
MOVF MEMO_C3,W
CALL Transmision_74hc595
MOVF MEMO_C4,W
CALL Transmision_74hc595
MOVF MEMO_C5,W
CALL Transmision_74hc595
; MOVF MEMO_C6,W
; CALL Transmision_74hc595
; MOVF MEMO_C7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
MOVLW B'11011111'
MOVWF PORTB
GOTO FinInterrupcion
;************************************ LINEA 4 *************************************************
Muestra_Linea_4
MOVLW .4
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_5 ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MD0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW 0x18
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_D0
CALL I2C_LeeByte
MOVWF MEMO_D1
CALL I2C_LeeByte
MOVWF MEMO_D2
CALL I2C_LeeByte
MOVWF MEMO_D3
CALL I2C_LeeByte
MOVWF MEMO_D4
CALL I2C_LeeByte
MOVWF MEMO_D5
CALL I2C_LeeByte
MOVWF MEMO_D6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_D7
CALL I2C_EnviaStop
MD0 MOVF MEMO_D0,W
CALL Transmision_74hc595
MOVF MEMO_D1,W
CALL Transmision_74hc595
MOVF MEMO_D2,W
CALL Transmision_74hc595
MOVF MEMO_D3,W
CALL Transmision_74hc595
MOVF MEMO_D4,W
CALL Transmision_74hc595
MOVF MEMO_D5,W
CALL Transmision_74hc595
; MOVF MEMO_D6,W
; CALL Transmision_74hc595
; MOVF MEMO_D7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
MOVLW B'11101111'
MOVWF PORTB
GOTO FinInterrupcion
;********************************* LINEA 5 *********************************************
Muestra_Linea_5
MOVLW .5
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_6 ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO ME0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW 0x20
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_E0
CALL I2C_LeeByte
MOVWF MEMO_E1
CALL I2C_LeeByte
MOVWF MEMO_E2
CALL I2C_LeeByte
MOVWF MEMO_E3
CALL I2C_LeeByte
MOVWF MEMO_E4
CALL I2C_LeeByte
MOVWF MEMO_E5
CALL I2C_LeeByte
MOVWF MEMO_E6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_E7
CALL I2C_EnviaStop
ME0 MOVF MEMO_E0,W
CALL Transmision_74hc595
MOVF MEMO_E1,W
CALL Transmision_74hc595
MOVF MEMO_E2,W
CALL Transmision_74hc595
MOVF MEMO_E3,W
CALL Transmision_74hc595
MOVF MEMO_E4,W
CALL Transmision_74hc595
MOVF MEMO_E5,W
CALL Transmision_74hc595
; MOVF MEMO_E6,W
; CALL Transmision_74hc595
; MOVF MEMO_E7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
MOVLW B'11110111'
MOVWF PORTB
GOTO FinInterrupcion
;************************************* LINEA 6 *******************************************
Muestra_Linea_6
MOVLW .6
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_7 ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MF0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW 0x28
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_F0
CALL I2C_LeeByte
MOVWF MEMO_F1
CALL I2C_LeeByte
MOVWF MEMO_F2
CALL I2C_LeeByte
MOVWF MEMO_F3
CALL I2C_LeeByte
MOVWF MEMO_F4
CALL I2C_LeeByte
MOVWF MEMO_F5
CALL I2C_LeeByte
MOVWF MEMO_F6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_F7
CALL I2C_EnviaStop
MF0 MOVF MEMO_F0,W
CALL Transmision_74hc595
MOVF MEMO_F1,W
CALL Transmision_74hc595
MOVF MEMO_F2,W
CALL Transmision_74hc595
MOVF MEMO_F3,W
CALL Transmision_74hc595
MOVF MEMO_F4,W
CALL Transmision_74hc595
MOVF MEMO_F5,W
CALL Transmision_74hc595
; MOVF MEMO_F6,W
; CALL Transmision_74hc595
; MOVF MEMO_F7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
MOVLW B'11111011'
MOVWF PORTB
GOTO FinInterrupcion
;*************************************** LINEA 7 *******************************************
Muestra_Linea_7
MOVLW .7
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO Muestra_Linea_8 ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MG0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW 0x30
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_G0
CALL I2C_LeeByte
MOVWF MEMO_G1
CALL I2C_LeeByte
MOVWF MEMO_G2
CALL I2C_LeeByte
MOVWF MEMO_G3
CALL I2C_LeeByte
MOVWF MEMO_G4
CALL I2C_LeeByte
MOVWF MEMO_G5
CALL I2C_LeeByte
MOVWF MEMO_G6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_G7
CALL I2C_EnviaStop
MG0 MOVF MEMO_G0,W
CALL Transmision_74hc595
MOVF MEMO_G1,W
CALL Transmision_74hc595
MOVF MEMO_G2,W
CALL Transmision_74hc595
MOVF MEMO_G3,W
CALL Transmision_74hc595
MOVF MEMO_G4,W
CALL Transmision_74hc595
MOVF MEMO_G5,W
CALL Transmision_74hc595
; MOVF MEMO_G6,W
; CALL Transmision_74hc595
; MOVF MEMO_G7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
MOVLW B'11111101'
MOVWF PORTB
GOTO FinInterrupcion
;************************************* LINEA 8 *******************************************
Muestra_Linea_8
MOVLW .8
XORWF Muestra_En_Pantalla,W
BTFSS STATUS,Z
GOTO FinInterrupcion ;PASA A MOSTRAR LA LINEA 2
MOVLW .0
XORWF LeeMemoria,W
BTFSS STATUS,Z
GOTO MH0
MOVLW .0
MOVWF M24LC256_AddressHigh
MOVLW 0x38
MOVWF M24LC256_AddressLow
CALL M24LC256_InicializaLectura
CALL I2C_LeeByte
MOVWF MEMO_H0
CALL I2C_LeeByte
MOVWF MEMO_H1
CALL I2C_LeeByte
MOVWF MEMO_H2
CALL I2C_LeeByte
MOVWF MEMO_H3
CALL I2C_LeeByte
MOVWF MEMO_H4
CALL I2C_LeeByte
MOVWF MEMO_H5
CALL I2C_LeeByte
MOVWF MEMO_H6
BSF I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
CALL I2C_LeeByte ; alta impedancia la línea SDA. No importa el
MOVWF MEMO_H7
CALL I2C_EnviaStop
MH0 MOVF MEMO_H0,W
CALL Transmision_74hc595
MOVF MEMO_H1,W
CALL Transmision_74hc595
MOVF MEMO_H2,W
CALL Transmision_74hc595
MOVF MEMO_H3,W
CALL Transmision_74hc595
MOVF MEMO_H4,W
CALL Transmision_74hc595
MOVF MEMO_H5,W
CALL Transmision_74hc595
; MOVF MEMO_H6,W
; CALL Transmision_74hc595
; MOVF MEMO_H7,W
; CALL Transmision_74hc595
CALL Activar_74HC595
MOVLW B'11111110'
MOVWF PORTB
MOVLW .0
MOVWF Muestra_En_Pantalla
MOVLW .1 ;LEE LA MEMORIA Y SALE PARA NO PARPADEO
MOVWF LeeMemoria
; MOVLW .240
; MOVWF TMR0
; BCF INTCON,T0IF
;A1 BTFSS INTCON,T0IF
; GOTO A1
; MOVLW .1 ;LEE LA MEMORIA Y SALE PARA NO PARPADEO
; MOVWF LeeMemoria
GOTO FinInterrupcion
;************************************************************************************************************
FinInterrupcion
;A BTFSS INTCON,T0IF
; GOTO A
BCF INTCON,T0IF
MOVLW TMR0_500us
MOVWF TMR0
RETFIE
#INCLUDE<L74HC595.INC>
#INCLUDE<RETARDOS.INC>
#INCLUDE<BUS_I2C.INC>
#INCLUDE<M24LC256.INC>
#INCLUDE<LRS232RTI.INC>