Autor Tema: Manejo de interrupciones  (Leído 14493 veces)

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

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #15 en: 06 de Febrero de 2010, 12:54:31 »

Saludos

Acá la simulación en proteus 7.2 espero que le guste.

Nota si alguién sabe cual es el código en html ([xxx] Texto [/xxxx]) para poner el código más organizado ya que mi computador está algo loco por estos días.
Un saludo desde Pereira - Colombia

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Manejo de interrupciones
« Respuesta #16 en: 06 de Febrero de 2010, 13:26:58 »

Nota si alguién sabe cual es el código en html ([xxx] Texto [/xxxx]) para poner el código más organizado ya que mi computador está algo loco por estos días.

Hola, no es código HTML es BBC. Puedes usar este iconito en el editor del mensaje para encerrar el código fuente:

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #17 en: 06 de Febrero de 2010, 14:26:54 »
Hola Santiago

El problema es que el navegador no me deja utilizar los iconos del foro y no tengo ni idea porqué, haber si alguién sabe cual es el código en BBC para poner el código más organizado ya que no me acuerdo cual es.

Saludos.
Un saludo desde Pereira - Colombia

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Manejo de interrupciones
« Respuesta #18 en: 06 de Febrero de 2010, 14:30:06 »

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #19 en: 06 de Febrero de 2010, 14:44:09 »

Gracias Santiago, pero ya no me deja modificar el hilo no se porqué.
Un saludo desde Pereira - Colombia

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Manejo de interrupciones
« Respuesta #20 en: 06 de Febrero de 2010, 16:23:12 »
Si no es una cosa es otra  :mrgreen:

No te preocupes que ya lo arreglé. Después de una hora ya no es posible modificar los temas.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #21 en: 06 de Febrero de 2010, 16:30:51 »

Gracias Santiago, ahora el hilo quedo un poco más organizado y más agradable para leer. Para la próxima hay que ser cuidadoso para no pasarce de la hora jeje. Saludos
Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Manejo de interrupciones
« Respuesta #22 en: 06 de Febrero de 2010, 19:53:40 »
Felicitaciones Carlos por el aporte! Es complicado hacer tutoriales con la restricción de modificación, pero hay que protejer la información compartida, porque algunos despues de un tiempo la borran  :? Cualquier inconveniente notificalo al moderador.  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #23 en: 06 de Febrero de 2010, 21:55:07 »

Hola Suky gracias por las felecitaciones, y voy a seguir trabajando para que el hilo quede lo mejor que pueda.

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #24 en: 13 de Febrero de 2010, 13:22:19 »
Saludos.

Bueno el ejemplo de hoy es el manejo de la interrupciòn por escritura de la EEPROM del PIC16F877, vamos a indicar cuales son los pasos para realizar nuestro programa pero primero una pequeña introducciòn de la memoria EEPROM del pic.

El PIC16F84 tiene solamente 64 posiciones de memoria EEPROM que se puede direcionar solamente con un registro que indica la posiciòn a guardar que va desde la 0 hasta la 63 en décimal con este micro teniamos dos registros el EEDATA y EEADR el primero registro es con el direcionamos el bloque donde queremos guardar el dato de 8 bits y el segundo se carga el valor que queremos guardar en memoria. Por otro lado, el PIC16F877 tiene un direcionamiento de 13 bits y se pueden guardar datos de 14 bits debido a que tiene 8 K de memoria, para poder lograr esto el micro contiene 2 registros màs que el pic16f84 para direcionar el lugar donde se desea guardar como el tamaño del dato a guardar en la EEPROM. Los registros son EEADRH, EEADR, EEDATAH, EEDATA.

Con los dos primero se seleciona el lugar donde se desea escribir pero a que tener en cuenta que el registro EEADRH contiene los 5 bits de mayor peso y el registro EEADR contiene lo 8 bits de menor peso. Para los demás registro pasa lo mismo sólo que en EEDATAH iran los 6 màs significativos y en EEDATA los menos significativos.

Para configurar la interrupción por fin de escritura hay que habilitar la interrupción global, la de perifericos y en el registro PIE2 habilitar el bit EEIF para habilitar la interrupciòn por fin de escritura de la EEPROM. los pasos para iniciar poder escribir son los siguientes.

1. Especificar la direción donde se desea guardar (EEADRH,EEADR)
2. Carga el registro que se desea guardar en el buffer (EEDATAH,EEDATA)
3. Habilitar el bit WREN del registro EECON1 en 1
4. Mandar la secuencia de escritura al registro EENCON2 (0x55 , 0xAA)
5. Inicio de escritura bir WR del registro EECON1
6. Esperar interrupción.

