Autor Tema: Pregunta: Interrupcion RBIE INTE, pulsadores y leds...  (Leído 3553 veces)

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

Desconectado wachapori65

  • PIC10
  • *
  • Mensajes: 31
Pregunta: Interrupcion RBIE INTE, pulsadores y leds...
« en: 09 de Marzo de 2011, 21:44:17 »
Quisiera saber si las interrupciones del nible del puerto B y la de RB0 se pueden usar al mismo tiempo, tengo un código y quisiera anexarle otro push button, ya tengo 4 y necesito uno mas para apagar las salidas que los demas activan. Aqui el circuito:



Aquí el código:
Código: ASM
  1. ; ZONA DE DATOS **********************************************************************
  2.  
  3.         __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  4.         LIST       P=16F84A
  5.         INCLUDE  <P16F84A.INC>
  6.  
  7.         CBLOCK   0x0C          
  8.         TeclaPulsada                    ; Va a guardar el contenido de la tecla pulsada.
  9.         MensajeApuntado                 ; Va a guarda la dirección del mensaje apuntado.
  10.         ENDC
  11.  
  12.                 ; Define dónde se sitúan las salidas.
  13. #DEFINE  Salida1        PORTB,0
  14. #DEFINE  Salida2        PORTB,1
  15. #DEFINE  Salida3        PORTB,2
  16. #DEFINE  Salida4        PORTB,3        
  17. #DEFINE  Entrada1       PORTB,4         ; Entradas PORTB
  18. #DEFINE  Entrada2       PORTB,5
  19. #DEFINE  Entrada3       PORTB,6
  20. #DEFINE  Entrada4       PORTB,7
  21.  
  22. TeclaNum1       EQU     '1'             ; Código de las teclas utilizadas.
  23. TeclaNum2       EQU     '2'
  24. TeclaNum3       EQU     '3'
  25. TeclaNum4       EQU     '4'
  26. TeclaApagado    EQU     ' '             ; Código de la tecla espaciadora,(hay un espacio)
  27. RetornoCarro    EQU     .13             ; Código de tecla "Enter" o "Retorno de Carro"
  28. CambioLinea     EQU     .10             ; Código para el cambio de línea.
  29.  
  30. ; ZONA DE CODIGOS ********************************************************************
  31.         ORG     0
  32.         goto    Inicio
  33.         ORG     4                       ; Aquí se sitúa el vector de interrupción para
  34.         goto    LeeEntradas             ; atender las subrutinas de interrupción.
  35. Mensajes
  36.         addwf   PCL,F
  37. Mensaje0
  38.         DT "    Sistema de Gestion para TN1x PTAZ Guaymas"
  39.         DT RetornoCarro, CambioLinea
  40.         DT "    Comunicacion RS232-Pic16f84A Habilitada...",0x00
  41.         DT RetornoCarro, CambioLinea
  42. Mensaje1
  43.         DT "    Seleccione puerto DB9 (1-4)... ",0x00
  44.         DT RetornoCarro, CambioLinea
  45. MensajeApagado
  46.         DT "Bus No Activo", 0x00
  47. MensajeBUS1
  48.         DT "Activado 1er bus", 0x00
  49. MensajeBUS2
  50.         DT "Activado 2do bus", 0x00
  51. MensajeBUS3
  52.         DT "Activado 3er bus", 0x00
  53. MensajeBUS4
  54.         DT "Activado 4to bus", 0x00
  55. Inicio
  56.         call    RS232_Inicializa
  57.         call    RS232_LineasBlanco      ; Visualiza unas cuantas líneas en blanco
  58.         ;call   LeeEntradas                     ; Lee las entradas y visualiza por primera vez.
  59.         bsf     STATUS,RP0              ; Configura como entrada las 4 líneas correspondientes
  60.         bcf     Salida1         ; del Puerto B respetando la configuración del
  61.         bcf     Salida2         ; resto de las líneas.
  62.         bcf     Salida3
  63.         bcf     Salida4
  64.         bsf     Entrada1
  65.         bsf     Entrada2
  66.         bsf     Entrada3
  67.         bsf     Entrada4
  68.         bcf     OPTION_REG,NOT_RBPU     ; Activa las resistencias de Pull-Up del Puerto B.
  69.         bcf     STATUS,RP0
  70.         movlw   b'10001000'             ; Habilita la interrupción RBI y la general,borra bandera de int.
  71.         movwf   INTCON
  72.         movlw   Mensaje0
  73.         call    RS232_Mensaje
  74.         movlw   Mensaje1
  75.         call    RS232_Mensaje
  76.         call    Apagado                 ; En principio todas las salidas deben estar
  77. Principal
  78.         call    RS232_LeeDato           ; Espera a recibir un carácter.
  79.         call    TesteaTeclado
  80.         ;sleep                                  ; Espera en modo de bajo consumo que se
  81.         goto    Principal                       ; modifique una entrada.
  82. ; Subrutina "TesteaTeclado" -------------------------------------------------------------
  83. ; Testea el teclado y actúa en consecuencia.
  84. TesteaTeclado
  85.         movwf   TeclaPulsada            ; Guarda el contenido de la tecla pulsada.
  86.         xorlw   TeclaNum1               ; ¿Es la tecla num1?
  87.         btfsc   STATUS,Z
  88.         goto    Enc_Num1                       
  89. ;
  90.         movf    TeclaPulsada,
  91.         xorlw   TeclaNum2               ; ¿Es la tecla num2?
  92.         btfsc   STATUS,Z
  93.         goto    Enc_Num2               
  94. ;
  95.         movf    TeclaPulsada,W          ; Recupera el contenido de la tecla pulsada.
  96.         xorlw   TeclaNum3               ; ¿Es la tecla num3?
  97.         btfsc   STATUS,Z
  98.         goto    Enc_Num3               
  99. ;
  100.         movf    TeclaPulsada,W          ; Recupera el contenido de la tecla pulsada.
  101.         xorlw   TeclaNum4               ; ¿Es la tecla num4?
  102.         btfsc   STATUS,Z
  103.         goto    Enc_Num4                ; Sí, se desea movimiento hacia la derecha.
  104. ;
  105.         movf    TeclaPulsada,W          ; Recupera el contenido de la tecla pulsada.
  106.         xorlw   TeclaApagado            ; ¿Es la tecla de espacio?.
  107.         btfss   STATUS,Z
  108.         goto    Fin                     ; No es ninguna tecla. Sale.
  109. Apagado
  110.         bcf     Salida1         ; Como se ha pulsado la tecla de parada se
  111.         bcf     Salida2         ; desactivan todas las salidas.
  112.         bcf     Salida3
  113.         bcf     Salida4
  114.         movlw   MensajeApagado
  115.         goto    Visualiza
  116. Enc_Num1
  117.         bsf     Salida1        
  118.         bcf     Salida2        
  119.         bcf     Salida3
  120.         bcf     Salida4
  121.         movlw   MensajeBUS1
  122.         goto    Visualiza
  123. Enc_Num2
  124.         bcf     Salida1        
  125.         bsf     Salida2        
  126.         bcf     Salida3
  127.         bcf     Salida4
  128.         movlw   MensajeBUS2
  129.         goto    Visualiza
  130. Enc_Num3
  131.         bcf     Salida1        
  132.         bcf     Salida2        
  133.         bsf     Salida3
  134.         bcf     Salida4
  135.         movlw   MensajeBUS3
  136.         goto    Visualiza
  137. Enc_Num4
  138.         bcf     Salida1        
  139.         bcf     Salida2        
  140.         bcf     Salida3
  141.         bsf     Salida4
  142.         movlw   MensajeBUS4
  143. Visualiza
  144.         call    RS232_Mensaje           ; Lo visualiza en el HyperTerminal.
  145.         call    RS232_LineasBlanco
  146. Fin     return
  147. ; Subrutina de Servicio a la Interrupcion" ----------------------------------------------
  148. ; Lee el estado de las entradas y las monitoriza en pantalla
  149. LeeEntradas
  150.         bcf     INTCON,GIE              ; Deshabilitar interrupciones
  151.         btfsc   Entrada1
  152.         goto    $+3
  153.         call    Bounce
  154.         call    LED1
  155.         btfsc   Entrada2
  156.         goto    $+3
  157.         call    Bounce
  158.         call    LED2
  159.         btfsc   Entrada3
  160.         goto    $+3
  161.         call    Bounce
  162.         call    LED3
  163.         btfsc   Entrada4
  164.         goto    $+3
  165.         call    Bounce
  166.         call    LED4
  167.         goto    FinVisualiza
  168. LED1   
  169.         goto    Enc_Num1
  170.         return
  171. LED2
  172.         goto    Enc_Num2
  173.         return
  174. LED3    
  175.         goto    Enc_Num3
  176.         return
  177. LED4
  178.         goto    Enc_Num4
  179.         return
  180. Bounce
  181.         btfss   Entrada1
  182.         goto    Bounce
  183.         btfss   Entrada2
  184.         goto    Bounce
  185.         btfss   Entrada3
  186.         goto    Bounce
  187.         btfss   Entrada4
  188.         goto    Bounce
  189.         return
  190. FinVisualiza
  191.         bcf     INTCON,RBIF                     ;       Limpia el flag de reconocimiento de las
  192. interrupciones 
  193.         bsf     INTCON,GIE                      ;       Habilitar interrupciones
  194.         retfie                                          ;
  195.         ;
  196.         INCLUDE  <RS232.INC>
  197.         INCLUDE  <RS232MEN.INC>
  198.         INCLUDE  <RETARDOS.INC>
  199.         END


