Está en la página 1de 16

Para comenzar a programar microcontroladores PIC, el PIC que se utilizar (es decir, el que utilizar en este sitio) ser

el 16F628 (16F628a), que como ya se mencion anteriormente presenta algunas ventajas que lo hacen superior (desde el punto de vista de un principiante) a otros PIC. Antes que otra cosa es necesario ver algo de teora sobre el PIC, sin embargo aqu solamente mencionar las caractersticas principales, para informacin ms detallada es recomendable consultar la hoja de datos proporcionada por Microchip. El PIC 16F628 incorpora tres caractersticas importantes que son: Procesador tipo RISC (Procesador con un Conjunto Reducido de Instrucciones) Procesadorsegmentado Arquitectura HARVARD

o o o

El PIC 16F628 incorpora tres caractersticas importantes que son:


y y y

Procesador tipo RISC (Procesador con un Conjunto Reducido de Instrucciones) Procesador segmentado Arquitectura HARVARD

Con estos recursos el PIC es capaz de ejecutar instrucciones solamente en un ciclo de instruccin. Con la estructura segmentada se pue den realizar simultneamente las dos fases en que se descompone cada instruccin, ejecucin de la instruccin y busqueda de la siguiente. La separacin de los dos tipos de memoria son los pilares de la arquitectura Harvard, esto permite acceder en forma si multnea e independiente a la memoria de datos y a la de instrucciones. El tener memorias separadas permite que cada una tenga el ancho y tamao ms adecuado. As en el PIC 16F628 el ancho de los datos es de un byte, mientras que la de las instrucciones es de 14 bits.
Caractersticas principales
y y y

Conjunto reducido de instrucciones (RISC). Slamente 35 instrucciones que aprender a utilizar Oscilador interno de 4MHz Las instrucciones se ejecutan en un slo ciclo de mquina excepto los saltos (goto y call), que requieren 2 ciclos. Aqu hay que especificar que un ciclo de mquina se lleva 4 ciclos de reloj, si se utiliza el reloj interno de 4MHz, los ciclos de mquina se realizarn con una frecuencia de 1MHz, es decir que cada instruccin se ejecutar en 1uS (microsegundo)

y y y y y y y y

pera con una frecuencia de reloj de hasta 20 MHz (ciclo de mquina de 200 ns) Memoria de programa: 2048 locaciones de 14 bits Memoria de datos: Memoria RAM de 224 bytes (8 bits por registro) Memoria EEPROM: 128 bytes (8 bits por registro) Stack de 8 niveles 16 Terminales de I/O que soportan corrientes de hasta 25 mA 3 Temporizadores Mdulos de comunicacin serie, comparadores, PWM

Otra caracterstica de los PICs es el manejo de los bancos de registros. En lnea general, los registros se clasifican como de uso general (GPR) y de uso especfico o de funciones especiales (SFR).
y

Los registros de uso general pueden ser usados directamente por el usuario, sin existir restricciones. Pueden servir para almacenar resultados que se reciben desde el registro W (acumulador), datos que provienen de las puertas de entradas, etc. Los registros de uso especficos no pueden ser usados directamente por el usuario. Estos registros controlan prcticamente todo el funcionamiento del microcontrolador, pues toda la configuracin necesaria para funcionamiento del microcontrolador es hecho a travs de algn tipo de SFR.

Pines de I/O (Entrada/Salida)

PORTA: RA0-RA7:
y y

Los pines RA0-RA4 y RA6RA7 son bidireccionales y manejan seales TTL El pin RA5 es una entrada Schmitt Trigger que sirve tambin para entrar en el modo de programacin cuando se aplica una tensin igual a Vpp (13,4V mnimo) El terminal RA4 puede configurarse como reloj de entrada para el contador TMR0

Los pines RA0RA3 sirven de entrada para el comparador analgico

PORTB: RB0-RB7:
y y

y y

