Interrupciones múltiples en un PIC

Hola. No entiendo cuál es el problema con utilizar dos interrupciones.
Sólo debes habilitarlas y crear las subrutinas correspondientes, así son atendidas cuándo sean llamadas.
Hace tiempo que no utilizo PIC Basic, para recomendar que al activarse una interrupción deshabilites la posibilidad de que se active otra, hasta que termines de ejecutar la que fué atendida.

Hola, amigo Gudino. El problema es que no me salen. jajaja.
No logro hacer esas subrutinas, es decir, cómo hacer que el programa diferencia entre una interrupción por RB0 y entre por cambio de estado RB4-RB7. Saludos.

Saludos amigos. Después de tanto batallar, creo que he logrado hacer un programa donde se utilizan las interrupciones por RB0 y por cambio de estado RB4-RB7 juntas.
Lo he probado en Proteus Isis, ahora lo voy a implementar en mi protoboard y ojalá funcione.
Lo que no logro entender hasta ahora es por qué no funcionan las instrucciones luego de la etiqueta "accion:" ( las que las tengo desactivas) a pesar de que hacen lo mismo.

Gracias por alguna ayuda más o corregir este programa.

Código:
cmcon=7         ; todo el puerto A como digital

Trisa=%00000000 ; toto el puerto A como salida

Trisb=%11110001 ; Pines RB4 al RB7 y RB0 como entradas

porta=0

portb=0

;**************



;**************



on interrupt goto accion

intcon=%10011000     ; habilita la interrupcion por RB0

option_reg.6=1      ; para activarla por el flanco de subida (para RB0)



'main:

' VACIO. Para tener la certeza de detectar el impacto del balín sin

' que ninguna rutina demore esto.

'goto main



;***************

main:

porta=0

portb=0

goto main

;***************



disable             ; deshabilita las interrupciones en el handler

accion:

if portb.0=1 then porta.0=1

; high porta.0=1

;pause 100

;low porta.0=0



INTCON.7=0       ; Todas las interrupciones desactivadas momentáneamente.

; para que se diferencie del puerto RB



if portb.4=1 then porta.1=1



if portb.5=1 then porta.2=1



if portb.6=1 then porta.3=1



if portb.7=1 then portb.2=1



pause 100   ' tiempo necesario para que el HT12E detecte el pulso del PIC.

intcon=%10011000

resume

enable

end
 
Gracias a todos por su invalorable ayuda. Pero ya no voy a ahondar más en el tema de las interrupciones múltiples. He leído por ahí, que en pic basic pro son muy difíciles de hacer, Ahora me voy a avocar a (ya teniendo mínimo 4 interrupciones) hacer lo siguiente. Suponiendo que cada interrupción tenga un valor, por ejemplo del 1 al 4; entonces, lo que quiero hacer, mediante un programa en pic basic pro que después de varias detecciones por parte de estas interrupciones, ME DE LA SUMATORIA TOTAL. Espero algun tip para realizar este proyecto. Gracias.
 
¿Cual es la duda? No entiendo.

sumatoria = sumatoria+1

Ese es el código de todas las rutinas de atención a interrupción

la variable ha de ser accesible por todas; lo mas lógico es que sea global
Luego mira si hay que hacer algo mas, en Arduino hay que declararla como volatile, aunque yo casi nunca lo hago y siempre me ha ido bien.
 
¿Cual es la duda? No entiendo.

sumatoria = sumatoria+1

Ese es el código de todas las rutinas de atención a interrupción

la variable ha de ser accesible por todas; lo mas lógico es que sea global
Luego mira si hay que hacer algo mas, en Arduino hay que declararla como volatile, aunque yo casi nunca lo hago y siempre me ha ido bien.

Gracias por la respuesta amigo Scooter, tal vez tu lo veas sencillo, pero yo tengo problemas,jajaja. La ideas es, por ejemplo, tengo cuatro pulsadores, a los cuales les puse un valor de 1 al 4; entonces se activa DOS veces el pulsador 1 (1+1) y luego TRES veces el pulsador 4 (4+4+4) y yo quisiera representar esta suma total; o sea, (1+1+4+4+4=14) el valor 14 en dos display de 7 segmentos. Esa es la idea. Gracias.
 
¿En serio?

Rutina del pulsador 1
suma = suma +1

Rutina del pulsador 2
suma = suma+2

Rutina del pulsador 3
suma = suma +3

Rutina del pulsador 4
suma = suma +4

Rutina del pulsador 5
suma = suma+5

Rutina del pulsador 6
suma = suma +6

etc
 
Hola, añadiendo a Scooter.
Y vuelvo a repetir, NO hace falta usar interrupciones para detectar pulsadores!
Y no sé cuántas veces más deberé repetirla.
El secreto está en cómo dinamizas el programa para que sea ágil. Y el problema se resume en usar delays por todos lados.
Coincido con scooter son un mal, que sólo son aplicables en dónde el programa corre sin condiciones.
 
Hola, añadiendo a Scooter.
Y vuelvo a repetir, NO hace falta usar interrupciones para detectar pulsadores!
Y no sé cuántas veces más deberé repetirla.
El secreto está en cómo dinamizas el programa para que sea ágil. Y el problema se resume en usar delays por todos lados.
Coincido con scooter son un mal, que sólo son aplicables en dónde el programa corre sin condiciones.
Muchas gracias por tu respuesta amigo Gudino. Lo tomaré en cuenta.
¿En serio?

Rutina del pulsador 1
suma = suma +1

Rutina del pulsador 2
suma = suma+2

Rutina del pulsador 3
suma = suma +3

Rutina del pulsador 4
suma = suma +4

Rutina del pulsador 5
suma = suma+5

Rutina del pulsador 6
suma = suma +6

etc

Gracias amigo Scooter, voy a intentar hacer. Saludos.
 
Atrás
Arriba