Solo esa pregunta quisiera saber. Aun así le seguiré moviendo a ver que sale, aunque al ser interrupciones creo que se puede utlizar en conjunto con las demás. Saludos desde Sonora México :3
« Última modificación: 09 de Marzo de 2011, 21:46:37 por wachapori65 »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Pregunta: Interrupcion RBIE INTE, pulsadores y leds...
« Respuesta #1 en: 09 de Marzo de 2011, 22:09:13 »
Hola.

Al mirar tu esquema, creo que el pin 1 del integrado OK1 debe ir al pin 12 del MAX232 ....

Saludos
El papel lo aguanta todo

Desconectado wachapori65

  • PIC10
  • *
  • Mensajes: 31
Re: Pregunta: Interrupcion RBIE INTE, pulsadores y leds...
« Respuesta #2 en: 10 de Marzo de 2011, 11:41:35 »
si, solo conecto del 9 al 14, el 14 y 13 como salidas, 11 y 12 como entradas, y funciona asi y hay comunicacion, quiza me equivoque en el schematic, gracias :3

Desconectado wachapori65

  • PIC10
  • *
  • Mensajes: 31
Re: Pregunta: Interrupcion RBIE INTE, pulsadores y leds...
« Respuesta #3 en: 10 de Marzo de 2011, 20:30:43 »
no os preocupais, ya ha quedado, aqui el código:
Código: ASM
  1. ; ZONA DE DATOS **********************************************************************
  2.  
  3.         __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  4.         LIST       P=16F84A
  5.         INCLUDE  <P16F84A.INC>
  6.  
  7.         CBLOCK   0x0C          
  8.         TeclaPulsada                    ; Va a guardar el contenido de la tecla pulsada.
  9.         MensajeApuntado                 ; Va a guarda la dirección del mensaje apuntado.
  10.         ENDC
  11.  
  12.                 ; Define dónde se sitúan las salidas.
  13. #DEFINE  Salida1        PORTA,0
  14. #DEFINE  Salida2        PORTB,1
  15. #DEFINE  Salida3        PORTB,2
  16. #DEFINE  Salida4        PORTB,3        
  17. #DEFINE  Shdw           PORTB,0
  18. #DEFINE  Entrada1       PORTB,4         ; Entradas PORTB
  19. #DEFINE  Entrada2       PORTB,5
  20. #DEFINE  Entrada3       PORTB,6
  21. #DEFINE  Entrada4       PORTB,7
  22.  
  23. TeclaNum1       EQU     '1'             ; Código de las teclas utilizadas.
  24. TeclaNum2       EQU     '2'
  25. TeclaNum3       EQU     '3'
  26. TeclaNum4       EQU     '4'
  27. TeclaApagado    EQU     ' '             ; Código de la tecla espaciadora,(hay un espacio)
  28. RetornoCarro    EQU     .13             ; Código de tecla "Enter" o "Retorno de Carro"
  29. CambioLinea     EQU     .10             ; Código para el cambio de línea.
  30.  
  31. ; ZONA DE CODIGOS ********************************************************************
  32.         ORG     0
  33.         goto    Inicio
  34.         ORG     4                       ; Aquí se sitúa el vector de interrupción para
  35.         goto    LeeEntradas             ; atender las subrutinas de interrupción.
  36. Mensajes
  37.         addwf   PCL,F
  38. Mensaje0
  39.         DT "    Sistema de Gestion para TN1x PTAZ Guaymas"
  40.         DT RetornoCarro, CambioLinea
  41.         DT "    Comunicacion RS232-Pic16f84A Habilitada...",0x00
  42.         DT RetornoCarro, CambioLinea
  43. Mensaje1
  44.         DT "    Seleccione puerto DB9 (1-4)... ",0x00
  45.         DT RetornoCarro, CambioLinea
  46. MensajeApagado
  47.         DT "Bus No Activo", 0x00
  48. MensajeBUS1
  49.         DT "Activado 1er bus", 0x00
  50. MensajeBUS2
  51.         DT "Activado 2do bus", 0x00
  52. MensajeBUS3
  53.         DT "Activado 3er bus", 0x00
  54. MensajeBUS4
  55.         DT "Activado 4to bus", 0x00
  56. Inicio
  57.         call    RS232_Inicializa
  58.         call    RS232_LineasBlanco      ; Visualiza unas cuantas líneas en blanco
  59.         ;call   LeeEntradas                     ; Lee las entradas y visualiza por primera vez.
  60.         bsf     STATUS,RP0              ; Configura como entrada las 4 líneas correspondientes
  61.         bcf     Salida1         ; del Puerto B respetando la configuración del
  62.         bcf     Salida2         ; resto de las líneas.
  63.         bcf     Salida3
  64.         bcf     Salida4
  65.         bsf     Entrada1
  66.         bsf     Entrada2
  67.         bsf     Entrada3
  68.         bsf     Entrada4
  69.         bsf     Shdw
  70.         bcf     OPTION_REG,NOT_RBPU     ; Activa las resistencias de Pull-Up del Puerto B.
  71.         bcf     STATUS,RP0
  72.         movlw   b'10011000'             ; Habilita la interrupción RBI,INTE y la general,borra bandera de int.
  73.         movwf   INTCON
  74.         movlw   Mensaje0
  75.         call    RS232_Mensaje
  76.         movlw   Mensaje1
  77.         call    RS232_Mensaje
  78.         call    Apagado                 ; En principio todas las salidas deben estar
  79. Principal
  80.         call    RS232_LeeDato           ; Espera a recibir un carácter.
  81.         call    TesteaTeclado
  82.         ;sleep                                  ; Espera en modo de bajo consumo que se
  83.         goto    Principal                       ; modifique una entrada.
  84. ; Subrutina "TesteaTeclado" -------------------------------------------------------------
  85. ; Testea el teclado y actúa en consecuencia.
  86. TesteaTeclado
  87.         movwf   TeclaPulsada            ; Guarda el contenido de la tecla pulsada.
  88.         xorlw   TeclaNum1               ; ¿Es la tecla num1?
  89.         btfsc   STATUS,Z
  90.         goto    Enc_Num1                       
  91. ;
  92.         movf    TeclaPulsada,
  93.         xorlw   TeclaNum2               ; ¿Es la tecla num2?
  94.         btfsc   STATUS,Z
  95.         goto    Enc_Num2               
  96. ;
  97.         movf    TeclaPulsada,W          ; Recupera el contenido de la tecla pulsada.
  98.         xorlw   TeclaNum3               ; ¿Es la tecla num3?
  99.         btfsc   STATUS,Z
  100.         goto    Enc_Num3               
  101. ;
  102.         movf    TeclaPulsada,W          ; Recupera el contenido de la tecla pulsada.
  103.         xorlw   TeclaNum4               ; ¿Es la tecla num4?
  104.         btfsc   STATUS,Z
  105.         goto    Enc_Num4                ; Sí, se desea movimiento hacia la derecha.
  106. ;
  107.         movf    TeclaPulsada,W          ; Recupera el contenido de la tecla pulsada.
  108.         xorlw   TeclaApagado            ; ¿Es la tecla de espacio?.
  109.         btfss   STATUS,Z
  110.         goto    Fin                     ; No es ninguna tecla. Sale.
  111. Apagado
  112.         bcf     Salida1         ; Como se ha pulsado la tecla de parada se
  113.         bcf     Salida2         ; desactivan todas las salidas.
  114.         bcf     Salida3
  115.         bcf     Salida4
  116.         movlw   MensajeApagado
  117.         goto    Visualiza
  118. Enc_Num1
  119.         bsf     Salida1        
  120.         bcf     Salida2        
  121.         bcf     Salida3
  122.         bcf     Salida4
  123.         movlw   MensajeBUS1
  124.         goto    Visualiza
  125. Enc_Num2
  126.         bcf     Salida1        
  127.         bsf     Salida2        
  128.         bcf     Salida3
  129.         bcf     Salida4
  130.         movlw   MensajeBUS2
  131.         goto    Visualiza
  132. Enc_Num3
  133.         bcf     Salida1        
  134.         bcf     Salida2        
  135.         bsf     Salida3
  136.         bcf     Salida4
  137.         movlw   MensajeBUS3
  138.         goto    Visualiza
  139. Enc_Num4
  140.         bcf     Salida1        
  141.         bcf     Salida2        
  142.         bcf     Salida3
  143.         bsf     Salida4
  144.         movlw   MensajeBUS4
  145. Visualiza
  146.         call    RS232_Mensaje           ; Lo visualiza en el HyperTerminal.
  147.         call    RS232_LineasBlanco
  148. Fin     return
  149. ; Subrutina de Servicio a la Interrupcion" ----------------------------------------------
  150. ; Lee el estado de las entradas y las monitoriza en pantalla
  151. LeeEntradas
  152.         bcf     INTCON,GIE              ; Deshabilitar interrupciones
  153.         btfsc   Entrada1
  154.         goto    $+3
  155.         call    Bounce
  156.         call    LED1
  157.         btfsc   Entrada2
  158.         goto    $+3
  159.         call    Bounce
  160.         call    LED2
  161.         btfsc   Entrada3
  162.         goto    $+3
  163.         call    Bounce
  164.         call    LED3
  165.         btfsc   Entrada4
  166.         goto    $+3
  167.         call    Bounce
  168.         call    LED4
  169.         btfss   Shdw
  170.         goto    $+3
  171.         call    Bounce
  172.         call    Apagado1
  173.         goto    FinVisualiza
  174. LED1   
  175.         goto    Enc_Num1
  176.         return
  177. LED2
  178.         goto    Enc_Num2
  179.         return
  180. LED3    
  181.         goto    Enc_Num3
  182.         return
  183. LED4
  184.         goto    Enc_Num4
  185.         return
  186. Apagado1
  187.         goto    Apagado
  188.         return
  189. Bounce
  190.         btfss   Entrada1
  191.         goto    Bounce
  192.         btfss   Entrada2
  193.         goto    Bounce
  194.         btfss   Entrada3
  195.         goto    Bounce
  196.         btfss   Entrada4
  197.         goto    Bounce
  198.         btfsc   Shdw
  199.         goto    Bounce
  200.         return
  201. FinVisualiza
  202.         bcf             INTCON,RBIF                     ;       Limpia el flag de reconocimiento de las interrupciones 
  203.         bcf             INTCON,INTF
  204.         bsf     INTCON,GIE                      ;       Habilitar interrupciones
  205.         retfie                                           
  206.         ;
  207.         INCLUDE  <RS232.INC>
  208.         INCLUDE  <RS232MEN.INC>
  209.         INCLUDE  <RETARDOS.INC>
  210.         END

solo faltaba usar lógica positiva para el rb0, pues se ocupan los pull-up´s del nibble mayor para las interrupciones, apagado para rb0, del rb4 al rb7 otros push buttons conectados a Vcc. Sirve el programa, comunicacion serial, activacion por teclado y por push buttons :3

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pregunta: Interrupcion RBIE INTE, pulsadores y leds...
« Respuesta #4 en: 11 de Marzo de 2011, 06:47:45 »
Otra posible solucion, ya que creo que no estas usando el TIMER, es usar RA4 como interrupcion externa, lo configuras como contador y cargas el TIMER con su valor mas alto .255, cuando reciba un pulso se desbordara y provocara una interrupcion igual que cualquier otra interrupcion externa, para saber que fue RA4 quien provoco la interrupcion chequeas INTCON,TOIF, tienes que habilitar INTCON,TOIE interrupcion por TIMER y OPTION,TOCS, para que actue como contador.
Cada vez que se desborde tienes que volver a cargar el TIMER con .255 para dejarlo preparado para la prxima interrupcion.