Autor Tema: proton interrupciones  (Leído 3436 veces)

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

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
proton interrupciones
« en: 20 de Septiembre de 2008, 08:33:41 »
Buenas

Nose si alguien lo sabra pero bueno, lo que me gustaria saber es cuando ocurre una interrupcion y el programa esta en medio de un while, que hace el pic? es decir

Hace la interrupcion y vuelve al while donde estava? o vuelve a comenzar el programa desde 0¿?
Lo digo porque simulando me da a entender que vuelve a empezar el programa desde 0 sin alterar los valores de las variables, casi todos los ejemplos que hay por la red despues de el context restore ponen un goto main lo que tambien me lleva a pensar que empieza desde ai despues de la interrupcion. Nose si alguien me lo puede aclarar?

Saludos

Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: proton interrupciones
« Respuesta #1 en: 20 de Septiembre de 2008, 15:30:43 »
Pues muy probablemente estas cometiendo un error ya sea en tu rutina de interrupción o en la forma   en que tratas a la misma  (como entras y sales de la misma, como salvas el contexto)
La razón de ser de una interrupción es que deje  lo que esta asiendo para atender  la misma y volver a donde se quedo y continuar el programa.
o bien   te refieres a un bucle infinito main: goto main  que nada tiene que ver con que la interrupción no funcione

« Última modificación: 20 de Septiembre de 2008, 15:36:26 por sandra »
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: proton interrupciones
« Respuesta #2 en: 20 de Septiembre de 2008, 16:19:57 »
Hola para ya confirmar lo que comento el colegas anterior la interrupcion solo se aplica cunado se comete dicha interrucion y luego que termina esa rutina de interrupcion se regresa exactamente donde fue provocada en el proceso del codigo y toma su ritmo normal hasta que vuelva a ocurrir nuevamente una interrupcion.

Saludos y ojo tienes que ver que tipo de interrupcion estas aplicando.
Atten.
Alexader Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Re: proton interrupciones
« Respuesta #3 en: 21 de Septiembre de 2008, 04:38:00 »
Voy a poner el codigo haver si podeis ver el defecto

Código: Text
  1. Device = 18F4550
  2. XTAL = 48      
  3.    ALL_DIGITAL=true
  4.  
  5.  
  6.  
  7. Symbol T0PS0 = T0CON.0  ' Timer0 Prescaler Select bit
  8. Symbol T0PS1 = T0CON.1  ' Timer0 Prescaler Select bit
  9. Symbol T0PS2 = T0CON.2  ' Timer0 Prescaler Select bit
  10. Symbol PSA = T0CON.3    ' Timer0 Prescaler Assignment bit
  11. Symbol T0SE = T0CON.4   ' Timer0 Source Edge Select bit
  12. Symbol T0CS = T0CON.5   ' Timer0 Clock Source Select bit
  13. Symbol T08BIT = T0CON.6 ' Timer0 8-bit/16-bit Control bit
  14. Symbol TMR0ON = T0CON.7 ' Timer0 On/Off Control bit
  15. Symbol TMR0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
  16. Symbol TMR0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
  17. Symbol GIE = INTCON.7 ' Global Interrupt Enable
  18. Symbol GIEL = INTCON.6
  19. Symbol INTEDG = INTCON2.6  ' External Interrupt0 Edge Select bit
  20. Symbol INTE = INTCON.4 ' External RB0 Interrupt Enable
  21. Symbol INTF = INTCON.1 ' External Interrupt Flage
  22. Dim i As Byte
  23. Dim f As Word
  24. Dim serv1 As Word
  25. Dim serv2 As Word
  26.     serv1=1434
  27.     serv2=1443
  28.    TRISB=$ff
  29.     f=0
  30.  
  31.  
  32.  GoTo over_subs    
  33. ON_INTERRUPT GoTo INPUT_INTERRUP ' Point to the interrupt handler and ENABLE global interrupts
  34.  
  35.  
  36. '-----------------------------------------------------------------------------------------
  37.  
  38. INPUT_INTERRUP:
  39.   If INTF = 1 Then ' Check if external interrupt
  40.  Inc f
  41. INTF=0
  42. If INTEDG = 0 Then
  43. INTEDG = 1
  44. Else
  45. INTEDG = 0
  46. End If
  47. Context Restore
  48. EndIf
  49. If TMR0IF=1 Then
  50. TMR0IF=0
  51. Inc i
  52. If i>2 Then
  53. TMR0LH=250
  54. If i>3 Then
  55. i=0
  56. Servo PORTD.2,serv1
  57. Servo PORTD.1,serv2
  58. End If
  59. End If
  60. TMR0LH=0
  61. Context Restore
  62. End If
  63.  
  64.  
  65. '------------------------------------------------------------------------------------------
  66.  
  67. '-----------------------------------------------------------------------------------------
  68. over_subs:
  69. GIE = 0 ' disable interrupts
  70. T0PS0=1
  71. T0PS1=1
  72. T0PS2=1
  73. PSA=0
  74. T0SE=0
  75. T0CS=0
  76. T08BIT=1
  77. TMR0ON=1
  78. TMR0IE=1
  79. INTE = 1 'enable RB0 interrupt
  80. GIE = 1 'enable interrupts
  81.  
  82.  
  83. '-----------------------------------------------------------------------------------------
  84.  
  85.  
  86. main:
  87. If f<4 Then 'si no pongo este if no tiene en cuenta al while
  88.   While f<4
  89.   serv1=1600
  90.   Wend
  91.   Else
  92.   serv1=3000
  93.   DelayMS 1000
  94.   f=0
  95.   EndIf
  96. GoTo main

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
Re: proton interrupciones
« Respuesta #4 en: 21 de Septiembre de 2008, 16:22:02 »
Hola skualo!
debes colocar el  GoTo over_subs debajo del  ON_INTERRUPT GoTo INPUT_INTERRUP.

Luego debes definir los fuses del micro bien porque sino tambien puedes tener problemas  :shock:

En la rutina utilizas un delayms de 1000, si llegas a entrar en una interrupcion mientras se esta ejecutando el delayms 1000 la interrupcion no sera atendida hasta que no halla terminado el retardo  :shock:

Lee bien el manual de proton sobre las interrupciones por software alli esta explicado eso  :mrgreen:

Saludos

 



   


 

anything