Autor Tema: Problemas con las Interrupciones INT/RB0 y RB4:RB7 en el MPLAB IDE 7.30  (Leído 5419 veces)

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

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
Un cordial saludos tengan todos

Compañeros estoy tratando de simular un asm en el MPLAB IDE 7.30 y el mismo simula bien el problema se presenta cuando quiero simular las interrupciones le coloco los pulsos pero no salta al el vector 0x04, quisiera saber si en este simulador esto no se puede hacer???, o hay algo que hacer adicional que yo no sepa???.

Sin mas que hacer referencia esperando una respuesta satisfactoria me despido.

Atte. Nelson

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Problemas con las Interrupciones INT/RB0 y RB4:RB7 en el MPLAB IDE 7.30
« Respuesta #1 en: 06 de Mayo de 2006, 17:44:29 »
Hola rnelson, probablemente estes haciendo algo mal en tu .asm, ya que yo lo uso y anda de manera correcta, para accionarlo con el simulador de estimulos se hace de la manera habitual tal cual fuera cualquier otro pin.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas con las Interrupciones INT/RB0 y RB4:RB7 en el MPLAB IDE 7.30
« Respuesta #2 en: 07 de Mayo de 2006, 15:03:55 »
Nelson puedo agregar que te podrías fijar en los registros si se han seteado correctamente la habilitación de las interrupciones generales, de periférico y del pin RB0.

No se de que micro estamos hablando pero si hay algun error de que estas queriendo activar un File Register que está en otro banco de memoria entonces no funcionará.

Si sigues teniendo problemas, puedes postear tu .asm así te lo revisamos.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Problemas con las Interrupciones INT/RB0 y RB4:RB7 en el MPLAB IDE 7.30
« Respuesta #3 en: 07 de Mayo de 2006, 15:24:03 »
Comprueba que el TRIS del puerto B indica entrada en los pines que usas para detectar las interrupciones. Asimismo comprueba en OPTION el estado adecuado de las Pull-Ups de dicho puerto. El 90% de las veces es algo relacionado con estas dos funciones que implementa el puerto B.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
Re: Problemas con las Interrupciones INT/RB0 y RB4:RB7 en el MPLAB IDE 7.30
« Respuesta #4 en: 07 de Mayo de 2006, 18:26:18 »
Gracias a todos por su colaboracion y un placer saludarlos (Maunix, RedPic y Carlos), aqui coloco el ASM para que lo vean y me digan si ven la falla porque yo realmente no la veo.