Los pines RB0-RB7 son bidireccionales y manejan seales TTL Por software se pueden activar las resistencias de pull -up internas, que evitan el uso de resistencias externas en caso de que los terminales se utilicen como entrada (permite, en algunos casos, reducir el nmero de componentes externos) El pin RB0 se puede utilizar como entrada de pulsos para provocar una interrupcin externa Los pines RB4-RB7 estn diseados para detectar una interrupcin por cambio de estado. Esta interrupcin puede utilizarse para controlar un teclado matricial, por poner un ejemplo

Otros pines
y y y

y y

VDD: Pin de alimentacin positiva. De 2 a 5,5 Vcc VSS: Pin de alimentacin negativa. Se conecta a tierra o a 0 Vcc MCLR: Master Clear (Reset). Si el nivel lgico de este terminal es bajo (0 Vcc), el microcontrolador permanece inactivo. Este Reset se controla mediante la palabra de configuracin del PIC OSC1/CLKIN: Entrada de oscilador externo OSC2/CLKOUT: Salida del oscilador. El PIC 16F628 dependiendo de cmo se configure puede proporcionar una salida de reloj por medio de este pin

En la prxima entrega se dar una introduccin al ambiente de desarroll o MPLAB y se realizar el primer programa. Tambin se ver el conjunto de insotrucciones del PIC y las directivas del ensamblador MPASM.
Puertos Los PIC16F628/648A cuentan con dos puertos PORTA y PORTB, algunos pines de estos puertos de entrada/salida son multiplexados con una funcin alternativa de los perifricos del dispositivo. Cuando un perifrico es activado el pin no puede ser usado para propsitos generales de e/s. El PUERTO A es un puerto de entrada de 8 bits. Todos los pines, excepto RA5, pueden ser configurados como entrada o salida con la respectiva configuracin del registro TRISA. El pin RA4 esta multiplexado con la entrada de reloj T0CKI y como salida se comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a Vdd. El pin RA5 es un disparador Schmitt solo de entrada y no cuenta con controladores de salida, segn la configuracin puede ser usado como Mclr (Reset externo), y adems sirve tambin para entrar en el modo de programacin cuando se aplica una tensin igual a Vpp (13,4V mnimo). Los dems pines del puerto trabajan de entrada como disparador de Schmitt Trigger y como salida lgica CMOS. Los pines

RA0-RA3 sirven de entrada para el comparador analgico. Importante: Si se utiliza en puerto A como I/O Digital, se debe deshabilitar los Comparadores Analgicos, cargando un 0x07 en CMCON. El PORTB es un puerto bidireccional de 8 bits, del cual por software se pueden habilitar resistencias de pull-up internas. El PORTB es multiplexado con interrupciones externas, tales como deteccin de flanco por RB0, cambio de nivel por RB4 a RB7, USART, el mdulo CCP y el reloj de entrada/salida TMR1. Otros pines VDD: Pin de alimentacin positiva. De 2 a 5,5 Vcc VSS: Pin de alimentacin negativa. Se conecta a tierra o a 0 Vcc MCLR: Master Clear (Reset). Si el nivel lgico de este terminal es bajo (0 Vcc), el microcontrolador permanece inactivo. Este Reset se controla mediante la palabra de configuracin del PIC OSC1/CLKIN: Entrada de oscilador externo OSC2/CLKOUT: Salida del oscilador. Dependiendo de cmo se configure puede proporcionar una salida de reloj por medio de este pin Organizacin de la memoria. El PIC16F628 posee un contador de programa de 13 bits, capaz de direccionar un espacio de memoria de 8Kx14. Sin embargo, nicamente los primeros 2Kx14, desde 0000h hasta 07FFh, estn implementados. Los vectores de reset e interrupcin estn en las direcciones 0000h y 0004h, respectivamente. La pila (stack) es de 8 niveles, lo cual significa que puede soportar hasta 8 direcciones de retorno de subrutina.

