registros de pics (option, i-o, timer, itcon)

9
DE PROYECTOS BASICOS CON PIC’S TREINTA PROYECTOS CON PIC BASIC Y PIC BASIC PRO (SOBRE LOS REGISTROS DE LOS PIC’S) TRADUCIDO POR: JÉSUS M. B. G. 2.4.3 Registrar mapa de archivos y registros de funciones especiales Registrar Archivo Mapa (RFM) es una disposición de todos los registros disponibles en un microcontrolador y esto es extremadamente útil al programar el dispositivo, especialmente cuando se utiliza un lenguaje ensamblador. El RFM se divide en dos partes: los Registros de funciones especiales (SFR), y el general Registros de Propósito (GPR). Por ejemplo, en un microcontrolador PIC16F84 hay 68 registros GPR y éstos se utilizan para almacenar datos temporales. Veremos más adelante, cuando se programa en PicBasic o PBP que estos registros se utilizan para almacenar las variables declaradas en un programa. SFR es una colección de registros utilizados por el microcontrolador para controlar las operaciones internas de el dispositivo. Dependiendo de la complejidad de los dispositivos el número de registros en el SFR varía. Es importante que el programador entienda las funciones del registro SFR totalmente ya que se utilizan tanto en lenguaje ensamblador y en lenguajes de alto nivel. Dependiendo del modelo de microcontrolador PIC utilizado podría haber otros registros. Usted no necesita conocer el funcionamiento de algunos de los registros desde PicBasic y PBP compilador carga éstos registros automáticamente. Por ejemplo, la escritura y la lectura de la EEPROM son controlados por el registro SFR EECON1, EECON2, EEADR y EEDATA. Pero, afortunadamente, PicBasic y PicBasicPro compiladores proporcionan sencillas instrucciones de alto nivel para la escritura y lectura de la EEPROM y por lo tanto usted no necesita saber cómo cargar estos registros. Algunos de los registros SFR importante que puede que tenga que configurar durante la programación utilizando un lenguaje de alto nivel son: OPTION register I/O registers Timer registers INTCON register Las funciones y las definiciones de los bits de estos registros se describen en detalle en la siguiente secciones.

Upload: injesbg

Post on 19-Nov-2015

10 views

Category:

Documents


0 download

DESCRIPTION

TRADUCIDO DE 30 PROYECTOS CON PIC

