unidad 1 Microcontroladores

1 UNIDAD. “ARQUITECTURA DE MICROCONTROLADORES.” 1.1 DIFERENCIA ENTRE MICROCOMPUTADORA, MICROPROCESADOR Y MICROCONTROLADO

Views 67 Downloads 3 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

1 UNIDAD. “ARQUITECTURA DE MICROCONTROLADORES.” 1.1 DIFERENCIA ENTRE MICROCOMPUTADORA, MICROPROCESADOR Y MICROCONTROLADOR.

El Microcontrolador está formado por un Microprocesador y el conjunto de subsistemas que normalmente requiere un microprocesador: memoria volátil (calculo temporal), memoria no volátil (donde almacena el programa), entrada y salida.

Microprocesador. Es un dispositivo integrado digital capaz de interpretar y ejecutar un conjunto secuencial de instrucciones (programa). Básicamente contiene circuitos electrónicos que realizan operaciones aritméticas, lógicas y de control. Se trata de un sistema muy complejo, por eso debe ir integrado en chips.

Una microcomputadora o microordenador es una computadora pequeña, con un microprocesador como su unidad central de procesamiento (CPU).2 El microprocesador incluye los circuitos de almacenamiento (o memoria caché) y entrada/salida en el mismo circuito integrado (o chip).

El microprocesador es la forma más simple, para poder crear un microcontrolador, la microcomputadora es una forma compleja, que contiene microprocesadores y microcontroladores

1

1.2 Características y aplicaciones de los microcontroladores.

Los microcontroladores están siendo empleados en multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas, frigoríficos, televisores, computadoras, impresoras, módems, el sistema de arranque de nuestro coche, etc. Y otras aplicaciones con las que seguramente no estaremos tan familiarizados como instrumentación electrónica, control de sistemas en una nave espacial, etc. Una aplicación típica podría emplear varios microcontroladores para controlar pequeñas partes del sistema. Estos pequeños controladores podrían comunicarse entre ellos y con un procesador central, probablemente más potente, para compartir la información y coordinar sus acciones, como, de hecho, ocurre ya habitualmente en cualquier PC.

2

1.2 Tipos de arquitecturas computacionales. Arquitectura de von Neumann Tradicionalmente los sistemas con microprocesadores se basan en esta arquitectura, en la cual la unidad central de proceso (CPU), está conectada a una memoria principal única (casi siempre sólo RAM) donde se guardan las instrucciones del programa y los datos. A dicha memoria se accede a través de un sistema de buses único (control, direcciones y datos).

Las principales limitaciones que nos encontramos con la arquitectura Von Neumann son: 1.-La limitación de la longitud de las instrucciones por el bus de datos, que hace que el microprocesador tenga que realizar varios accesos a memoria para buscar instrucciones complejas. 2.-La limitación de la velocidad de operación a causa del bus único para datos e instrucciones que no deja acceder simultáneamente a unos y otras, lo cual impide superponer ambos tiempos de acceso