osEl PIC16F628 posee un espacio de memoria RAM de datos de 512x8, dividido en 4 bancos de 128 bytes cada uno. Sin embargo, slo estn implementados 330 bytes, correspondiendo 224 al rea de los registros de propsito general (GPR) y 36 al rea de los registros de funcin especial (SFR). Los restantes 70 bytes implementados son espejos de algunos SFR de uso frecuente, as como de los ltimos 16 GPR del banco 0. Por ejemplo, las posiciones 0Bh, 8Bh, 10Bh y 18Bh corresponden al registro INTCON, de modo que una operacin hecha en cualquiera de ellos, se refleja automticamente en los otros. Se dice, entonces, que las posiciones 8Bh, 10Bh y 18Bh estn mapeadas en la posicin 0Bh. Esta caracterstica agiliza el acceso a estos registros, puesto que no siempre es necesario especificar el banco donde se encuentran. La seleccin del banco de ubicacin de un SFR o un GPR particular se hace mediante los bits 6 (RP1) y 5 (RP0) del registro STATUS.

Interrupciones: Registros utilizados: INTCON: Registro de lectura y escritura que contiene varios bits de sealizacin y habilitacin para el desbordamiento del TMR0, cambio sobre el puerto RB e interrupcin externa en la patilla RB0/INT. 0. RBIF: Indicador de interrupcin por cambio de estado RB4-RB7 1. INTF: Indicador de interrupcin externa 2. T0IF: Indicador de interrupcin por desbordamiento de Timer 0 3. RBIE: Habilitacin de interrupcin por cambio de estado RB4-RB7

4. 5. 6. 7.

INTE: Habilitacin de interrupcin externa T0IE: Habilitacin de interrupcin por desbordamiento de Timer 0 PEIE: Habilitacin de interrupcin de perifricos GIE: Habilitacin general de interrupciones

PIR1: El registro PIR1 contiene los bits de sealizacin individual de las interrupciones de perifricos 0. TMR1IF: Indicador de interrupcin por desbordamiento de Timer 1 1. TMR2IF: Indicador de interrupcin por desbordamiento de Timer 2 2. CCP1IF: Indicador de interrupcin del mdulo de Captura/Comparacin. a) Modo Comparador: Coincidencia entre TMR1 y CCP1 b) Modo Captura: Ha ocurrido una captura de TMR1 3. No Implementado. 4. TXIF: Indicador de interrupcin de fin de transmisin USART 5. RCIF: Indicador de interrupcin de llegada de datos USART 6. CMIF: Indicador de interrupcin por cambio de estado de alguna de las salidas de los comparadores. 7. EEIF: Indicador de interrupcin de fin de escritura eeprom interna. PIE1: Registro que posee los bits de habilitacin individual para las interrupciones de perifricos. El bit PEIE del registro INTCON debe ser 1 para permitir la habilitacin de cualquier interrupcin de perifrico. 0. TMR1IE: Habilitacin de interrupcin por desbordamiento de Timer 1 1. TMR2IE: Habilitacin de interrupcin por desbordamiento de Timer 2 2. CCP1IE: Habilitacin de interrupcin del mdulo de Captura/Comparacin/PWM. 3. No Implementado. 4. TXIE: Habilitacin de interrupcin de fin de transmisin USART 5. RCIE: Habilitacin de interrupcin de llegada de datos USART 6. CMIE: Habilitacin de interrupcin por cambio de estado de alguna de las salidas de los comparadores. 7. EEIE: Habilitacin de interrupcin de fin de escritura eeprom interna. Lgica de Interrupciones:

Suky: Palabra de Configuracin Los PIC16F628A/648A han sido construidos con caractersticas tales que se pueden configurar para funcionar en modos de operacin que no necesitan componentes externos tales como el circuito de reloj o de reset. Esto implica que es necesario configurar su modo de operacin a travs de una palabra de configuracin. La palabra de configuracin se encuentra mapeada en la direccin 2007h de la memoria de programa y solo puede ser accesada durante la programacin de dispositivo.

CP1:CP0:Bits de proteccin de cdigo Los bits 13-10 encargados de proteger la memoria de programa. CPD: Bit de proteccin para cdigo de datos