TRANSCRIPT

  • DE PROYECTOS BASICOS CON PICS TREINTA PROYECTOS CON

    PIC BASIC Y PIC BASIC PRO

    (SOBRE LOS REGISTROS DE LOS PICS)

    TRADUCIDO POR:

    JSUS M. B. G.

    2.4.3 Registrar mapa de archivos y registros de funciones especiales

    Registrar Archivo Mapa (RFM) es una disposicin de todos los registros disponibles en un microcontrolador y esto es extremadamente til al programar el dispositivo, especialmente cuando se utiliza un lenguaje ensamblador. El RFM se divide en dos partes: los Registros de funciones especiales (SFR), y el general Registros de Propsito (GPR). Por ejemplo, en un microcontrolador PIC16F84 hay 68 registros GPR y stos se utilizan para almacenar datos temporales. Veremos ms adelante, cuando se programa en PicBasic o PBP que estos registros se utilizan para almacenar las variables declaradas en un programa. SFR es una coleccin de registros utilizados por el microcontrolador para controlar las operaciones internas de el dispositivo. Dependiendo de la complejidad de los dispositivos el nmero de registros en el SFR vara. Es importante que el programador entienda las funciones del registro SFR totalmente ya que se utilizan tanto en lenguaje ensamblador y en lenguajes de alto nivel. Dependiendo del modelo de microcontrolador PIC utilizado podra haber otros registros. Usted no necesita conocer el funcionamiento de algunos de los registros desde PicBasic y PBP compilador carga stos registros automticamente. Por ejemplo, la escritura y la lectura de la EEPROM son controlados por el registro SFR EECON1, EECON2, EEADR y EEDATA. Pero, afortunadamente, PicBasic y PicBasicPro compiladores proporcionan sencillas instrucciones de alto nivel para la escritura y lectura de la EEPROM y por lo tanto usted no necesita saber cmo cargar estos registros. Algunos de los registros SFR importante que puede que tenga que configurar durante la programacin utilizando un lenguaje de alto nivel son:

    OPTION register I/O registers Timer registers INTCON register Las funciones y las definiciones de los bits de estos registros se describen en detalle en la siguiente secciones.

  • OPTION register Este registro se utiliza para configurar varias caractersticas internas del microcontrolador y se nombra como OPTION_REG. Este es un registro de lectura y escritura que contiene varios bits de control a configurar el temporizador en el chip y el temporizador de vigilancia (Watchdog). Este registro est en la direccin 81 (hexadecimal) del microcontrolador y sus definiciones de los bits se dan en la Figura 2.8. El registro OPCION_ REG tambin se utiliza para controlar el pin RB0 interrupcin externa. Este pin puede ser configurado para generar una interrupcin, por ejemplo, cuando se cambia de la lgica 0 a lgica 1 y viceversa. El microcontrolador entonces suspende la ejecucin principal del programa y salta a la rutina de servicio de interrupcin (ISR) para dar servicio a la interrupcin. Al regresar de la interrupcin, el procesamiento normal se reanuda. Por ejemplo, para configurar el pin INT para que las interrupciones externas sean aceptadas en el flanco ascendente el siguiente patrn de bits debe ser cargado en OPTION_REG: X1XXXXXX X no importa y puede ser un 0 o un 1. En la seccin de proyectos veremos cmo configurar varios bits de este registro.

    Figura 2.8 OPTION_REG Definicion de Bits. Bit 7: PORTB pull-up Habilitar Bit 2-0: Preescaler 1: PORTB pull-ups desactivados 000 1: 2 0: PORTB pull-ups habilitadas 001 1: 4 010 1: 8 Bit 6: Deteccin de interrupcin INT Edge 011 1:16 1: Interrumpir en el flanco ascendente de la entrada INT 100 1:32 0: Interrupcin en el borde descendente de la entrada INT 101 1:64 110 1: 128 Bit 5: TMR0 fuente de reloj 111 1: 256 1: pulso externo T0CK1 0: oscilador interno Bit 4: TMR0 Fuente Edge Select 1: Incremento de ALTO a BAJO de T0CK1 0: Incremento en BAJO a ALTO de T0CK1 Bit 3: Asignacin Preescaler 1: Preescaler asignado al temporizador de vigilancia(Watchdog) 0: Preescaler asignado a TMR0

    I/O registers Estos registros se utilizan para el control de I / O. Todos los puertos de E / S en el microcontrolador PIC tiene dos registros: registro de datos del puerto y puerto de registro de control de direccin. Registro de datos del puerto tendr el mismo nombre que el puerto que controla. Por ejemplo, el microcontrolador

  • PIC16F84 tiene dos puertos de datos registra PORTA y PORTB. Un microcontrolador PIC16F877 tiene 5 puertos datos registra PORTA, PORTB, PORTC, PORTD y PORTE. Un dato de 8 bits pueden ser enviados a cualquier puerto, o un conjunto de datos de 8 bits se pueden leer en los puertos. Tambin es posible leer o escribir puertos individualmente. Por ejemplo, cualquier bit de un puerto dado puede activar o se desactivar, o los datos se puede leer de una o ms pines del puerto a la vez. Los puertos de un microcontrolador PIC son bidireccionales. As, cada pin de un puerto se puede utilizar como una entrada o un pin de salida. Puerto registro de control de direccin configura los pines del puerto como entradas o salidas. Este registro se llama el registro TRIS y cada puerto tiene un registro TRIS lleva el nombre de su puerto nombre. Por ejemplo, TRISA es el registro de control de direccin para PORTA. Del mismo modo, es la TRISB registro de control de direccin para PORTB y as sucesivamente. El establecimiento de un bit en el registro TRIS hace que el puerto correspondiente Pines de registro una entrada. Eliminacin de un bit en el registro TRIS hace que el puerto correspondiente pin una salida. Por ejemplo, para hacer que los bits 0 y 1 de entrada PORTB y la otra salida los bits, tenemos que cargar el registro TRISB con el bit patrn. 00000011

    FIGURA 2.9 TRISB & PORTB Direccion

    Registro de datos y la direccin de puerto registros de control de puertos se puede acceder directamente a travs de la Pic Basic Pro compilador. Por ejemplo, como veremos en un captulo posterior, TRISB registro se puede ajustar a 3 y los datos se pueden leer desde PORTB en una variable llamada CNT en las instrucciones de PBP. TRISB _ 3 CNT _ PORTB El compilador PBP no tiene instrucciones directas de control de registro y como veremos en una tarde captulo, tenemos que usar las instrucciones POKE. PEEK se utiliza para leer datos de un registro y POKE se utiliza para enviar datos a un registro. Cuando usamos las instrucciones POKE tenemos que especificar la direccin del registro del registro queremos acceder. Las direcciones de registro de registros portuarios son (el carcter "$" especifica que el nmero est en formato hexadecimal) Direcciones de puertos en Hexadecimal PORTA $05 PORTB $06 PORTC $07 PORTD $08 PORTE $09

  • TRISA $85 TRISB $86 TRISC $87 TRISD $88 TRISE $89 As, para el ejemplo anterior, las instrucciones PICBASIC requeridos sern POKE $86, 3 PEEK $06, CNT Veremos en el prximo captulo cmo utilizar smbolos en el lenguaje PicBasic , para que nuestros programas sean ms claro y fcil de manejar. Timer registers Dependiendo del modelo utilizado, algunos microcontroladores PIC tienen slo un temporizador, y algunos pueden tener hasta 3 temporizadores. En esta seccin vamos a examinar el microcontrolador PIC16F84 que slo tiene un temporizador. La extensin a varios temporizadores es similar y veremos en la seccin de proyectos cmo utilizar ms de un temporizador. El temporizador en el microcontrolador PIC16F84 es un registro de 8 bits (llamado TMR0) que se puede utilizar como temporizador o contador. Cuando se utiliza como contador, el registro se incrementa cada vez que un pulso de reloj es aplicada al pin T0CK1 del microcontrolador. Cuando se utiliza como contador de tiempo, el registro se incrementa en un velocidad determinada por la frecuencia de reloj del sistema y un prescaler seleccionado por el registro OPTION_REG. Las tasas de divisor varan de 1: 2 a 1: 256. Por ejemplo, cuando se usa un reloj de 4 MHz, la instruccin bsica ciclo es 1us (el reloj se divide internamente por cuatro). Si seleccionamos una tasa prescaler de 1:16, el contador se incrementa en cada 16us. El registro TMR0 tiene la direccin 01 en la RAM que puede ser cargada con la instruccin POKE en PicBasic, o accediendo al registro TMR0 directamente en PicBasicPro. Se genera una interrupcin, cuando en el registro del temporizador hay un desbordamiento de 255 a 0. Esta interrupcin se puede activar o desactivar por nuestro programa. As, por ejemplo, si necesitamos generar interrupciones en intervalos de 200us usando un reloj de 4 MHz, podemos seleccionar un valor prescaler de 1: 4 y habilitar las interrupciones de temporizador. La velocidad de temporizacin de reloj es entonces 4us. Para un tiempo de espera de 200us, tenemos que enviar 50 pulsos de reloj al temporizador. Por lo tanto, el TMR0 debe ser cargado con 256-50=206, es decir, un recuento de 50 antes de que ocurra un desbordamiento. El oscilador del Watchdog es independiente del reloj de la CPU y el tiempo de espera es de 18 ms. Para poner en tiempo de espera el organismo de control, se debe restablecer peridicamente a travs de software. Si el organismo de control no se restablece antes de que el tiempo de espera, el microprocesador se ver obligado a saltar a reset. El prescaler se puede utilizar para extender el perodo de tiempo de espera y las tasas vlidos son 1, 2, 4, 8, 16, 32, 64, y 128. Por ejemplo, cuando se establece en 128, el perodo de tiempo de espera es de unos 2 s (18x128=2304 ms). El temporizador de vigilancia se puede desactivar durante la programacin del dispositivo si no se usa. El Watchdog es una parte muy importante de los microcontroladores PIC, informacin ms detallada sobre su funcionamiento a continuacin. TMR0 & WATCHDOG TMR0 y el organismo de control se encuentran prcticamente en todos los microcontroladores PIC. La figura 2.10 muestra su funcionalidad y diagrama del TMR0 y el circuito de vigilancia. El funcionamiento del circuito de vigilancia esta descrito anteriormente y slo el circuito Timer0 se describe en esta seccin. La fuente de entrada para TMR0 se selecciona por T0CS bits de OPTION_REG y puede ser cualquiera la FOSC (frecuencia de oscilador) del microcontrolador dividido por 4, o puede ser un reloj externo aplicado a la entrada RA4 / T0CK1. Aqu,

  • slo se vera el uso del oscilador interno. Si se utiliza un cristal de 4 MHz la frecuencia del oscilador interno es Fosc / 4=1MHz que corresponde a un perodo de T=1 /f 10^-6, o 1us. Timer0 se selecciona entonces como la fuente para el prescaler en la limpieza de bit PSA de OPTION_REG. El valor prescaler requerido se selecciona por los bits PS0 a PS2 como se muestra en la Figura 2.8. PSA Bit debe entonces ser limpiado a 0 para seleccionar el prescaler para el temporizador. Todos los bits estn configurados ahora y Timer0 registro aumenta cada vez que un pulso es aplicado por el oscilador interno. TMR0 registro es de 8-bits y cuenta hasta 255, a continuacin, crea una condicin de desbordamiento, y sigue contando desde 0. Cuando TMR0 cambia 255-0 genera una interrupcin de temporizador, si las interrupciones de temporizador y las interrupciones globales estn habilitadas, (ver registro INTCON, la interrupcin se generar si GIE y TMR0 bits de INTCON se establecen a 1). Consulte la Seccin 2.4.6 sobre Interrupciones, para ms informacin.

    FIGURA 2.10 CIRCUITO DEL TIMER0 Y EL WATCHDOG Al cargar un valor en el Timer0 podemos controlar el conteo hasta que se produce el desbordamiento. La frmula dada a continuacin se puede utilizar para calcular el tiempo que tomar para que el temporizador produzca un desbordamiento (generar una interrupcin), dado el perodo de oscilador, el valor cargado en el temporizador y el valor del preescalador. Tiempo de desbordamiento = 4*Tosc*Preescaler*(256 - TMR0) (2.1) donde Tiempo de desbordamiento est en us( microsegundos). Tosc es el periodo del oscilador en us. Preescaler es el valor del pre-escalador elegido, utilizando OPTION_REG TMR0 es el valor cargado en TMR0 registro. Y los smbolos * indican multiplicacin, para no liarnos con la equis. Por ejemplo, asumimos que estamos usando un cristal de 4 MHz, y el preescaler elegido como 1: 8 configurando bits de PS2: PS0 a "010". Supongamos tambin que el valor cargado en el Registro de temporizador TMR0 es decimal 100. El tiempo de desbordamiento viene dada por El reloj tiene un perodo de 4 MHz, T = 1/f = 0.25us Usando la frmula anterior, Tiempo de desbordamiento = 4 * 0.25 * 8 * (256 - 100) = 1248us.

  • De este modo, el temporizador se desbordar despus de 1.248 ms y una interrupcin del temporizador se generar si el temporizador y las interrupciones globales estn habilitados. Lo que normalmente necesitamos es saber cul es el valor a cargar en el registro TMR0 para un tiempo de desbordamiento determinado. Esto se puede calcular mediante la modificacin de la ecuacin. (2.1) como: TMR0 = 256 - (Overflow time)/(4 * Tosc * Preescaler) (2.2) Por ejemplo, supongamos que queremos una interrupcin que se genera despus de 500us y los valores del reloj y el preescaler son como antes. El valor que se carga en el registro TMR0 se puede calcular usando la Ec. Como en (2.2) TMR0 = 256 - 500/(4 * 0.25 * 8) = 193.5 (NOTA MIA: Esta ecuacin hay que corregirla) El nmero ms cercano que podemos cargar en TMR0 registro es de 193. Tabla 2.5 da los valores que deben cargar en TMR0 registro para diferentes tiempos de desbordamiento. En esta tabla se asume un cristal de 4 MHz y la mesa da como valor pre-escalador se cambia de 2-256. Tabla 2.5 Valores requeridos en TMR0 para diferentes tiempos de desbordamiento.

    TMR1 Aunque TMR0 es el temporizador bsico en casi todos los microcontroladores PIC, algunos dispositivos tienen varios temporizadores, por ejemplo, TMR0, TMR1 y TMR2. Temporizadores adicionales dan mayor funcionalidad a un microcontrolador. En esta seccin se describir en detalle, el funcionamiento de TMR1. TMR1 es un temporizador de 16 bits, que consta de dos registros de 8-bit TMR1H y TMR1L. Ver la figura 2,11. Y un preescaler que se usa con TMR1. Los valores preescaler disponibles son slo 1, 2, 4, y 8.

  • Figura 2.11 Estructura del TIMER1 Registro T1CON controla el funcionamiento de TMR1. La definicin de bits de este registro se muestra en la figura 2.12. TMR1 puede operar como un temporizador o como un contador, seleccionado por TMR1CS bits de T1CON cundo opere en modo de temporizador, TMR1 se incrementa cada fosc frecuencia del oscilador / 4. TMR1 se puede activar o desactivar por establecimiento o la eliminacin de bits de control TMR1ON. TMR1 puede contar de 0 a 65.535 y genera un desbordamiento al pasar de 65.535 a 0. El TMR1 genera una interrupcin del reloj, si esta habilitado el bit de interrupcion TMR1IE, y tambin estn habilitadas, las interrupciones globales del registro INTCON. Cuando TMR1 opera en modo contador, incrementa en flanco ascendente (de lgica 0 a lgica 1) de la entrada de reloj.

    Figura 2.12 T1CON Definicion de Bits Bit 7: y Bit 6: No se utilizan Bit 5 y Bit 4: Timer1 entrada de reloj preescala Seleccione Bits Valor 11 preescala: 1:8 Valor 10 preescala: 1:4 Valor 01 preescala: 1:2 Valor 00 preescala: 1:1 Bit 3: Timer1 Oscilador Activar Bit 1: oscilador est habilitado 0: oscilador est desactivado Bit 2: Reloj Timer1 Entrada externa de sincronizacin Seleccione Bit Cuando TMR1CS = 1: 1: No sincronice entrada de reloj externo 0: Sincronizar entrada de reloj externo Cuando TMR1CS = 0: Este bit se ignora. Timer1 utiliza el reloj interno Bit 1: Timer1 Reloj de seleccin de fuente Bit 1: Reloj externo del pin TIOSO (en el flanco ascendente) 0: (Fosc / 4) Reloj interno Bit 0: Timer1 En Bit 1: Habilitar Timer1 0: Detiene Timer1

  • TMR2 TMR2 es un temporizador de 8 bits con un preescaler y un postscaler y tiene un periodo PR2 registro de 8 bits. Este temporizador se controla mediante el registro T2CON cuyas definicione se dan en la figura 2.13. Las opciones de divisor son 1, 4, 16 y se seleccionan por los bits de T2CON T2CKPS1 y T2CKPS0. TMR2 incrementa desde 0, hasta que coincida con PR2, y a continuacin, restablece a 0 en el siguiente ciclo. Entonces se repite el ciclo. TMR2 puede desactivarse con el bit TMR2ON del registro T2CON para minimizar el consumo de energa.

    Figura 2.13 T2CON Definicion de Bits. Bit 7: No utilizado Bit 6-3: Timer2 salida Postscale Seleccione Bits 0000 1: 1 Postscale 0001 1: 2 Postscale 0010 1: 3 Postscale .... .... 1111 uno y diecisis Postscale Bit 2: Timer2 En Bit 1: Timer2 esta activado 0: Timer2 est desactivado Bit 1-0: Timer2 Reloj preescala Seleccione Bits 00 de divisor es 1 01 de divisor es 4 10 de divisor es 16 11 de divisor es 16 INTCON Registro Este es el registro de control de interrupcin. Este registro es en la direccin 0 y 8B (hexadecimal) de la microcontrolador RAM y las definiciones de los bits se muestran en la Figura 2.14. Por ejemplo, para permitir Interrupciones, de manera que las interrupciones externas del INT pines (RB0) pueden ser aceptados en un PIC16F84, el siguiente patrn de bits se debe cargar en el registro INTCON: 1XX1XXXX Del mismo modo, para permitir interrupciones del temporizador, el bit 5 de INTCON debe establecerse en 1.

    Figura 2.14 ITCON Definicion de Bits de este registro. Bit 7: Interrupcin Global Enable 1: Habilitar todas las interrupciones un-enmascarado 0: Desactivar todas las interrupciones Bit 6: EE escritura completa de interrupcin 1: Habilitar EE escribir interrupcin completa 0: Desactivar EE escribir interrupcin completa Bit 5: TMR0 desbordamiento de interrupcin 1: Habilitar TMR0 interrumpir 0: Desactivar TMR0 interrumpir

  • Bit 4: INT Interrupcin externa 1: Habilitar INT Interrupcin externa 0: Desactivar INT Interrupcin externa Bit 3: RB Puerto Cambio de interrupcin 1: Habilitar RB cambio puerto de interrupcin 0: cambio puerto RB Desactivar interrupcin Bit 2: TMR0 desbordamiento de interrupcin de la bandera 1: TMR0 se ha desbordado 0: TMR0 no se desborde Bit 1: INT Interrupcin Bandera Interrupcin ocurri INT: 1 0: interrupcin INT no ocurri Bit 0: RB Puerto Cambio de interrupcin de la bandera 1: Uno o varios de los pines RB4-RB7 cambiado de estado 0: Ninguno de RB4-RB7 cambi estado