Arquitectura Harvard Este modelo, que utilizan los Microcontroladores PIC, tiene la unidad central de proceso (CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes.

3

Ventajas de esta arquitectura: * El tamaño de las instrucciones no está relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa, logrando así mayor velocidad y menor longitud de programa. * El tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor velocidad en cada operación. 1.4 Tipos de microcontroladores y sus fabricantes.

Los microcontroladores más populares se encuentran, sin duda, entre las mejores elecciones: 8048 (Intel). Es el padre de los microcontroladores actuales, el primero de todos. Su precio, disponibilidad y herramientas de desarrollo hacen que todavía sea muy popular. 8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácil de programar, pero potente. Está bien documentado y posee cientos de variantes e incontables herramientas de desarrollo. 4

80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los populares microprocesadores 8086 y 8088. Su principal ventaja es que permiten aprovechar las herramientas de desarrollo para PC. 68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y popular con gran cantidad de variantes. 683xx (Motorola). Surgido a partir de la popular familia 68k, a la que se incorporan algunos periféricos. Son microcontroladores de altísimas prestaciones. PIC (Microchip). Familia de microcontroladores que gana popularidad día a día. Fueron los primeros microcontroladores RISC. 1.5 Componentes del microcontrolador Memoria del programa Por lo general es de tipo rom flash. aquí se almacenan dats de instrucciones que han de ser ejecutadas por el microcontrolador. es de tipo no volatil es decir que su informacion no se brra aunque desaparezca la alimentacion. El tamaño varia dependiendo del fabricante y gama del microcontrolador Memoria EEPROM de datos Es una pequeña area de memoria de datos de lectura y escritura no volatil en la cual se puede guardar unformacion que ha de ser utilizada en cada ejecucion del programa. El tamaño varia dependendo del fabricante y gama del microcontrolador Modulos Dependiendo del coste y de la gama del microcontrolador este se incorpora ciertos modulor, los cuales son utilizados para la aplicación especificas como: rs232,conversion A/D comunicación USB comunicación J2C,comparadores interupciones, nucleos de control de motores etc. Cpu Unidad central de procesamiento. Es la encargada de controlar todo el sistema del microcontrolados, es decir ejecuta cada instrucción. Memoria de datos ram Se destina para almacenar variables y datos necesarios durante la ejecucion de algun priceso. Es volatil, la informacion no desaparece cuando no hay alimentacion. El tamaño varia dependiendo del fabricante y gama del microcontrolador Puertos de entrada y salida

5

Con los pines de entrada/salida el micro PIc puede monitorizar y controlar otros dispositivos, para añadir flexibilidad al micro muchos de sus pines estan multiplexados con funciones alternativas la direccion del pin es controlado por el registro de direccion de datos llamado TRIS, TRISX controlada la direccion del pin n del puerto x un 1 indica que el pin es de entrada y un 0 inica que es de salida

1.5.1 Registros internos. La MAR :es el registro de direcciones de memoria (memory adress register). MBR: Este registro es el buffer de datos de la memoria (memory buffer register). ROP: Este registro contiene el código de operación de la ALU El Registro de Instrucción (RI) almacena la instrucción que está siendo ejecutada por la CPU. El RI es invisible para el programador. El Acumulador (ACC: Accumulator), es el registro asociado a al operaciones aritméticas y lógicas que se pueden realizar en la ALU. En cualquier operación, uno de los adatos debe estar en el ACC y el resultado se obtiene en ACC. El ACC no existe en los microcontroladores PIc que tienen en cambio en el registro W (Working Register), con características muy parecidas a las del ACC. El Registro de estado (STATUS) agrupa los bits indicadores de las características del resultado de las operaciones aritméticas y lógicas realizadas en la ALU. Entre los indicadores están el signo el resultado ( si es + o -) si el resultado es 0, si hay acarreos o préstamos, el tipo de paridad (par o Impar) del resultado, etc. El contador de Programa (PC. Program Counter) es el registro de la CPU donde se almacenan direcciones de instrucciones. cada vez que la CPU busca una instrucción en la memoria, el PC se incrementa, apuntando así a la siguiente instrucción. En un instante de tiempo dado, el PC contiene la dirección de las instrucción que será ejecutada a continuación. Las instrucciones de transferencia de control modifican el valor del PC. El registro de Direcciones de Datos (RDD) almacenan direcciones de datos situados en la memoria. este registro de datos (RDD) amacena direcciones de datos situados en la memoria. este registro es indispensable para el direccionamiento indirecto de datos en al memoria. El RDD toma diferentes nombres según el micro controlador . En los PIC, el RDD es el registro FSR (File Select Register).

1.5.2 Tipos y distribución de las memorias internas.

6

La memoria RAM está destinada al almacenamiento de información temporal que será utilizada por el procesador para realizar cálculos u otro tipo de operaciones lógicas. En el espacio de direcciones de memoria RAM se ubican además los registros de trabajo del procesador y los de configuración y trabajo de los distintos periféricos del microcontrolador. El tipo de memoria utilizada en las memorias RAM de los microcontroladores es SRAM, lo que evita tener que implementar sistemas de refrescamiento, poseen pequeñas cantidades de memoria RAM. Memoria PROM (Programable Read-Only Memory) también conocida como OTP (One Time Programable). Este tipo de memoria, también es conocida como PROM o simplemente ROM. Los microcontroladores con memoria OTP se pueden programar una sola vez, con algún tipo de programador. Se utilizan en sistemas donde el programa no requiera futuras actualizaciones y para series relativamente pequeñas, donde la variante de máscara sea muy costosa, también para sistemas que requieren socialización de datos, almacenados como constantes en la memoria de programas. Memoria EPROM (Erasable Programmable Read Only Memory). Los microcontroladores con este tipo de memoria son muy fáciles de identificar porque su encapsulado es de cerámica y llevan encima una ventanita de vidrio desde la cual puede verse la oblea de silicio del microcontrolador. Se fabrican así porque la memoria EPROM es reprogramable, pero antes debe borrase, y para ello hay que exponerla a una fuente de luz ultravioleta, el proceso de grabación es similar al empleado para las memorias OTP. Al aparecer tecnologías menos costosas y más flexibles, como las memorias EEPROM y FLASH, este tipo de memoria han caído en desuso, se utilizaban en sistemas que requieren actualizaciones del programa y para los procesos de desarrollo y puesta a punto. · Memoria flash. En el campo de las memorias reprogramables para microcontroladores, son el último avance tecnológico en uso a gran escala, y han sustituido a los microcontroladores con memoria EEPROM. 1.5.3 Periféricos Entradas y salidas de propósito general También conocidos como puertos de E/S, generalmente agrupadas en puertos de 8 bits de longitud, permiten leer datos del exterior o escribir en ellos desde el interior del microcontrolador, el destino habitual es el trabajo con dispositivos simples como relés, LED, o cualquier otra cosa que se le ocurra al programador. Algunos puertos de E/S tienen características especiales que le permiten manejar salidas con determinados requerimientos de corriente, o incorporan mecanismos especiales de interrupción para el procesador Temporizadores y contadores

7

Son circuitos sincrónicos para el conteo de los pulsos que llegan a su poder para conseguir la entrada de reloj. Si la fuente de un gran conteo es el oscilador interno del microcontrolador es común que no tengan un pin asociado, y en este caso trabajan como temporizadores. Por otra parte, cuando la fuente de conteo es externa, entonces tienen asociado un pin configurado como entrada, este es el modo contador. Conversor analógico/digital Como es muy frecuente el trabajo con señales analógicas, éstas deben ser convertidas a digital y por ello muchos microcontroladores incorporan un conversor analógico-digital, el cual se utiliza para tomar datos de varias entradas diferentes que se seleccionan mediante un multiplexor. Las resoluciones más frecuentes son 8 y 10 bits, que son suficientes para aplicaciones sencillas. Para aplicaciones en control e instrumentación están disponibles resoluciones de 12bit, 16bit y 24bit. 6 También es posible conectar un convertidor externo, en caso de necesidad Puerto serie Este periférico está presente en casi cualquier microcontrolador, normalmente en forma de UART (Universal Asynchronous Receiver Transmitter) o USART (Universal Synchronous Asynchronous Receiver Transmitter) dependiendo de si permiten o no el modo sincrónico de comunicación. SPI Este tipo de periférico se utiliza para comunicar al microcontrolador con otros microcontroladores o con periféricos externos conectados a él, por medio de una interfaz muy sencilla. Hay solo un nodo controlador que permite iniciar cualquier transacción, lo cual es una desventaja en sistemas complejos, pero su sencillez permite el aislamiento galvánico de forma directa por medio de optoacopladores. I2C Cumple las mismas funciones que el SPI, pero requiere menos señales de comunicación y cualquier nodo puede iniciar una transacción. Es muy utilizado para conectar las tarjetas gráficas de las computadoras personales con los monitores, para que estos últimos informen de sus prestaciones y permitir la autoconfiguración del sistema de vídeo. USB Los microcontroladores son los que han permitido la existencia de este sistema de comunicación. Es un sistema que trabaja por polling (monitorización) de un conjunto de periféricos inteligentes por parte de un amo, que es normalmente un computador personal. Cada modo inteligente está gobernado inevitablemente por un microcontrolador. Ethernet

8

Es el sistema más extendido en el mundo para redes de área local cableadas. Los microcontroladores más poderosos de 32 bits se usan para implementar periféricos lo suficientemente poderosos como para que puedan ser accesados directamente por la red. Muchos de los enrutadores caseros de pequeñas empresas están construidos sobre la base de un microcontrolador que hace del cerebro del sistema. Can Este protocolo es del tipo CSMA/CD con tolerancia a elevados niveles de tensión de modo común y orientado al tiempo real. Este protocolo es el estándar más importante en la industria automotriz (OBD). También se usa como capa física del "field bus" para el control industrial. Modulador de ancho de pulsos Los PWM (Pulse Width Modulator) son periféricos muy útiles sobre todo para el control de motores, sin embargo hay un grupo de aplicaciones que pueden realizarse con este periférico, dentro de las cuales podemos citar: inversión DC/AC para UPS, conversión digital analógica D/A, control regulado de luz (dimming) entre otras. 1.5.4 Instrucciones del microcontrolador. f: cualquier registro del microcontrolador W: registro de trabajo b: posicion de un bit en el registro 'f' d: destino, puede ser 'f' (d=1) o 'W' (d=0) etiqueta: grupo de caracteres que marcan el inicio de una parte del programa []: opcional : posicion de un bit dentro de un registro Instrucciones

orientadas

a

registros

ADDWF: Suma W y f Suma el contenido del registro 'W' y el registro 'f'. Si "d" es 0, el resultado se almacena en el registro W. Si 'd' es 1 el resutado se almacena en el registro 'f'. Sintaxis: [etiqueta] ADDWF f,d Operación: (W) + (f) --> (destino) Flags afectados: C, DC, Z Ejemplo: ADDWF REG,1 Antes de la instrucción: W=0x03, REG=0x04 Después de la instrucción: W=0x03, REG=0x07 ANDWF: W AND f Realiza la operación lógica AND entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f". Sintaxis: [etiqueta] ANDWF f,d Operación: (W) AND (f) --> (destino) 9

Flags Ejemplo: Antes Después CLRF: Borra el Sintaxis: Flags Ejemplo: Antes Después

de

la de

contenido

de de

la

afectados: ANDWF instrucción: W=0x17, instrucción: W=0x17,

REG= REG=

Z REG,1 0xC2 0x02

Borra un registro del registro 'f' y se activa el flag Z. [etiqueta] CLRF f afectados: Z CLRF REG la instrucción: REG=0x54 la instrucción: REG=0x00, Z=1

CLRW: Borra el Borra el contenido del registro 'W' y operandos. Sintaxis: Flags Ejemplo: Antes de la Después de la

registro de trabajo W se activa el flag Z. Esta instruccion no tiene [etiqueta] afectados: instrucción: instrucción: W=0x00,

CLRW Z CLRW W=0x54 Z=1

COMF: Complementa el registro f El contenido del registro 'f' se complementa. Si d=0 el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] COMF f,d Flags afectados: Z Ejemplo: COMF REG,0 Antes de la instruccion: REG=0x13 Después de la instrucción: REG=0x13, W=0xEC DECF: Decrementa f en 1 De decrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en 'f'. Sintaxis: [etiqueta] DECF f,d Flags afectados: Z Ejemplo: DEC CONT, 1 Antes de la instrucción: CONT=0x01, Z=0 Después de la instrucción: CONT=0x00, Z=1 DECFSZ: Decrementa en 1 y salta si el resultado es 0 El contenido del registro 'f' se decrementa. Si 'd=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno 10