Código: ASM
  1. #INCLUDE <P16F877.INC>
  2.         ERRORLEVEL      -302
  3.  
  4.  
  5. loops           equ     0x20            ;variables usadas en retardos
  6. loops2          equ     0x21
  7. Dig43           equ     0x22
  8. Dig21           equ     0x23
  9. CONTA           equ     0x24
  10. Tecla           equ     0x25
  11. KEY_1           equ     0x26           
  12. KEY_2           equ     0x27
  13. KEY_DELAY_1     equ     0x28
  14. KEY_DELAY_2     equ     0x29
  15. flag            equ     0x2A
  16. W_TEMP          equ     0x2B
  17. STATUS_TEMP     equ     0x2C
  18. PCLATH_TEMP     equ     0x2D
  19.  
  20.                 org     00h             ;Indica al ensamblador la dirección de memoria de
  21.                                         ;la sig. instrucción
  22.                 goto    inicio
  23.  
  24.                 org     04h            
  25.        
  26.                 MOVWF   W_TEMP          ;guardar copia de los registros claves
  27.                 SWAPF   STATUS,W
  28.                 CLRF    STATUS
  29.                 MOVWF   STATUS_TEMP
  30.                 MOVF    PCLATH, W
  31.                 MOVWF   PCLATH_TEMP
  32.                 CLRF    PCLATH
  33.        
  34.                 btfsc   INTCON,RBIF     ;es interrupción RBIF?
  35.                 call    FOULT
  36.  
  37.                 btfss   INTCON,INTE     ;es interrupción INTE??
  38.                 call    KEYBOARD
  39.  
  40.                                
  41.                 MOVF    PCLATH_TEMP,W   ;restaurar registros claves
  42.                 MOVWF   PCLATH
  43.                 SWAPF   STATUS_TEMP,W
  44.                 MOVWF   STATUS
  45.                 SWAPF   W_TEMP,F
  46.                 SWAPF   W_TEMP,W
  47.                 retfie 
  48.  
  49.  
  50. inicio  
  51.                 bsf     STATUS,RP0      ;selecciona el banco de memoria alto
  52.                 bcf     STATUS,RP1
  53.                 clrf    TRISE           ;configura el puerto E como salida
  54.                 movlw   b'00001111'     ;configura RD7-RD4 como salidas
  55.                 movwf   TRISD           ;y RD3-RD0 como entradas.
  56.                 movlw   b'10000000'     ;configura el puerto C
  57.                 movwf   TRISC           ;como salida excepto RC7.      
  58.                 movlw   0xff            ;configura el puerto B
  59.                 movwf   TRISB           ;como entrada.
  60.                 movlw   0x06            ;se configura el puerto A
  61.                 movwf   ADCON1          ;como salidas digitales.       
  62.                 clrf    TRISA           ;configura el puerto A como salida
  63.                 movwf   OPTION_REG      ;interr en bajo de RB0
  64.                 bcf     STATUS,RP0      ;selecciona el banco de memoria bajo
  65.                 movlw   b'10010001'     ;configura las interrupcion
  66.                 movwf   INTCON          ;RB0/INT y RBIF.
  67.  
  68. test            btfsc   PORTB,2         ;chek la act. del sensor de prestage canal A   
  69.                 call    prestage1
  70.                 btfss   PORTB,3         ;chek la act. del sensor de prestage canal B   
  71.                 goto    test
  72.                 call    prestage2
  73.        
  74. test2           btfsc   PORTC,7         ;chek la act. del sensor de stage canal A      
  75.                 call    stage1
  76.                 btfss   PORTB,1         ;chek la act. del sensor de stage canal B      
  77.                 goto    test2
  78.                 call    stage2
  79.        
  80.                 movlw   d'250'
  81.                 call    retardo
  82.                 bsf     PORTE,0         ;enciende Luz amarilla1 Ch A
  83.                 bsf     PORTE,1         ;enciende Luz amarilla1 Ch B
  84.                 movlw   d'250'         
  85.                 call    retardo
  86.                 bsf     PORTE,2         ;enciende Luz amarilla2 Ch A
  87.                 bsf     PORTC,0         ;enciende Luz amarilla2 Ch B
  88.                 movlw   d'250'
  89.                 call    retardo
  90.                 bsf     PORTC,1         ;enciende Luz amarilla3 Ch A
  91.                 bsf     PORTC,2         ;enciende Luz amarilla3 Ch B
  92.                 movlw   d'250'
  93.                 bsf     PORTC,3         ;enciende Luz verde Ch A
  94.                 bsf     PORTC,4         ;enciende Luz verde Ch B
  95.                 bcf     PORTE,0         ;apaga luz amarilla1 ch A
  96.                 bcf     PORTE,1         ;apaga luz amarilla1 ch B
  97.                 bcf     PORTE,2         ;apaga luz amarilla2 ch A
  98.                 bcf     PORTC,0         ;apaga luz amarilla2 ch B
  99.                 bcf     PORTC,1         ;apaga luz amarilla3 ch A
  100.                 bcf     PORTC,2         ;apaga luz amarilla3 ch B
  101.                 movlw   d'250'
  102.                 call    retardo
  103.                 bcf     PORTC,3         ;apaga luz verde ch A
  104.                 bcf     PORTC,4         ;apaga luz verde ch B
  105.                 goto    ciclo
  106.  
  107. stage1
  108.        
  109.                 bsf     PORTA,4         ;enciende Luz stage canal A
  110.                 btfss   PORTB,1         ;chek la act. del sensor de stage canal B
  111.                 goto    $-1
  112.                 bsf     PORTA,5         ;enciende luz prestage canal B
  113.                 return
  114.  
  115. stage2
  116.        
  117.                 bsf     PORTA,5         ;enciende luz stage canal B
  118.                 btfss   PORTC,7         ;chek la act. del sensor de prestage canal A
  119.                 goto    $-1
  120.                 bsf     PORTA,4         ;enciende luz prestage canal A
  121.                 return         
  122.  
  123. prestage1
  124.        
  125.                 bsf     PORTA,2         ;enciende Luz prestage canal A
  126.                 btfss   PORTB,3         ;chek la act. del sensor de prestage canal B
  127.                 goto    $-1
  128.                 bsf     PORTA,3         ;enciende luz prestage canal B
  129.                 return
  130.  
  131. prestage2
  132.        
  133.                 bsf     PORTA,3
  134.                 btfss   PORTB,2         ;chek la act. del sensor de prestage canal A
  135.                 goto    $-1
  136.                 bsf     PORTA,2         ;enciende luz prestage canal A
  137.                 return 
  138.        
  139. FOULT
  140.                 bcf     INTCON,RBIF     ;subrutina de Foult
  141.                 btfsc   PORTB,4
  142.                 goto    canalA
  143.                 goto    canalB
  144.  
  145. canalA          bsf     PORTA,1         ;enciende y deja fija luz de foult canal B
  146.                 bsf     PORTA,0         ;enciende y parpadea luz de foult canal A
  147.                 movlw   d'100'          ;indicando que es este canal    
  148.                 call    retardo         ;el que falto
  149.                 bcf     PORTA,0
  150.                 movlw   d'100'
  151.                 call    retardo
  152.                 goto    canalA
  153.  
  154. canalB          bsf     PORTA,0         ;enciende y deja fija luz de foult canal A             
  155.                 bsf     PORTA,1         ;enciende y parpadea luz de foult canal B              
  156.                 movlw   d'100'          ;indicando que es este canal
  157.                 call    retardo         ;el que falto
  158.                 bcf     PORTA,1
  159.                 movlw   d'100'
  160.                 call    retardo
  161.                 goto    canalB
  162.        
  163.                 Return
  164.  
  165. KEYBOARD
  166.                 bcf     INTCON,INTE
  167.                 nop                     ;aun Falta terminar esta rutina
  168.                 nop
  169.                 nop
  170.  
  171.                
  172.                 Return
  173.  
  174.  
  175. retardo                                 ;subrutina de retardo
  176.                 movwf   loops           ;la variable de trabajo contiene la cant.
  177. top2            movlw   d'110'          ;de ms a demorar
  178.                 movwf   loops2
  179. top             nop
  180.                 nop
  181.                 nop
  182.                 nop
  183.                 nop
  184.                 nop
  185.                 decfsz  loops2,F        ;controla si termina 1mS
  186.                 goto    top
  187.                 decfsz  loops,F         ;controla si termina el retardo completo
  188.                 goto    top2
  189.                 retlw   0
  190.  
  191. ciclo           nop
  192.                 goto    $-1
  193.        
  194.                 end

Espero me puedan dar una mano con esto, pero desde ya estoy muy agradecido por sus colaboraciones.

Atte. Nelson

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas con las Interrupciones INT/RB0 y RB4:RB7 en el MPLAB IDE 7.30
« Respuesta #5 en: 07 de Mayo de 2006, 20:12:58 »
rnelson pegué tu código en un nuevo proyecto de MPLAB y no tuve inconvenientes.

Eso sí, la interrupción se activa por flanco descendente.

Tal vez no estes activando la opción adecuada.  Para estimulos de pin puedes ir a

1) Stimulus Controller, New Scenario
2) Al abrirse la ventana, fijate abajo y selecciona el RB0 en modo Toggle (que cambia de 0 a 1 con cada click que hagas).
3) El click lo debes hacer sobre el símbolo > ubicado a la izquierda de dicha ventana.

Espero te sirva de utilidad
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)