Links

Tips

Programadores

Códigos

Herramientas

FAQ

Página principal

Proyecto







































































TIPS

P: Como funcionan las interrupciones?

R: En los microcontroladores PIC16F8X hay cuatro posibles fuentes de interrupciones:

  • la pata RBO/INT
  • el PORTB (RB7 a RB4)
  • por overflow(desbordamiento) del TMR0 (timer cero)
  • por "Data EEPROM write complete interrupt"

Normalmente el flanco ascendente produce la interrupcion, esto puede ser cambiado a flanco descendente en el bit 6 del registro OPTION_REG (0=descendente;1=ascendente).
Lo primero que debemos hacer es habilitar las interrupciones. El registro que maneja las interrupciones es el INTCON. Esta es una descripcion de los bit:

bit 7: GIE. Habilitacion general de interrupciones(0=desabilitado;1=habilitado)
bit 6: EEIE. Habilitacion de "Data EEPROM write complete interrupt"(0=desabilitado;1=habilitado)
bit 5: T0IE. Habilitacion de interrupcion por desbordamiento de TMR0 (0=desabilitado;1=habilitado)
bit 4: INTE. Habilitacion de interrupcion RB0/INT (0=desabilitado;1=habilitado)
bit 3: RBIE. Habilitacion de interrupcion por PORTB (0=desabilitado;1=habilitado)
bit 2: T0IF. TMR0 flag bit(0=no hay inerrupcion;1=hay interrupcion)
bit 1: INTF. RB0/INT flag bit(0=no hay inerrupcion;1=hay interrupcion)
bit 0: RBIF. PORTB flag bit(0=no hay inerrupcion;1=hay interrupcion)

Para habilitar las interrupciones ponemos en 1 el bit 7. Luego tenemos que habilitar la fuente de nuestra interrupcion, por ejemplo para la pata RB0/INT ponemos en 1 el bit 4. Por supuesto tenemos que setear el PORTB, tal que RB0/INT sea input, mediante un TRISB. El codigo de la interrupcion se coloca en la direccion 0004h. Cuando esta ocurre el bit correspondiente, segun quien interrumpe, se setea en el registro INTCON y pasa a ejecutarse la direccion 0004h. El bit 7 se pone en cero desabilitando asi las interrupciones. Para retornar se utiliza la instrucion RETIF. Antes de terminar debemos poner en cero el bit de flag del registro INTCON correspondiente a la interrupcion que se ejecuto evitando asi que entre en loop infinito. El bit 7 se pone en 1 automaticamente despues del RETIF. En la pagina de codigos hay un ejemplo de uso de interrupciones.
Hay que destacar que le ejecucion de la interrupcion no es inmediata, ocurre unas instrucciones despues.

P: Como simulo un HI o un LOW digitales en los pines del PIC en el MPLAB?

R: Ir al menu "Debug" submenu "Simulator Stimulus" elegir "Asynchronous Stimulus". Aqui aparece una ventana con 12 botones. A cada uno de estos le podemos asignar un pin del micro. Para esto ponemos el puntero del mouse sobre el boton y hacemos click con el derecho. Se despliega un menu.Elegimos la primera opcion "Assign Pin". Se despliega una lista con los nombres de los pines. Para selecionar uno hacemos doble click. Para indicar que cada vez que apretemos este boton el estado logico de ese pin debe cambiar de LOW a HI o de HI a LOW hacemos click con el derecho sabre el boton y seleccionamos "Toggle".

P: Porque cuando compilo el codigo me dice:

"Message[302] C:\PROGRA~1\MPLAB\PROYECTS\CASI.ASM 33 : Register in operand not in bank 0. Ensure that bank bits are correct.?"

R:Bueno este mensaje es solo recordatorio y aparece cada vez que modificamos los registros que "setean" los puertos(TRISA, TRISB, etc.). Estos registros se encuentran en el "Bank 1" y a menos que lo indiquemos el micro trabaja con el "Bank 0". Para pasar al "Bank 1" ponemos en 1 al bit RP0 del STATUS. A continuacion un ejemplo de como setear el PORTB para que funcione como 4 entradas y 4 salidas.

bsf STATUS,RP0 ;seteo el bit para ir a "BANK 1"
movlw 0x0F ; cargo en el registro w los bit 00001111. Un 1 es entrada y un 0 es salida
movwf TRISB ; modifico el registro que setea el puerto
bcf STATUS,RP0 ; pongo en 0 el bit y vuelvo al "BANK 0"


P: Como es el formato hex?

R: Si miramos en el ejemplo de abajo

  • los : marcan el inicio de un bloque
  • los dos primeros digitos(10h) son el tamaño del "record".
  • los cuatro siguientes son el load address(0000,0010, 0020).
  • los dos siguientes son el tipo de "record". Estos pueden ser:
    • 00 - Data record
    • 01 - End of file record
    • 02 - Extended segment address record
    • 03 - Start segment address record
    • 04 - Extended linear address record
    • 05 - Start linear address record
  • despues vienen los datos.
  • los ultimos dos son el "checksum". El checksum mas la suma de todos los bytes debe ser cero.
  • las dos ultimas lineas son siempre igual.

:100000008601850183167E308600003085008312CC
:100010001F100000861C0F28013090001928061DB3
:100020001428023090001928861D0A2803309000F9
:080390001F10000000009E2870
:00000001FF

[Links] [Tips] [Programadores] [Códigos] [Herramientas] [Página principal] [FAQ] [Proyecto]

 

Mi e-mail es acdc@pinos.com cualquier duda o aporte será atendido.

Volver a la página principal.


[Skip Prev][Prev][Next][Skip Next]
[
Random][Next 5][List Sites][Join Ring]

 

Click Here!Build Your Free Home PageVisit other great pages on:TravelTravel