Hay que tener en cuenta que los registro antes mencionados se encuentran en el banco 2 y en el banco 3 de la memoria RAM asì que hay que tener cuidado con el direcionamiento de las páginas.

Como la escritura de la EEPROM dura unos cuantos ms que es una valor muy grande comparado con el ciclo de instrucción por eso es imporatante utilizar la interrupción por fin de escritura en la EEPROM para indicar si todo estuvo bieny cuando termino la escritura el señalizador de interrupciòn se encuentra en el registro PIR2.

Bueno el ejemplo de hoy consiste de programita sencillo tenemos dos pulsadores conectados al puerto B (b1,b2) un pulsador me incrmenta una variable y cuando presionamos el otro pulsador activamos el seceso para guardar en la EEPROM de nuestro pic.

Aca el esquemático



En el simulador de proteus hay una ayuda para mirar como esta la EEPROM y que tiene guardada para utilizarla (al menos en mi simulador funciona así) tiene que esta corriendo el programa, además, hay que seleccionala por la ventana del simulador una vez activada hay que undir pause en el simulador y aparece el mapa de la memoria EEPROM del microcontrolador.

acá una imagén de la ayuda.



Bueno por último el código en el esamblador obviamente.

Código: [Seleccionar]
;**************************************************************
;* Carlos Alberto Henao                                       *
;* Foro de microcontroladores TODOPIC                         *
;* Manejo de interupción por fin de escritura de la EEPROM    *
;* Febrero 13 del 2010                                        *
;* Pereira - Colombia                                         *
;**************************************************************

;************************** Registro especiales *******************************************

status equ 03h
porta equ 05h
portb equ 06h
portc equ 07h
portd equ 08h
porte equ 09h
intcon equ 0bh
pir2 equ 0dh

trisa equ 85h
trisb equ 86h
trisc equ 87h
trisd equ 88h
trise equ 89h
pie2 equ 8dh

eedata equ 10ch
eeadr equ 10dh

eecon1 equ 18ch
eecon2 equ 18dh

;************************ Registros de usuario ********************************************

conta equ 20h
loop equ 21h
loop1 equ 22h
respuesta equ 23h

;*********************** Va a empezar el programa *****************************************

list p = 16f877

org 00
goto inicio

org 04
goto inter

;************************* Rutina de atención de interrupciones **************************

inter bcf status,6
bcf status,5 ; banco 0
btfsc pir2,4 ; pregunto si ya hubo interrupción por finalización
; de escritura en la EEPROM
goto guarda_s
bcf status,6
bcf status,5 ; me paso al banco 0
retfie ; de lo contrario retorno al programa

guarda_s
bcf pir2,4 ; limpio la bandera de intterupción
movlw b'1'
movwf respuesta ; cargo
retfie

;************************* Rutina de tiempo antirebote **************************

retar movlw d'180'
movwf loop
movlw d'200'
movwf loop1
decfsz loop1,1
goto $-1
decfsz loop,1
goto $-5
return

;*********************** Rurina de configuración para la escritura en la EEMPROM ***********

guardar bsf status,6 ; me paso al banco de memoria 2
bcf status,5
movlw d'0'
movwf eeadr ; especifico en parte de la memoria voy a guardar
; en este caso en posición 0x00H
bcf status,6
bcf status,5 ; banco 0
movf conta,0 ; paso conta a w ya que conta es el valor a guardar
bsf status,6 ; me paso al banco de memoria 2
bcf status,5
movwf eedata ; paso el dato a eedata
bsf status,5 ; me paso al banco 3
  bsf eecon1,2 ; permito la escritura en la eemprom

movlw 55h
movwf eecon2
movlw 0xAA
movwf eecon2 ; mando el comando de escritura

bsf eecon1,1 ; empieza la escritura
bcf status,6
bcf status,5
movf respuesta,1 ; paso el valor de escritura a w
xorlw d'1' ; lo comparo con 1
btfss status,2 ; pregunto por el resultado lógico de la operación
goto $-3 ; vuelvo y repito esperando interrupción
clrf respuesta ; limpio la bandera
return


;********************** Empieza el programa ************************************************