INCF: Incrementa el registro f Incrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en 'f'. Sintaxis: [label] INCF f,d Flags afectados: Z Ejemplo: INCF CONT,1 Antes de la instrucción: CONT=0xFF, Z=0 Después de la instrucción: CONT=0x00, Z=1 INCFSZ: Incrementa en 1 y salta si el resultado es 0 El contenido del registro 'f' se incrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno IORWF: W OR f Realiza la operación lógica OR entre el registro W y el registro 'f'. Si d=0 el resultado se almacena en el registro W. Si d=1, el resultado se almacen en el registro 'f'. Sintaxis: [etiqueta] IORWF f,d Flags afectados: Z Ejemplo: IORWF REG,0 Antes de la instrucción: REG=0x13, W=0x91 Después de la instrucción: REG=0x13, W=0x93 MOVF: Mover el registro f El contenido del registro 'f' se mueve al destino 'd'. Si d=0, el destino es el registro W. Si d=1, el destino es el propio registro 'f'. Sintaxis: [etiqueta] MOVF f,d Flags afectados: Z Ejemplo: MOVF REG,0 Después de la instrucción: W=REG RLF: Rota el registro f a la izquierda El contenido del registro 'f' se rota una posición a la izquierda. El bit de más peso pasa al carry y el carry se introduce por el bit de menos peso de 'f'. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'. Sintaxis: [etiqueta] RLF f,d Flags afectados: C Ejemplo: RLF REG,1 Antes de la instrucción: REG=b'11100110', C=0 Después de la instrucción: REG=b'11001100', C=1 RRF: Rota el registro f a la derecha El contenido del registro 'f' se rota una posición a la derecha. El bit de menos peso pasa al carry y el carry se introduce por el bit de más peso de 'f'. Si d=0, el 11

resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'. Sintaxis: [etiqueta] RLF f,d Flags afectados: C Ejemplo: RLF REG,1 Antes de la instrucción: REG=b'11100110', C=0 Después de la instrucción: REG=b'01110011', C=0 SUBWF: Resta f W Resta el contenido del registro 'f' menos el contenido del registro W. Si d=0, el resultado se almacena en el registro W. Si d=1, el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] SUBWF f,d Flags afectados: C, DC, Z Ejemplo: SUBWF REG,1 Antes de la instrucción: REG=0x01, W=0x02 Después de la instrucción: REG=0xFF, W=0x02 SWAPF: Intercambio de f El nibble bajo del registro 'f' se intercambia con el nibble alto del mismo. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'. Sintaxis: [etiqueta] SWAPF f,d Flags afectados: Ninguno Ejemplo: SWAPF REG,1 Antes de la instrucción: REG=0x54 Después de la instrucción: REG=0x45 XORWF: W XOR f Realiza la función lógica OR exclusiva entre el contenido del registro W y el registro 'f'. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] XORWF f,d Flags afectados: Z Ejemplo: XORWF REG,1 Antes de la instrucción: REG=0xAF, W=0xB5 Después de la instrucción: REG=0x1A, W=0xB5 NOP: No realiza Sintaxis:

ninguna

No operacion, solo consume [etiqueta]

Instrucciones BCF: Borra Sintaxis: Ejemplo: Antes

orientadas el de

Borra bit [etiqueta] la

un

ciclo

a un 'b'del

bits bit 'f' f,b REG,0 REG=b'01101101'

registro BCF

BCF instrucción:

operacion de reloj NOP

12

Después BSF: Activa Sintaxis: Ejemplo: Antes Después

de

la

instrucción:

Activa bit [etiqueta]

el de de

REG=b'01101100' un

'b'

del BSF

BSF instrucción: instrucción:

la la

bit 'f' f,b REG,2 REG=b'01001001' REG=b'01001011'

registro

BTFSC: Checa un bit y salta si es 0 Si el bit "b" del registro "f" es 0, se salta una instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] BTFSC f,b BTFSS: Checa un bit y salta si es 1 Si el bit "b" del registro "f" es 1, se salta una instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] BTFSS f,b Instrucciones

orientadas

a

constantes

