Programación Específica > Microcontroladores
Uso De Interrupciones Con Pic 16f877
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 ;aqui va el prog NOP ;principal GOTO INICIO interrupcion NOP ;aqui lo que debe hacer si NOP ;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
[#] Página Siguiente
Ir a la versión completa