1 = Proteccin deshabilitada de la memoria de datos. 0 = Proteccin habilitada en la memoria de datos. LVP: Habilitacin de la programacin por voltaje bajo 1 = LVP habilitado, la terminal RB4/PGM tiene tal funcin. 0 = LCP: deshabilitado, RB4/PGM es una terminal I/O. BODEN: Bit de reset por voltaje de alimentacin bajo 1 = Reset por BOD habilitado 0 = Reset por BOD deshabilitado MCLRE: Habilitacion del terminal de reset 1 = Terminal de reset en RA5. 0 = MCLR conectado internamente a Vdd, RA5 es un pin I/O. PWRTEN : Bit de habilitacin de temporizador al energizar 1 = PWRT habilitado. 0 = PWRT deshabilitado. WDTEN: Bits de habilitacin de Watch-Dog 1 = WDT habilitado 0 = WDT deshabilitado. FOSC2:FOSC1:FOSC0: Bits de seleccin del tipo de oscilador

Suky: El Mdulo del Timer 0. Idntico al del PIC16F84. El Mdulo del Timer 1. El Timer 1 a diferencia del Timer 0 es un contador / temporizador de 16 bits. El conteo es realizado por dos registros de 8 bits: (TMR1H (0Fh) y TMR1L (0Eh) ), estos dos registros son tanto lebles como escribibles. As, el registro TMR1 se incrementa de 0000h a FFFFh y en la siguiente cuenta se reinicia en 0000h y as sucesivamente, al reciclarse se activa (en alto) la bandera TMR1IF (PIR1<0>), la cual puede ser utilizada para generar una interrupcin, o bien, para ser consultada por poleo, teniendo las mismas precauciones que ya se explicaron antes para la bandera T0IF. En la siguiente figura se muestra un diagrama de bloques de este mdulo, en donde se indican los bits que afectan su operacin y la manera en que lo hacen.

Modo temporizador En este modo el Timer se incrementa (si no se considera preescalador) en cada ciclo de instruccin (a la frecuencia Fosc/4). Este modo se selecciona limpiando el bit TMR1CS (T1CON<1>). El preescalador que se puede intercalar entre el reloj Fosc/4 y el registro TMR1 puede tener slo uno de 4 valores: 1/1, 1/2, 1/4 y 1/8. En este caso la temporizacin de calcula: Temporizacin = Ciclo de instruccin. (65536-TMR1) .Divisor de Frecuencia Vemos que la mxima temporizacin posible es con TMR1 = 0, y Divisor de Frecuencia en 8, logrndose unos 524.3 ms aprox.

Modo contador El Timer 1 tambin puede operar como contador, en este ltimo caso, la entrada a contar se toma de la patita externa RB6/T1OSO/T1CKI. Configuraciones: El Timer 1 posee un bit para habilitacin / deshabilitacin, este es el bit TMR1ON (T1CON<0>) y habilita en alto. Adems, el Timer 1 posee una entrada interna de RESET, el cual puede ser activado por uno cualquiera de los mdulos CCP que. A continuacin se describe el principal registro relacionado con el Timer 1 y todos sus bits, excepto los que tienen que ver con el modo contador: Registro T1CON (10h) bits 5:4 T1CKPS1:T1CKPS0.- Bits de seleccin del valor del divisor de frecuencia del preescalador: 1 1 = divisor 1/8 1 0 = divisor 1/4 0 1 = divisor 1/2 0 0 = divisor 1/1 bit 1 TMR1CS.- Bit de seleccin de la fuente de reloj 1 = Modo contador (fuente de reloj: patita RC0/T1OSO/T1CKI) 0 = Modo Temporizador (fuente de reloj Fosc/4) bit 0 TMR1ON.- Bit de habilitacin / deshabilitacin del Timer 1: 1 = habilita Timer 1 0 = Deshabilita Timer 1

ConfigPICtra una herramienta adicional que nos ayuda a seleccionar el preescaler y valor inicial del Timer para obtener una temporizacin deseada: Suky: Para ejemplificar haremos un simple ejemplo donde lo utilizamos como temporizador. Se har titilar un led conectado al PIN RB0 cada 300 ms. Como se puede ver es idntico al ejemplo realizado para Timer 0 del PIC16F84A, solo que en este caso no necesitaremos un registro adicional para lograr la demora deseada. Hardware:

Cdigo GeSHi (asm): ; **** Encabezado **** list p=16f628A ; listdirectiveto define processor #include<p16f628A.inc> ; processorspecific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON

&_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON ;**** Definiciones para el ensamblador **** #DEFINE Led PORTB,0 ; Led ubicado en Puerto B, bit 0.;////////////////////////////////////////// ;**** Inicio del Micro **** Reset org 0x00 ; Aqu comienza el micro.goto Inicio ; Salto a inicio de mi programa.;**** Vector de Interrupcion **** org 0x04 ; Atiendo Interrupcion.goto ISR ; **** Programa Principal **** ;**** Configuracion de puertos *** org 0x05 ; Origen del cdigo de programa.Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.movlw b'11111110' ; RB0 como salida. movwf TRISB bcf STATUS,RP0 ; Banco 0.movlw b'00110001' ; Se selecciona TMR1, preescaler de 1/8, modo temporizador.movwf T1CON bcfLed ; El Led comienza apagado.movlw 0x6D ; Cargamos 28036 en TMR1 para lograr 300ms.movwf TMR1H ; Byte alto de TMR1.movlw 0x84 movwf TMR1L ; Byte bajo de TMR1.bsf STATUS,RP0 ; Banco 1.bsf PIE1,TMR1IE ; Activar interrupcin por TMR1. bsf INTCON,GIE ; Habilitacion general de interrupciones.bsf INTCON,PEIE ; Habilitacion de Interrupcion por perifericos.bcf STATUS,RP0 ; Banco 0.;**** Control de Led **** Bucle nop ; Aqui el micro puede ejecutar cualquier otra tarea goto Bucle ; sin necesidad de utilizar tiempo en un bucle de demora.-

;**** Rutina de servicio de Interrupcion **** ;**** Interrupcion por TMR1 **** ISR btfss PIR1,TMR1IF ; Consultamos si es por TMR1.retfie ; No, salimos de interrupcion.btfssLed ; Si, Controlamos Led. Si esta apagado, prendo y viseversa.gotoPrendo_led bcfLed ; Apago Led.Actualizo_TMR1 ; Actualizo TMR1 para obtener una temporizacion de 300 ms.movlw 0x6D ; Cargamos 28036 en TMR1.-

movwf TMR1H ; Byte alto de TMR1.movlw 0x84 movwf TMR1L ; Byte bajo de TMR1.gotoFin_ISR ; Restauro valores.Prendo_led bsfLed ; Prendo Led.goto Actualizo_TMR1 Fin_ISR bcf PIR1,TMR1IF ; Borro bandera de control de Interrupcion.retfie ; Salimos de interrupcin.;.......................................... end

PIC16F628A/648A Har una introduccin a los micros y realizare ejemplos para los mdulos que no trae el PIC16F84A.