y

de

control

ANDLW: W AND literal Realiza la operación lógica AND entre el registro W y la constante "k". El resultado se almacena en el registro W. Sintaxis: [label] ANDWL k Flags afectados: Z Ejemplo: ANDLW 0x5F Antes de la instrucción: W=0xA3 Después de la instrucción: W=0x03 CALL: Llamada a subrutina Llamada y salto a subrutina. La dirección de retorno se guarda en el stack. La constante "k" de 8 bits forma la dirección de salto y se carga en los bits del PC. Los bits del PC se cargan con los bits del registro "STATUS". PC se pone a 0. Sintaxis: [etiqueta] CALL k Ejemplo: INICIO CALL DESTINO Antes de la instrucción: PC=INICIO Después de la instrucción: PC=DESTINO CLRWDT: Borra el watchdog timer Esta instrucción borra tanto el "watchdog" como el prescaler. Los bits TO y PD del registro de estado se ponen a "1". Sintaxis: [label] CLRWDT Flags afectados: TO, PD GOTO:

Salto

incondicional 13

Se trata de un salto incondicional. Los 9 bits de la constante "k" que forman la instrucción, se cargan en los bits del PC y forman la dirección de salto. Los bits del PC se cargan con los bits del registro de estado. Sintaxis: [etiqueta] GOTO k Ejemplo: INICIO GOTO DESTINO Antes de la instrucción: PC=0 Después de la instrucción: PC=DESTINO IORLW: W OR literal Se realiza la función lógica OR entre el registro W y la contante "k". El resultado se almacena en el registro W. Sintaxis: [etiqueta] IORLW k Flags afectados: Z Ejemplo: IORLW Ox35 Antes de la instrucción: W=0x9A Después de la instrucción: W=0xBF MOVLW: Carga un literal en W El registro W se carga con el valor de 8 bits expresado mediante la literal "k". Sintaxis: [etiqueta] MOVLW k Ejemplo: MOVLW 0x5A Después de la instrucción: W=0x5A RETURN: Regresa de una subrutina El programa regresa de la subrutina y ejecuta la instruccion que sigue a CALL Sintaxis: [etiqueta] RETURN

RETLW: Regresa de una subrutina y carga el valor K en W El programa regresa de la subrutina y carga el valor de 8 bits del registro k en el registro W Sintaxis: [etiqueta] RETLW,k Ejemplo: RETLW,0x45 Antes de la instruccion: W=xx Despues de la instruccion: W=0x45 RETFIE: Sintaxis:

Regresa

de

la [etiqueta]

rutina

de

servicio RETFIE

SLEEP: Entra en estado de reposo Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se borran.Al entrar en el modo SLEEP, se detiene el oscilador. Sintaxis: [etiqueta] SLEEP Flags afectados: TO, PD, GPWUF 14

XORLW: W XOR literal Realiza la función lógica OR exclusiva entre el contenido del registro W y la constante "k" de 8 bits. El resultado se almacena en el registro W. Sintaxis: [etiqueta] XORLW k Flags afectados: Z Ejemplo: XORLW 0xAF Antes de la instrucción: W = 0xB5 Después de la instrucción: W = 0x1A SUBLW: Resta L W A una constante "k" de 8 bits se le resta el registro W. El resultado es guardado en el mismo registro W. Sintaxis: [etiqueta] SUBLW k Flags afectados: C,DC,Z MOVWF: Mover el valor del registro W al El contenido del registro ‘W’ se mueve al Sintaxis: [etiqueta] MOVWF Flags afectados: Ejemplo: MOVWF Antes de la instrucción: REG=0x03, Después de la instrucción: REG=0xA4, W=0xA4

registro registro

f ‘f’. f Ninguno REG W=0xA4

Y estas son las 35 instrucciones que podemos utilizar para programar los microcontroladores PIC. La razon para que solo se utilicen 35 instrucciones en la programacion es que los PIC son microcontroladores RISC, y estas instrucciones estan bien optimizadas para tener una mayor velocidad de trabajo, una arquitectura mas simple y un codigo mas compacto. 1.5.5 Distribución de terminales. Patas 1, 2, 3, 17 y 18 (RA0-RA4/TOCKI): Es el PORT A. Corresponden a 5 líneas bidireccionales de E/S (definidas por programación). Es capaz de entregar niveles TTL cuando la alimentación aplicada en VDD es de 5V ± 5%. El pin RA4/TOCKI como entrada puede programarse en funcionamiento normal o como entrada del contador/temporizador TMR0. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger), puede reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto; por lo tanto se debe poner una resistencia de pull-Up (resistencia externa conectada a un nivel de cinco voltios, ...no te preocupes, mas abajo lo entenderás mejor). Como salida, la lógica es inversa: un "0" escrito al pin del puerto entrega a la salida un "1" lógico. Este pin como salida no puede manejar cargas como fuente, sólo en el modo sumidero. 15

