Programación Específica > Microcontroladores

 Uso De Interrupciones Con Pic 16f877

(1/4) > >>

karen81:
:huh: Hola no se si alguien tiene un problema cualquiera en pic 16f877 que utilice interrupciones aun tengo dudas del esquema a utilizar o si pueden decirme como debe ser la estructura de un programa que utilice interrupciones

Gracias de antemano :hola:

lmarte:
Hola Karen,  no creo que haya un esquema especifico para usar las interrupciones, la función de ellas es la de darle prioridad a un evento, de manera tal que tu no tengas que estar revisando esa condición en todo momento, simplemente se generó la interrupción y el programa se "interrumpe" (suena redundante   :P ) y va a realizarte lo que tu quieres que suceda cuando llegue el evento. Es algo como si estuvieras ordenando toda la casa y el momento q suena el tel (la interrupción), dejas lo que estas haciendo atiendes la llamada, luego cuelgas (se acabo la funcion generada por la interrupcion) y luego sigues donde habias quedado cuando escuchaste el ring, y asi todas las veces q sea necesario.

Espero ser claro.
lmarte

karen81:
Se lo que es una interrupcion, lo que necesito saber es por ejemplo el convertidor analogico digital dispara una interrupcion cuando completa una conversion al hacerlo se debe mandar un una al puerto pero lo que no se es como el programa sabe que tiene que hacer cuando se da la interrupcion por que como tengo entendido cuando se da la interrupcion el cpu va a un vector en la direccion 0004h especificamente.
lo que no se es como decirle por ejemplo que lo que tiene que hacer esta en la direccion xxxxx
¿se debe de guardar en esa direccion (0004h) la direccion xxxx. para que cuando se de la interrupcion se vaya para allá?

 :unsure:
gracias de antemano.

atte Karen Giraldo.

lmarte:
Hola,


--- Citar ---es como el programa sabe que tiene que hacer cuando se da la interrupcion por que como tengo entendido cuando se da la interrupcion el cpu va a un vector en la direccion 0004h especificamente.
--- Fin de la cita ---

mira si entiendo ahora, lo que quieres es saber que sucede cuando ocurre una interrupción. Según lo que he aprendido hay dos tipos de interrupciones, las primeras las voy a llamar sencillas, como por ejemplo la de los timer, la del ADC, etc. estas lo que te hacen es activarte una bandera cuando ocurre una situación en especial, me explico, se lleno el timer en el momento de pasar de ff a 00 te coloca la respectiva bandera en uno. Igual el ADC, termino la conversión, entonces activa bandera.

El segundo tipo, las generales, que son las que tienen que ver con el puerto B, RB0 (recibe un flanco), RB7 a RB4 cambian de estado, no se si se me pasa alguna  :P
Estas al suceder se van al vector interrupción


--- Código: Text ---                    ORG 00          goto INICIO           ORG 04          goto interrupcion                                             ORG 05               INICIO        NOP      &#59;aqui va el prog                                 NOP        ;principal                                GOTO INICIO              interrupcion  NOP      &#59;aqui lo que debe hacer si                                   NOP      &#59;ocurre interrupción                                retfie                                    end  
Si utilizas una de las primeras, lo que tienes que hacer es cada tanto estar revisando la bandera que te interesa...pq son interrupciones <_< , digamos que te dan la ventaja de seguir realizando otras operaciones mientras la función está corriendo y te avisan que sucedió (pero no te interrumpen el ciclo normal, eso lo haces tu).

Ahhh... se me olvidaba, OJO con INTCON.

Espero esta vez si haber sido de ayuda, me cuentas
lmarte

javierv:
Tambien las interrupciones de timers envia al vector de interrupcion.

[CODE]
;***************************************************************
   org     0x00
   goto   inicio
;***************************************************************
; programacion de interrupcion
   org   0x04                  ; vector de interrupcion
   btfss   INTCON, T0IF     ;checar si es interrupcion de timer0
   retfie                                 ; si no lo es regresar
; aqui va el codigo de la interrupcion
;...
;...
   retfie                                  ; fin de la interrupcion

inicio
; ACTIVACION DEL TIMER0 COMO INTERRUPCION
   bsf            STATUS, RP0
   movlw   0xD6
   movwf   OPTION_REG
   bcf   STATUS, RP0
   bsf   INTCON, T0IE
   bsf   INTCON,GIE
; aqui va el codigo del programa
;...
;...
                end

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa