Autor Tema: problema con interrupcion, matriz de led  (Leído 1859 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
problema con interrupcion, matriz de led
« en: 05 de Enero de 2011, 20:17:51 »
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>
 

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Re: problema con interrupcion, matriz de led
« Respuesta #1 en: 06 de Enero de 2011, 23:02:24 »
Estuve dando vueltas con este programa para depurarlo, en el MPLAB SIM llega a 4 niveles la pila, Si evito leer la memoria LeeMemoria =1 sigue haciendo lo mismo se resetea cuando termina de ejecutar Muestra_Linea_8 se mete en fininterrupcion llega a retfie y salta derechito al inicio. desde  ya muchas gracias.

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Problema solucionado
« Respuesta #2 en: 10 de Enero de 2011, 22:58:32 »
Hola a todos, disculpen la perdida de tiempo, yo no estoy muy ducho con el icd2 , anule la linea1 y linea2 del programa  rb6 y rb7 y funciona de maravillas, el cartel son 6 caracteres de 8x8 pero lo estoy probando de 8x6 y el consumo con un brillo muy bueno llega a 350ma. La pregunta ahora es la siguiente si tenia anulada en el programa las patas rb6 y rb7 por que se resetea. Desde ya muchas gracias.