Patas 1, 2, 3, 17 y 18 (RA0-RA4/TOCKI): Es el PORT A. Corresponden a 5 líneas bidireccionales de E/S (definidas por programación). Es capaz de entregar niveles TTL cuando la alimentación aplicada en VDD es de 5V ± 5%. El pin RA4/TOCKI como entrada puede programarse en funcionamiento normal o como entrada del contador/temporizador TMR0. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger), puede reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto; por lo tanto se debe poner una resistencia de pull-Up (resistencia externa conectada a un nivel de cinco voltios, ...no te preocupes, mas abajo lo entenderás mejor). Como salida, la lógica es inversa: un "0" escrito al pin del puerto entrega a la salida un "1" lógico. Este pin como salida no puede manejar cargas como fuente, sólo en el modo sumidero. Pata 4 (MCLR / Vpp): Es una pata de múltiples aplicaciones, es la entrada de Reset (master clear) si está a nivel bajo y también es la habilitación de la tensión de programación cuando se está programando el dispositivo. Cuando su tensión es la de VDD el PIC funciona normalmente. Patas 5 y 14 (VSS y VDD): Son respectivamente las patas de masa y alimentación. La tensión de alimentación de un PIC está comprendida entre 2V y 6V aunque se recomienda no sobrepasar los 5.5V. Patas 6, 7, 8, 9, 10, 11, 12, 13 (RB0-RB7): Es el PORT B. Corresponden a ocho líneas bidireccionales de E/S (definidas por programación). Pueden manejar niveles TTL cuando la tensión de alimentación aplicada en VDD es de 5V ± 5%. RB0 puede programarse además como entrada de interrupciones externas INT. Los pines RB4 a RB7 pueden programarse para responder a interrupciones por cambio de estado. Las patas RB6 y RB7 se corresponden con las líneas de entrada de reloj y entrada de datos respectivamente, cuando está en modo 16

programación

del

integrado.

Patas 15 y 16 (OSC1/CLKIN y OSC2/CLKOUT): Corresponden a los pines de la entrada externa de reloj y salida de oscilador a cristal respectivamente.

1.5.6 El reset y sus posibles fuentes.

MCLR (Master Clear Reset) El MCLR es un pin del microcontrolador que se utiliza como entrada para las funciones de programación. Sin embargo es una fuente de Reset durante la operación normal del dispositivo cuando se encuentra activo bajo (a 0V). Para evitar comportamientos inapropiados el sistema maneja un filtro contra ruido que ignora pequeños pulsos. Durante el modo SLEEP ( Power-down Mode) en el cual el PIC se encuentra en estado de bajo consumo de corriente y que puede ser ejecutado mediante la instrucción sleep , el microcontrolador puede ser “despertado” a través de un valor de 0V en el pin MCLR, lo cual también generara una nueva condición de RESET en el dispositivo. Watchdog Timer (WDT) El Watchdog Timer es un oscilador RC que esta activo de manera independiente dentro del microcontrolador y que no requiere componentes externos para su funcionamiento. Esto significa que este oscilador sigue corriendo aun si la fuente de reloj en los pines OSC1/CLKIN y OSC2/CKLOUT es detenida, por ejemplo, cuando es ejecutada la instrucción sleep. El WDT posee un periodo de tiempo nominal de 18 ms (sin prescaler), aunque este valor puede variar de acuerdo a la temperatura y a condiciones externas del PIC. Si el valor del WDT se desborda, lo cual significa que llega al limite de su periodo se genera una condición de RESET. Prescalizando el WDT con una relación de 1:128 lo cual puede ser asignado mediante software escribiendo en el registro OPTION _REG, el máximo periodo alcanzado puede ser de 2.3 segundos. Desbordamiento del WDT mientras sé esta en modo SLEEP. Si el microcontrolador se encuentra en modo de bajo consumo de corriente (SLEEP), el valor del Watchdog Timer se borra al entrar en ese estado, pero este sigue activo, si se produce un desbordamiento del WDT durante el modo SLEEP el dispositivo “despertara”, creando una condición de RESET y seguirá con su operación normal.

17

Power-On Reset (POR): Una condición de Power-On Reset es generada a través de un pulso dentro del PIC, cuando se detecta una variación en el voltaje de alimentación V DD en el rango de 1.2V a 1.7V. Para evitar esta condición de Reset es necesario conectar el pin MCLR (a través de una resistencia) directamente a V DD, con lo que se consigue eliminar componentes RC externos que pueden dar lugar a un POR. Power-up Timer (PWRT): Para evitar la posibilidad de un reset debido a POR, el dispositivo también posee un bit de configuración PWRTE(Power-Up Timer Enable) que puede habilitar o deshabilitar la acción de PWRT (Power-Up Timer), este mecanismo que opera con un oscilador interno RC, provee un retardo de 72 ms (en los cuales el PIC se mantiene en RESET) a partir de una condición de POR generalmente originada cuando el microcontrolador es conectado a la fuente de alimentación debido al cambio de la señal DC permitiendo que el voltaje de alimentación V DD llegue hasta un nivel aceptable de operación para el microcontrolador.