Caractersticas principales Conjunto reducido de instrucciones (RISC). Solamente 35 instrucciones que aprender a utilizar Oscilador interno de 4MHz Opera con una frecuencia de reloj externa de hasta 20 MHz (ciclo de mquina de 200 ns) Memoria de programa: 2048 locaciones de 14 bits Me moria de datos: Memoria RAM de 224 bytes (8 bits por registro) Memoria EEPROM: 128 bytes (8 bits por registro) Stack de 8 niveles 16 Terminales de I/O que soportan corrientes de hasta 25 mA 3 Temporizadores Mdulo de comunicacin serie (UsartMdulo CCP (captura/comparacin/PWM)2 Comparadores analgicos, una referencia de voltaje programableNota: Los mdulos descriptos para el PIC16F628A son idnticos a los del PIC16F648A, lo nico que vara entre ellos son las siguientes caractersticas: Memoria de programa: PIC16F648A-4096 locaciones de 14 bits Memoria de datos: PIC16F648A-Memoria RAM de 256 bytes (8 bits por registro) Memoria EEPROM: PIC16F648A256 bytes (8 bits por registro)

De aqu e ade ante me re ero al PIC16F628 pero los ejemplos son aplicables a PIC16F648 l haciendo el cambio de encabe ado: Cdigo GeS i (asm): ; **** Encabe ado **** list p=16 648 ; listdirectiveto de ine processor #include<p16 648 inc> ; processorspecific variable definitions

En la siguiente figura se muestra el diagrama de pines.

Diagramas de pines del PIC16F628A

Caractersticas del PIC16F628A: CPU De alto rendimiento RISC: velocidades de operacin de DC - 20 MHz Capacidad de interrupcin pila de 8 niveles Modos de direccionamiento directos, indirectos y relativo 35 simples instrucciones de palabra: - Todas las instrucciones de ciclo nico, excepto las de salto

Caractersticas Especial microcontrolador: opciones de oscilador externo e interno: - Precisin de fbrica del oscilador interno de 4 MHz calibrada a 1% - oscilador de 48 kHz De bajo consumo interno Modo de ahorro de energa en modo sueo resistencias programable pul-ups del PORTB Multiplexado del pin reset / Entrada-pin Temporizador Watchdog con oscilador independiente para un funcionamiento fiable Baja tensin de programacin In-Circuit Serial (a travs de dos pines)

Proteccin de cdigo programable Brown-outreset Power-onReset Power-up Timer y el oscilador de puesta en marcha del temporizador Amplio rango de funcionamiento de tensin (2.0-5.5V) Industrial y amplia gama de temperaturas extendidas Alta durabilidad de la memoria Flash /EEPROM: - 100.000 ciclos de escritura Flash - 1.000.000 ciclos de escritura EEPROM - 40 aos de retencin de datos De baja potencia Caractersticas: Corriente en espera: - 100 nA@2.0V, tpico Corriente de funcionamiento: - 12 A @ 32 kHz, 2,0 V, tpica - 120 A @ 1 MHz, 2,0 V, tpica Temporizador Watchdog actual: - 1 A@2.0V, tpico Timer1 oscilador actual: - 1.2 A @ 32 kHz, 2,0 V, tpica Doble velocidad del oscilador interno: - Tiempo de ejecucin seleccionable entre 4 MHz y de 48 kHz - 4 s despertar de un sueo, 3.0V, tpico En la siguiente figura se muestran los microcontroladores que componen esta serie

TIPOS DE MEMORIA DEL PIC16F628A Memoria flash: esta memoria es de tipo no voltil en esta memoria ira nuestro programa que realicemos. El pic16f628a tiene una capacidad de 2048 words seto se podra traducir a 2048 lneas de cdigo que podemos escribir en lenguaje assembler para este microcontrolador.

Memoria RAM: esta memoria sirve para guardar datos y variables, esta memoria es de tipo voltil, es decir perder la informacin cuando desaparezca la alimentacin. La memoria ram que posee el microcontrolador pic16f628a es de 224 bytes Memoria eeprom: en una memoria de tipo no voltil de poca capacidad sirve para guardar datos, aun cuando deje de recibir alimentacin la informacin no se perder. La memoria eeprom que posee el pic16f628a es de 128 bytes.

Tipos de osciladores El PIC16F627A/628A/648A puede ser operado en ocho diferentes modos de oscilador. RC, Oscilador con resistencia y condensador (2 modos) XT, Cristal de cuarzo. HS, Cristal de alta velocidad LP, Cristal de baja frecuencia y bajo consumo de potencia. INTOSC, oscilador interno de precisin de 4mhz (2 modos) EC, seal externa de entrada de reloj En la siguiente figura el diagrama de bloques del oscilador

En la siguiente tabla se muestra los valores de los cristales y sus respectivos condensadores de filtro para el oscilador externo.

Al momento de programar un micro se debe especificar que tipo de oscilador se usa. Internamente la frecuencia del oscilador es dividida por 4, as que si temeos un oscilador de 4 MHz, la frecuencia de trabajo es de 1 MHz, por lo que cada instruccin se ejecuta cada 1 us.

Mapa de memoria del pic16f628a Como vemos en la siguiente figura el mapa de memoria se encuentra dividida en 4 bancos en estos bancos se encuentra los registros de control as como tambin la memoria RAM.

Diagrama de bloques del PIC16F628A En la siguiente figura se muestra el diagrama de bloques del pic16f628a como vemos los puertos a y b son direccionales, sea se les puede configurara como entrada o salida digital.