inicio bcf status,6
bsf status,5 ; banco 1
movlw b'11111111'
movwf trisa
movwf trisb
movwf trisd
movwf trise ; puertos A,B,D,E como entradas digitales
movlw b'11110000'
movwf trisc ; configuro el puerto C
movlw b'00010000'
movwf pie2
bcf status,5 ; banco 0
movlw b'11000000'
movwf intcon ; activo la interrupción por escritura de la EEPROM
clrf portb
clrf conta
clrf portc
clrf respuesta

vuelve btfss portb,1
goto pulsa_2
call retar
btfsc portb,1
goto pulsa_2
call retar
btfss portb,1 ; rutina que pregunta por los dos pulsadores
goto $-1
incf conta,1
goto vuelve

pulsa_2
btfss portb,2
goto vuelve
call retar
btfsc portb,2
goto vuelve
call retar
call guardar
goto vuelve
end


Bueno esto fue todo por hoy saludos y no vemos.

 
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #25 en: 13 de Febrero de 2010, 13:28:23 »

Acá la simulación en el proteus 7.2 espero le guste saludos ;-).
Un saludo desde Pereira - Colombia

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Manejo de interrupciones
« Respuesta #26 en: 13 de Febrero de 2010, 14:01:33 »
excelente Chenao, un buen trabajo te has hecho con este hilo, animo :-/
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Manejo de interrupciones
« Respuesta #27 en: 20 de Febrero de 2010, 12:48:01 »

Saludos

Antes de  entrar a manejar las interrupciones por perifèricos del PIC16F877 vamos a hablar de los registros que gobiernan la configuración de dichas interrupciones entonces empecemos por el registro más general el registro PIE1

Registro de interrupción PIE1

Este registro contiene los bits que activan o prohibe las interrupción provocadas por los periféricos internos del microcontrolador PIC16F87 y que no estaban en el registro INTCON, es importante aclarar que para que estas interrupciones puedan activarse, primero se debe poner en “1” lógico el bit GIE y segundo se debe poner en “1” lógico bit PEIE que están contenidos en el registro INTCON. Este registro se encuentra en el página o banco 1 de la memoria RAM y ocupa la dirección 0x8C. En la siguiente figura se muestra el registro PIE1 con todos sus bits y una descripción de cada bit.


PSPIEF : Permiso de interrupción por la puerta paralela esclava al realizar una operación de escritura/ lectura.

ADIE: Permiso de interrupción al finalizar la conversión A/D

RCIE: Permiso de interrupción para receptor cuando el buffer del USART se llena.

TXIE:    Permiso de interrupción para el transmisor cuando el buffer del USART se llena

SSPIE: Permiso de interrupción para la módulo serie síncrono

CCP1IE: Permiso de interrupción para el módulo CCP1

TMR2IE: Permiso de interrupción por desborde del TMR2

TMR1IE: Permiso de interrupción por desborde del TMR1


Registro de interrupción PIE2

Este registro posee las demás causa que no están en el registro INTCON y en el registro PIE1, cabe señalar que si se quiere utilizar las interrupciones por periféricos contenidas en el registro PIE2 se debe activar la interrupción global (GIE) y la interrupción por periféricos PEIE que se encuentra en el registro INTCON. Esta ubicado en la página 1 de la memoria RAM y se ubica en la dirección 0x8D. A continuación se muestra el registro PIE2 con cada uno de sus bits y sus respectivos significados.



EEIE: Permiso de interrupción por fin de escritura de la EEPROM

BCLIE: Permiso de interrupción cuando se produce una colisión o error en el módulo SSP entre el maestro y el esclavo.

CCP2IE: Permiso de interrupción de módulo CCP2

Registro señalizadores de interrupción de periféricos (PIR1 y PIR2)

Estos registro contienen los bits señalizadores de interrupción por periféricos, indican cuando ha ocurrido una interrupción por periféricos independientemente si la interrupción ocurrida este habilitada o deshabilitada. Dichos registro se encuentran en la página 0 y sus direcciones son 0x0C y 0x0D respectivamente. En la siguiente figura se muestran cada uno de los de los registro con sus respectivos bits, se puede observar como los nombre de los bits de los registro PIR1 y PIR2 son similares a los de los registros PIE1 y PIE2 respectivamente, lo cual concluye que el bit TMR1F indica desborde del TMR1, que el bit ADIF indica fin de conversión A/D y así sucesivamente.



Bueno esto es todo por hoy ya para la próxima entrega vamos a programar una interrupción por periféricos espero haber sido claro con la teoria de la interrupciones por periféricos. Saludos ;-).
Un saludo desde Pereira - Colombia


 

anything