Oscillator Start-up Timer (OST) Existe también otra fuente de retardo dada a través del OST (Oscillator Start-Up Timer), esta característica del microcontrolador provee un retardo de 1024 ciclos del oscilador (de la entrada OSC1) después que el retardo de PWRTtermina. Esto para asegurar que el oscilador utilizado se ha activado y esta estable. (únicamente para modo XT, LP Y HS). Cuando el voltaje de alimentación V DD crece desde 0V hasta su valor final muy lentamente, es probable que la suma de estos retardos acabe antes que el microcontrolador pueda tener un voltaje V DD adecuado. En este caso un circuito externo para evitar una condición de POR puede ser necesario. 1.6 Características de la fuente de alimentación y consumo de potencia del microcontrolador. Normalmente el microcontrolador e alimenta con 5 voltios aplicados entre los pines Vdd (Vcc) y Vss (Gnd), que son, respectivamente, la alimentación y la masa (tierra) del chip./ /El consumo de corriente para el funcionamiento del microcontrolador depende de la tensión de alimentación, de la frecuencia de trabajo y de la carga que soporten su salida, siendo del orden de unos miliamperios. El circuito de alimentación de microcontrolador debe tratarse como el de cualquier otro dispositivo digital, debiendo conectarse un condensador de desacoplo de unos 100nF (hasta 0.1uF), lo más cerca posible de los pines de alimentación. / / 18

19

1.7 Ambiente integrado de desarrollo (IDE) Entorno de Desarrollo Integrado (IDE). Un entorno de desarrollo integrado, es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, PHP, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto. Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este es el caso de Eclipse, al que mediante plagios se le puede añadir soporte de lenguajes adicionales. Un IDE debe tener las siguientes características:          

Multiplataforma Soporte para diversos lenguajes de programación Integración con Sistemas de Control de Versiones Reconocimiento de Sintaxis Extensines y Componentes para el IDE Integración con Framework populares Depurador Importar y Exportar proyectos Múltiples idiomas Manual de Usuarios y Ayuda

Componentes       

Editor de texto. Compilador. Intérprete. Herramientas de automatización. Depurador. Posibilidad de ofrecer un sistema de control de versiones. Factibilidad para ayudar en la construcción de interfaces gráficas de usuarios.

Ventajas de los IDEs.  

La curva de aprendizaje es muy baja. Es más ágil y óptimo para los usuarios que no son expertos en manejo de consola. 20

   

Formateo de código. Funciones para renombrar variables, funciones. Warnings y errores de sintaxis en pantalla de algo que no va a funcionar al interpretar o compilar. Poder crear proyectos para poder visualizar los archivos de manera gráfica.

1.7.1 Ensamblador y compilador. Ensamblador se refiere a un tipo de programa, informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina ejecutable directamente por la máquina para la que se ha generado. La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina. ENSAMBLADORES CRUZADOS: Se denominan así a los ensambladores que se utilizan en una computadora que posee el procesador diferente al que tendrán las computadoras donde se va a ejecutar el programa objeto producido. Son aquellas que permanecen en la memoria principal de la computadora y cargar para su ejecución al programa objeto producido. Un compilador es querer traducir un programa de un lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje máquina). Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (código fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (código objeto). 1.7.2 Simulador, debugger y emulador. Emulador Un emulador (imitar lo que otro hace, procurando ventaja) es un programa capaz de actuar de intérprete en la máquina destino (nuestra PC o en una Mac, por ejemplo) para que un software originalmente escrito para otra plataforma pueda ser ejecutado en ella (PalmOS en nuestro caso). El emulador traduce el código de la máquina original al código de la de destino (nuestra PC), por lo que nuestra computadora ni siquiera sabe que está comportándose como otra plataforma (otro sistema operativo diferente al que ejecuta por defecto), y tan solo ejecuta el programa siguiendo su propio juego de instrucciones, pero adaptado desde la plataforma original.

Simulador

21

Simular (que simula o finge). Aparato o instalación que simula un fenómeno o reproduce el funcionamiento de una máquina, vehículo, etc. Es muy utilizado en adiestramientos. Para comprender mejor la diferencia entre un emulador y un simulador un simulador solo trata de reproducir el comportamiento del programa, El simulador de la unidad central de procesamiento (CPU) es a menudo la parte más compleja de un emulador. Muchos emuladores son escritos utilizando simuladores de CPU "preempaquetados", para así poder realizar una emulación fiel y eficiente de una máquina específica.

Un depurador (en inglés, debugger) Es un programa usado para probar y depurar (eliminar) los errores de otros programas (el programa "objetivo"). El código a ser examinado puede alternativamente estar corriendo en un simulador de conjunto de instrucciones (ISS), una técnica que permite gran potencia en su capacidad de detenerse cuando son encontradas condiciones específicas pero será típicamente algo más lento que ejecutando el código directamente en el apropiado (o el mismo) procesador. Algunos depuradores ofrecen dos modos de operación - la simulación parcial o completa, para limitar este impacto. Típicamente, los depuradores también ofrecen funciones más sofisticadas tales como correr un programa paso a paso (un paso o animación del programa), parar el programa (breaking), es decir, pausar el programa para examinar el estado actual en cierto evento o instrucción especificada por medio de un breakpoint, y el seguimiento de valores de algunas variables. Algunos depuradores tienen la capacidad de modificar el estado del programa mientras que está corriendo, en vez de simplemente observarlo. También es posible continuar la ejecución en una posición diferente en el programa bypaseando un estrellamiento o error lógico. 1.7.3 Equipos programadores (downloaders). PICkit es una familia de programadores para microcontroladores PIC fabricados por Microchip Technology . Se utilizan para programar y depurar microcontroladores, así como el programa EEPROM. Algunos modelos también cuentan con una herramienta de análisis lógico y comunicaciones en serie ( UART ). PICkit 1 El PICkit 1 - presentado el 31 de marzo de 2003 por US $ 36 fue un rudimentario programador USB para microcontroladores PIC , producido por Microchip Technology , el fabricante de la serie PIC de microcontroladores. Se integró en una placa de demostración, con ocho LED , un interruptor y 22

un potenciómetro . Su programa por defecto, explicado en la documentación, gira los LEDs en serie. La dirección y la velocidad de rotación de la pantalla luminosa se pueden cambiar con el botón y el potenciómetro en la tarjeta PICkit. PICkit2 El PICkit 2 - introducido en mayo de 2005 reemplazó al PICkit 1. La diferencia más notable entre los dos es que el PICkit 2 tiene una unidad programadora / depuradora separada que se conecta a la placa que lleva el chip a programar, PICkit 1 era una sola unidad. Esto hace posible usar el programador con una tarjeta de circuito personalizado a través de una cabecera de programación en serie del circuito (ICSP). Sin embargo, esta característica no está destinada a la llamada programación de "producción". El PICkit 2 utiliza un PIC18F2550 interno con USB FullSpeed. El último firmware PICkit 2 permite al usuario programar y depurar la mayoría de los miembros PICmicro y dsPIC de 8 y 16 bits de la línea de productos Microchip. PICkit 3 Microchip ha pasado a fabricar el PICkit 3, una variación del PICkit 2 con el mismo factor de forma y un nuevo caso translúcido. Cuenta con un procesador PIC24F de 16 bits más rápido y un rango de regulación de voltaje más amplio. Hay algunas quejas de no ser tan confiable como el Pickit 2. Tanto el PICkit 2 como el PICkit 3 tienen reguladores de voltaje internos de conmutación. Esto les permite, en el caso del PICkit 2, generar voltajes de 2,5 a 5 voltios, o en el caso del PICkit 3, de 2,5 a 5,5 voltios, desde un suministro USB de 5 V, a unos 100 mA. Ambos tienen opciones para calibrar la salida con un multímetro, para mayor precisión. Adicionalmente, para algunos PIC, se puede generar el voltaje de programación MCLR, en torno a 13 a 14 voltios. Este voltaje es necesario para reprogramar la memoria flash. El K150 es un programador de PICs de bajo costo que soporta los microcontroladores más populares de Microchip.

Orange 5 es un dispositivo de programación profesional para la memoria y los microcontroladores. La característica única de los programadores de la serie actual se construye el lenguaje de macros para escribir protocolos, lo que da la capacidad de rápida y fácil de añadir nuevos tipos de esquemas de micro, cumpliendo con precisión los requisitos de los fabricantes de leer algoritmos de lectura / escritura. 1.8 Herramientas de desarrollo. Piklab 23

Es un entorno de desarrollo integrado (IDE) para aplicaciones basadas en microchip PIC y microcontroladores dsPIC similares al entorno MPLAB . Se integra con varios toolchains del compilador y del ensamblador (como gputils, sdcc, c18) y con el simulador de GPSim. Soporta los programadores más comunes (serial, paralelo, ICD2, Pickit2, PicStart +), el depurador ICD2 y varios cargadores de arranque (Tiny, Pickit2 y Picdem). MPLAB X IDE Es un programa de software que se ejecuta en un PC (Windows ® , Mac OS ® , Linux ® ) para desarrollar aplicaciones para microcontroladores Microchip y controladores de señales digitales. Se llama un entorno de desarrollo integrado (IDE), ya que proporciona un único "entorno" integrado para desarrollar código para microcontroladores integrados. El entorno de desarrollo integrado de MPLAB X trae muchos cambios a la cadena de herramientas de desarrollo de microcontroladores PIC ® . A diferencia de versiones anteriores del MPLAB IDE que se desarrollaron completamente en casa, MPLAB X IDE se basa en el IDE NetBeans de código abierto de Oracle. Tomar este camino nos ha permitido agregar muchas características frecuentemente solicitadas de forma muy rápida y sencilla, al tiempo que nos proporciona una arquitectura mucho más extensible para ofrecerle aún más nuevas características en el futuro.

24