Sunteți pe pagina 1din 292

Captulo 1: El Mundo de los Microcontroladores

La situacin nos encontramos hoy en el campo de los microcontroladores tiene sus inicios en el desarrollo de la tecnologa de circuitos integrados. Esto nos permiti almacenar cientos de miles de transistores en un chip, que era una condicin previa para la fabricacin de microprocesadores. Las primeras computadoras se hicieron mediante la adicin de perifricos, tales como las lneas de memoria, entrada / salida, temporizadores y otros circuitos, a la misma. Mayor incremento en la densidad de paquete result en el diseo de un circuito integrado que contena tanto el procesador y los perifricos. As es como el primer chip con una microcomputadora integrada, ms tarde conocido como el microcontrolador, se ha desarrollado.

1.1 Introduccin 1.2 NMEROS, NMEROS, NMEROS ... 1.3 debe conocer los detalles 1.4 Microcontroladores PIC

1.1 INTRODUCCIN
Novicios en electrnica piensa generalmente que el microcontrolador es el mismo que el microprocesador. Eso no es cierto. Se diferencian unas de otras muchas maneras. La diferencia primera y ms importante a favor del microcontrolador es su funcionalidad. A fin de que el microprocesador para ser utilizado, otros componentes, en primer lugar la memoria, se debe aadir a la misma. Aunque se considera una mquina de computacin potente, no es capaz de establecer una comunicacin directa con los perifricos. En su lugar, los circuitos especializados debe ser utilizado para este propsito. Esto es lo que era en el principio y sigue siendo la misma hoy en da.

Por otro lado, el microcontrolador est diseado para ser todo ello en una. No hay otros componentes perifricos especializados son necesarios para su funcionamiento como todos los circuitos necesarios, que de otra forma pertenecen a los perifricos, ya se han construido en l. Se ahorra tiempo y del espacio necesario en el diseo de un dispositivo.

TODO EL MICROCONTROLADOR ES CAPAZ DE


Los microcontroladores son muy populares hoy en da. Solo presta atencin al ejemplo de abajo y usted entender las razones de su gran xito. No va a tomar mucho de su tiempo, slo un par de minutos. Alrededor de hace diez aos, el proceso de disear un dispositivo electrnico para controlar un ascensor en un edificio de varios pisos fue extremadamente difcil, incluso para un equipo de expertos. Alguna vez has pensado en lo que los requisitos de un elevador normal tiene que cumplir? Cmo lidiar con la situacin cuando dos o ms personas lo llaman el mismo ascensor, al mismo tiempo? Cul llamada tiene la prioridad? Cmo manejar las preguntas de seguridad? La prdida de electricidad? Error en la operacin? El mal uso?Despus de resolver estas cuestiones bsicas, un proceso difcil de disear una electrnica adecuada utilizando un gran nmero de chips de propsito especial que viene a continuacin. Dependiendo de la complejidad del dispositivo, dicho proceso puede tardar semanas, incluso meses. Entonces es el momento para hacer una placa de circuito impreso y montaje del dispositivo. Un dispositivo de enorme! Se trata de otra obra de larga duracin y tratar. Por ltimo, cuando el dispositivo est terminado y probado muchas veces, el momento crucial viene. El momento en el que tomar una respiracin profunda y cambiar la fuente de alimentacin. La fiesta ha terminado en este punto, los dispositivos electrnicos casi nunca empiezan a operar de inmediato. Preprese para muchas noches sin dormir, correcciones, mejoras ... y no te olvides, todava estamos hablando sobre la ejecucin de un elevador normal. Cuando el dispositivo funciona perfectamente y por ltimo todo el mundo est satisfecho y le pagan por el trabajo que han hecho, otras empresas de la construccin se interesen en su trabajo. Por supuesto, si tienes suerte, otro da le traer una oferta de bloqueo de un nuevo inversor. Un nuevo edificio tiene cuatro pisos ms. Sabes lo que es todo esto? Crees que puedes controlar el destino? Usted va a hacer un dispositivo universal que puede ser utilizado en edificios de 4 a 40 historias, una obra maestra de la electrnica? Incluso si te las arreglas para hacer esa joya de la electrnica, el inversor va a esperar frente a su puerta pidiendo una cmara en el ascensor. O para escuchar msica relajante en caso de avera del ascensor. O para un ascensor de dos puertas. De todos modos, la ley de Murphy es inexorable y que no van a ser capaces de hacer provecho de todo el esfuerzo que han hecho. Por desgracia, todo lo dicho hasta ahora es cierto. Esto es lo que el manejo de la electrnica "realmente significa. No, no, espera, vamos a corregir, as es como fue sino hasta los primeros microcontroladores fueron diseados pequeos dispositivos, potente y barata. Desde el momento en su programacin dej de ser una ciencia, todo ha ido en otra direccin ... Electrnica capaces de controlar un pequeo submarino, una gra o un ascensor ahora se construyen en un solo chip.Microcontroladores ofrecen una amplia gama de aplicaciones, pero slo unos pocos de ellos se utilizan normalmente. Depende de usted decidir lo que quieres de el microcontrolador y volcar un programa de acuerdo con las instrucciones apropiadas en ella. Antes de encender el aparato, su

funcionamiento debe ser probado por simulacin. Si todo funciona bien, la construccin del microcontrolador en el dispositivo. Si alguna vez tiene que cambiar, mejorar o actualizar el programa, simplemente lo hacemos. Hasta cundo? Hasta que usted se sienta satisfecho. Eso es todo.

Saba usted que todas las personas se pueden clasificar en uno de los 10 grupos-aquellos que estn familiarizados con el sistema numrico binario y los que no estn familiarizados con ella. T no lo

entiendes? A continuacin, siguen perteneciendo a este ltimo grupo. Si desea cambiar su estado de leer el siguiente texto que describe brevemente algunos de los conceptos bsicos que se utilizan ms en este libro (slo para estar seguros de que estamos en la misma pgina).

1.2 NMEROS, NMEROS, NMEROS ...


La matemtica es una ciencia tan buena! Todo es tan lgico ... Todo el universo puede ser descrito con diez dgitos solamente. Pero, realmente tiene que ser as? Necesitamos exactamente diez dgitos? Por supuesto que no, es slo una cuestin de hbito. Recuerda las lecciones de la escuela. Por ejemplo, qu significa el nmero 764 media: cuatro unidades, seis decenas y cientos siete. Es tan simple como eso! Podra ser descrito de una manera ms complicada? Por supuesto: 4 + 60 + 700. An ms complicado? En definitiva: 4 * 1 + 6 + 7 * 10 * 100. Podra este nmero parezca ms cientfica? La respuesta es s otra vez: 4 * 10 + 6 * 10 * + 7 10 exactamente estos nmeros: 10
0, 0 1 2.

Qu significa realmente? Por qu utilizamos

10 y 10

2?

Por qu siempre tiene que ver el nmero 10?La respuesta

es porque se utiliza diez dgitos diferentes (0, 1, 2, ... 8, 9). En otras palabras, se utiliza el sistema de base 10 el nmero, es decir, numrico decimal.

Sistema numrico BINARIO


Qu pasara si slo dos dgitos, se utilizaron-0 y 1? O si no, no sabe cmo determinar si algo es de 3 o 5 veces mayor que otra cosa? O si se restringe cuando se comparan dos tamaos, es decir, si tan slo pudiramos decir que algo existe (1) o no existe (0)? La respuesta es 'nada especial', se seguira utilizando los nmeros de la misma manera como lo hacemos ahora, pero sera un poco diferente. Por ejemplo: 11011010. Cuntas pginas de un libro es el nmero 11011010 se incluyen? Con el fin de enterarse de que, slo tienes que seguir la misma lgica que en el ejemplo anterior, pero en orden inverso. Como se puede ver aqu, todo est basado en slo dos dgitos, 0 y 1, es decir, en el sistema base-2 numrico (sistema numrico binario).

Es claramente el mismo nmero representado en dos sistemas numricos diferentes. La nica diferencia entre estos dos formatos es el nmero de dgitos que los componen. Un dgito (2) se utiliza para escribir el nmero 2 en sistema decimal, mientras que dos dgitos (1 y 0) se utilizan para su escritura en sistema binario. Actualmente, de acuerdo en que hay 10 grupos de personas? Bienvenido al mundo de la aritmtica binaria! Tiene usted alguna idea de dnde se utiliza? Excepto en condiciones de laboratorio estrictamente controladas, incluso los circuitos electrnicos ms complejos no puede determinar con precisin la diferencia entre dos tamaos (dos valores de tensin, por ejemplo) si son demasiado pequeos (inferiores a varios voltios). La razn para ello radica en el ruido y algo que se conoce como un "entorno de trabajo real" (los cambios impredecibles de la tensin de alimentacin, cambios de temperatura, la tolerancia a los valores de los componentes integrados, etc.) Imagine una computadora que opera en los nmeros decimales mediante la interpretacin de la siguiente manera: 0 = 0V, 1 = 5V, 2 = 10 V, 3 = 15V, 20V = 4 ... 9 = 45V. Alguien dijo bateras? Una solucin mucho ms simple es la lgica binaria en la que 0 indica que no hay tensin y 1 indica que hay una tensin. Es ms fcil escribir 0 o 1 en lugar de oraciones completas "no hay tensin" o "hay una tensin ', respectivamente. Se trata de un cero lgico (0) y un uno lgico (1) que hace frente a la electrnica perfectamente, y fcilmente lleva a cabo todas las operaciones matemticas infinitamente complejas. Obviamente, la electrnica estamos hablando de matemticas aplicadas en la que todos los nmeros estn representados por dos dgitos solamente y donde slo es importante saber si hay una tensin o no. Por supuesto, estamos hablando de la electrnica digital.

SISTEMA hexadecimales
En el comienzo del desarrollo de la computadora haba muchos problemas cuando se trabaja con nmeros binarios. Por esta razn, un nuevo sistema numrico, el uso de 16 smbolos diferentes y se estableci un llamado sistema numrico hexadecimal. Se compone de diez dgitos que se usan para (0, 1, 2, 3, ... 9) y seis letras del alfabeto A, B, C, D, E y F. Usted probablemente se preguntar cul es el

propsito de este aparente extraa combinacin? Basta con mirar lo bien que encaja la historia de los nmeros binarios y lo comprenders.

El mayor nmero que puede ser representado por 4 dgitos binarios es el nmero 1111. Se corresponde con el nmero 15 en un sistema decimal, mientras que se representa por la letra F en sistema hexadecimal. Es el mayor nmero de 1 dgito en el sistema hexadecimal.Ves cmo con habilidad se utiliza? El mayor nmero escrito con ocho dgitos binarios es al mismo tiempo el ms grande 2-dgitos hexadecimales. Recuerde que utilizan los ordenadores de 8 dgitos binarios. Coincidencia?

Cdigo BCD
Un cdigo BCD es un cdigo binario de los nmeros decimales (slo previa ponga B-C Oded ecimal D). Se compone de nmeros binarios cuatro dgitos que representan los diez primeros dgitos (0, 1, 2, 3 ... 8, 9). A pesar de que cuatro bits pueden dar 16 combinaciones posibles en total, el cdigo BCD hace ventaja de los primeros diez solamente.

NMERO DE CONVERSIN DEL SISTEMA


El sistema numrico binario es el ms comnmente usado, el sistema decimal es el ms comprensible, mientras que el sistema hexadecimal es en algn punto intermedio. Por lo tanto, es muy importante para aprender a convertir los nmeros de un sistema numrico a otro, es decir, cmo convertir una secuencia de ceros y unos en los valores comprensibles.

Conversin binario nmero decimal


Mismos dgitos en un nmero binario tienen valores diferentes en funcin de su posicin en ese nmero. Cada posicin puede contener 1 o 0 y su valor puede ser fcilmente determinado por el recuento de su posicin desde la derecha. Para realizar una conversin binario nmero decimal es necesario multiplicar dgitos (0 o 1) con su valor de posicin (2
0,

1, 2

2, 2 etc) y aadir todos los resultados. La

magia de la conversin binario decimal funciona ... Mira el siguiente ejemplo:

Para que los nmeros decimales de 0 a 3 para ser representados, lo que necesita slo dos dgitos binarios. Para un mayor nmero, los dgitos binarios adicionales deben ser utilizados. As, a fin de que los nmeros decimales de 0 a 7 para ser representados, tres dgitos binarios son necesarios, de los nmeros del 0 al 15, cuatro dgitos etc En pocas palabras, el mayor nmero binario que consta de n dgitos se obtiene cuando la base 2 se provoca por ny el resultado respectivo se resta por 1. Por ejemplo, si n = 4: Febrero
4a

1 = 16 - 1 = 15

En consecuencia, 4 dgitos binarios le permiten representar nmeros decimales de 0 a 15, lo que equivale a 16 valores diferentes en total.

PARA LA CONVERSIN HEXADECIMAL nmero decimal


Para realizar una conversin hexadecimal a decimal, cada dgito hexadecimal debe ser multiplicado por 16 planteada por su valor de posicin y despus de eso, los resultados obtenidos deben ser agregados. Por ejemplo:

Hexadecimal a nmero binario CONVERSIN


No es necesario realizar ningn clculo para convertir nmeros hexadecimales en binario. Los dgitos hexadecimales son simplemente reemplazados por dgitos binarios correspondientes. Puesto que el valor mximo de un dgito hexadecimal es equivalente a nmero decimal 15, es necesario el uso de cuatro dgitos binarios para representar un dgito hexadecimal. Por ejemplo:

Un cuadro comparativo de la izquierda muestra los valores de los nmeros 0-255 representados en tres diferentes sistemas numricos.Esta es probablemente la forma ms fcil de entender la lgica comn aplicado a todos los sistemas numricos.

Nmeros que marcan


El sistema de numeracin hexadecimal es, junto con los sistemas numricos binario y decimal, considerado el ms importante para nosotros. Es fcil convertir cualquier nmero hexadecimal a binario. Tambin es fcil de recordar. Sin embargo, este tipo de conversiones pueden confundirnos. Por ejemplo, qu significa la frase "Es necesario contar hasta 110 productos en la lnea de ensamblaje" significa realmente? Dependiendo de si se trata de sistema binario, decimal o hexadecimal, el resultado podra ser de 6, 110 o 272 productos, respectivamente. Para evitar estas situaciones y otras similares, diferentes prefijos y sufijos se agregan directamente a los nmeros. Los prefijos $ y nmeros hexadecimales 0x marca. Por ejemplo, 10AF nmero hexadecimal se ve, ya sea como $ 10AF o 0x10AF. Del mismo modo, los nmeros binarios generalmente obtiene el prefijo%. Si un nmero no tiene ni sufijo ni prefijo se considera decimal.Desafortunadamente, esta forma de nmeros que marcan no est estandarizado, sin embargo, depende de la aplicacin especfica.

BIT

En teora, un bit es la unidad bsica de informacin ... Vamos a olvidar esto por un momento y echar un vistazo a lo que es en la prctica.La respuesta es: nada especial, un poco es slo un dgito binario. Al igual que en el sistema de numeracin decimal, donde los mismos dgitos de un nmero no tiene el mismo valor (por ejemplo, los dgitos en el nmero decimal 444), la 'importancia' de bits depende de su posicin en el nmero binario. A diferencia del sistema numrico decimal, dgitos binarios que no se les conoce como las unidades, decenas, etc, pero el bit cero (poco ms a la derecha), primer bit (segundo desde la derecha), etc Dado que el sistema binario utiliza slo dos dgitos diferentes (0 y 1) , el valor de un bit puede ser 0 o 1. No se confunda si te encuentras con un poco tener un valor de 4, 16 o 64. Esto significa que su valor se representa en el sistema decimal. Simplemente estamos tan acostumbrados a la utilizacin de nmeros decimales que tales expresiones son muy comunes.Sera correcto decir por ejemplo, "el valor del bit sexto de cualquier nmero binario es equivalente a 64 nmero decimal". Pero somos humanos y los hbitos viejos son duros de matar ... Adems, cmo sonara 'nmero uno-uno-cero-uno-cero ...'?

BYTE
Un byte se compone de ocho bits se agrupan. Si un bit es un dgito, entonces bytes representan nmeros. Todas las operaciones matemticas se puede realizar sobre ellos, al igual que al comn de nmeros decimales. Al igual que los dgitos de cualquier nmero, los dgitos de bytes no tiene el mismo significado que sea. El mayor valor tiene el bit de la izquierda llamado el bit ms significativo (MSB).El bit de la derecha tiene el menor valor y por eso se llama el bit menos significativo (LSB). Desde ocho ceros y unos de un byte puede ser combinado en 256 formas diferentes, el nmero ms grande decimal que puede ser representado por un byte es 255 (una combinacin representa un cero). Un mordisco se conoce como medio de un byte. En funcin de la media del registro que estamos hablando (a la izquierda oa la derecha), hay "alto" y "bajo" mordiscos, respectivamente.

Te has preguntado lo que la electrnica dentro de circuitos integrados digitales, microcontroladores o procesadores parece? Qu circuitos de realizar complicadas operaciones matemticas y la toma de decisiones parece? Sabe usted que sus esquemas aparentemente complicadas comprenden slo unos pocos componentes diferentes llamados circuitos lgicos o compuertas lgicas?

1.3 debe conocer los detalles


El funcionamiento de circuitos lgicos se basa en los principios establecidos por un matemtico britnico George Boole en el medio del siglo 19, incluso antes de la primera bombilla fue inventada. Originalmente, la idea principal era expresar las formas lgicas a travs de funciones algebraicas. Pronto haba lugar a un producto real que, mucho despus, evaluados en lo que hoy se

conoce como AND, OR y NOT circuitos lgicos. El principio de la operacin se conoce como lgebra de Boole.

CIRCUITOS DE LGICA
Algunas de las instrucciones del programa dan los mismos resultados que las puertas lgicas. El principio de su funcionamiento se discutir ms adelante.

Y la puerta

La puerta lgica "Y" tiene dos o ms entradas y una salida. Vamos a suponer que la puerta utilizado en este ejemplo slo tiene dos entradas. Un uno lgico (1) aparecer en su salida solamente si ambas entradas (A y B) son impulsados alto (1). Tabla de la derecha muestra la dependencia mutua entre los insumos y de la puerta y de salida.

El principio de funcionamiento es el mismo, incluso cuando la puerta tiene ms de dos entradas: una lgica de un (1) aparecer en su salida solamente cuando todas las entradas son impulsados alto (1).Cualquier otra combinacin de tensiones de entrada dar como resultado un cero lgico (0) en su salida.Cuando se utiliza en el programa, la lgica y es realizado por una instruccin de programa que se discutirn ms adelante. Slo recuerde que la lgica y en el programa se refiere a los bits correspondientes de dos registros. O PUERTA

Del mismo modo, las puertas OR tambin tienen dos o ms entradas y una salida. Si la puerta tiene slo dos entradas se aplica lo siguiente. Un uno lgico (1) aparecer en la salida si cualquiera de las entradas (A o B) es excitada alta (1). Si la puerta O tiene ms de dos

entradas a continuacin, se aplica lo siguiente. Un uno lgico (1) aparece en su salida si al menos una entrada es excitada alta (1). Si todas las entradas estn a cero lgico (0), la salida ser a cero lgico (0) tambin.

En el programa, el peracin se realiza de la misma manera como la lgica y funcionamiento. NO PUERTA


La puerta lgica NO tiene slo una entrada y salida de un solo. Se opera de una manera extremadamente sencilla. Cuando un cero lgico (0) aparece en su entrada, un uno lgico (1) aparece en su salida y viceversa. Esto significa que esta puerta invierte la seal y por lo tanto, se llama a menudo inversor.

El NO lgica de funcionamiento en el programa se lleva a cabo en un byte. El resultado es un byte con los bits invertidos. Si los bits de bytes se consideran un nmero, el valor invertido es en realidad un complemento de los mismos. El complemento de un nmero es un valor que aade a ese nmero lo hace llegar al mayor nmero de 8 dgitos binarios. En otras palabras, la suma de un nmero de 8 dgitos y su complemento es siempre 255.

EXCLUSIVA O PUERTA

La puerta OR EXCLUSIVA (XOR) es un poco complicado en comparacin con otras puertas. Es una especie de combinacin de todos ellos. Un uno lgico (1) aparece en su salida slo cuando sus entradas tienen diferentes estados lgicos.

En el programa, la instruccin apropiada se utiliza comnmente para comparar dos bytes. La resta tiene el mismo propsito (si el resultado es 0, los bytes son iguales), pero la ventaja de la operacin lgica OR EXCLUSIVA es que nunca da resultados negativos.

REGISTRO
En resumen, un registro o una clula de memoria es un circuito electrnico que puede memorizar el estado de un byte.

SFR REGISTROS
Adems de los registros que no tienen ninguna funcin especial y predefinida, cada microcontrolador tambin tiene un nmero de registros especiales de funcin (SFR) la funcin de los cuales est predefinida por el fabricante. Sus bits estn conectados (literalmente) a los circuitos integrados dentro del microcontrolador tales como temporizadores, convertidores A / D, osciladores etc Esto significa que son directamente al mando de la operacin de estos circuitos, es decir, el microcontrolador. Imagnese ocho interruptores que controlan el funcionamiento de un pequeo circuito dentro del microcontrolador Registros de funciones especiales hacer exactamente eso.

En otras palabras, el estado de los bits de registro se cambia desde dentro del programa, registros ejecutar pequeos circuitos integrados dentro del microcontrolador, estos circuitos son a travs de pines del microcontrolador conectados a los perifricos que se utilizan para ... Bueno, le toca a usted decidir para qu.

ENTRADA / SALIDA DE PUERTOS


A fin de que el microcontrolador para ser til, tiene que estar conectada a la electrnica, perifricos adicionales, es decir. Cada microcontrolador tiene una o ms registros conectado al microcontrolador pines I / O. Estas conexiones hacen los puertos de E / S. Por qu de entrada / salida? Debido a que usted puede cambiar una funcin del pin como desee. Por ejemplo, supongamos que usted quiere que su dispositivo para activar / desactivar tres LED de seal y al mismo tiempo controlar el estado lgico de cinco sensores o pulsadores. Algunos de los puertos necesitan ser configurado para tener tres salidas (conectado a LED) y cinco entradas (conectado a los sensores). Se puede hacer fcilmente desde el software, lo que significa que una funcin pasador se puede cambiar durante la operacin.

Una de las caractersticas importantes de los pines de entrada / salida (I / O) es una corriente mxima que pueden manejar. Para la mayora de los microcontroladores, la corriente suministrada desde un pasador es suficiente para activar un LED o algn otro dispositivo de bajo consumo (10-20 mA). Otra caracterstica importante es un pasador de resistencia ascendente puede ser proporcionado. La resistencia de actuacin conecta el pin apropiado a la tensin de alimentacin positiva. Tambin se puede utilizar cuando el pasador est configurado como una entrada conectada a un interruptor o un botn pulsador. Las versiones posteriores de microcontroladores disponen de resistencias pull-up configurables por software. Cada puerto de E / S es generalmente bajo el control de un SFR, lo que significa que cada bit de registro que determina el estado del pin microcontrolador correspondiente. Por ejemplo, escribiendo un uno lgico (1) a algunos de los bits de registro, el pin del microcontrolador apropiado es automticamente configurado como una entrada. La tensin suministrada al pasador que es visible en su puerto como 0 o 1. De lo contrario, por escrito un cero lgico a la SFR, el pasador de puerto correspondiente est configurado como una salida. Tensin proporcionada en tales una patilla de salida (0V o 5V) refleja el estado del bit de registro apropiado (lgica 0 o 1, respectivamente).

Unidad de memoria
El mdulo de memoria es una parte del microcontrolador utilizado para el almacenamiento de datos. La forma ms sencilla de explicarlo es mediante la comparacin con un armario con muchos cajones. Supongamos, los cajones estn claramente marcados para permitir que sus contenidos pueden ser fcilmente disponibles mediante la lectura de las etiquetas en la parte frontal de los cajones. De la misma manera, cada direccin de memoria corresponde a una posicin de memoria. El contenido de cualquier lugar se puede acceder y leer por su direccin. Memoria puede ser escrito o leer.

Hay varios tipos de memoria dentro del microcontrolador: Memoria de slo lectura (ROM)
Memoria de slo lectura (ROM) se utiliza para guardar de forma permanente el programa a ejecutar por el microcontrolador. El tamao de un programa se escriba depende del tamao de esta memoria. Microcontroladores actuales utilizan comnmente de 16 bits de direccionamiento, lo que significa que son capaces de hacer frente a un mximo de 64 Kb de memoria, es decir, 65.535 lugares. Si usted es un principiante, el programa apenas se superan los cientos de instrucciones. Existen varios tipos de ROM.

Masked ROM (MROM)


Enmascarado ROM es un tipo especial de ROM cuyo contenido est determinado por el fabricante. 'Enmascarado' El trmino proviene del proceso de fabricacin, donde partes del chip estn enmascarados antes de que el proceso de fotolitografa. En caso de una produccin a gran escala, el precio es muy bajo. Olvdalo ...

Una hora ROM programable (OTP ROM)


Una ROM de tiempo programable le permite descargar un programa en l, pero, como su nombre lo indica, por una sola vez. Si se detecta un error despus de que el proceso de carga de un programa, lo nico que puedes hacer es cargar el programa en otro chip.

UV ROM programable y borrable (EPROM UV)

Tanto el proceso de fabricacin y caractersticas de la radiacin UV memoria EPROM son totalmente idnticos a OTP ROM. Sin embargo, el paquete del microcontrolador con esta memoria tiene una reconocible "ventana" en su lado superior. Se permite que los datos se borrarn bajo luz ultravioleta fuerte. Despus de unos minutos de tal 'tomar el sol' es posible cargar un nuevo programa en l. La instalacin de esta ventana es complicado, que normalmente afecta el precio. En nuestra opinin, por desgracia, negativo ... Memoria Flash
La memoria flash, conocida como la sucesora de la EPROM UV, se hizo en los aos 80 en los laboratorios de Intel. Dado que la memoria se puede escribir como un nmero prcticamente ilimitado de veces, los microcontroladores con memoria Flash ROM son ideales para el aprendizaje, la experimentacin y la produccin en pequea escala. Debido a su gran popularidad, la mayora de los microcontroladores se fabrican en la actualidad la tecnologa flash. Por lo tanto, si usted va a comprar un microcontrolador, el tipo que buscar es definitivamente Flash!

Memoria de acceso aleatorio (RAM)


Una vez que la fuente de alimentacin est apagado el contenido de la RAM se borra. Por consiguiente, se utiliza para almacenar datos temporales y resultados intermedios creados y utilizados durante el funcionamiento del microcontrolador. Por ejemplo, si el programa realiza una adicin, es necesario disponer de un registro que representa lo que en la vida cotidiana se llama la "suma". Por esta razn, uno de los registros de la RAM se llama la "suma" y se utiliza para almacenar los resultados de adicin.

ROM programable y borrable elctricamente (EEPROM)


El contenido de la EEPROM se puede cambiar durante la operacin (similar a la RAM), pero sigue siendo guardan de forma permanente, incluso despus de la prdida de potencia (similar a la ROM). En consecuencia, la EEPROM se utiliza a menudo para almacenar valores, creados durante la operacin, que deben ser permanentemente guardados. Por ejemplo, si se quiere disear una cerradura electrnica o una alarma, que sera genial para permitir al usuario crear e introducir la contrasea, pero es intil si se pierde cada vez que la fuente de alimentacin se apaga. La solucin ideal es un microcontrolador con un EEPROM integrado.

INTERRUMPIR
La mayora de los programas utilizan interrupciones en su ejecucin normal. El propsito del microcontrolador es principalmente para responder a los cambios en su entorno. En otras palabras, cuando una accin se lleva a cabo, el microcontrolador hace algo ... Por ejemplo, cuando se presiona un botn en un control remoto de televisin, el microcontrolador que registrarlo y responder al cambiar de un canal, subir el volumen o hacia abajo, etc Por lo tanto, el microcontrolador se pasan la mayor parte de su tiempo sin fin comprobar un par de botones durante horas o das, lo cual no es prctico en absoluto. Por ello, el microcontrolador se ha aprendido un truco durante su evolucin. En lugar de constante control de cada pin o bit, los delegados de microcontroladores de la "cuestin de espera" a un "especialista" que responda slo cuando la atencin pasa algo digno. Una seal que informa a la unidad central de proceso sobre dicha accin se llama una interrupcin.

BUS

Un bus se compone de 8, 16 o ms cables. Hay dos tipos de autobuses: el bus de direcciones y el bus de datos. El bus de direccin consiste en tantas lneas como sea necesario para el direccionamiento de memoria. Se utiliza para tranfer una direccin desde la CPU a la memoria. El bus de datos es tan ancha como datos, en este caso es de 8 bits o alambres de ancho. Se utiliza para conectar todos los circuitos dentro del microcontrolador.

Unidad de procesamiento central (CPU)


Como su nombre indica, la CPU es una unidad que monitorea y controla todos los procesos dentro del microcontrolador. Se compone de varias subunidades, de las cuales las ms importantes son:

Instrucciones de instrucciones del programa Decoder decodifica y ejecuta otros circuitos sobre la base de que; Unidad aritmtico lgica (ALU) realiza todas las operaciones matemticas y lgicas en los datos. El 'conjunto de instrucciones' que es diferente para cada familia microcontrolador muestra las capacidades de este circuito, y Acumulador es una SFR estrechamente relacionado con la operacin de la ALU. Es una especie de mesa de trabajo se utiliza para almacenar todos los datos en los que alguna operacin se va a realizar (suma, cambio / movimiento, etc.) Tambin almacena los resultados para ser utilizados en el procesamiento adicional. Uno de los SFR, llamado unregistro de estado (PSW), est estrechamente relacionada con el acumulador. Se muestra, en cualquier momento dado, el "estado" de un nmero almacenado en el acumulador (nmero es mayor o menor que cero, etc.) El acumulador es tambin llamado el registro de trabajo y que se conoce como registro W o por lo tanto slo W.

COMUNICACIN DE SERIE
Una conexin en paralelo entre el microcontrolador y los perifricos establecida a travs de puertos de entrada / salida es una solucin ideal cuando la distancia entre ellos es de varios metros. De lo contrario, cuando es necesario para establecer la comunicacin en distancias ms largas la conexin en paralelo est fuera de cuestin. Comunicacin serial se utiliza en su lugar. Hoy en da, la mayora de los microcontroladores disponen de varios mdulos diferentes para la comunicacin serie integrados en ellos como equipo estndar. Cul de estos mdulos se utilizar depende de muchos factores de los cuales los ms importantes son:

Cuntos dispositivos el microcontrolador tiene que intercambiar datos con? Con qu rapidez el intercambio de datos tienen que ser? Cul es la distancia entre los dispositivos? Es necesario para enviar y recibir datos al mismo tiempo?

Una de las cosas ms importantes sobre la comunicacin de serie es el protocolo que debe ser estrictamente observados. Se trata de un conjunto de reglas que permite a los dispositivos para interpretar correctamente los datos que intercambian. Afortunadamente, el propio microcontrolador se encarga de esto, de modo que el trabajo de los furnculos programador / usuario hasta la escritura simple (que se enven datos) y la lectura (los datos recibidos).

TRANSFERENCIA DE DATOS
La velocidad de datos se utiliza el trmino para designar el nmero de bits transferidos por segundo [bps]. Tenga en cuenta que se refiere a los bits, no bytes. De acuerdo con el protocolo, cada byte es transferido, junto con varios bits de control. Esto significa que un byte en la corriente de datos en serie puede constar de 11 bits. Por ejemplo, si la velocidad de datos es de 300 bps entonces mximo de bytes 37 y mnimo 27 puede ser transferida por segundo. Los mdulos ms utilizados de comunicacin en serie son los siguientes:

I 2 C (INTER circuito integrado)

Un circuito inter-integrado es un mdulo para el intercambio de datos serie entre microcontroladores y circuitos integrados especializados de una nueva generacin. Se utiliza cuando la distancia entre estos dispositivos es corto (receptor y el transmisor estn generalmente en la misma placa impresa). La conexin se establece a travs de dos conductores. Uno se utiliza para transferencia de datos, mientras que el otro se utiliza para la sincronizacin (seal de reloj). Como puede verse en la figura a continuacin, un dispositivo siempre es un dispositivo maestro. Realiza el direccionamiento de un dispositivo esclavo antes de la comunicacin se inicia y controla el proceso de transferencia de datos. De esta manera un microcontrolador puede comunicarse con 112 dispositivos diferentes utilizando I2C. La velocidad de datos suele ser de 100 Kb / s (modo estndar) o 10 Kb / s (modo de cmara lenta velocidad de datos). Los

dispositivos con una velocidad de 3,4 Mb / s han aparecido recientemente. La distancia entre los dispositivos que se comunican a travs de un bus I2C se limita a varios metros.

SPI (Serial Bus Peripheral Interface)


Una serie de interfaz perifrica (SPI) es un mdulo de bus de comunicacin serial que utiliza tres o cuatro conductores. Un conductor se utiliza para recibir datos, uno para enviar datos, uno para la sincronizacin y una alternativa para la seleccin de un dispositivo para comunicarse. Es una conexin dplex completo, lo que significa que los datos pueden ser enviados y recibidos simultneamente. La mxima velocidad de datos es mayor que en el mdulo de comunicacin I2C.

UART (Receptor asncrono universal / EMISOR)


Como su nombre indica, la comunicacin USART es asincrnica, lo que significa que no hay ninguna lnea especial para la transferencia de la seal del reloj se usa. En algunas aplicaciones, como la conexin de radio o el control de las ondas a distancia por infrarrojos, esta caracterstica es fundamental. Dado que slo una lnea de comunicacin se utiliza, tanto el receptor y el transmisor funcionan a la velocidad predefinida mismo con el fin de mantener la sincronizacin necesaria. Esta es una forma muy simple de transferencia de datos a medida que bsicamente se reduce a la conversin de datos de 8-bits de paralelo a formato serie. La velocidad de datos no es muy alta, de hasta 1 Mbit / seg.

OSCILADOR

Incluso impulsos generados por el oscilador habilitar una operacin armnica y sincrnica de todos los circuitos dentro del microcontrolador. El oscilador est configurada para utilizar un cristal de cuarzo o resonador cermico para la estabilizacin de la frecuencia, sino que tambin puede funcionar como un circuito independiente (como oscilador RC). Es importante decir que las instrucciones no se ejecutan a la velocidad impuesta por el propio oscilador, pero ms lenta varias veces. Esto sucede porque cada instruccin se ejecuta en varios pasos. En algunos microcontroladores, el mismo nmero de ciclos se requiere para ejecutar todas las instrucciones, mientras que en otros, el nmero de ciclos es diferente para diferentes instrucciones. Por consiguiente, si el microcontrolador utiliza cristal de cuarzo con una frecuencia de 20 Mhz, el tiempo de ejecucin de una instruccin no es 50ns, pero 200, 400 o 800 nS, dependiendo del tipo de microcontrolador.

Circuito de alimentacin
Hay dos cosas que vale la pena la atencin cuando se habla del circuito microcontrolador fuente de alimentacin:

Brown a cabo es una condicin potencialmente peligrosa que se produce en el momento en el microcontrolador est apagado o cuando la tensin de alimentacin se reduce a su valor mnimo debido al ruido. Como el microcontrolador se compone de varios circuitos con diferentes niveles de voltaje de funcionamiento, tal condicin puede causar su fuera de control de rendimiento. Con el fin de evitar que, el microcontrolador tiene generalmente un circuito integrado en reinicio que causa la condicin de reposicin que se produzca tan pronto como el microcontrolador entra en un estado de emergencia a cabo marrn. Pin de reset se refiere generalmente como MCLR (Master Reset En abierto). Se utiliza para causar una reposicin externa del microcontrolador mediante la aplicacin de un cero lgico (0) o un uno lgico (1) a la misma, la cual depende del tipo del microcontrolador. En caso de que el circuito fuera marrn no est integrado en el microcontrolador, un circuito simple externo para restablecer marrn puede ser conectado a la patilla MCLR.

TIEMPOS / contadores
El oscilador del microcontrolador utiliza cristal de cuarzo para su funcionamiento. Aunque no es la mejor solucin, todava hay muchas razones para utilizarlo. La frecuencia del oscilador como se define con

precisin y muy estable, de modo que los impulsos que genera son siempre la misma anchura, lo que les hace ideales para la medicin del tiempo. Tales osciladores se utilizan tambin en los relojes de cuarzo. Si es necesario medir el tiempo entre dos eventos, es suficiente para contar hasta impulsos generados por este oscilador.Esto es exactamente lo que hace que el temporizador.

La mayora de los programas usan estos en miniatura de los cronmetros electrnicos. Su corazn hace 8 - o 16 - bit, SFR los contenidos de los cuales se incrementa automticamente por cada pulso que viene. Una vez que un registro est totalmente cargado, una interrupcin puede ser generada. Si el temporizador utiliza un oscilador de cuarzo interno para su funcionamiento, entonces se puede utilizar para medir el tiempo entre dos eventos (si el valor almacenado en el registro del temporizador T1 es en el momento de la medicin se inicia, y T2 en el momento en que termina, entonces el tiempo transcurrido es igual al resultado de la resta T2-T1). Si los pulsos registros de uso suministrado desde una fuente externa a continuacin, tal temporizador se convierte en un mostrador. Esto es slo una explicacin sencilla del funcionamiento del temporizador / contador. Como usted ya sabe, es ms complicado en la prctica.

CMO FUNCIONA EL RELOJ?


As es como el reloj funciona en la prctica: los impulsos generados por el oscilador de cuarzo son directamente, oa travs de un pre-escalador, trajo al circuito que se incrementa el nmero almacenado en

el temporizador de registro. Al incorporar un cristal de cuarzo con una frecuencia de 4 MHz se aplica lo siguiente: si una instruccin (un ciclo de mquina) tiene una duracin de cuatro perodos de oscilador de cuarzo a continuacin, mediante la incorporacin de un cristal de cuarzo con una frecuencia de 4 MHz este nmero se incrementa un milln de veces por segundo ( cada microsegundo).

Es fcil de medir los intervalos de tiempo cortos, de hasta 256 microsegundos, en la forma descrita anteriormente, ya que es el nmero ms grande que un registro puede almacenar. Esta restriccin puede ser fcilmente integrado por utilizar un oscilador ms lento, se registra con ms bits, prescaler o interrupciones. Las dos primeras soluciones tienen algunos inconvenientes por lo que es ms conveniente utilizar prescalers o interrumpe.

EL USO DE UN Prescaler EN FUNCIONAMIENTO DEL TEMPORIZADOR


Un pre-escalador es un dispositivo electrnico que se usa para reducir la frecuencia por una tasa de divisin predefinido. Con el fin de generar un impulso en su salida, es necesario llevar a pulsos 1, 2, 4 o ms en su entrada. La mayora de los microcontroladores disponen de uno o ms bulit-en prescalers y su tasa de divisin se puede cambiar desde dentro del programa. La pre-escalador se utiliza cuando es necesario medir perodos ms largos de tiempo.

USO DE INTERRUPCIN EN FUNCIONAMIENTO DEL TEMPORIZADOR


Si el registro contador de tiempo se compone de 8 bits, el nmero ms grande que puede almacenar es 255. Para registros de 16 bits es el nmero 65.535. Si ese nmero se supera, el temporizador se reinicia automticamente y el conteo empezar desde cero otra vez. Esta condicin se denomina un desbordamiento. Si se activa desde el programa, el desbordamiento puede causar una interrupcin, lo que da unas posibilidades completamente nuevas. Por ejemplo, el estado de los registros utilizados para

segundo escrutinio, minutos o das se puede cambiar en una rutina de interrupcin. Todo el proceso (a excepcin de la rutina de interrupcin) se realiza automticamente detrs de las escenas, lo que permite que los circuitos principales del microcontrolador para funcionar normalmente.

La figura anterior ilustra el uso de una interrupcin en el funcionamiento del temporizador. Los retrasos de duracin arbitraria, que tiene casi ninguna influencia en la ejecucin del programa principal, se puede obtener fcilmente mediante la asignacin de un pre-escalador al temporizador.

CONTADORES
Si el temporizador se suministra con los pulsos de la patilla de entrada del microcontrolador, entonces se convierte en un mostrador. Es evidente que el circuito electrnico mismo es capaz de funcionar en dos modos diferentes. La nica diferencia es que en este caso pulsos a ser contados llegan a travs de la patilla de entrada del microcontrolador y su duracin (anchura) es generalmente indefinido.Esta es la razn por que no se puede utilizar para medir el tiempo, pero puede ser utilizado para otros fines tales como contar los productos en una lnea de montaje, el nmero de eje de rotacin, etc pasajeros (dependiendo del sensor en uso).

Watchdog Timer
Un temporizador de vigilancia es un temporizador conectado a un oscilador RC independiente dentro del microcontrolador. Si el temporizador de vigilancia est habilitado, cada vez que se cuenta hasta el valor mximo, el restablecimiento microcontrolador se produce y la ejecucin del programa se inicia desde la primera instruccin. El objetivo es evitar que esto ocurra mediante el uso de un comando especfico. De todos modos, la idea se basa en el hecho de que cada programa se ejecuta en varios bucles ms largos o ms cortos. Si las instrucciones para el restablecimiento del temporizador de vigilancia se establecen en los lugares apropiados del programa, adems de comandos que se ejecutan con regularidad, entonces el funcionamiento del temporizador de vigilancia no afectar a la ejecucin del programa. Si por cualquier razn, por lo general debido al ruido de fabricacin, el contador de programa "se atasca" en algn lugar de memoria de la que no hay vuelta atrs, el temporizador de vigilancia no se

borrar, por lo que el valor del registro de estar constantemente incrementa alcanzar el mximo et voila ! El rel se desexcita y el programa se ejecutar desde el principio. .

Convertidor A / D

Las seales externas suelen ser fundamentalmente diferentes de los del microcontrolador reconoce (0V y 5V solamente) y por lo tanto tienen que ser convertidos en valores reconocibles. Un convertidor analgico a digital es un circuito electrnico que convierte las seales continuas a discretas nmeros digitales. En otras palabras, este circuito convierte un valor analgico en un nmero binario y la enva a la CPU para su procesamiento posterior. Este mdulo se utiliza as para la tensin de entrada de PIN (valor analgico) de medicin.
El resultado de la medicin es un nmero (valor digital) utilizados y transformados luego en el programa.

Arquitectura interna
Todos los microcontroladores actualizados implementar uno de los dos modelos bsicos de diseo y arquitectura de la Universidad de Harvard llamado Von-Neumann. Ellos representan dos formas diferentes de intercambio de datos entre la CPU y la memoria.

Von-Neumann ARQUITECTURA

Microcontroladores utilizando la arquitectura de von Neumann-slo tiene un bloque de memoria y un bus de 8 bits de datos. Como todos los datos se intercambian a travs de estas 8 lneas, el autobs se sobrecarga y la comunicacin es lenta e ineficiente. La CPU puede leer una instruccin o leer / escribir datos desde / hacia la memoria. Ambos procesos no puede realizarse al mismo tiempo desde las instrucciones y datos utilizan el mismo bus. Por ejemplo, si una lnea de programa que lee una memoria RAM registro llamado "suma" debe ser incrementado en uno (instruccin: incf SUM ), el microcontrolador har lo siguiente: 1. Lea la parte de la instruccin de programa que especifique Qu debe hacerse (en este caso el ' incf"instruccin para el incremento se va a realizar). 2. Lea la otra parte de la misma instruccin que especifica en qu datos se deben realizar (en este caso es la "suma" de registro). 3. Despus de haber sido incrementado, el contenido de este registro debe ser escrito en el registro de la que se ley (la direccin de la "suma" de registro).

El bus de datos se utiliza el mismo para todas estas operaciones intermedias cuando se intercambian datos entre la CPU y la memoria.

La arquitectura de Harvard

Microcontroladores que implementan la arquitectura Harvard dispone de dos buses de datos diferentes. Uno es de 8 bits de ancho y se conecta a la CPU a la RAM. El otro consiste en 12, 14 o 16 lneas y se conecta a la CPU a ROM. En consecuencia, la CPU puede leer una instruccin y memoria de acceso de datos al mismo tiempo. Puesto que todos los registros de memoria RAM son 8 bits de ancho, todos los datos se intercambian es de la misma anchura. Durante el proceso de escritura, slo de 8 bits de datos se incluye. En otras palabras, todo lo que puede cambiar desde el programa y todo lo que puede hacer frente es de 8 bits de ancho. Todos los programas escritos para estos microcontroladores se almacena en la ROM interna microcontrolador despus de ser compilado en cdigo mquina.Sin embargo, las ubicaciones de memoria ROM no son 8, pero 12 de ancho, 14 o 16 bits. El resto de los bits 4, 6 u 8, respectivamente, representa la instruccin solo se especifique para la CPU qu hacer con los datos de 8-bits.
Las ventajas de esta arquitectura son los siguientes:

Todos los datos en el programa es de un byte (8 bits) de ancho. A medida que el bus de datos utilizado para la lectura programa tiene 12, 14 o 16 lneas, tanto la instruccin y los datos se pueden leer simultneamente el uso de estos bits de reserva. Por esta razn, todas las instrucciones son de un solo ciclo de instrucciones, excepto en la instruccin de salto que es de dos tiempos. Debido al hecho de que el programa (ROM) y los datos temporales (RAM) utilizar buses separados, la CPU puede ejecutar dos instrucciones al mismo tiempo. En otras palabras, mientras que la RAM de lectura o escritura est en curso (el extremo de una instruccin), la instruccin siguiente programa es ledo a travs del bus otra. Con microcontroladores con la arquitectura de von Neumann, uno nunca sabe la cantidad de memoria para ser ocupado por el programa. Bsicamente, la mayora de las instrucciones del programa ocupan dos posiciones de memoria (uno contiene informacin sobre lo que debe hacer, mientras que la otra contiene informacin sobre la cual los datos se debe hacer). Sin embargo, no es una regla dura y rpida, pero el caso ms comn. En la arquitectura de Harvard el bus programa es ms ancho que un byte, que permite a cada palabra programa que consiste de instruccin y de datos, es decir, una posicin de memoria - una instruccin de programa.

INSTRUCCIONES DE JUEGO

Todas las instrucciones reconocibles por el microcontrolador se colectivelly llamado el conjunto de instrucciones. Cuando se escribe un programa en lenguaje ensamblador, en realidad se especifican las instrucciones en el orden que deben ser ejecutados. La restriccin principal es el nmero de instrucciones disponibles. Los fabricantes suelen emplear una de las dos soluciones opuestas y microcontroladores de diseo que implementan el nmero ms pequeo o ms grande posible de instrucciones. En otras palabras - que escoger entre RISC y CISC conjuntos de instrucciones, respectivamente. RISC (ORDENADOR conjunto reducido de instrucciones)
En este caso, el microcontrolador reconoce y ejecuta las operaciones bsicas solamente (suma, resta, copiado, etc.) Otras operaciones, ms complicadas se realizan mediante la combinacin de ellos. Por ejemplo, la multiplicacin en el programa debe ser realizado como una adicin sucesiva. Es lo mismo que si usted trata de explicar a alguien, utilizando slo unas pocas palabras diferentes, la forma de llegar al aeropuerto en una gran ciudad. Sin embargo, no es tan negro como lo ha pintado. Como cuestin de hecho, no es tan difcil de explicar donde est el aeropuerto si usted usa las palabras correctas, como izquierda, derecha, kilmetros, etc

CISC (informtico complejo conjunto de instrucciones)


CISC es lo opuesto a RISC. Microcontroladores diseados para reconocer a ms de 200 instrucciones diferentes pueden hacer un montn de cosas a gran velocidad. Sin embargo, es necesario comprender cmo tomar todas las que tal oferta ricos conjunto de instrucciones, que no es nada fcil ...

CMO HACER LA ELECCIN CORRECTA?


Bueno, usted es un principiante y que ha tomado la decisin de ir a la aventura de trabajar con los microcontroladores. Felicidades por su eleccin. Pero, no es tan fcil elegir el microcontrolador derecho que pueda parecer. El problema no es una gama limitada de los dispositivos, sino todo lo contrario. Antes de comenzar a disear un dispositivo basado en microcontrolador, piense en lo siguiente: el nmero de entradas y salidas se requiere su proyecto? En caso de que realizar algunas operaciones que no sean a su vez slo rels de encendido / apagado? Necesita algunos mdulos especializados, tales como la comunicacin serie, A / D, etc convertidor? Cuando se crea una imagen clara de lo que usted necesita, el rango de seleccin se reduce considerablemente y es tiempo de pensar en el precio. Vas a

hacer que varios de estos dispositivos? Varios cientos de? Un milln? De todos modos, usted consigue el punto. Si usted piensa en todas estas cosas por primera vez, entonces todo parece un poco complicado. Que sea simple e ir paso a paso. En primer lugar, seleccione el fabricante, es decir, la familia de microcontroladores usted puede conseguir fcilmente. Estudio de un modelo en particular. Aprenda todo lo que necesita, no entrar en detalles. Resolver un problema especfico y algo increble va a suceder, usted ser capaz de manejar cualquier modelo perteneciente a la familia de microcontroladores. Recuerde que aprender a andar en bicicleta. Despus de varias contusiones que recibi cuando empez, que fueron capaces de mantener el equilibrio y entonces fcilmente montar cualquier otra bicicleta. Y, por supuesto, que nunca olvidar la programacin de la misma manera que nunca se olvidar en bicicleta!

1.4 Microcontroladores PIC


El nombre original de la PIC es un microcontrolador PIC (Controlador de Interfaz Perifrico), pero es mejor conocido como un PIC. Su antepasado, llamado el PIC1650, fue diseado en 1975 por General Instruments. Fue pensado para fines totalmente diferentes. Unos diez aos ms tarde, este circuito se convirti en un microcontrolador PIC real, mediante la adicin de la memoria EEPROM. Si desea obtener ms informacin al respecto, slo sigue leyendo. El propsito principal de este libro es proporcionar al usuario informacin necesaria l / ella necesita saber con el fin de ser capaz de utilizar los microcontroladores en la prctica. A fin de evitar largas explicaciones e historias interminables sobre las caractersticas tiles de diferentes microcontroladores, este libro trata del funcionamiento de un modelo particular que pertenece a la "clase media alta". Es el microcontrolador PIC16F887 - lo suficientemente potente como para ser digno de atencin y lo suficientemente simple para ser aprendida fcilmente por todo el mundo. Por lo tanto, a pesar de que los captulos siguientes se describen con detalle este microcontrolador, que en realidad se refieren a la familia PIC conjunto. Todos los microcontroladores PIC implementar la arquitectura de Harvard, lo que significa que su memoria de programa se conecta a la CPU a travs de ms de 8 lneas. Dependiendo del ancho de bus, hay 12 -, 14 - y los microcontroladores de 16 bits. Siguiente tabla muestra las principales caractersticas de estas tres categoras de los microcontroladores PIC

Famil ia

RO M [Kb ytes ]

RA M [by tes ]

Pi ne s

Reloj Frecuen cia.[MH z]

Entr ada sA /D

Resol ucin del conv ertid or A /D

Co mp ardor es

08.16 Los tempor izadore s de bits

Co m m de ser ie.

Sal ida s PW M

Otr os

Base-Lnea 8 - bits, 12 bits de longitud de palabra de instrucciones PIC10 FXXX PIC12 FXXX PIC16 FXXX PIC16 HVXX X 0,37 5a 0,75 0,75 a 1,5 0,75 a3 16 a 24 25 a 38 25 a 134 25 6 a 8 8 14 a 44 18 a 20 4a8 0a 2 0a 3 0a 3 8 0a 1 0a 1 0a 2 1x8 EEP RO M EEP RO M Vdd = 15V

4a8

1x8

20

1x8

1.5

20

1x8

Mid-Range 8 - arquitectura de bits, 14 bits de instrucciones Largo del Mundo PIC12 FXXX PIC12 HVXX X PIC16 FXXX 1,75 a 3,5 1,75 64 a 128 64 8 20 0a 4 0a 4 10 1 1a2x 8 1 x 16 1a2x 8 1 x 16 0a 1 0a 1 EEP RO M -

20

10

US ART I2C SPI US ART I2C SPI

1,75 a 14

64 a 368 64 a 128

14 a 64 14 a 20

20

0a 13

8o 10

0a 2

1a2x 8 1 x 16

0a 3

PIC16 HVXX X

1,75 a 3,5

20

0a 12

10

2x81 x 16

High-End 8 - la arquitectura bits, 16 bits de longitud de palabra de instrucciones 2.0 CA N2. 0 US ART I2C SPI US B 2.0 Eth ern et US ART I2C SPI US ART I2C SPI

PIC18 FXXX

4a 128

256 393 6

18 a 80

32 a 48

4a 16

10 o 12

0a 3

0a2x agosto 2a3x 16

0a 5

PIC18 FXXJX X

8a 128

102 4393 6

28 a 10 0

40 a 48

10 a 16

10

0a2x agosto 2a3x 16

2a 5

PIC18 FXXKX X

8a 64

768 393 6

28 a 44

64

10 a 13

10

1x83 x 16

Todos los microcontroladores PIC uso arquitectura Harvard, lo que significa que su memoria de programa se conecta a la CPU durante ms de 8 lneas. Dependiendo del ancho de bus, hay 12 -, 14 - y los microcontroladores de 16 bits. Tabla de arriba muestra las principales caractersticas de estas tres categoras. Como se puede observar en la tabla de la pgina anterior, si hacemos caso omiso de '16-bit monsters'PIC 24FXXX y 24HXXX PIC por un momento, todos los microcontroladores PIC de 8 bits arquitectura de la Universidad de Harvard y pertenecen a una de cada tres grandes grupos. En consecuencia, dependiendo del tamao de la palabra programa hay la categora microcontrolador primera, segunda y tercera, es decir, 12 -, 14 - o microcontroladores de 16-bit. Tener similares de 8-bit del ncleo, todos ellos utilizan el mismo conjunto de instrucciones y el esqueleto del hardware bsico conectado a unidades ms o menos perifrica. Microcontroladores PIC con las palabras del programa de 14 bits son los ms probable es que la mejor opcin para los principiantes. He aqu por qu ...

INSTRUCCIONES DE JUEGO
El conjunto de instrucciones para la 16F8XX incluye 35 instrucciones en total. La razn de un nmero tan pequeo de instrucciones reside en la arquitectura RISC. Las instrucciones estn bien optimizados desde el punto de velocidad de funcionamiento, la sencillez en la arquitectura y la compacidad del cdigo. El inconveniente de la arquitectura RISC es que el usuario se espera para hacer frente a estas instrucciones. Por supuesto, esto slo es relevante si se utiliza el lenguaje ensamblador para la programacin. Este libro trata de la programacin en un lenguaje de programacin de alto nivel denominado bsico, lo que significa que la mayora del trabajo ha sido ya realizada por otra persona. Slo tienes que usar las instrucciones relativamente simples.

Tiempo de ejecucin de
Todas las instrucciones de los microcontroladores PIC son de un solo ciclo de instrucciones. La nica excepcin son las instrucciones condicionales rama (si se cumple este requisito) y las instrucciones llevados a cabo en el contador de programa. En ambos casos, dos ciclos son necesarios para la ejecucin de la instruccin, mientras que el segundo ciclo se ejecuta como un NOP (no operacin). De ciclo simple las instrucciones consisten en cuatro ciclos de reloj. Esto significa que si un oscilador 4MHz se utiliza, se tardar 1S para una instruccin a ejecutar. El tiempo de ejecucin de la instruccin de instrucciones de salto es 2S. Instruccin del programa conjunto de palabras de 14 bits microcontroladores PIC: INSTRUCCIN DESCRIPCIN OPERACIN BANDERA CLK *

Instrucciones de transferencia de datos MOVLW k MOVWF f MOVF f, d CLRW Mueva constante a W Mover W a f Mover f para d Clear W k -> w W -> f f -> d 0 -> W Z Z 1 1 1 1 1, 2

CLRF f SWAPF f, d

F Clear Intercambia nibbles de f

0 -> f f (7:4), (3:0) > f (3:0), (7:4)

1 1

2 1, 2

Lgica y aritmtica-Instrucciones ADDLW k ADDWF f, d SUBLW k SUBWF f, d Andlw k ANDWF f, d IORLW k IORWF f, d XORWF f, d XORLW k INCF f, d DECF f, d RLF f, d RRF f, d COMF f, d Aadir W y constante Aadir W y F Resta W de la constante Restar W de f Y lgico con W con una constante Y lgico con W con f OR lgico con W con una constante OR lgico con W con f Lgico OR exclusivo con W con constante Lgico OR exclusivo con W con f Incrementa f en 1 Disminuir f por una Gire f izquierdo a travs de bit de acarreo Gire f derecha a travs de bit de acarreo Complementar f f -> d W + K -> W W + f -> d kW -> W FW -> d W y K -> W W y F -> d W o K -> W W o f -> d W XOR k -> W W XOR f -> d f 1 -> f F-1 -> f C, DC, Z C, DC, Z C, DC, Z C, DC, Z Z Z Z Z Z Z Z Z C C Z 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2

Orientados a bits Instrucciones BCF f, b BSF f, b B poco clara en la f B poco clara en la f 0 -> f (b) 1 -> f (b) 1 1 1, 2 1, 2

Instrucciones de control del programa BTFSC f, b Prueba bit b de f. Salta la siguiente instruccin, si claro. Prueba bit b de f. Salta la siguiente instruccin Salta si f (b) = 0 Salta si f (b) = 1 1 (2) 3

BTFSS F, B

1 (2)

si se establece. DECFSZ f, d Disminuir f. Salta la siguiente instruccin, si claro. Incrementar f. Salta la siguiente instruccin si se establece. Ir a direccin Llame a subrutina Retorno de la subrutina Volver con la constante en la W Retorno de interrupcin F-1 -> d salto si Z=1 f 1 -> d salto si Z=0 k -> PC PC -> TOS, k > PC Archivo -> PC k -> W, Archivo -> PC Archivo -> PC, 1 -> GIE 1 (2) 1, 2, 3 1, 2, 3

INCFSZ f, d GOTO k CONVOCATORIA k REGRESAR RETLW k Retfie

1 (2) 2 2 2 2 2

Otras instrucciones NOP CLRWDT DORMIR No hay operacin Borrar temporizador de vigilancia Entra en el modo de suspensin Archivo -> PC, 1 -> GIE 0 -> WDT, 1 -> A, 1 -> EP 0 -> WDT, 1 -> A, 0 -> EP A, PD A, PD 1 1 1

* 1 Cuando un registro de E / S se modifica, el valor utilizado ser el valor actual de los mismos pines. * 2 Si se ejecuta la instruccin en el registro TMR y si d = 1, el pre-escalador se borrar. * 3 Si el PC se modifica o resultado de la prueba es un uno lgico (1), la instruccin requiere dos ciclos. El segundo ciclo se ejecuta como un NOP.

La arquitectura de los microcontroladores PIC de 8 bits. Which of these modules are to be built into the microcontroller depends on the type thereof.

Captulo 2: Programacin de Microcontroladores


Usted sabe sin duda que no es suficiente para conectar simplemente el microcontrolador a otros componentes y gire la fuente de alimentacin para hacerlo funcionar, no? Hay ms por hacer. Microcontroladores necesita ser programado para ser capaz de realizar algo til. Este captulo trata de la programacin en Basic y que vamos a describir slo las cosas esenciales que hay que saber para escribir un programa. Puede parecer complicado, especialmente si usted no tiene experiencia en este campo. No te rindas, tomar una respiracin profunda y comenzar a ...

2.1 LENGUAJES DE PROGRAMACIN 2.2 LAS BASES DEL lenguaje de programacin BASIC 2.3 COMPILADOR mikroBasic PRO PARA PIC

2.1 LENGUAJES DE PROGRAMACIN

El microcontrolador ejecuta el programa cargado en la memoria Flash.Es un cdigo ejecutable llamado que consta de una secuencia aparentemente extraa de ceros y unos. Dependiendo de la arquitectura del microcontrolador, este cdigo binario est organizado en 12 -, 14 - o 16bit de las palabras de ancho. Cada palabra es considerada por la CPU como una instruccin a ejecutar durante el funcionamiento del microcontrolador. Como es mucho ms fcil para nosotros tratar con el sistema numrico hexadecimal, el cdigo ejecutable suele ser representado como una secuencia de nmeros hexadecimales denominada cdigo hexadecimal que, hace mucho tiempo, sola ser escrito por el programador. Todas las instrucciones que el microcontrolador puede reconocer y ejecutar se conocen colectivamente como el conjunto de instrucciones. Para los microcontroladores PIC de 14 bits con palabras de programa de ancho, el conjunto de instrucciones incluye 35 instrucciones diferentes.

Como la escritura de cdigo ejecutable fue infinitamente cansado, el primer lenguaje de alto nivel de programacin llamado lenguaje ensamblador fue creado. Esto hizo que el proceso de programacin de un poco ms complicado, pero por otro lado el proceso de escribir el programa dej de ser una pesadilla. Instrucciones de montaje consisten en abreviaturas significativas que se compilan en el cdigo ejecutable por medio de un programa especial instalado en un PC llamado ensamblador. Se compila la instruccin por instruccin sin optimizacin. Las principales ventajas del lenguaje ensamblador son su simplicidad y el hecho de que cada instruccin del programa coincide con una sola posicin de memoria. En otras palabras, el lenguaje ensamblador permite un control completo de todos los procesos que son en curso dentro del microcontrolador, que todava hace que sea popular hoy en da.
Por otro lado, los programas se ejecutan siempre a altas velocidades y en la mayora de los casos no es necesario conocer en detalle lo que est pasando dentro del microcontrolador. A pesar de todos los buenos atributos del lenguaje ensamblador, los programadores siempre han necesitado un lenguaje de programacin similar al lenguaje que utilizan en el habla cotidiana. Por ltimo, de alto nivel, incluyendo lenguajes de programacin Basic, se han creado. La principal ventaja de estos idiomas es una simplicidad de la escritura del programa. Varias instrucciones de montaje se sustituyen ahora por una declaracin en la base. El programador no tiene que estar familiarizado con el conjunto de instrucciones del microcontrolador en desuso. Ya no es posible saber cmo cada instruccin se ejecuta, pero no importa de todos modos. En caso afirmativo, el problema se resuelve mediante la adicin de una secuencia escrito en lenguaje ensamblador para el programa.

Al igual que en lenguaje ensamblador, un programa especializado instalado en el PC es el encargado de compilar el programa en cdigo mquina. A diferencia de ensamblador, compiladores para lenguajes de programacin de alto nivel crear un cdigo ejecutable que no siempre es el ms corto posible.

La figura anterior muestra un ejemplo aproximado de lo que est sucediendo durante el proceso de compilar un programa escrito en Basic en un cdigo hexadecimal. Aqu es un ejemplo de un sencillo programa escrito en Basic:

VENTAJAS DE LOS LENGUAJES DE PROGRAMACIN DE ALTO NIVEL


Si usted tiene alguna experiencia en la escritura de programas para microcontroladores PIC en lenguaje ensamblador, entonces usted es probablemente familiar con el otro lado de la medalla de la arquitectura RISC - la falta de instrucciones. Por ejemplo, no hay ninguna instruccin apropiada para la multiplicacin de dos nmeros. Por supuesto, hay una manera de resolver este tema, debido a las matemticas, que le

permite realizar operaciones complejas se haca dividido en una serie de ideas simples. En consecuencia, la multiplicacin puede ser fcilmente sustituido por adicin sucesiva (axb = a + a + un + ... + a). Y aqu estamos, justo en el comienzo de una historia muy larga ... Todava no hay ninguna razn para preocuparse por lo que usted utilice uno de los lenguajes de programacin de alto nivel, como Basic, como el compilador de forma automtica encontrar una solucin a estas cuestiones y otras similares. Slo tienes que escribir a * b.

2.2 LAS BASES DEL lenguaje de programacin BASIC


Similar a la utilizacin de cualquier lenguaje que no se limita a los libros y revistas solamente, el lenguaje de programacin Basic no est estrechamente relacionado con ningn tipo especial de sistema informtico, el procesador o de funcionamiento. Es un lenguaje de propsito general. Este hecho puede hacer que algunos problemas como la lengua bsica vara ligeramente dependiendo de su aplicacin (por ejemplo, diferentes dialectos de una lengua). Por lo tanto, no vamos a hacerle una descripcin detallada de todos los atributos de la base de este libro. En su lugar, vamos a describir una aplicacin concreta del lenguaje de programacin Basic, es decir, bsico utilizado por el PRO mikroBasic para PIC compilador.

El lenguaje de programacin Basic es un lenguaje de programacin sencillo y fcil de entender. Para usarlo correctamente, es suficiente para conocer algunos de los elementos bsicos que cada programa se compone de. Estos son:

Identificadores Comentarios Operadores Expresiones Instrucciones Constantes Variables Smbolos Directivas Etiquetas Los procedimientos y funciones Mdulos

Aqu est un ejemplo de cmo no se debe escribir un programa.No hay comentarios estn incluidos, los nombres de las etiquetas de los no tienen sentido, las secciones de cdigo no se agrupan ... Este programa va a funcionar correctamente, pero su propsito y la forma de ejecucin ser slo conocido por el programador que lo ha escrito (al menos por un da o dos).
La siguiente figura ilustra la estructura de un programa simple escrito en Basic, sealando las partes que la componen. Este es un ejemplo de cmo se debe escribir un programa. Las diferencias son ms que obvias ...

Estructura del Programa


Al igual que otros lenguajes de programacin, Basic proporciona un conjunto de reglas estrictamente definidas que deben observarse en la escritura de programas. Para que un programa se escribe en Basic, es necesario instalar un software que proporciona el entorno de trabajo adecuado y comprenda estas reglas en su PC ... Cuando usted escribe una carta, se necesita un programa de procesamiento de textos, no? En este caso, usted necesita el PRO mikroBasic para PIC compilador. A diferencia de la mayora de los programas que ya se han acostumbrado a tratar con el proceso de la escritura de programas en el compilador no se inicia seleccionando la opcin Archivo> Nuevo, pero nuevo proyecto>. Por qu es eso? Bueno, usted escribe un programa en un documento con la extensin. Mbas (mikroBasic). Usted diligencia escribir, escribir, escribir ... Cuando se compila en un cdigo hexadecimal, un nuevo documento con la extensin. Hex se crear. Al mismo tiempo, el compilador crear

automticamente varios documentos en adicin a la misma. El propsito de estos documentos no es importante en este punto. Por supuesto, debe haber algo que conecte a todos. Te das cuenta - estamos hablando de un proyecto. El programa se escribe es slo una parte de ella.

Slo para estar seguros de que estamos en la misma pgina ... A partir de ahora el mdulo de la palabra refiere a un documento con la extensin. MBA. El texto que contiene se refiere como un programa. Cada proyecto escrito en el PRO mikroBasic para PIC compilador tiene la extensin. Mbppi (m ICRO B ASIC P royecto para PI C) y se compone de al menos un mdulo (mdulo principal). Cada proyecto en mikroBasic PRO para PIC requiere un mdulo principal nico. Se identifica por el programa y la palabra clave indica al compilador desde donde iniciar el proceso de compilacin. Al crear con xito un proyecto vaco en el asistente de proyectos, el mdulo principal se mostrarn automticamente en la ventana Editor de cdigo:

MyProject ' The main module is called MyProject here main: ' Main procedure ... '* ... '* Write program code here ... '* end.

Nada puede preceder a la palabra clave del programa, a excepcin de los comentarios. Como se mencion anteriormente, el proyecto tambin puede incluir otros mdulos que, a diferencia de la principal, comienzan con la palabra clave mdulo.

module MyModule ' Auxiliary module is called MyModule ... '* ... '* Implements ... '* end.

Para hacer que el compilador de familiarizarse con todos los mdulos que forman parte de un proyecto, es necesario especificar en el mdulo principal utilizando la palabra clave incluyen seguido de un nombre de mdulo citado. La extensin de estos archivos no deben ser incluidos. Slo un mdulo por la clusula de inclusin est permitida. El nmero de incluir clusulas no es limitado, pero todos ellos deben ser especificados inmediatamente despus del nombre del programa (mdulo principal). He aqu un ejemplo:

principal program MyProgram ' Start of program (main module named MyProgram) ' Other modules included are: include "utils" ' Module "utils" include "strings" ' Module "strings" include "MyUnit" ' Module "MyUnit" ... ORGANIZACIN DEL MDULO PRINCIPAL
Bsicamente, el mdulo principal se puede dividir en dos secciones: declaraciones y el cuerpo del programa. Qu es una declaracin en la programacin? Una declaracin es un proceso de definicin de las propiedades de los identificadores para ser utilizados en el programa. Como la mayora de otros lenguajes de programacin, bsico tambin requiere que todos los identificadores que se declar antes de ser utilizado en el programa. De lo contrario, el compilador puede no ser capaz de interpretar correctamente. As es como una declaracin de una distancia variable llamada se ve as:

dim distance as float ' Declare variable distance

Como puede verse, es una variable de punto flotante, es decir, un nmero con decimales opcionales. Otras dos variables se declaran y el nombre de velocidad y el tiempo. Ahora, pueden ser utilizados en el programa de la siguiente manera: Este es un ejemplo de cmo escribir el mdulo principal correctamente:

ORGANIZACIN DE LOS MDULOS DE OTROS


Otros mdulos comenzar con la palabra clave mdulo. Cada mdulo consta de tres secciones: incluyen, la interfaz y la implementacin.Slo la seccin de implementacin es obligatoria. Se inicia con la palabra clave implements. Siga el ejemplo siguiente:

IDENTIFICADORES
Los identificadores son nombres arbitrarios asignados a los objetos de lenguaje bsicas, tales como constantes, variables, funciones, procedimientos, etc Alguien acaba de llegar a una idea de usar el identificador de la palabra en lugar del nombre. Tan simple como eso.Aqu hay algunas reglas que deben observarse en la utilizacin de identificadores:

Los identificadores pueden contener todas las letras del alfabeto (maysculas y minsculas), nmeros (0-9) y el carcter guin bajo (_). El primer carcter de un identificador no debe ser un dgito. Ningn identificador puede contener caracteres especiales como! [{# $% &, Etc Basic no distingue entre maysculas y minsculas, lo que significa que primero, primer y la primera se consideran idnticos. La ^ (acento circunflejo) smbolo se utiliza para referirse a un operador de exponenciacin, el * (asterisco) smbolo se utiliza para denotar la multiplicacin, mientras que los otros smbolos tienen sus significados habituales. Palabras clave est ya utilizados por el compilador no debe utilizarse como identificadores de las palabras clave mikroBasic enumerados en la siguiente tabla: Resumen

Abstract And Array As At Asm Assembler Automated Bdata Begin Bit Case Cdecl Class Code Compact Const Constructor Contains Data Default Deprecated Destructor Dispid Dispinterface Div Do Downto Dynamic Else End Except Export Exports External Far File Finalization Finally For Forward Function Goto Idata If Ilevel Implementation In Index Inherited Initialization Inline Interface Io Is Label Large

Library Message Mod Name Near Nil Not Object Of On Or Org Out Overload Override Package Packed Pascal Pdata Platform Private Procedure Program Property Protected Public Published Raise Read Readonly Record Register Reintroduce Repeat Requires Resourcestring Rx Safecall Sbit Set Sfr Shl Shr Small Stdcall Stored String Stringresource Then Threadvar To Try Type Unit Until Uses Var

Virtual Volatile While With Write Writeonly Xdata Xor

Una lista de identificadores que no deben ser utilizados en el programa.

COMENTARIOS
Los comentarios son partes del programa que sirve para proporcionar ms informacin sobre el programa y que quede claro para el usuario. En Basic, cualquier texto que sigue a una comilla simple (') se considera un comentario. Los comentarios no se compila en cdigo ejecutable. El compilador es capaz de reconocer los caracteres especiales utilizados para marcar el lugar donde comienzan los comentarios e ignora por completo el texto siguiente durante la compilacin. A pesar de que los comentarios no pueden afectar a la ejecucin del programa, que son tan importantes como cualquier otra parte del programa, porque casi todos los programas hay que mejorar, modificar, actualizar o simplificado en algn momento. Sin comentarios, es casi imposible de entender, incluso los programas ms simples.

ETIQUETAS
Las etiquetas proporcionan la manera ms fcil de controlar el flujo del programa. Se utilizan para marcar las lneas particulares en el programa de instruccin de salto y en su caso son subrutina que se jecutar. Todas las etiquetas deben ser denunciado por ':' para que el compilador puede reconocer.

CONSTANTES
Una constante es un nmero o un carcter cuyo valor no se puede cambiar durante la ejecucin del programa. A diferencia de las variables, las constantes se almacenan en la memoria ROM del microcontrolador con el fin de ahorrar espacio de memoria como mucho de RAM como sea posible. El compilador reconoce constantes por sus nombres y const prefijo. Cada constante se declara bajo un nombre nico que debe ser un identificador vlido. Las constantes estn disponibles en formatos decimal, hexadecimal y binario. El compilador distingue entre ellos de acuerdo con sus prefijos. Si una constante no tiene prefijo, se considera decimal por defecto. FORMATO Decimal Hexadecimal Binario 0x o $ De punto flotante PREFIJO EJEMPLO const MAX = 100 const MAX = 0xFF const MAX =% 11011101

Las constantes se declaran en la parte de declaracin del programa o rutina. La sintaxis de las constantes es la siguiente:

const constant_name [as type] = value

Los nombres de constantes se suelen escribir en maysculas. El tipo de una constante es automticamente reconocido por su tamao.En el ejemplo siguiente, el mnimo constante se considera un entero con signo y se almacena dentro de dos bytes de memoria flash (16 bits):

const MINIMUM = -1000 ' Declare constant MINIMUM

Tipo de constante se especifica opcionalmente. En ausencia de tipo, el compilador asume que el "pequeo" tipo que se puede acomodar el valor constante.

const MAX as longint = 10000 const MIN = 1000 ' Compiler will assume word type const SWITCH = "n" ' Compiler will assume char type

En el siguiente ejemplo, un T_MAX constante llamada se declara a fin de tener un valor fraccionario 32,60. Ahora, el programa se puede comparar la temperatura medida a la constante con un nombre significativo en su lugar el nmero 32.60.

const T_MAX = 32.60 ' Declare temperature T_MAX const T_MAX = 3.260E1 ' Another way of declaring constant T_MAX

Una constante de cadena se compone de una secuencia de caracteres. Ellos estn encerrados entre comillas dobles. Un espacio en blanco puede ser incluido tambin en la constante de cadena como un carcter. Las constantes de cadena se utilizan para representar cantidades no numricos, tales como nombres, direcciones, mensajes, etc

const Message_1 = "Press the START button" ' Message 1 for LCD const Message_2 = "Press the RIGHT button" ' Message 2 for LCD const Message_3 = "Press the LEFT button" ' Message 3 for LCD

En este ejemplo, el envo de la constante Message_1 a un LCD har que 'presione el botn START' el mensaje que se mostrar.

VARIABLES
Una variable es un objeto con nombre capaz de contener un conjunto de datos que pueden ser modificados durante la ejecucin del programa. Cada variable se declara con un nombre nico que debe ser un identificador vlido. Por ejemplo, para sumar dos nmeros(numero1 + numero2) en el programa, es necesario tener una variable para representar lo que en la vida cotidiana llame a la suma. En este nmero1 caso, el nmero y la suma son variables. La sintaxis de una declaracin nica variable es la siguiente:

dim variable_name as type

Las variables en Basic se escriben, lo que significa que es necesario especificar el tipo de datos es una variable a recibir. Las variables se almacenan en la memoria RAM y el espacio de memoria ocupado (en bytes) depende de su tipo. Adems de las declaraciones individuales, las variables del mismo tipo puede ser declarada como una lista. En este caso, identifier_list es una lista separada por comas de identificadores vlidos, mientras que el tipo puede ser cualquier tipo de datos.

dim i, j, k as byte 'Define variables i, j, k dim counter, temp as word 'Define variables counter and temp SMBOLOS
Los smbolos en Basic permiten crear macros simples sin parmetros. Esto significa que cualquier lnea de cdigo puede ser reemplazado con un identificador nico. Los smbolos, cuando se utiliza correctamente, puede aumentar la legibilidad del cdigo y la reutilizacin. Los smbolos se declar al principio del mdulo, justo despus del nombre del mdulo y opcionales incluyen directiva. El alcance de un smbolo es siempre limitado al mdulo en el que ha sido declarada.

symbol symbol_name = code

En este caso, symbol_name debe ser un identificador vlido para ser utilizado en todo el cdigo. El especificador de cdigo puede ser cualquier lnea de cdigo (literales, tareas, llamadas a funciones, etc.)

symbol MAXALLOWED = 216 value symbol OUT = PORTA symbol MYDELAY = Delay_ms(762) call dim cnt as byte main: if cnt > MAXALLOWED then 216 cnt = 0 ' OUT.1 = 0 ' MYDELAY ' end if ...

' Symbol MAXALLOWED for numeric ' Symbol OUT for SFR ' Symbol MYDELAY for procedure ' Variable cnt ' Program checks whether cnt > If yes, the following three commands are to be executed ' If not, program continues here

No hay espacio en la memoria RAM se utiliza para el almacenamiento de smbolos que se utilizan en el programa. El compilador simplemente reemplazar todos los smbolos con lneas de cdigo correspondientes a ellas cuando se declaran.

TIPOS DE DATOS BSICOS DEL LENGUAJE


Hay varios tipos de datos que pueden ser utilizados en el lenguaje de programacin de base. Tabla a continuacin muestra el rango de valores de estos datos puede tener cuando se utiliza en su forma bsica.

TIPO DE DATOS poco sbit byte, char corto palabra entero LongWord Entero

DESCRIPCIN Un bit Un bit Carcter Entero con signo de corto Entero sin signo Entero con signo Palabra de 32 bits Palabra de 32 bits firmado De punto flotante

TAMAO (NMERO DE BITS) 1 1 8 8 16 16 32 32

RANGO DE VALORES 0o1 0o1 0 ... 255 -127 ... 128 0 ... 65535 -32768 ... 32767 0 ... 4294967295 -2147483648 ... 2147483647 1.17549435082 * 10 ... 6.80564774407 * 10 38

flotar

32

38

Automatic Data Conversin de tipos


El compilador realiza automticamente la conversin implcita en las siguientes situaciones:

si una instruccin requiere una expresin de tipo particular, pero la expresin de tipo diferente se utiliza; si un operador requiere un operando de tipo particular, pero operando de diferente tipo se utiliza; si una funcin requiere un parmetro formal de tipo particular, pero se le asigna un objeto de tipo diferente, y si el resultado de la funcin no coincide con el retorno declarado funcin del tipo de datos. PROMOCIN
Cuando operandos son de tipos diferentes, conversin implcita promueve un complejo menos a un tipo ms complejo como sigue:

bit byte short, byte/char integer, word, longint, longword integer, word longint, longword short, byte/char, integer, word, longint, longword float

DATOS DE RECORTES
En instrucciones de asignacin y estados que requieren una expresin de tipo particular, el valor correcto se almacena en destino slo si el resultado de la expresin no exceda el rango de destino. De lo contrario, si la expresin se evala como un tipo ms complejo de lo esperado, los datos de exceso simplemente se recorta, es decir, los bytes ms altos se perder.

dim i as byte ' Variable i occupies one byte of RAM dim j as word ' Variable j occupies two bytes of RAM ... j = $FF0F i = j ' i becomes $0F, higher byte $FF is lost

EXPLCITA Conversiones de tipos


La conversin explcita se puede ejecutar sobre cualquier expresin en cualquier momento al escribir la palabra clave deseada tipo (float byte, una palabra corta, entero, entero largo, ...) antes de la expresin que se va a convertir. La expresin debe ir entre parntesis. La conversin explcita no se puede realizar sobre el operando a la izquierda del operador de asignacin.

a = word(b) ' Explicit conversion of expression b word(b) = a ' Compiler will report an error

Un caso especial de la conversin es una conversin explcita entre tipos de datos y sin signo, ya que no afecta a la representacin binaria de los datos.

dim a as byte dim b as short '... b = -1 a = byte(b) ' a is 255, not -1 ' Data doesnt change its binary representation %11111111 ' it is just interpreted differently by the compiler OPERADORES
Un operador es un smbolo que se utiliza para denotar aritmtica en particular, la lgica o alguna otra operacin. Cada operacin se lleva a cabo en una o ms operandos (variables o constantes) en una expresin. Adems, cada operador cuenta con la ejecucin de la prioridad y la asociatividad. Si una expresin contiene ms de un operando, el orden de su ejecucin se determina por el nivel de prioridad. Hay cuatro categoras prioritarias en Basic. Los operadores que pertenecen a la misma categora tienen la misma prioridad. Si dos o ms operadores tienen el mismo nivel de prioridad, las operaciones se realizan de izquierda a derecha. Parntesis se puede utilizar para definir la prioridad de la operacin dentro de una expresin. Cada categora tiene asignado ya sea de izquierda a derecha o izquierda Derechapara regla de la asociatividad. Consulte la tabla a continuacin. PRIORIDAD Alto OPERADORES @ No + * / Div mod y >> << + - O XOR Bajo = <> <> <=> = ASOCIATIVIDAD de derecha a izquierda de izquierda a derecha de izquierda a derecha de izquierda a derecha

Operadores aritmticos
Los operadores aritmticos se utilizan para realizar operaciones aritmticas. Estas operaciones se realizan sobre los operandos numricos y siempre devuelven resultados numricos. Las operaciones binarias se realizan sobre dos operandos, mientras que las operaciones se llevan a cabo en unarios un operando. Todos los operadores aritmticos se asocian de izquierda a derecha.

OPERADOR + * / div mod

OPERACIN Adicin Sustraccin Multiplicacin Divisin - de punto flotante Divisin - redondear hacia abajo Recordatorio

Divisin por cero


Si un cero (0) se utiliza de forma explcita como el segundo operando en la operacin de divisin (x div 0), el compilador informar de un error y no generar un cdigo. En el caso de la divisin implcita en donde el segundo operando es un objeto cuyo valor es 0 (x div y, donde y = 0), el resultado ser indefinido.

OPERADORES RELACIONALES
Los operadores relacionales se utilizan para comparar dos variables y determinar la validez de su relacin. En mikroBasic, todos los operadores relacionales volver 255 si la expresin es verdadera, o cero (0) si es falso. Lo mismo se aplica en expresiones tales como "si la expresin es verdadera, entonces ..." OPERADOR > >= < <= = <> SENTIDO es mayor que es mayor que o igual a es menor que es menor o igual a es igual a no es igual a EJEMPLO b> a un> = 5 a <b a <= b un 6 = A <> B VERDAD CONDICIONES si b es mayor que un Si uno es mayor que o igual a 5 si a es menor que b si a es menor o igual a b si A es igual a 6 si uno no es igual a b

LGICA operadores bit a bit


Lgica operadores bit a bit se llevan a cabo en los bits de un operando. Se asocian de izquierda a derecha. La nica excepcin es el operador de complemento bit a bit, no que se asocia de derecha a izquierda. Los operadores bit a bit se enumeran en la tabla de la derecha: Los operadores bit a bit y, OR y XOR realizar operaciones lgicas sobre los pares apropiados de bits de los operandos. El operador nocomplementa cada bit de un operando solo. OPERANDO << >> SENTIDO Mover a la izquierda Desplazamiento a la derecha EJEMPLO A = B 2 << A = B >> 3 RESULTADO B= 11110011 B= 11110011 A= 11100011 B= 11001100 A= 11100011 A= 11001100 A= 00011110 C= 11000000 C= 11101111

AND bit a bit

C=AyB

OR bit a bit

C=AoB

B= 11001100 no NOT bit a bit A = B que no B= 11001100 A= 11100011 B= 11001100 A= 00110011 C= 00101111

xor

EXOR bit a bit

C = A xor B

Los operadores bit a bit y, OR y XOR realizar operaciones lgicas sobre los pares apropiados de bits de los operandos. El operador nocomplementa cada bit de un operando solo.

$1234 and $5678 ' result is $1230 because: ' $1234 : 0001 0010 0011 0100 ' $5678 : 0101 0110 0111 1000 ' ---------------------------' and : 0001 0010 0011 0000 ... that is, $1230 $1234 or $5678 ' equals $567C $1234 xor $5678 ' equals $444C not $1234 ' equals $EDCB
Bit a bit Operadores de desplazamiento
Hay dos operadores de desplazamiento en mikroBasic. Estos son el operador << que se mueve bits a la izquierda y el operador >> que se mueve bits a la derecha. Ambos operadores tienen dos operandos cada uno. El operando de la izquierda es un objeto de mover, mientras que el operando de la derecha es un nmero de posiciones para mover el objeto. Ambos operandos deben ser del tipo integral.El operando de la derecha debe ser un valor positivo. Al cambiar un operando izquierdo (<<), los bits de la izquierda se descartan, mientras que los 'nuevos' bits a la derecha se asignan ceros.Cambiando operando sin signo a la izquierda por n posiciones es equivalente a multiplicar con 2
n.

Lo mismo se aplica a operandos firmados si todos los bits son iguales

desechados para el bit de signo.

dim num as word ' declare variable num as word num = 1 ' asign it decimal value 1 (00000000 00000001 bin.) num << 5 ' equals 32 (00000000 00100000 bin.)

Al cambiar operando de la derecha (>>), los bits de la derecha se descartan, mientras que los 'nuevos' bits a la izquierda son ceros asignados (en caso de firmar operando) o el bit de signo (en el caso de la firma operando). El cambio operando a la derecha por n posiciones es equivalente a dividindolo por 2
n.

dim num as integer ' declare variable num as signed integer num = 0xFF56 ' asign it hex value FF56 (11111111 01010110 bin.) num >> 4 ' equals 0xFFF5 (11111111 11110101 bin.)

Sentencias condicionales
Las condiciones son ingredientes comunes de un programa. Permiten que uno o una serie de sentencias que se ejecutarn en funcin de la validez de una expresin. En otras palabras: 'Si se cumple la condicin (...), hacer (...). De lo contrario, hacer (...) ". Una sentencia condicional se puede seguir, ya sea por una sola declaracin o por un bloque de instrucciones a ejecutar.

Declaracin condicional IF
La sintaxis de una forma simple de la sentencia if es la siguiente:

if expression then operations end if

Si el resultado de la expresin es verdadera (no 0), las operaciones se llevan a cabo, a continuacin, el programa contina con la ejecucin. Si el resultado de la expresin es falsa (0), las operaciones no se llevan a cabo y el programa contina inmediatamente con la ejecucin. El operador si tambin se puede utilizar en combinacin con los operadores else:

if expression then operations1 else other operations2 end if

Si el resultado de la expresin es verdadero (no 0), operaciones1 se llevan a cabo, de lo contrario operaciones2 se realizan. El programa contina con la ejecucin despus de estas operaciones se llevan a cabo.

IF anidadas
SI anidada necesitan atencin adicional. Una sentencia if anidada es una frase que se utiliza dentro de la otra sentencia if. Como regla general, que se analizan a partir de la ifstatement ms anidada, mientras que cada sentencia else se une a la ms cercana disponible si a su izquierda:

Instruccin Select Case

La instruccin Select Case es una sentencia condicional con mltiples ramificaciones. Se compone de un selector de expresin (condicin) y una lista de valores posibles de la expresin. La sintaxis de la instruccin Select Case es: El especificador selector es una expresin que debe evaluar como un valor integral. Especificadores valor_1 ... value_n representan valores posibles selectores y puede ser literales, constantes o expresiones constantes.Los especificadores statements_1 ... statements_n puede ser ninguna de las declaraciones. La clusula ms caso es opcional. En primer lugar, la expresin del selector se evala. A continuacin, se compara con todos los valores disponibles. Si el partido se encuentra, las declaraciones despus de la evaluacin de partido y termina la instruccin Select Case. Si hay varias coincidencias, tras las declaraciones del primer partido ser ejecutado. Si ninguno de los valores coincide con el selector, luego default_statements en la clusula else caso (si lo hay) se ejecutan. Aqu est un ejemplo de la instruccin Select Case:

select case decimal_digit ' Decimal-digit value is being checked case 0 mask = %01111110 ' Display "0" case 1 mask = %00110000 ' Display "1" case 2 mask = %01101101 case 3 mask = %01111001 case 4 mask = %00110011 case 5 mask = %01011011 case 6 mask = %01011111 case 7 mask = %01110000 case 8 mask = %01111111 case 9 mask = %01111011 end select

Esta rutina de programa convierte los dgitos decimales en combinacin binaria adecuada en el puerto con el fin de mostrar en una pantalla de LED.

Bucles de programa
Algunas instrucciones (operaciones) se tienen que ejecutar ms de una vez en el programa. Un conjunto de comandos que se repiten hace un bucle de programa. Cuntas veces se ejecutar, es decir, la duracin del programa se mantendr dentro de un bucle, depende de las condiciones para salir del bucle.

Bucle WHILE
El bucle mientras se lleva a cabo cuando el nmero de iteraciones no se especifica. Es necesario comprobar la condicin de iteracin antes de la ejecucin de un bucle. En pocas palabras, el bucle while se ejecuta mientras que todas las condiciones necesarias para su ejecucin se cumplen ... La sintaxis del bucle while es el siguiente:

while expression statements wend

Las declaraciones especificador representa un grupo de instrucciones que se ejecutan repetidamente siempre que el valor del especificador de expresin que representa una expresin es verdadera. En otras palabras, el programa permanece en el bucle hasta que la expresin se convierte en falsa. El valor de expresin se comprueba antes de la siguiente iteracin se ejecuta. En consecuencia, si es falsa antes de entrar en el bucle, no ejecuta iteraciones, es decir, los estados nunca ser ejecutado. El programa

proceder a la ejecucin desde el final del bucle, mientras que (a partir de las instrucciones siguientes de la instruccin Wend). Un tipo especial del bucle de programa es un bucle sin fin. Se crea si la condicin para salir de bucle se mantiene sin cambios dentro del bucle. En este caso, la ejecucin es simple como el resultado entre parntesis es siempre cierto (1 se Allways ser diferente de 0), lo que significa que el programa permanece en el bucle.

while 1 ' true can be written instead of 1 ... ' Expressions will be unceasingly executed (endless loop) ... wend
DE LOOP
El bucle se ejecuta cuando el nmero de iteraciones se especifica. La sintaxis del bucle for es el siguiente:

for counter = initial_value to final_value [step step_value] statements next counter

En este caso, con cada iteracin del bucle, la variable contador se incrementa en step_value. El parmetro step_value es un valor opcional entero, considerado uno si se omite. Antes de la primera iteracin, el contador (contador) se ajusta a su valor inicial (initial_value) y se incrementar hasta que se alcanza o supera el valor final (final_value). Las declaraciones se realizarn con cada iteracin. Iinitial_value y final_value deben ser compatibles con las expresiones del mostrador, mientras que el especificador de declaraciones puede ser cualquier sentencia que no cambia el valor del contador. Tenga en cuenta que el parmetro step_value puede ser negativo, lo que permite una cuenta regresiva.

for k=1 to 5 ' Increase variable k five times (from 1 to 5) and operation ' keep on executing "operation" every time ... next k
Un conjunto de instrucciones (funcionamiento) se ejecutar cinco veces. Despus de eso, se determin que la k <5 es falsa (despus de 5 iteraciones k = 5) y el programa saldr del bucle for.

Do Loop
El bucle do se lleva a cabo cuando el nmero de iteraciones no se especifica. El bucle se ejecuta repetidamente hasta que la expresin se evala como verdadera. La sintaxis del bucle do es la siguiente:

do statements loop until expression

En este caso, el especificador de estados representa un grupo de instrucciones que se ejecutan siempre que la expresin (expresin) es verdadera. Las condiciones de bucle se comprueban al final del bucle, por lo que el bucle se ejecuta al menos una vez, independientemente de si la condicin es verdadera o falsa. En el ejemplo siguiente, el programa permanece en el bucle do hasta una variable alcanza 1E06 (un milln de iteraciones).

a = 0 ' Set initial value do a = a+1 ' Operation in progress loop until a <= 1E06 ' Check condition

Escribir cdigo en lenguaje ensamblador

A veces un programa en Basic requiere que partes del cdigo que se escriben en lenguaje ensamblador. De este modo algunas partes del programa puede ser ejecutado en una forma definida con precisin por el perodo exacto de tiempo. Por ejemplo, cuando es necesario para proporcionar impulsos muy cortos (de unos pocos microsegundos) para aparecer peridicamente en un pin del microcontrolador, la mejor solucin es escribir un cdigo de montaje para el control de duracin del impulso. El comando ASM se utiliza para introducir una o ms instrucciones de montaje para el programa escrito en Basic:

asm Assembly language instructions ... end asm

Instrucciones de montaje puede utilizar objetos (constantes, variables, rutinas, etc) que deben ser previamente declaradas en el lenguaje Basic. No hace falta decir que estos objetos se declaran de acuerdo con las reglas del lenguaje Visual Basic. Consulte el siguiente ejemplo:

ARRAYS
Una matriz es una lista finita y dispuesto de las variables del mismo tipo, llamados elementos. Este tipo se llama el tipo base. Cada elemento se le asigna un ndice nico modo que los elementos diferentes pueden tener el mismo valor. Un arreglo se declara especificando el tipo de sus elementos (llamado tipo de matriz), su nombre y el nmero de sus elementos encerrados entre corchetes:

dim array_name as component_type [number_of_components]


Los elementos de un array se identifican por su posicin. Los ndices van de 0 (el primer elemento de una matriz) a N-1 (N es el nmero de elementos incluidos en una matriz). El compilador debe saber cuntas posiciones de memoria para asignar, cuando se declara una matriz y debido a que el tamao de la matriz no puede ser variable.

ELEMENTS OF ARRAY shelf[0] shelf[1] shelf[2] shelf[3] shelf[4] shelf[5] shelf[6] ... ... shelf [99]

CONTENTS OF ELEMENT 7 23 34 0 0 12 9 ... ... 23

Para ilustrarlo, una matriz puede ser considerado como una lista ms corta o ms larga de las variables del mismo tipo, donde cada una de ellas se le asigna un nmero ordinal siempre a partir de cero. Esta matriz se llama un vector. Tabla de la derecha muestra una matriz denominada plataforma que consta de 100 elementos.

En este caso, el contenido de una variable (elemento) representa una serie de productos de la plataforma contiene. Los elementos se accede por la indexacin, es decir, mediante la especificacin de sus ndices entre corchetes:

dim shelf as byte [100] ' Declare the array "shelf" with 100 elements shelf [4] = 12 ' 12 items are placed on shelf [4] temp = shelf [1] ' Variable shelf [1] is copied to ' variable temp

En las matrices constantes, los elementos pueden ser asignados a sus contenidos durante la declaracin de matriz. En el siguiente ejemplo, un calendario constante de matriz se ha declarado el nombre y cada elemento se le asigna un nmero especfico de das:

const CALENDAR as byte [12]= (31,28,31,30,31,30,31,31,30,31,30,31)


El nmero de valores asignados no debe exceder la longitud de la matriz especificada, pero puede ser menor. En este caso, los finales de los elementos exceso ser asignado ceros.

GoTo
La sentencia goto le permite hacer un salto absoluto a otro punto en el programa. Tenga cuidado al usar esta declaracin ya que su ejecucin provoca un salto incondicional haciendo caso omiso de cualquier tipo de limitaciones de anidacin. El punto de destino es identificado por una etiqueta, que se utiliza como un argumento para la instruccin goto. Una etiqueta consiste en un identificador vlido seguido por dos puntos (:) La sintaxis de la sentencia goto es.:

goto: label_name

Esta sentencia se ejecuta un salto al especificador LABEL_NAME lo que representa una etiqueta. La sentencia goto puede preceder o seguir a la etiqueta. Por lo tanto, no es posible saltar dentro o fuera de un procedimiento o funcin. La sentencia goto se puede utilizar para salir de cualquier nivel de las estructuras anidadas. No es recomendable para ir en un bucle u otra sentencia estructurada, ya que puede dar resultados inesperados.

GOSUB DECLARACIN
Una subrutina es una porcin de cdigo dentro de un programa ms amplio ejecutado sobre la demanda. Se realiza una tarea especfica y es relativamente independiente del resto del cdigo. El intrprete saltar a la subrutina, ejecutarlo, y volver al programa principal.Palabras clave GOSUB y el retorno se utilizan en el lenguaje Basic para indicar comienzo y final de la subrutina.

gosub label_name ... ... ... label_name: ... return


Las subrutinas son considerados por muchos a ser difcil de mantener, difcil de leer y digerir, al igual que la sentencia goto. salos slo si usted no tiene una solucin mejor.

Acceder a los BITS INDIVIDUALES


Compilador mikroBasic PRO para PIC, instalado en su PC, incluye una lista de los microcontroladores PIC soportados con todos los registros, sus direcciones exactas y los nombres de bits. El compilador le permite acceder a los bits individuales de estos registros por sus nombres, sin especificar sus posiciones (el compilador ya se "sabe" ellos). Hay un nmero de formas de acceder y modificar un bit individual dentro de un registro. Vamos a tener acceso a el bit GIE (Global Interrupt Enable bit), por ejemplo. Es el sptimo bit del registro INTCON. Una forma de acceder a este bit por su nombre es para escribir lo siguiente:

INTCON.GIE = 0 ' Clear Global Interrupt Enable Bit (GIE)

En lugar de un nombre poco, una variable, llamada constante, la funcin o una expresin encerrada entre parntesis se pueden utilizar para denotar la posicin de bit en un registro. Adems, para el acceso a bit individual no son constantes globales predefinidas B0, B1, ..., B7, o 0, 1, ... 7, donde 7 se considera el bit ms significativo.

INTCON.B0 = 0 ' Clear bit 0 of the INTCON register ADCON0.5 = 1 ' Set bit 5 of the ADCON0 register i = 5 STATUS.(i+1) = 1 ' Set bit 6 of the STATUS register

Por ltimo, un poco deseada se puede acceder mediante su nombre de alias. En este caso es el GIE_bit:

GIE_bit = 1 ' Set Global Interrupt Enable Bit (GIE)

SBIT TIPO
El PRO mikroBasic para PIC compilador tiene el tipo de datos sbit. Este es el menor tipo de datos se refiere a un solo bit. Si sbit tipo se asigna a una variable, el bit apropiado de algn registro ser cambiado por cambiar esa variable sin specyfing el nombre del registro y la ubicacin. La variable sbit se comportar como un puntero. Con el fin de declarar la variable sbit, basta con escribir:

dim Bit_name as sbit at Register_name.Bit_position program MyProgram ' Main module ... dim Output1 as sbit at PORTB.0 ' Variable Output1 is of sbit type ... Output1 = 1 ' Pin PORTB.0 is set (5V)

BIT TIPO
El PRO mikroBasic para PIC compilador proporciona el tipo de datos de bits que pueden ser utilizados para las declaraciones de variables.

dim bf as bit

A diferencia de las variables de tipo sbit, slo el nombre de bit se declar aqu, mientras que el compilador almacena bits variable en algunos de los registros libres de RAM. Como puede verse, no es necesario especificar un poco de algn registro especfico. La ubicacin exacta de la variable de tipo bit es desconocido para el usuario. Tipos de bit y sbit llevan a cabo con las siguientes limitaciones:

No se puede utilizar las listas de argumentos y como valores de retorno de la funcin No se puede utilizar como un miembro de las estructuras No se puede utilizar como elementos de matriz No se puede inicializar No se puede ser sealado Sus direcciones no puede ser de color rojo, por lo tanto, el operador unitario @ no se puede utilizar con variable de este tipo

dim ptr as ^bit ' invalid dim arr as array[5] of bit ' invalid

PROCEDIMIENTOS Y FUNCIONES
Las funciones y procedimientos, que se conocen como rutinas, son subprogramas (bloques portavlvulas declaracin) que realizan una tarea determinada sobre la base de una serie de parmetros de entrada. Las funciones devuelven un valor despus de la ejecucin, mientras que los procedimientos no lo hacen.

PROCEDIMIENTOS
Un procedimiento es un bloque con nombre de cdigo, es decir, una subrutina con algunas caractersticas adicionales. Por ejemplo, se puede aceptar parmetros. Los procedimientos se declaran de la siguiente manera:

sub procedure procedure_name(parameter_list) [ local declarations ] procedure body end sub


El especificador procedure_name representa un nombre de procedimiento y puede ser cualquier identificador vlido. El especificador parameter_list entre parntesis representa una lista de parmetros formales declarados similares a las variables. En mikroBasic PRO para PIC, los parmetros se pasan a un procedimiento por valor. Para pasar parmetros por direccin, es necesario aadir la palabra clave ByRef al comienzo de la declaracin de parmetros. Local declarations son declaraciones opcionales de variables y constantes que se refieren al procedimiento que se indica solamente. Procedure body es una secuencia de sentencias que se ejecutarn despus de llamar al procedimiento.

Los procedimientos son llamados por su nombre seguido de los parmetros reales colocados en el mismo orden que los parmetros formales a juego. Tras una llamada a procedimiento, todos los parmetros formales se crean como objetos locales inicializadas por valores de los argumentos reales.

'Add two numbers sub procedure add (dim byref sum as word, dim x, y as byte) sum = x + y ' add numbers x and y and store result into sum variable end sub ' end of subprocedure

Ahora, podemos llamar al procedimiento complemento para calcular el peso total de una carga, por ejemplo:

add (gross_weight, net_weight, tare_weight)


FUNCIONES
Las funciones deben ser debidamente declarado con el fin de interpretar correctamente durante el proceso de compilacin.

sub function function_name(parameter_list) as return_type [ local declarations ] function body end sub

Cada declaracin contiene los siguientes elementos:

Nombre de la funcin es un identificador por el cual ser posible llamar a una funcin (function_name en el ejemplo). Tipo de resultado (valor devuelto) es el tipo de datos de los datos devueltos (return_type en el ejemplo).

Declaracin de los parmetros: cada parmetro consiste en una variable, un puntero constante, o una matriz precedido por su especificador de tipo de datos similar a cualquier declaracin peridica variable (lista_de_parametros en el ejemplo). Se utilizan para transmitir informacin a la funcin cuando se le llama. Declaraciones locales son declaraciones opcionales de variables y constantes que slo se refieren a la funcin dada. Cuerpo de la funcin es una secuencia de sentencias que se ejecutarn despus de llamar a la funcin.

Aqu est un ejemplo de cmo definir y utilizar la funcin de potencia:

'function which calculates xn based on input parameters x and n (n > 0) sub function power(dim x, n as byte) as longint ' x and n are bytes, result is longint dim i as byte ' i is a byte result = 1 ' result = 1 if n = 0 if n > 0 then for i = 1 to n result = result*x next i end if end sub
Ahora, podemos llamar a la funcin de potencia para el clculo de 3
12,

por ejemplo:

tmp = power(3, 12) ' Calculate 312


Funciones y procedimientos BIBLIOTECAS
Las declaraciones de todas las funciones y procedimientos que se utilizan en Basic se suelen almacenar en los archivos de bibliotecas de mdulos especiales llamados. Antes de utilizar cualquiera de ellos en el programa, es necesario especificar el mdulo apropiado por medio de la clusula de incluir al comienzo del programa. Es slo una regla general. Pero si usted escribe un programa en el compilador mikroBasic PRO para PIC es suficiente para comprobar la biblioteca que desee en la lista y el mdulo correspondiente se incluir automticamente en el proyecto. Este compilador ya tiene un nmero de esas bibliotecas. Si el compilador encuentra una funcin desconocida o procedimiento durante la ejecucin del programa, primero se buscar su declaracin en las bibliotecas de prstamo anteriormente.

Rutinas incorporadas EN mikroBasic PRO PARA PIC


Adems de libreras de funciones y el procedimiento, el PRO mikroBasic para PIC compilador proporciona un conjunto de tiles funciones integradas:

Helo Hola Mayor La ms alta Inc Diciembre Chr. Ord SETBIT ClearBit TestBit Delay_us

Delay_ms Vdelay_Advanded_ms Vdelay_ms Delay_Cyc Clock_KHz Clock_MHz Reajustar CLRWDT DisableContextSaving SetFuncCall SetOrg GetDateTime GetVersion

Los delay_us y rutinas Delay_ms se generan en el lugar de llamada. Los Vdelay_ms, Delay_Cyc y Get_Fosc_kHz son reales rutinas bsicas. Sus fuentes se pueden encontrar en el archivo Delays.mbas encuentra en la carpeta usos del compilador.

PREPROCESSOR
Un preprocesador es una parte integral de cada compilador. Su funcin es reconocer y ejecutar las instrucciones del preprocesador.Cules son las instrucciones del preprocesador? Estas son las instrucciones especiales que no pertenecen al lenguaje Basic, pero se integran en el compilador. Antes de la compilacin, el compilador activa el preprocesador que pasa por el programa en la bsqueda de estas instrucciones. Si alguno encuentra, el preprocesador simplemente reemplazarlos por otro texto que, dependiendo del tipo de comando, puede ser un archivo (comando incluyen) o simplemente una corta secuencia de caracteres (comando definir). Entonces, el proceso de recopilacin se inicia. Las instrucciones del preprocesador pueden estar en cualquier lugar en el programa de origen y se refieren nicamente a la parte del programa despus de su aparicin hasta el final del programa.

Directiva de preprocesador INCLUYEN


Muchos programas suelen repetir el mismo conjunto de comandos en varias ocasiones. Con el fin de acelerar el proceso de escribir un programa, estos comandos y declaraciones suelen agruparse en mdulos especficos que pueden ser fcilmente incluidas en el programa usando la directiva include. Para ser ms precisos, la directiva include texto de las importaciones procedentes de otro documento, no importa si se trata de un conjunto de comandos, comentarios, etc, en el programa.

Compilacin condicional
Directivas de compilacin condicional se utilizan normalmente para hacer que los programas de cdigo fcil de modificar y compilar para microcontroladores diferentes. mikroBasic PRO para PIC compatible con la compilacin condicional. Todas las directivas de compilacin condicional debe ser completado dentro del mdulo en el que han comenzado.

Directivas # if, # elif, # else y # endif


Directivas condicionales # if, # elif, # else y # endif se ejecutan similares a las sentencias condicionales bsicas comunes. Si una expresin se escribe despus de # si tiene un valor distinto de cero, entonces las lneas de programa a raz de la directiva # if ser tratado como un cdigo de programa vlido y se compila en un cdigo hexadecimal. La sintaxis del mismo es:

#if constant_expression_1 not zero, <section_1> [#elif constant_expression_2 not zero, <section_2>] ... [#elif constant_expression_n not zero, <section_n>] [#else are compiled <final_section>] compiled #endif

'If constant_expression_1 is 'section_1 will be compiled 'If constant_expression_2 is 'section_2 will be compiled 'If constant_expression_n is 'section_n will be compiled 'If none of previous sections 'final_section will be

Cada directiva # if en un archivo de origen debe ir acompaada de un cierre directiva # endif. Cualquier nmero de directivas # elif pueden aparecer entre las directivas # if y # endif, pero slo una directiva # else est permitido. La directiva # else, si existe, debe ser la ltima directiva antes de # endif. Seccin puede ser cualquier cdigo de programa que puede ser reconocido por el compilador o preprocesador. El preprocesador selecciona una sola seccin, mediante la evaluacin despus de cada constant_expression # si o directiva # elif hasta que encuentra un verdadero (no cero) constant_expression. Si todas las expresiones constantes de evaluar a falso o sin directivas # elif aparecen, el preprocesador selecciona el final_section despus de la clusula # else. Si la clusula # else se omite y todas las instancias de constant_expression en el bloque # if se evale como falsa, ninguna seccin sern seleccionados para su posterior procesamiento.

Finalmente, el resultado es que slo una seccin de cdigo, incluso el vaco una, ser compilado.

PUNTEROS
Como usted sabe, todos los objetos en el programa (variable, procedimiento, subrutina, etc) se le asigna una direccin de memoria especfica. Cuando se declara una variable en el programa, el compilador automticamente le asigna un lugar libre de memoria RAM.Durante la programacin, estas direcciones se mantienen ocultos a los programadores. En otras palabras - Las direcciones son "secreto" usado ... La posibilidad de acceder a diferentes objetos por sus nombres (identificadores) en lugar de direcciones es una de las principales ventajas de los lenguajes de programacin de alto nivel. Como una cuestin de hecho es mucho ms fcil tratar con palabras (nombres) que con nmeros. Adems, el compilador se encarga de asociar los objetos y sus adresses. Direccionamiento de los objetos mediante la especificacin de sus nombres se llama direccionamiento directo.

Sin embargo, a veces tienes que lidiar con las direcciones de las localizaciones de memoria. A continuacin, se utilizan los punteros - las variables que sostienen la direccin de memoria de un objeto. En este caso, es posible acceder a los objetos que utilizan punteros slo.Esta manera de abordar por eso se llama direccionamiento indirecto. Antes de utilizar un puntero, es necesario para declarar su tipo de datos. Simplemente, aadir un prefijo intercalacin (^) antes de que el tipo.

dim pointer_p as ^word ' pointer_p points to data of word type

Si se requiere para almacenar una variable en algn lugar especfico de memoria RAM, entonces la directiva absoluta debe ser utilizado en el programa de la siguiente manera:

dim variable_a as word absolute 12 ' variable_a will occupy 1 word ' (16 bits) at address 12

Ahora bien, si desea acceder a los datos de ubicacin de la memoria del puntero, es necesario agregar un smbolo de intercalacin despus del nombre del puntero. Por ejemplo, vamos a declarar el puntero del pointer_p mencionado que apunta a una palabra (en este caso, se ha definido previamente variable_a almacenado en la direccin 12 en la memoria RAM). El variable_a puntas se le asignar el valor 26:

dim pointer_p as ^word 'Pointer_p points to data of word type ... ... pointer_p = 12 'Pointer_p points to memory adress 12 ... pointer_p^ = 26 'Variable a at memory address 12 has value 26 'Similar to the absolute directive that is used for variables, the org 'directive specifies the starting address of a routine in ROM. It is 'appended to the routine declaration. For example: sub procedure proc(dim par as word) org 0x200 ' Procedure will start at ... ' the address 0x200 end sub

En este caso, el puntero pointer_p se asigna el valor 12 (pointer_p = 12), lo que significa que la direccin de memoria 12 se especifica por la presente.

Si desea cambiar el valor de una variable en punta, es suficiente para cambiar el valor del puntero y aadir un smbolo de intercalacin (^) como un sufijo a la misma. Refirase a la figura en el variable_a derecha, variable en la direccin 12 se asigna el valor 26 por medio del puntero pointer_p. Los punteros pueden apuntar a los datos almacenados en cualquier espacio de memoria disponible y puede residir en cualquier espacio de memoria disponible, salvo en el espacio de memoria de programa (ROM).

@ OPERADOR
El operador @ devuelve la direccin de un objeto, es decir, crea un puntero a su operando. Las siguientes reglas se aplican aqu:

Si X es una variable, @ X devuelve la direccin de X. Si F es una rutina (funcin o procedimiento), @ F crea un puntero a F.

dim temp as word ptr_b as ^byte ptr_arr as ^byte[10] arr as byte[10] main: ptr_b = @arr ' @ operator will return ^byte temp = @arr ' @ operator will return ^byte ptr_arr = @arr ' @ operator will return ^byte[10] end.

Si la variable X es de tipo de matriz, el operador @ volver puntero a su elemento de base primera, excepto cuando el lado izquierdo de la instruccin en la que X se utiliza es un puntero de matriz. En este caso, el operador @ volver puntero a la matriz, no para el elemento de base primera.

Estructura de un programa en mikroBasic PRO para PIC:

1. Cada programa comienza normalmente con un comentario que proporciona informacin sobre el propsito del programa, la fecha de la escritura del programa, programador, la versin, los cambios realizados en relacin con la versin previa, etc estos comentarios (cabecera) no son obligatorias, pero es una buena costumbre escribirlos y tenerlos en el programa. 2. El cdigo de cada programa se inicia con una directiva del programa seguido por el nombre del programa. 3. Si el programa, aparte del mdulo principal, contiene otros mdulos, as, sus nombres deben ser especificados usando la directiva include (un include por cada mdulo). En consecuencia, si el compilador, al compilar el mdulo principal, llega a un objeto no declarado (funcin, variable, etc), primero tratar de encontrar su declaracin dentro de los mdulos declarados. Si no hay ninguna declaracin al respecto se encuentra, el compilador informar de un error. 4. La directiva include (si hay alguna) es seguido por una porcin de cdigo de la intencin de declarar las variables, constantes, procedimientos, subprogramas, funciones y otros objetos para ser usados ms tarde en el programa.Estas declaraciones se utilizan para reservar memoria RAM para almacenar datos registra as como para indicar al compilador la forma de ejecutar alguna funcin o procedimiento. Por ejemplo, un dato de tipo byte, ocupa slo un registro, mientras que una de datos de tipo flotador ocupa cuatro registros. 5. El programa principal se inicia con la principal: la Directiva (siempre seguido de dos puntos). Tambin se le llama un "cuerpo del programa. 6. Cada programa termina con el final. Directiva (siempre seguido de un perodo).

2.3 COMPILADOR mikroBasic PRO PARA PIC


Todo lo que has ledo hasta ahora acerca de la programacin en Basic es slo una teora. Es til saber, por supuesto, pero no hay que olvidar que este lenguaje de programacin no es mucho en relacin con algo concreto y tangible. Usted experimentar muchos problemas con los nombres exactos de los registros, sus direcciones, nombres de los bits de control especiales y muchos otros cuando empieza a escribir su primer programa en Basic. El punto es que se necesita ms que una teora para hacer que el microcontrolador hacer algo til. Teniendo en cuenta un dicho ms vale prevenir que curar", tenemos que recordar todas las cosas que deben se han establecido antes de comenzar a escribir un programa para el microcontrolador. En primer lugar, usted necesita un programa instalado en su PC que entiende el lenguaje de programacin que se va a utilizar y que proporciona un entorno de trabajo adecuado para ello. No hay tal compilador sutable para un solo tipo de microcontroladores ni para todos los microcontroladores. Se trata de software que se utiliza para la programacin de microcontroladores similares de un fabricante. Ya hemos introducido el lenguaje mikroBasic que ha sido especialmente diseado para la programacin de microcontroladores PIC. Ahora, cuando usted sabe lo suficiente sobre l, es el momento de presentar el software que se va a utilizar para el desarrollo y edicin de sus proyectos. Este software se llama el mikroBasic PRO para PIC compilador. Es IDE (Integrated Development Environment) incluye todas las herramientas que necesita para desarrollar sus proyectos (editor, compilador de depuracin, etc) Como su nombre lo indica, el PRO mikroBasic para PIC compilador est pensado para escribir programas para microcontroladores PIC en el lenguaje Basic. Contiene informacin sobre la arquitectura de los microcontroladores PIC (registros, sus direcciones exactas, mdulos de memoria, el funcionamiento de sus mdulos, conjunto de instrucciones, etc pinout). Adems, incluye herramientas especficas para la programacin de microcontroladores PIC. Por lo tanto, lo primero que tienes que hacer cuando se inicia el compilador para seleccionar el chip y la frecuencia de funcionamiento de la lista. Este no es el final. Este es el beginnig. Usted puede finalmente empezar a escribir el programa en Basic. El proceso de creacin y ejecucin de un proyecto se puede dividir en varias partes:

1. Creacin del proyecto (nombre del proyecto, la configuracin del proyecto, las dependencias de archivos); 2. Edicin del programa; 3. Compilacin del programa y correccin de errores; 4. Depuracin (ejecutar el programa paso a paso para asegurarse de que realiza las operaciones que se pueden esperar); 5. Programacin de microcontroladores (cargar el archivo. Hex genertaed por el compilador en el microcontrolador utilizando el programador PICFlash).

INSTALACIN mikroBasic PRO PARA PIC


La instalacin de mikroBasic PRO para PIC es similar a la instalacin de cualquier otro programa de Windows y todo el procedimiento se lleva a cabo a travs de mago:

Slo tienes que seguir las instrucciones y haga clic en Siguiente, Aceptar, Siguiente, Siguiente ... La misma historia de siempre a excepcin de la ltima opcin "Desea instalar PICFlash V7.11 programador? '. Te hace la pregunta qu hacer? Como ustedes saben, el compilador traduce un programa escrito en Basic en un cdigo hexadecimal. El siguiente paso consiste en cargar el cdigo en el microcontrolador. Es por eso que necesita el programador PICFlash. Instalarlo!

Despus de completar la instalacin PICFlash, se le pedir para la instalacin de otro programa similar. Se trata de un software para la programacin de un especial de la familia de microcontroladores PIC que funcionan en el modo de bajo consumo (3,3 V). Salta es ... El ltimo paso - la instalacin del controlador!

Un controlador es un programa que permite al sistema operativo para comunicarse con un dispositivo perifrico. En nuestro caso, este dispositivo es el programador del hardware de su sistema de desarrollo. Definitivamente, usted lo necesite. Haga clic en S.

Un tipo de controlador que desea instalar depende del sistema operativo en uso. En este caso, el PC se ejecuta un sistema operativo de 32 bits de Windows XP. Seleccione el Win 2000, XP, 2003 32-bit carpeta que contiene el controlador apropiado y puesta en marcha de su instalacin. Ahora ests a salvo, slo sigue haciendo clic en Siguiente, Aceptar, Siguiente, Siguiente ...

IDE DE mikroBasic PRO PARA PIC


Esto es lo que aparece en la pantalla cuando se inicia mikroBasic PRO para PIC, por vez primera:

Por desgracia, una descripcin detallada de todas las opciones disponibles en este IDE tomara demasiado tiempo, por lo que no vamos en el mismo. Vamos a describir solamente las caractersticas ms importantes de la mikroBasic PRO para PIC compilador, en su lugar.Por supuesto, siempre se puede obtener ms informacin pulsando el botn de Ayuda [F1]. Una explicacin detallada sobre cmo crear un nuevo proyecto y escribir un programa se da en varios ejemplos prcticos en el captulo 4 de este libro.

JEFE DE PROYECTO

Un programa escrito en el PRO mikroBasic para PIC compilador no es un documento independiente, sino una parte de un proyecto que tambin incluye el cdigo hexadecimal, el cdigo ensamblador, y otros archivos. Algunos de ellos son creados durante el funcionamiento del compilador, mientras que algunos son importados de otros programas. Sin embargo, la ventana Project Manager le permite manejar todos los archivos del proyecto. Simplemente haga clic derecho en cualquier carpeta y seleccione la opcin que necesita para su proyecto.
Administrador de Biblioteca

Las libreras contienen un gran nmero de listas para utilizar las funciones y proporcionan una gran cantidad de instalaciones al escribir programas para microcontroladores PIC. El compilador debe conocer todas las dependencias de su archivo de origen mikroBasic con el fin de compilar correctamente. Usted debe abrir la ventana del Administrador de bibliotecas y las bibliotecas de verificacin que desee utilizar en su programa. Cuando una biblioteca est marcada, se agrega automticamente al proyecto y vinculadas durante el proceso de compilacin. Por lo tanto, usted no tiene que incluir manualmente en los archivos de cdigo fuente utilizando la directiva # include. Por ejemplo, si el programa utiliza una pantalla LCD, entonces no hay necesidad de escribir nuevas funciones, porque mediante la seleccin de la

Biblioteca de LCD que ser capaz de utilizar listo para utilizar las funciones de LCD en su programa. Si esta biblioteca no est seleccionado en el Administrador de bibliotecas, cada vez que intenta utilizar cualquiera de sus funciones, el compilador informar de un error. Una descripcin de cada biblioteca est disponible haciendo clic derecho sobre su nombre y seleccionando la opcin de ayuda. Explorador de cdigo

La ventana de explorador del cdigo que permite localizar fcilmente los objetos (funciones, constantes, procedimientos, etc) dentro de los programas largos. Por ejemplo, si usted busca una funcin que se utiliza en el programa, simplemente haga doble clic en su nombre en esta ventana, y el cursor se coloca automticamente en la lnea apropiada en el programa. Configuracin del proyecto

Al compilar un proyecto, el compilador genera archivos a cargar en el microcontrolador. Estos archivos ser diferente dependiendo del tipo del microcontrolador y el propsito de la compilacin.Por lo tanto, a fin de que el compilador pueda funcionar correctamente, es necesario establecer algunos parmetros del proyecto en la ventana Configuracin del proyecto: Dispositivo: La seleccin del microcontrolador a utilizar permite que el compilador para recuperar el archivo de definicin de asociada. El archivo de definicin de un microcontrolador contienen informacin especfica sobre sus registros SFR, sus direcciones de memoria y algunas variables especficas para que el microcontrolador. Es todo obligatoria para la creacin de una compatible. Hexagonal archivo. Oscilador: Esta opcin se utiliza para especificar la velocidad de funcionamiento del microcontrolador. Por supuesto, este valor depende del oscilador en uso. Se recupera por el compilador para compilar las rutinas que requieren informacin en tiempo (Delay_ms function () por ejemplo). Posteriormente, esta informacin tambin ser utilizada por el programador. La velocidad de funcionamiento se ajusta a fin de permitir oscilador interno del microcontrolador para funcionar a la frecuencia seleccionada.
Construir / Tipo de depurador: Todo el proceso se llama compilacin incluye la construccin y analizar, compilar, enlazar y la generacin de archivos hexagonales. El tipo de construccin le permite configurar el modo de construccin. Dependiendo de la eleccin del modo, el archivo generado para ser cargado en el microcontrolador ser diferente. Tipo de generacin - la liberacin: El programa que se cargar en el microcontrolador no contendr ninguna informacin complementaria para ser depurado ms tarde. Despus de completar el proceso de compilacin, el compilador no tiene ms influencia en la ejecucin del programa. Tipo de generacin - de depuracin ICD: Parte de la informacin se agrega a la hex con el fin de permitirle llevar a cabo la depuracin de hardware.. Cuando el proceso de compilacin se ha completado y el microcontrolador programado est, el compilador permanece conectada al microcontrolador y todava puede afectar su funcionamiento. Una herramienta llamada mikroICD (depurador en circuito) permite que el programa a ser ejecutado paso a paso y proporciona un acceso al contenido actual de todos los registros del microcontrolador. A los efectos de la depuracin, un simulador de software se puede utilizar en ambos modos de tipo de generacin. Se le permite simular el programa mediante la reproduccin de la conducta microcontrolador. El simulador no utiliza dispositivos reales para su funcionamiento, de modo que algunas operaciones no pueden ser reproducidas (interrumpir, por ejemplo). Sin embargo, es ms rpido para depurar un programa mediante el uso de simulador y no requiere ningn dispositivo taget. Tenga en cuenta que alguna de estas opciones pueden ser modificadas en cualquier momento durante la edicin del programa. No te olvides de volver a construir y volver a programar el dispositivo despus de modificar cualquiera de esas opciones.

EDICIN y compilar programas


Editor de cdigo

Editor de cdigo es una parte central de la ventana del compilador usado para escribir y editar programas. Un gran nmero de opciones que se utilizan para establecer sus funciones y el diseo se pueden encontrar en las herramientas y el men Opciones [F12]. Cuando se escribe un programa, no se olvide de los comentarios. Los comentarios son muy importantes para el programa de depuracin y actualizacin. Por otra parte, aunque el compilador no tiene restriccin de formato, siempre debe seguir las reglas de edicin mismos (como en los ejemplos proporcionados en este libro). Como no hay lmite de longitud de lnea, no dude en utilizar los espacios en blanco con el fin de hacer que su cdigo sea ms legible.

Cuando se escribe un programa, recopilar con regularidad a fin de corregir errores de sintaxis que viene usted. Tambin puede compilar su programa cada vez que la redaccin de una nueva funcin se ha completado y probar su comportamiento mediante el modo de depuracin. De esta manera, es mucho ms fcil de corregir los errores de compilacin. De lo contrario, se ver obligado a modificar el programa.

COMPILACIN y correccin de errores


Para compilar el cdigo, slo tienes que hacer clic en la opcin Generar en el men Proyecto. De hecho, todo el proyecto se compila y, en caso de que la compilacin es exitosa, los archivos de salida se generan (asm,. Hexagonal, etc.) Una compilacin es exitosa si no hay error se encontr. La compilacin genera muchos mensajes que se muestran en la ventana de mensajes. Estos mensajes consisten en la informacin, advertencias y errores. Cada error encontrado est asociado con su lnea de programa y la descripcin. Como un error en su cdigo puede generar muchos otros errores, siempre se debe tratar de corregir el error por primera vez en la lista y luego volver a compilar el programa. En otras palabras, es aconsejable para corregir los errores de uno por uno.

En el ejemplo anterior, el programa informa de un error de sintaxis en la lnea 80a. La compilacin le permite corregir su programa mediante la fijacin de todos los errores mikroBasic. Cuando todos los errores son fijos, el programa est listo para ser descargado en el microcontrolador. Sin embargo, su trabajo no ha terminado todava, porque todava no sabe si su programa se comporta como se espera o no.

Depuracin del programa


Como pudimos ver anteriormente, hay dos modos de depuracin: un depurador de software que simula las acciones del microcontrolador (modo predeterminado) y un depurador de hardware (mikroICD), que lee directamente el contenido de la memoria del microcontrolador. Sea cual sea el modo que elija, el proceso de depuracin es el mismo. En el caso de que usted elija CIE depuracin asegrese de cargar el programa en el microcontrolador. La depuracin es un paso muy importante, ya que le permite probar el programa despus de una compilacin exitosa, o para corregir errores descubiertos en un programa en ejecucin. Para iniciar el depurador, haga clic en la opcin de depurador de inicio en el men Ejecutar. El editor de cdigo de forma automtica ser ligeramente modificado y una ventana llamada Valores Mira aparecer. El principio de depuracin se basa en el funcionamiento de un programa paso a paso y siguiendo la evolucin del contenido de los registros y valores variables. De esta manera, usted ser capaz de verificar el clculo y para ver si algo inesperado ha ocurrido. Al ejecutar el programa paso a paso, usted ser capaz de localizar fcilmente dnde ocurren los problemas. Como la depuracin puede conducir a la modificacin del programa, siempre se debe volver a compilar el programa despus de cada correccin y reiniciar el depurador con el fin de verificar lo que han cambiado.

Software del simulador


Si usted desea ser un programador y dedcate a microcontroladores de programacin, entonces usted tiene que acostumbrarse al hecho de que los programas casi nunca funcionan al primer intento o empezar a utilizar un simulador. El simulador es una parte integral del compilador usado para simular el funcionamiento del microcontrolador.

Antes de la puesta en marcha del simulador, seleccione el modo de funcionamiento en la ventana Configuracin del proyecto (tipo de construccin - la liberacin), compilar el programa y haga clic en la opcin Run / Start del depurador. El compilador se ajusta automticamente al modo de simulacin. Como tal, se vigila el estado de todos los bits del registro y le permite ejecutar el programa paso a paso mientras se controla el funcionamiento del microcontrolador en la pantalla. Unos cuantos iconos, utilizados exclusivamente para el funcionamiento de este simulador, aparecer en la barra de herramientas cuando el compilador est configurado en este modo.

Estos iconos tienen los siguientes significados:

Paso a paso: Ejecutar el programa de lnea actual, y luego se detiene. Si la lnea de programa ejecutado llama a una subrutina, el depurador se mete en la subrutina y se detiene despus de ejecutar la primera instruccin dentro de ella. Paso a paso: Ejecutar el programa de lnea actual, y luego se detiene. Si la lnea de programa ejecutado llama a una subrutina, el depurador no entrar en ella. El subprograma se ejecutar todo y se detiene el depurador a la primera instruccin despus de la llamada. Parece que una lnea de programa se omite aunque toda la subrutina se ejecuta.Como resultado, el estado de los registros se cambia. Este comando se utiliza normalmente cuando es necesario para acelerar la ejecucin de bucles de programa de largo. Ejecutar hasta el cursor: Ejecutar todas las lneas del programa hasta la posicin del cursor se alcanza. Al salir: Ejecutar todas las lneas del programa restantes dentro de la rutina. El depurador se detiene inmediatamente despus de salir de la subrutina.

Los puntos de interrupcin que el proceso de depuracin de los programas ms eficientes, lo que le permite detener la ejecucin del programa en alguna lnea especfica. Esto es muy til ya que ser capaz de ver slo las partes crticas del programa, no pierden su tiempo poniendo a prueba la lnea de todo el programa por lnea. Para agregar o quitar un punto de interrupcin slo tienes que hacer clic en el lado

izquierdo de su editor de cdigo en la lnea correspondiente o presione [F5]. Una pequea ventana llamada puntos de interrupcin que indica dnde se encuentran los puntos de interrupcin. Tenga en cuenta que las lneas marcadas por los puntos de interrupcin se destacan en rojo.

La lnea que se est ejecutando actualmente est resaltada en azul. Usted puede leer el contenido de los registros y las variables que ha seleccionado en Valores ver en cualquier momento. Si desea ir directamente a los puntos de interrupcin, utilice el comando Ejecutar del depurador / Pausa.

Ventana Inspeccin VALORES

Los depuradores de software y hardware tienen la misma funcin para controlar el estado de los registros durante la ejecucin del programa. La diferencia es que el depurador software simula la ejecucin del programa en un PC, mientras que el depurador ICD utiliza el microcontrolador. Cualquier cambio de un estado lgico pin se refleja en el registro correspondiente (puerto). Como la ventana Inspeccin Valores le permite supervisar el estado

de todos los registros, es fcil comprobar si un alfiler se activa o se desactiva. Las ltimas modificaciones aparece en rojo en esta ventana.Esto le permite localizar fcilmente las modificaciones en el archivo de lista durante la depuracin. Seleccione Vista / Windows y haga clic en la opcin Ver valores para activar esta ventana. Usted puede hacer una lista de los registros y variables del estado de los que desea monitorear.

CRONMETRO

Si desea saber el tiempo que tarda el microcontrolador para ejecutar una parte del programa, seleccione Ejecutar / Ver opcin de Cronmetro. Una ventana, como se muestra en la figura a la derecha, aparecer. Sabe usted cmo funciona el cronmetro? Bueno, es tan simple como eso. Los tiempos (momento en que el programa se ha iniciado, el tiempo de la ejecucin del ltimo paso, etc) se mide automticamente para cada accin de la depuracin (paso en, pasar por encima, ejecute / pausa, etc) y se muestran en la ventana del cronmetro.

Depurador en circuito
Otra forma de comprobar la ejecucin de un programa es mediante el uso de mikroICD debugger (depurador en circuito). El mikroICD es una parte integral del programador PICFlash. Se utiliza para probar y depurar programas. El proceso de pruebas y la depuracin se realiza mediante el seguimiento del estado de todos los registros dentro del microcontrolador que opera en tiempo real. Con el fin de habilitar la depuracin, es necesario seleccionar las opciones de tipo de generacin-ICD de depuracin y depuracin-mikroICD antes de que el programa est cargado en el microcontrolador. Tan pronto como el depurador mikroICD se inicia, una ventana, como se muestra en la figura a continuacin, aparece. El depurador mikroICD se comunica con el PIC a travs de sus pines utilizados para la programacin. Por lo tanto, estos pernos no pueden ser utilizados como pines de E / S, mientras que el proceso de depuracin est en curso. Durante la operacin depurador mikroICD, programador y el ordenador tiene que estar conectado mediante un cable USB.

mikroICD depurador opciones:

Iniciar depurador [F9] Ejecutar / Pausa depurador [F6] Detener depuracin [Ctrl + F2] Paso a paso [F7] Paso a paso [F8] Step Out [Ctrl + F8] Alternar punto de interrupcin [F5] Mostrar / Ocultar puntos de interrupcin [Shift + F4] Borrar puntos de interrupcin [Ctrl + Shift + F4]

Cada uno de estos comandos se activa a travs de atajos de teclado o haciendo clic en el icono apropiado en la ventana Inspeccin Valores.

El depurador mikroICD tambin ofrece opciones tales como ejecutar un programa paso a paso (paso a paso), haciendo una pausa la ejecucin del programa para examinar el estado de los registros actualmente activos con puntos de interrupcin, el seguimiento de los valores de algunas variables, etc El siguiente ejemplo ilustra un paso a intensificar la ejecucin del programa utilizando el comando Paso a paso.

Paso 1:

En este ejemplo la lnea de programa 31a est resaltada en azul, lo que significa que se ejecutar a continuacin. El estado actual de todos los registros de la microontroller se pueden ver en el reloj mikroICD ventana de Valores. Paso 2:

Despus de que el Paso a paso por el comando [F8] se ejecuta, el microcontrolador se ejecutar la lnea de programa 31. La primera lnea la prxima (32 ) para ser ejecutado se resalta en azul. El estado de los registros que se cambian durante la ejecucin de esta instruccin puede ser visto ahora en la ventana Inspeccin Valores.

Carga del programa en el microcontrolador


Si usted ha solucionado todos los errores en el cdigo y cree que el programa est listo para su uso, entonces usted debe cargar en el microcontrolador. Utilizar el programador PICFlash para este propsito. PICFlash es una herramienta diseada para programar todo tipo de microcontroladores PIC. Se compone de dos partes:

La parte de hardware almacena un archivo hexadecimal (el programa que se carga) y los programas del microcontrolador con niveles especficos de tensin. Durante el proceso de programacin, un nuevo programa est escrito en la memoria flash del microcontrolador. El programa anterior se borrarn automticamente de la memoria flash. La parte del software es el encargado de enviar el programa (. Hex) para la parte de hardware del programador sobre un cable USB. Se activa pulsando mE_Programmer en el men Herramientas, o pulsando la tecla [F11]. Como resultado, puede modificar algunos parmetros de programacin y tambin controlar el funcionamiento del hardware del programador (de carga, escribir, verificar ...).

Tenga en cuenta que puede volver a programar el microcontrolador tantas veces como desee.

HERRAMIENTAS compilador
Este compilador proporciona herramientas especiales que simplifican considerablemente el proceso de escritura del programa. Todas estas herramientas estn disponibles en el men Herramientas. Aqu est una breve descripcin de todos ellos.

TERMINAL USART

El terminal USART es un reemplazo para el estndar de Windows Terminal Server Hyper. Se puede utilizar para comprobar el funcionamiento del microcontrolador que utiliza la comunicacin USART. Estos microcontroladores estn integrados en el dispositivo de destino y se conecta al conector RS-232 de la PC mediante un cable serie. La ventana de terminal

USART contiene opciones para configurar la comunicacin serie y mostrar los datos enviados / recibidos. EEPROM EDITOR

Al seleccionar la opcin Editor de EEPROM desde el men Herramientas, una ventana, como se muestra en la figura a continuacin, aparecer.Aqu se puede ver cmo la memoria EEPROM del microcontrolador parece. Si desea cambiar su contenido despus de cargar el programa en el microcontrolador esta es la forma correcta de hacerlo. Si un nuevo contenido es un dato de tipo especfico (char, int o double), entonces usted debe seleccionar, introduzca el valor en el campo Valor de edicin y haga clic en Editar. A continuacin, haga clic en el botn Guardar para guardarlo como un documento con la extensin. Hexagonal. Si el uso de EEPROM en la opcin Proyecto est activo, los datos se cargarn automticamente en el microcontrolador durante el proceso de programacin. TABLA ASCII
Si usted necesita la representacin numrica de cualquier carcter ASCII, slo tienes que seleccionar la opcin de tabla ASCII en el men Herramientas y la mesa, como se muestra en la figura a continuacin, aparecer.

Usted probablemente sabe que todas las teclas de su teclado est asociado con un cdigo (ASCII). Los nmeros tienen equivalentes extraos. Por esta razn, la instruccin de programa para visualizar el nmero 7 en un LCD no se muestran, pero el equivalente de la instruccin BEL. Si enva el mismo nmero que un personaje, obtendr el resultado esperado - el nmero 7. En consecuencia, si desea mostrar un nmero sin antes convertirlo en el personaje adecuado, entonces es necesario aadir el nmero 48 a cada dgito del nmero que se muestra se compone de.

SIETE SEGMENTOS DEL EDITOR


Un editor de siete segmentos le permite encontrar fcilmente a qu nmero hay que fijarse en un puerto de salida con el fin de mostrar un smbolo que desea. Por supuesto, no hace falta decir que los pines del puerto debe estar conectado correctamente para mostrar los segmentos. Slo tienes que colocar el cursor en cualquier segmento de la pantalla y haga clic en l. El nmero que usted debe entrar en el programa aparecer de inmediato. Eso es todo.

LCD de caracteres personalizados


Adems de los caracteres estndar, la pantalla LCD tambin puede mostrar los caracteres creados por el programador. Al seleccionar la herramienta de LCD de caracteres personalizados usted se librar de tedioso trabajo de la escritura de funciones para el envo de cdigo correspondiente a una pantalla. Basta con crear un smbolo, haga clic en pequeos cuadrados en la ventana del LCD del carcter personalizado, seleccione la posicin y la fila y haga clic en el botn Generar. El cdigo correspondiente aparece en otra ventana. No hay clics no son suficientes. Copiar al Portapapeles - Pegar ...

GRFICO LCD GENERADOR de mapa de bits


Esta es otra herramienta necesaria en caso de que el microcontrolador que est escribiendo programas para usos pantalla LCD grfica (GLCD). Esta herramienta le permite visualizar cualquier mapa de bits con facilidad. Con el fin de tomar ventaja de ello, seleccione Herramientas / Editor de mapa de bits GLCD y aparece la ventana correspondiente. Seleccione el tipo de visualizacin que se utilizar y cargar un mapa de bits. El mapa de bits debe ser monocromtico y en la resolucin especificada (128 x 64 pxeles en este caso).Adems procedimiento es el mismo que en el ejemplo anterior. Copiar al portapapeles ...

Cada cdigo generado el uso de herramientas para el control de LCD y GLCD contiene funciones de la biblioteca Lcd. Si usted los utiliza en el programa, no se olvide de marcar la casilla junto a esta biblioteca

en la ventana del Administrador de la Biblioteca a fin de que el compilador para reconocer estas funciones correctamente.

BIBLIOTECAS

Una de las caractersticas ms tiles de la mikroBasic PRO para PIC compilador es el Administrador de la Biblioteca y sin duda merece nuestra atencin. Si necesita una funcin o un procedimiento para realizar determinada tarea, mientras que escribir un programa, slo hay que encontrarlo en una de las bibliotecas incluidas en el compilador y lo utilizan. Una biblioteca es en realidad un archivo llamado cabecera. Contiene un conjunto de variables y funciones escritas en mikroBasic. Cada biblioteca tiene un propsito especfico. Por ejemplo, si usted necesita un procedimiento para generar una seal de audio en algunos pines, abra la biblioteca de sonido en la ventana Library Manager y haga doble clic en el sound_play procedimiento adecuado. Una descripcin detallada de este procedimiento aparece en la pantalla. Copia este archivo en su programa y establecer los parmetros adecuados. Si esta biblioteca est marcada, sus funciones sern recuperados durante el proceso de compilacin y no ser necesario el uso de la directiva include. El PRO mikroBasic para PIC incluye libreras especficas diversas y hardware. BIBLIOTECAS DIVERSOS
Diversas bibliotecas contienen algunas de las funciones de propsito general: BIBLIOTECA Botn de la Biblioteca Conversiones de Biblioteca DESCRIPCIN Funcin elimina la influencia de botn de contacto parpadeo Rutinas de biblioteca para los nmeros a cadenas y BCD / conversiones decimales

C de la biblioteca Cadena de la Biblioteca Biblioteca de tiempo de Trigon Biblioteca

Funciones de biblioteca para analizar y mapear caracteres Biblioteca, que automatiza las tareas relacionadas con cadena Biblioteca de rutinas de tiempo de uso de clculos de tiempo en formato de tiempo UNIX Funciones de biblioteca para la manipulacin aritmtica de punto flotante

Hardware especficos BIBLIOTECAS


Bibliotecas de hardware especficos incluyen funciones usadas para controlar el funcionamiento de los mdulos de hardware: BIBLIOTECA ADC Biblioteca CAN Biblioteca CANSPI Biblioteca Compacto Biblioteca de Flash EEPROM Biblioteca Ethernet PIC18FxxJ60 Biblioteca Biblioteca de memoria flash Pantalla grfica LCD Biblioteca I C Library Teclado Biblioteca Lcd Biblioteca Manchester Code Library Multi Media Card biblioteca OneWire Biblioteca Expansin del puerto de la Biblioteca PS / 2 Biblioteca PWM Biblioteca RS-485 Biblioteca Software I C Library DESCRIPCIN Se utiliza para una operacin de convertidor A / D Se utiliza para el funcionamiento con mdulo CAN Se utiliza para el funcionamiento con el mdulo CAN externo (MCP2515 o MCP2510) Se utiliza para la operacin con tarjetas Compact Flash de memoria Se utiliza para la operacin con una funcin de memoria EEPROM Se utiliza para la operacin con el incorporado en el mdulo Ethernet Se utiliza para la operacin con una funcin de memoria Flash Se utiliza para la operacin con el grfico del mdulo LCD con una resolucin de 128x64 Se utiliza para la operacin con una funcin de mdulo de comunicacin serial I2C Se utiliza para la operacin con el teclado (botones pulsadores 4x4) Se utiliza para la operacin con pantalla LCD (2x16 caracteres) Se utiliza para la comunicacin mediante el cdigo Manchester Se utiliza para la operacin con multimedia MMC tarjetas de memoria flash Se utiliza para la operacin con circuitos utilizando un cable de comunicacin serie Se utiliza para la operacin con el expansor de puerto MCP23S17 Se utiliza para la operacin con el teclado PS / 2 estndar Se utiliza para la operacin con una funcin de mdulo PWM Se utiliza para el funcionamiento con mdulos que utilizan la comunicacin serie RS485 Se utiliza para el software de simulacin de I2C

Software SPI Library Software UART Library Biblioteca de sonidos SPI Biblioteca SPI Ethernet Library SPI LCD grfico Biblioteca SPI LCD Biblioteca SPI LCD8 Biblioteca SPI T6963C LCD grfico Biblioteca UART Biblioteca USB HID biblioteca

Se utiliza para la simulacin de software de SPI Se utiliza para el software de simulacin UART Se utiliza para la generacin de seales de audio Se utiliza para la operacin con una funcin de mdulo SPI Se utiliza para la comunicacin SPI con el mdulo Ethernet (ENC28J60) Se utiliza para 4-bit SPI comunicacin con pantalla LCD grfica Se utiliza para 4-bit comunicacin SPI con pantalla LCD (2x16 caracteres) Se utiliza para 8-bit comunicacin SPI con pantalla LCD Se utiliza para la comunicacin SPI con el grfico de la pantalla LCD Se utiliza para la operacin con una funcin de mdulo UART Se utiliza para la operacin con una funcin de mdulo USB

Captulo 3: PIC16F887 Microcontrolador


El PIC16F887 es un producto de Microchip
.

Cuenta con todos los mdulos que los microcontroladores

modernos normalmente tienen.Por su bajo precio, amplia gama de aplicaciones, de alta calidad y fcil acceso, es una solucin ideal en aplicaciones como el control de diferentes procesos en la industria, la medicin de diferentes valores, etc Una lista a continuacin incluye solamente algunos de sus principales caractersticas.

3.1 LAS FUNCIONES BSICAS PIC16F887 3.2 SFRS FUNDAMENTALES 3.3 Entrada / Salida 3,4 TIMER0 3,5 TIMER1 3,6 Timer2 3.7 mdulos CCP 3.8 MDULOS DE COMUNICACIN DE SERIE 3.9 Mdulos analgicos 3,10 reloj oscilador 3,11 memoria EEPROM 3.12 REINICIAR! NEGRO-OUT, Brown-out o ruidos?

3.1 LAS FUNCIONES BSICAS PIC16F887


o o

Arquitectura RISC
A tan slo 35 instrucciones para aprender Un ciclo en todas las instrucciones de una sola, excepto las ramas

Frecuencia de trabajo 0-20 MHz

o o o o o o o o o o o o o o o o o

Oscilador interno de precisin


Calibrado de fbrica Software gama de frecuencias seleccionable de 8 MHz a 31kHz

Voltaje de alimentacin 2.0-5.5V


Consumo: 220uA (2,0 V, 4 MHz), 11uA (2,0 V, 32 kHz) 50nA (modo stand-by)

En ahorro de energa Modo de espera Brown-out Reset (BOR) con la opcin de software de control 35 de entrada / salida de pines
Fuente de alta corriente / sumidero de accionamiento directo de LED software y resistencia de pull-up programable de forma individual Interrupcin-on-Cambiar el PIN

La memoria ROM de 8K en tecnologa flash


Chip puede ser reprogramado hasta 100.000 veces

In-Circuit Serial Programming Opcin


Chip se puede programar incluso incorporado en el dispositivo de destino

256 bytes de memoria EEPROM


Los datos se pueden escribir ms de 1.000.000 veces

368 bytes de memoria RAM Convertidor A / D:


14 canales 10-bits de resolucin

3 temporizadores independientes y contadores Watch-dog temporizador Mdulo comparador analgico con


Dos comparadores analgicos Tensin de referencia fija (0,6 V) Programable en el chip de voltaje de referencia

Salida PWM de control de direccin Mejorado el mdulo USART


Compatible con RS-485, RS-232 y LIN2.0 Auto-deteccin de baudios

Maestro en serie sncrona Puerto (MSSP)


soportes SPI y modo I2C

DESCRIPCIN Pinout
La mayora de los pines del microcontrolador PIC16F887 son multi-funcionales. Por ejemplo, el pasador de la quinta parte del microcontrolador est marcado como RA3/AN3/Vref + / + C1IN lo que indica que tiene las funciones siguientes:

RA3 del puerto PORTA tercera entrada / salida digital AN3 tercera entrada analgica Vref + tensin de referencia positiva C1IN comparador C1 + entrada positiva

Este principio de la multifuncionalidad se aplica comnmente en el diseo de los microcontroladores, ya que permite el paquete microcontrolador a ser mucho ms compacta y no afecte al funcionamiento del microcontrolador. Varias funciones pasador no puede ser utilizado simultneamente, pero se puede cambiar en cualquier momento durante el funcionamiento. En las siguientes tablas se refieren a la DIP40 PIC16F887 microcontrolador.

Unidad de procesamiento central (CPU)


Como cualquier intento de explicar el funcionamiento de la CPU en detalle nos llevara demasiado lejos, no vamos a hacerlo en esta etapa. De todos modos, es importante sealar que la CPU se fabrica en la tecnologa RISC como este hecho puede ser crucial cuando se decide que microcontrolador a utilizar. RISC significa Reduced Instruction Set Computer, que da a los PIC16F877 dos grandes ventajas:

La CPU es capaz de reconocer y ejecutar solamente 35 instrucciones simples. Por cierto, para programar otros microcontroladores en lenguaje ensamblador, es necesario conocer ms de 200 instrucciones de memoria. El tiempo de ejecucin es el mismo para casi todas las instrucciones, y dura 4 ciclos de reloj. La frecuencia de reloj es estabilizado por un cristal de cuarzo. Las excepciones a la regla son las instrucciones de salto y sucursales el tiempo de ejecucin de los cuales es de 2 ciclos de reloj. Esto significa que si la frecuencia de operacin del microcontrolador es 20 MHz, el tiempo de ejecucin de cada instruccin ser 200ns, es decir, el programa se ejecutar 5 millones de instrucciones por segundo!

MEMORIA
El PIC16F887 dispone de tres tipos de memoria: ROM, RAM y EEPROM. Cada uno merece ser discutido por separado aqu, debido a sus funciones especficas, funciones y organizacin.

ROM
ROM se utiliza para guardar de forma permanente el programa que se ejecuta actualmente. Es por esto que a menudo se llama una "memoria de programa". El PIC16F887 tiene 8Kb de ROM (8192 localidades en total). Desde ROM est fabricada con tecnologa FLASH, su contenido puede ser cambiado fcilmente, proporcionando una tensin de programacin especial (13V).

No se requieren ms explicaciones, como todo el proceso se realiza automticamente por medio de un programa especial instalado en el PC y un dispositivo electrnico simple llamada el programador.

EEPROM
Al igual que en la memoria del programa, el contenido de la EEPROM se guardan de forma permanente, incluso cuando se desconecta la alimentacin. Por otro lado, a diferencia de ROM, el contenido de la

EEPROM se puede cambiar durante la operacin de microcontrolador. Esta es la razn de esta memoria (que contiene 256 lugares) es perfecto como un dispositivo de almacenamiento permanente de algunos de los resultados creados y utilizados durante la operacin.

RAM
Este es el tercer y el tipo ms complejo de todos los mdulos de memoria del microcontrolador. Se compone de dos partes: registros de propsito general y funciones especiales (SFR registros). Todos ellos estn divididos en cuatro bancos de memoria que se explica ms adelante en este captulo. Aunque ambos grupos de registros se borran cuando se va la luz y ambos se fabrican en el mismo y actuar de una manera similar, no tienen muchas cosas en comn cuando se trata de sus funciones.

Registros de propsito general


Registros de propsito general se utilizan para almacenar datos temporales y los resultados creados durante la operacin. Por ejemplo, si el propsito del programa es contar algo (productos de la lnea de montaje, por ejemplo), es necesario contar con un registro que representa lo que en la vida cotidiana se llama "suma". Dado que el microcontrolador no es creativo en absoluto, es necesario especificar la direccin exacta de algunas registro de propsito general y asignarle esa funcin. Asegurarse de que el

valor de este registro se incrementa en 1 despus de cada producto pasa a travs de un sensor. As es como un simple programa se ha creado.

"En esta seccin del programa, la variable de registro almacenado en suma se incrementa cada "Tiempo de la RB0 pin de entrada es excitada alta (1) ... if PORTB.0 = 1 ' Check whether the RB0 pin is driven high sum = sum + 1 ' If true, the variable value is incremented by 1 end if ' If false, the program exits the if statement ...

El microcontrolador es capaz de ejecutar este programa, ya que sabe cul es la cantidad que se incrementa es y dnde se almacena. De manera similar, cada variable de programa debe ser preasignado algunos de los registros de propsito general.

REGISTROS DE FUNCIONES ESPECIALES (SFRS)


Especial-funcin registra tambin ocupan lugares de memoria RAM, pero a diferencia de registros de propsito general, su funcin est predeterminada durante el proceso de fabricacin y no se puede cambiar ms adelante. Desde sus bits estn conectados a unos mdulos en el chip, tales como un convertidor A / D, el mdulo de comunicaciones en serie, etc, cualquier cambio de su contenido afectar directamente a la operacin del microcontrolador o al menos algunos de sus mdulos. Por ejemplo, el registro ADCON0 controla el funcionamiento del convertidor A / D. Al cambiar sus bits se determina que pin del puerto es que se configura como una entrada del convertidor, el tiempo de inicio y la velocidad de conversin. Adems, cada registro SFR tiene su propio nombre (ambos registros y sus bits), lo que simplifica considerablemente el proceso de escritura del programa. Como lenguajes de alto nivel de programacin contiene una lista de todos los registros SFR con sus direcciones exactas, es suficiente para especificar el nombre de un registro con el fin de leer o modificar su contenido. Otra caracterstica de estos lugares de memoria es que tienen sus nombres (ambos registros y sus bits), lo que simplifica considerablemente el proceso de escribir un programa. Como lenguajes de alto nivel de programacin puede utilizar la lista de todos los registros con sus direcciones exactas, basta con especificar el nombre de un registro con el fin de leer o modificar su contenido.

"En esta seccin del programa, registra TRISC y PORTC se cambian

... TRISC = 0x00 TRISC (all port

' a logic zero (0) is written to register

' PORTC pins are configured as outputs) PORTC = %01100011 ' Logic states on all port PORTC pins are being changed ...
RAM BANCOS

La memoria RAM se divide en cuatro bancos. Antes de acceder a cualquier registro durante la escritura del programa (ya sea para leer o modificar su contenido), es necesario seleccionar el banco que lo contiene. Dos bits del registro de estado se utilizan para la seleccin de banco, que se discutir ms adelante. Para hacer frente a SFR tan simples como sea posible, los registros ms utilizados tienen la misma direccin en todos los bancos y por lo tanto puede ser de fcil acceso.

Puede ser difcil de tratar con los bancos cuando se escribe un programa en lenguaje ensamblador. Por el contrario, cuando se escribe un programa en lenguajes de programacin ms altos, tales como Basic, y los compiladores de uso, tales como mikroBasic PRO para PIC, basta con especificar el nombre de un Ayer re que usted necesita. Contar con esta informacin, el compilador es capaz de seleccionar el banco adecuado, as como para incluir instrucciones apropiadas en el cdigo durante el proceso de

compilacin. Usted ha estado utilizando el lenguaje ensamblador slo en la medida y esta es la primera vez que utilice el PRO mikroBasic para PIC compilador, no? Esto debe ser una maravillosa noticia a continuacin.

STACK
Una parte de memoria RAM utilizada como pila consta de ocho 13-bits registros. Antes de que el microcontrolador comienza a ejecutar una subrutina (instruccin GOSUB) o cuando se produce una interrupcin, la direccin de la instruccin a ejecutar siguiente se inserta en la pila, es decir, una de sus registros. Como resultado, el microcontrolador sabe desde donde continuar la ejecucin del programa regular cuando una subrutina o una interrupcin de ejecucin es completa. La direccin se borra despus de la vuelta al programa y un nivel de la pila es, pues, automticamente disponible para su uso posterior. Ntese que los datos siempre circularmente inserta en la pila. Esto significa que despus de que la pila se ha llevado ocho veces, el empuje noveno sobrescribe el valor que se almacena con el primer impulso. El impulso dcimo sobrescribe el empuje segundo y as sucesivamente. Los datos sobrescritos de esta manera no es recuperable. Dado que el programador no puede acceder a estos registros para escribir o leer y no hay ningn bit para indicar desbordamiento de pila o condicin de desbordamiento, es necesario prestar especial atencin a que durante la escritura del programa.

Vamos a hacerlo en mikroBasic ...

"Al entrar en una seccin de cdigo programa, el compilador 'Almacena los datos en el banco RAM significa que en este programa "La seccin, la seleccin del banco Despus del retorno al programa 'Seccin escrita en mikroBasic, los banco activo (RP0 y RP1) debe devolver el estado la asamblea

en ensamblador inserta en el actualmente activo. Esto

depende de las SFR en uso. bits de control seleccionar el que tenan antes del cdigo de

saveBank = STATUS and %01100000 ' Save the state of bits RP0 and RP1 ' (bits 5 and 6 of the STATUS register) asm ' Start of assembly sequence ... ... ' Assembly code ... end asm ' End of assembly sequence STATUS = STATUS and %10011111 ' Bits RP0 and RP1 return their original state STATUS = STATUS or saveBank ... ... Interrupcin del sistema
Lo primero que debe hacerse por el microcontrolador, cuando llega una solicitud de interrupcin, es la ejecucin de la instruccin en curso, a continuacin, para detener la ejecucin del programa regular. La direccin del programa actual de la memoria automticamente se inserta en la pila y la direccin por defecto (predefinidos por el fabricante) se escribe en el contador de programa. El lugar desde donde el programa contina con la ejecucin se llama un vector de interrupcin. Para el microcontrolador PIC16F887, la direccin es 0004h. Como se ve en la siguiente figura, el vector de interrupcin se debe omitir durante la ejecucin del programa regular. Una parte del programa que se ejecuta cuando una peticin de interrupcin llega se llama una rutina de interrupcin (que es una subrutina de hecho). La primera instruccin de la rutina de interrupcin se encuentra en el vector de interrupcin. Cunto tiempo se tarda en ejecutar la subrutina y lo que ser, depende de las habilidades del programador, as como en la fuente de interrupcin en s. Algunos microcontroladores tienen un par de vectores de interrupcin (cada solicitud de interrupcin tiene su vector), mientras que esto slo tiene un microcontrolador. Esta es la razn por la primera parte de cada rutina de interrupcin debe ser la deteccin de fuente de interrupcin.Cuando la fuente de interrupcin se conoce y se ejecuta la rutina de interrupcin, el microcontrolador alcanza la RETFIE instruccin, aparece la direccin de la pila y permite continuar con la ejecucin del programa desde donde lo dej.

MikroBasic reconoce una rutina de interrupcin para ser ejecutado por medio de la palabra de interrupcin. La rutina de interrupcin debe ser escrito por el usuario.

sub procedure interrupt ' Interrupt routine cnt = cnt + 1 ; ' Interrupt causes variable cnt to be incremented by 1 end sub Cmo utilizar SFR
Si usted ha comprado el microcontrolador y tiene una gran idea de cmo hacer uso de ella ... Hay una larga lista de SFR y sus bits. Cada uno de ellos controla un proceso dentro del microcontrolador. Realmente se parece a una tabla de control grande con un montn de instrumentos e interruptores. Ahora usted est preocupado acerca de si ser capaz de aprender a usar a todos ellos? Probablemente no, pero no se preocupe porque usted no tiene que hacerlo. Unos dispositivos muy potentes, tales como microcontroladores son similares a los supermercados: ofrecen muchas cosas a precios bajos y es hasta que usted pueda elegir lo que usted necesita. Por lo tanto, elegir la zona que ms le interesa y aprender slo lo que tiene que hacerlo. Cuando usted consigue una plena comprensin del funcionamiento del hardware, SFR de estudio que estn en control de la misma (por lo general hay algunos de ellos). El rendimiento de todos los dispositivos se controla mediante un sistema de control apropiado y el microcontrolador no es una excepcin a la regla. Uno tiene que estar familiarizado con dichos sistemas con el fin de ser capaz de utilizar los dispositivos adecuadamente. Por supuesto, estamos hablando de SFR en toda la historia acerca de programacin se inicia y termina.

3.2 SFR FUNDAMENTALES


El siguiente texto describe los principales SFR del microcontrolador PIC16F887. Sus bits de control de los diferentes mdulos dentro del chip y por lo tanto se describen junto con los procesos que estn en control de.

STATUS Register ESTADO Registrarse

El registro STATUS contiene el estado de la aritmtica de los datos en el registro W, restablecer los bits de estado y de seleccin de banco de la memoria de datos.

o o

IRP - bit se utiliza para seleccionar el banco en el registro de direccionamiento indirecto.


1 - Bancos 0 y 1 estn activos (posiciones de memoria 00h-FFh), y 0 - Bancos 2 y 3 estn activos (posiciones de memoria 100h-1FFh).

RP1, RP0 - Los bits se utilizan para seleccionar el banco en el registro de direccionamiento directo.
RP0 0 1 0 1 ACTIVO DEL BANCO Bank0 Bank1 BANK2 BANK3

RP1 0 0 1 1

o o o o o o o o

A - Tiempo fuera poco.


1 - Tras el encendido, la ejecucin de la CLRWDT instruccin que restablece el temporizador perro guardin o de la instruccin SLEEP que establece el microcontrolador en el modo de bajo consumo. 0 - Despus de que el temporizador perro guardin de tiempo de espera.

PD - al apagar poco.
1 - Despus de encendido o la ejecucin de la CLRWDT instruccin que restablece el temporizador perro guardin. 0 - Despus de la ejecucin de la SLEEP instruccin que establece el microcontrolador en el modo de bajo consumo.

Z - Zero bits
1 - El resultado de una operacin aritmtica o lgica es cero. 0 - El resultado de una operacin aritmtica o lgica es diferente de cero.

DC - Dgito llevar / tomar prestado algo ha cambiado en la suma y resta, si un "desbordamiento" o "tomar prestado" del resultado se produce.
1 - A llevar a cabo, desde el cuarto bit de orden inferior del resultado se ha producido. 0 - No llevar a cabo, desde el cuarto bit de orden inferior del resultado se ha producido.

C - Carry / Borrow poco ha cambiado en la suma y resta, si un "desbordamiento" o "tomar prestado" del resultado se produce, es decir, si el resultado es mayor que 255 o inferior a 0. o o
1 - Un acarreo de salida desde el bit ms significativo (MSB) del resultado se ha producido. 0 - n llevar a cabo, desde el bit ms significativo (MSB) del resultado se ha producido.

OPTION_REG Register

Leyenda: R / W - Legible / escritura de bits, (1) Despus del reinicio, el bit se establece El registro contiene varios bits OPTION_REG de control que se utilizan para configurar Timer0/WDT prescaler, Timer0, la interrupcin externa y pull-ups en PORTB.

o o

RBPU - Puerto B Levante Bit de habilitacin


1 - PORTB pull-ups estn desactivados. 0 - PORTB pull-ups estn habilitadas.

o o

INTEDG - bits Edge Select interrupcin


1 - Interrupcin en flanco ascendente del pin RB0/INT. 0 - Interrumpir el flanco descendente del pasador RB0/INT.

o o

T0CS - TMR0 Clock Source Select bit.


1 - Transicin en el pin T0CKI. 0 - Reloj interno ciclo de instruccin (Fosc / 4).

T0SE - TMR0 poco el borde de seleccin de fuente selecciona el pulso de borde (ascendente o descendente) contados por el Timer0 por el pin RA4/T0CKI.
o o
1 - Incremento de alta a baja transicin en el pin TOCKI. 0 - Incremento de alta a baja transicin en el pin TOCKI.

PSA - poco Prescaler asignacin asigna el prescaler (slo uno est disponible) para el temporizador temporizador o de vigilancia.
o o
1 - Prescaler se asigna al WDT. 0 - Prescaler se asigna al Timer0.

PS2, PS1, PS0 precontador Tasa de bits de seleccin de


Una tasa de pre-escalador se selecciona mediante la combinacin de estos bits. Como se muestra en la siguiente tabla, la tasa de pre-escalador depende de si se le asigna al temporizador Timer0 o reloj perro(WDT). PS2 0 0 0 0 1 1 1 PS1 0 0 1 1 0 1 1 PS0 0 1 0 1 1 0 1 TMR0 01:02 01:04 01:08 01:16 1:64 1:128 1:256 WDT 01:01 01:02 01:04 01:08 01:32 1:64 1:128

A fin de lograr 01:01 tasa precontador cuando los recuentos de hasta Timer0 impulsos, el pre-escalador debe ser asignado al WDT.Como resultado, el Timer0 no utiliza el pre-escalador, pero directamente cuenta impulsos generados por el oscilador, que en realidad era el objetivo. Let's do it in mikroBasic...

' If the CLRWDT command is not executed, WDT will reset the microcontroller every 32.768 uS ' (f=4 MHz) OPTION_REG = %00001111 ' Prescaler is assigned to WDT (1:128) asm CLRWDT ' Assembly command to reset WDT end asm ... ' Time between these two CLRWDT commands must not exceed 32.768 microseconds (128x256) CLRWDT ' Assembly command to reset WDT ... ... ' Time between these two CLRWDT commands must not exceed 32.768 microseconds (128x256) CLRWDT ' Assembly command to reset WDT ...

INTERRUPCIN DEL SISTEMA DE REGISTROS


A la recepcin de una solicitud de interrupcin no significa que automticamente se producir, ya que tambin debe ser habilitada por el usuario (desde el programa). Por esta razn, hay bits especiales que se utilizan para habilitar o deshabilitar las interrupciones. Es fcil reconocerlos por las letras IE (las siglas de habilitacin de interrupcin) que figuran en sus nombres. Adems, cada interrupcin se asocia con otro bit llamado una bandera que indica que una peticin de interrupcin ha llegado independientemente de si est activado o no. Del mismo modo, sus nombres son seguidos por IF (bandera de interrupcin).

Como puedes ver, todo se basa en un principio simple y eficaz. Cuando llega una solicitud de interrupcin, el bit de bandera se estableci por primera vez. Si el bit es decir, adecuada no se ha establecido (0), la condicin de interrupcin ser completamente ignorado. De lo contrario, se produce una interrupcin. Si varias fuentes de interrupcin estn habilitadas, es necesario detectar la una activa antes de una rutina de interrupcin comienza la ejecucin. Fuente de deteccin se realiza mediante la comprobacin bits de la bandera. Es importante saber que bits de la bandera no se borran automticamente, pero por software, mientras que la ejecucin de la rutina de interrupcin est en marcha. Si descuidamos este detalle, otra interrupcin se producir inmediatamente despus de regresar al programa principal, a pesar de que hay solicitudes no ms para su ejecucin. En pocas palabras, la bandera, as como el bit de IE, siendo establecido. Todas las fuentes de interrupcin tpicos del microcontrolador PIC16F887 se muestran en la pgina siguiente. Tenga en cuenta varias cosas: El bit GIE habilita todas las interrupciones no enmascaradas y deshabilita todas las interrupciones de forma simultnea. El bit PEIE permite todas las interrupciones perifricas no enmascaradas y deshabilita todas las interrupciones perifricas. Esto no se refiere al Timer0 y el PORTB fuentes de interrupcin. Para permitir que se produzca una interrupcin al cambiar el estado lgico PORTB, es necesario que le permita para cada bit por separado. En este caso, los bits del acto IOCB registro como bits de control de IE.

Registro INTCON
El registro INTCON incluye habilitar varias y trozos de la bandera de desbordamiento del registro TMR0, cambio de PORTB y las interrupciones externas pin INT.

Leyenda: R / W - Legible / escritura de bits, (0) Despus de reiniciar, se restablece, (X) Despus del reinicio, poco se sabe

o o

GIE - Global Interrupt Enable bit - controla todas las fuentes posibles de interrupcin al mismo tiempo.
1 - Todas las interrupciones no enmascaradas habilitado. 0 - Todas las interrupciones deshabilitadas.

PEIE - Interrupcin perifrico, permiten poco funciona de manera similar al bit GIE, pero controla las interrupciones habilitadas por los mdulos perifricos. Por lo tanto, no tiene impacto en las interrupciones provocadas por Timer0 o al cambiar el estado del puerto PORTB o RB0/INT alfiler. o o o o o
1 - Todas las interrupciones perifricas no enmascaradas habilitado. 0 - Todas las interrupciones de perifricos inhabilitado.

T0IE - TMR0 Overflow Interrupt Enable controles bits interrupciones provocadas por el desbordamiento de TMR0.
1 - TMR0 desbordamiento interrumpir habilitado. 0 - TMR0 desbordamiento de interrupcin deshabilitado.

INTE - Interrupcin RB0/INT externa Activa los controles bit de interrupcin causada por cambiar el estado lgico de la patilla de entrada RB0/INT (interrupcin externa).
1 - interrupcin externa INT habilitado.

0 - interrupcin externa INT inhabilitado.

RBIE - RB Cambio Puerto habilitacin de interrupcin bits. Cuando se configura como entradas, los pins PORTB puede provocar una interrupcin al cambiar su estado lgico (no importa si es alto-a-bajo transicin o viceversa, el hecho de que su estado lgico se cambia nicamente asuntos). El bit RBIE determina si una interrupcin es que se produzca o no. o o o o o o o o
1 - cambio de PORTB interrumpir habilitado. 0 - interrupcin cambio PORTB desactivado.

T0IF - TMR0 interrupcin de desbordamiento del bit indicador registra el desbordamiento del Timer0 registro, cuando el conteo comienza en cero.
1 - TMR0 se ha desbordado registro (bit debe ser limpiado desde el software). 0 - TMR0 registro no se ha desbordado.

INTF - RB0/INT bits externa bandera de interrupcin registra el cambio del estado de la lgica RB0/INT pin.
1 - interrupcin externa INT ha ocurrido (debe ser limpiado desde el software). 0 - interrupcin externa INT no ha ocurrido.

RBIF - RB Cambio Puerto bits bandera de interrupcin registra cualquier cambio del estado lgico de algunos pines de entrada PORTB.
1 - Al menos uno de los fines generales PORTB pines I / O ha cambiado su estado lgico. Despus de puerto PORTB lectura es completa, el bit RBIF debe ser limpiado desde el software. 0 - Ninguno de los efectos PORTB general de pines I / O ha cambiado su estado lgico.

Let's do it in mikroBasic...

' The PORTB.4 pin is configured as an input sensitive to logic state change ANSEL, ANSELH = 0 ' All I/O pins are configured as digital PORTB = 0 ' All PORTB pins are cleared TRISB = %00010000 ' All PORTB pins except PORTB.4 are configured as outputs INTCON.RBIE = 1 ' Interrupts on PORTB change are enabled IOCB.IOCB4 = 1 ' Interrupt on PORTB pin4 change is enabled INTCON.GIE = 1 ' Global interrupt is enabled ... ... 'From this point, any change of the PORTB.4 pin logic state will cause an interrupt

PIE1 Registro
El registro contiene PIE1 interrupcin perifrica bits de habilitacin.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Despus de reiniciar, se restablece

o o o o o o

ADIE - Un convertidor A / D habilitacin de interrupcin bits.


1 - interrupcin ADC habilitado. 0 - ADC interrupcin deshabilitada.

RCIE - EUSART Recibe habilitacin de interrupcin bits.


1 - Habilita la interrupcin de recepcin EUSART. 0 - Deshabilita la interrupcin de recepcin EUSART.

TXIE - EUSART interrupcin de la transmisin Bit de habilitacin.


1 - EUSART recibir interrumpir habilitado. 0 - EUSART interrupcin de recepcin desactivado.

SSPIE - Maestro del puerto en serie sncrona (MSSP) habilitacin de interrupcin bits - permite a una solicitud de interrupcin que se genera cada vez que una transferencia de datos a travs del mdulo de comunicacin sncrona en serie (SPI o el modo I2C) se ha completado. o o o o o o
1 - interrupcin del MSSP habilitado. 0 - interrupcin del MSSP desactivado.

CCP1IE - CCP1 habilitacin de interrupcin bits permite una peticin de interrupcin que se genera en CCP1 mdulo utilizado para el procesamiento de seal PWM.
1 - CCP1 interrupcin habilitada. 0 - CCP1 interrupcin deshabilitada.

TMR2IE - TMR2 a PR2 interrupcin del partido Bit de habilitacin


1 - TMR2 a PR2 interrupcin partido habilitado. 0 - TMR2 a PR2 interrupcin partido desactivado.

TMR1IE - TMR1 interrupcin de desbordamiento Habilitar bits permite una peticin de interrupcin que se genera en cada registro de desbordamiento del temporizador TMR1, es decir, cuando el recuento se inicia desde cero. o o
1 - TMR1 desbordamiento interrumpir habilitado. 0 - TMR1 desbordamiento de interrupcin deshabilitado.

Let's do it in mikroBasic...

'Each Timer1 register (TMR1H and TMR1L) overflow causes an interrupt to occur. In every 'interrupt rutine, variable cnt will be incremented by 1. dim unsigned short cnt ' Define variable cnt sub procedure interrupt cnt = cnt + 1 ' Interrupt causes cnt to be incremented by 1 PIR1.TMR1IF = 0 ' Reset bit TMR1IF TMR1H = 0x80 ' TMR1H and TMR1L timer registers return TMR1L = 0x00 ' their initial values end sub main: ANSEL, ANSELH = 0 ' All I/O pins are configured as digital T1CON = 1 ' Turn on Timer1 PIR1.TMR1IF = 0 ' Reset the TMR1IF bit

TMR1H = 0x80 Timer1 TMR1L = 0x00 PIE1.TMR1IE = 1 overflow cnt = 0 INTCON = 0xC0 GIE and PEIE) ...

' Set initial value for ' Enable an interrupt on ' Reset variable cnt ' Enable interrupt (bits

PIE2 Registro
El registro PIE2 tambin contiene varios bits de habilitacin de interrupcin.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Despus de reiniciar, se restablece

OSFIE - Oscilador Fail Interrupt Enable bit. o o o o o o o o o o o o o o


1 - fallo oscilador interrumpir habilitado. 0 - fallo del oscilador interrupcin deshabilitada.

C2IE - Comparador C2 habilitacin de interrupcin bits.


1 - comparador C2 interrupcin habilitada. 0 - Comparador C2 interrupcin deshabilitada.

C1IE - comparador C1 habilitacin de interrupcin bits.


1 - comparador C1 interrumpir habilitado. 0 - comparador C1 interrupcin deshabilitada.

EEIE - escritura de EEPROM interrumpir la operacin Habilitar poco.


1 - EEPROM operacin de escritura interrumpir habilitado. 0 - EEPROM operacin de escritura interrupcin deshabilitada.

BCLIE - Interrupcin del bus de colisin Bit de habilitacin.


1 - interrupcin colisin de bus habilitado. 0 - interrupcin de colisin de bus desactivado.

ULPWUIE - Ultra Low-Power despertador habilitacin de interrupcin bits.


1 - Ultra bajo consumo de energa llamada de interrupcin habilitada. 0 - Ultra bajo consumo de energa llamada de interrupcin deshabilitado.

CCP2IE - CCP2 Interrupt Enable bit.


1 - CCP2 interrupcin habilitada. 0 - CCP2 interrupcin deshabilitada.

Let's do it in mikroBasic...

' Comparator C2 is configured to use pins RA0 and RA2 as inputs. Every change on ' the comparator's output will cause the PORTB.1 output pin to change its logic ' state in interrupt routine. sub procedure interrupt PORTB.F1 = not PORTB.F1 ' Interrupt will invert logic state of the PORTB.1 pin

PIR2.C2IF = 0 end sub main: TRISB = 0 outputs PORTB.1 = 1 ANSEL = %00000101 analog inputs ANSELH = 0 digital CM2CON0.C2CH0 = 0 inverting input CM2CON0.C2CH1 = 0 PIE2.C2IE = 1 INTCON.GIE = 1 CM2CON0.C2ON = 1 ... ... PIR1 Registrarse

' Interrupt flag bit C2IF is cleared ' All PORTB pins are configured as ' Pin PORTB.1 is set ' RA0/C12IN0- and RA2/C2IN+ pins are ' All other I/O pins are configured as ' The RA0 pin is selected to be C2 ' Enables comparator C2 interrupt ' Global interrupt is enabled ' Comparator C2 is enabled

El registro PIR1 contiene los bits de la bandera de interrupcin.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (R) - Poco legible, (0) Despus de reiniciar, se restablece

o o o o o o o o o

ADIF - convertidor A / D de interrupcin bit de bandera.


1 - la conversin A / D se ha completado (el bit debe ser limpiado desde el software). 0 - la conversin A / D no se ha completado o no ha comenzado.

RCIF - EUSART Recibe bits bandera de interrupcin.


1 - EUSART bfer de recepcin est lleno. El bit se borra leyendo el registro RCREG. 0 - EUSART buffer de recepcin no est lleno.

TXIF - EUSART de transmisin poco bandera de interrupcin.


1 - bfer EUSART de transmisin est vaca. El bit se borra en cualquier escritura en el registro TXREG. 0 - EUSART bfer de transmisin est llena.

SSPIF - Master Synchronous Serial Port (MSSP) bit bandera de interrupcin.


1 - Todas las condiciones de interrupcin durante el MSSP de datos de transmisin / recepcin que se cumplan. Ellos varan en funcin del modo de operacin MSSP (SPI o I2C). Este bit debe ser limpiado desde el software antes de salir de la rutina de servicio de interrupcin. 0 - No hay condicin de interrupcin MSSP se reuni.

CCP1IF - CCP1 bits bandera de interrupcin.


1 - CCP1 condicin de interrupcin se cumple (CCP1 es una unidad para captar, comparar y generar una seal PWM). Modo de operacin indica si la captura o comparar partido se ha producido. En ambos casos, el bit debe ser limpiado desde el software. Este bit no se utiliza en modo PWM. 0 - No hay condicin de interrupcin CCP1 se reuni.

o o

TMR2IF - Timer2 al PR2 bit bandera de interrupcin o o o


1 - TMR2 (8-bit del registro) a PR2 partido se ha producido. Este bit debe ser limpiado desde el software antes de salir de la rutina de servicio de interrupcin. 0 - No a la PR2 TMR2 partido se ha producido.

TMR1IF - Timer1 desbordamiento del bit de bandera de interrupcin


1 - registro TMR1 se ha desbordado. El bit debe ser limpiado desde el software. 0 - TMR1 registro no se ha desbordado.

PIR2 Registrarse
El registro contiene los bits de interrupcin PIR2 bandera.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Despus de reiniciar, se restablece

o o o o o o o o o o o o o o

OSFIF - Oscilador Fail bits bandera de interrupcin.


1 - oscilador de cuarzo fallado y entrada de reloj se ha convertido en INTOSC oscilador interno. Este bit debe ser limpiado desde el software. 0 - oscilador de cuarzo funciona con normalidad.

C2IF - Comparador de bits C2 bandera de interrupcin.


1 - salida del comparador C2 ha cambiado (C2OUT bits). Este bit debe ser limpiado desde el software. 0 - comparador la salida C2 no ha cambiado.

C1IF - Comparador de bits C1 bandera de interrupcin.


1 - Salida del comparador C1 ha cambiado (C1OUT bits). Este bit debe ser limpiado desde el software. 0 - Salida del comparador C1 no ha cambiado.

EEIF - EE Escribir bits, bandera de interrupcin.


1 - EEPROM escritura completa. Este bit debe ser limpiado desde el software. 0 - EEPROM de escritura no es completa o no ha empezado todava.

BCLIF - bit de bus de colisin bandera de interrupcin.


1 - Una colisin de autobuses se ha producido en el MSSP cuando se establece para operar en modo maestro I2C. Este bit debe ser limpiado desde el software. 0 - No hay colisin del autobs se ha producido.

ULPWUIF - Ultra bajo consumo bits de interrupcin de despertador Bandera.


1 - Wake-up condicin se ha producido. Este bit debe ser limpiado desde el software. 0 - Ninguna condicin para despertar ha ocurrido.

CCP2IF - CCP2 bits bandera de interrupcin.


1 - CCP2 condicin de interrupcin se cumple (unidad de captura, comparacin y generacin de seal PWM). Modo de operacin indica si la captura o comparar partido se ha producido. En ambos casos, el bit debe ser limpiado desde el software. Este bit no se utiliza en modo PWM. 0 - No hay condicin de interrupcin CCP2 se reuni

Let's do it in mikroBasic...

' Module ULPWU activation sequence main: PORTA.0 = 1 ' PORTA.0 pin is set ANSEL,ANSELH = 0 ' All I/O pins are configured as digital TRISA = 0 ' PORTA pins are configured as outputs Delay_ms(1) ' Charge capacitor PIR2.ULPWUIF = 0 ' Clear flag PCON.ULPWUE = 1 ' Enable ULP Wake-up TRISA.0 = 1 ' PORTA.0 is configured as an input PIE2.ULPWUIE = 1 ' Enable interrupt INTCON.GIE = 1 ' Enable all unmasked interrupts INTCON.PEIE = 1 ' Enable peripheral interrupt asm ' Asm instruction SLEEP ' Go to sleep mode ...

PCON registro
El registro PCON contiene solamente dos bits de la bandera se utilizan para diferenciar entre el poder-al momento del reinicio, brown-out reset, restablecimiento del temporizador watchdog y reset externo en el pin MCLR.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (1) - Despus del reinicio, se establece el bit (0) Despus de reiniciar, se restablece

o o o o o o o o

ULPWUE - Ultra Low-Power despertador Bit de habilitacin


1 - Ultra bajo consumo de energa llamada de JavaScript. 0 - Ultra bajo consumo de energa para despertar desactivado.

SBOREN - Software BOR Bit de habilitacin


1 - Brown-out restablecer habilitado. 0 - Brown-out restablecer desactivado.

POR - Power-on poco Restablecer estado


1 - No hay poder sobre la reposicin se ha producido. 0 - Power-on reset se ha producido. Este bit se debe establecer desde el software despus de un reinicio de encendido se produce.

BOR - Brown-out poco Restablecer estado


1 - No hay reset brown-out se ha producido. 0 - Brown-out reset ocurrido. Este bit se debe establecer desde el software despus de un reset brown-out ocurre.

PCL y PCLATH REGISTROS


El tamao de la memoria de programa PIC16F887 es de 8K y proporciona 8192 lugares para almacenar el programa. En consecuencia, el contador de programa (PC) debe ser de 13 bits de ancho (213 = 8192). Para el microcontrolador para acceder a algn lugar de memoria de programa durante la operacin, su direccin debe estar disponible a travs de SFR. Puesto que todos los SFR son de 8-bits de ancho, el contador de programa se crea mediante la combinacin de dos registros individuales. El byte bajo (8 bits) del contador de programa ocupa el registro PCL, mientras que el byte alto (5 bits) ocupa el registro PCLATH. Si la ejecucin del programa no afecta el contador de programa, el valor de este registro (PCL y PCLATH) es automticamente y se incrementa constantemente +1, +1, +1, uno ...De esta manera, el programa se ejecuta como es writteninstruction por la instruccin, seguido por incremento de direccin constante. Si el contador de programa se cambia desde dentro del software, entonces usted debe tener cuidado de lo siguiente:

Si el contador de programa se cambia desde dentro del software, entonces hay varias cosas que se deben tener en cuenta a fin de evitar problemas:

Ocho bits inferiores del registro PCL (el byte bajo) son a la vez de lectura y escritura, mientras que los cinco bits superiores del registro PCLATH son de slo escritura. El registro PC se borra en cualquier reinicio.

En lenguaje ensamblador, el valor del contador de programa est marcado como PCL y se refiere a 8 bits inferiores solamente. Tenga cuidado al utilizar la instruccin del 'ADDWF PCL' asamblea. Esta es una instruccin de salto, el destino de los cuales se determina mediante la adicin de algunos nm ero a la direccin actual. Es comnmente usado para saltar en una tabla de bsqueda o de la mesa pro g rama de leerlos. Un problema surge si dicha adicin hace que el registro PCLATH que ser modificados. La ejecucin de cualquier instruccin sobre el registro simultneamente PCL ously hace que los bits del contador de programa para ser reemplazada por el contenido de ambas PCLATH y PCL registro. Sin embargo, el registro PCL tiene acceso a 8 bits inferiores de la instruccin resultado solamente de modo que el salto siguiente ser incorrecta. El problema se resuelve mediante el establecimiento de tales instrucciones a las direcciones de programa que terminan por xx00h. Esto permite que el programa salte hasta 255 lugares. Si los saltos ms largos son ejecutados por esta instruccin, el registro PCLATH debe ser incrementado en 1 por cada desbordamiento de registro PCL. En una llamada a subrutina o salto de ejecucin (instrucciones de montaje CALL y GOTO ), el microcontrolador es capaz de proporcionar 11-bit de direccin nica. Similar a la RAM, que se divide en 'bancos', la ROM se divide en cuatro 'pginas' de 2K cada uno. Dichas instrucciones se ejecutan correctamente dentro de estos lmites. En pocas palabras, ya que las ofertas de procesador con la direccin de 11 bits, es capaz de hacer frente a cualquier lugar dentro de 2 KB.

La figura siguiente ilustra un salto a la subrutina PP1. Pero si el inicio de la direccin de subrutina o salto no est dentro de la misma pgina que el destino de la llamada, dos 'desaparecidos' bits superiores deben ser proporcionados por la realizacin de la operacin de escritura en el registro PCLATH. La figura siguiente ilustra un salto a la subrutina PP2.

En ambos casos, cuando la subrutina llega a algunas de las instrucciones de la asamblea siguiente RETURN , RETLW o RETFIE (volver al programa principal), el microcontrolador slo se

proceder a la ejecucin del programa desde donde lo dej, porque la direccin de retorno se inserta en la pila que, como se mencion antes, se compone de registros 13-bits.

Direccionamiento indirecto
Adems de direccionamiento directo, lo cual es lgico y evidente (que va a hacer para especificar la direccin de un registro para leer su contenido), este microcontrolador es capaz de realizar el direccionamiento indirecto por medio de la INDF y los registros de ISA. A veces hace que el proceso de escribir un programa ms fcil. Todo el procedimiento se habilita el registro INDF que no es un nico y verdadero (que no existe fsicamente). Se utiliza para especificar el registro de la direccin de la que se almacena en el registro FSR. Como resultado, escribir o leer del registro INDF significa realmente escribir o leer desde el registro de la direccin de la que se almacena en el registro FSR. En otras palabras, las direcciones de los registros se almacenan en el registro FSR, mientras que sus contenidos se almacenan en el registro INDF. La figura siguiente ilustra la diferencia entre el direccionamiento directo e indirecto.

Como puede verse, la emisin de los bits de direccionamiento de los desaparecidos se resuelve mediante un "tomar prestado" de otro registro. Esta vez, es el sptimo bit, denominado bit PIR, del registro de estado.

3.3 Entrada / Salida


Una de las ventajas ms importantes del microcontrolador es un nmero de entrada / salida en los pins que le permiten ser conectados a los mdulos perifricos. Hay un total de 35 de propsito general pines I / O previstas en el PIC16F887, que es ms que suficiente para la mayora de las aplicaciones.

Con el fin de sincronizar el funcionamiento de puertos E / S con el interior de 8-bits organizacin del microcontrolador, son, de forma similar a los registros, agrupados en cinco puertos denotados por letras A, B, C, D y E. Todo E / S puertos tienen varias caractersticas en comn:

Para ahorrar ms espacio en el tablero, todos los pines de E / S son multifuncionales. Sin embargo, slo se puede asignar una funcin al mismo tiempo. Cada puerto est acompaado por el correspondiente registro TRIS: TRISA, TRISB, etc TRISC que determina el rendimiento, pero no el contenido de los bits del puerto. En la limpieza de cualquier bit del registro TRIS (bit = 0), el pasador correspondiente puerto est configurado como una salida. De manera similar, mediante el establecimiento de cualquier bit del registro TRIS (bit = 1), el pasador correspondiente puerto est configurado como una entrada. Esta regla es fcil de recordar 0 = Salida, 1 = Entrada.

PORTA y registro TRISA


PORTA es un puerto de 8 bits de ancho, puerto bidireccional. Los bits del registro TRISA controlar los pins PORTA, es decir, si van a actuar como entradas o salidas digitales:

Al igual que los bits del registro TRISA que determinan cul de los pines se configuran como entradas y cules como salidas, los bits correspondientes del registro ANSEL determinar si los pines PORTA se configuran como entradas analgicas o entradas y salidas digitales. RA0 = AN0 (determinado por el bit ANS0 del registro ANSEL)

RA1 = AN1 (determinado por el bit ANS1 del registro ANSEL)

RA2 = AN2 (determinado por el bit ANS2 del registro ANSEL)

RA3 = AN3 (determinado por el bit ANS3 del registro ANSEL)

RA5 = AN4 (determinado por el bit ANS4 del registro ANSEL) Cada bit de este puerto se le asigna una funcin adicional relacionada con algunos de los mdulos integrados en la periferia. Este captulo cubre slo la funcin adicional del pasador RA0, que est relacionado con la unidad PORTA y ULPWU, mientras que la funcin adicional de otros pines se describir en captulos posteriores. Vamos a hacerlo en mikroBasic ...

' The PORTA.2 pin is configured as a digital input. All other PORTA pins are digital ... outputs ANSEL = ANSELH = 0 ' All I/O pins are configured as digital PORTA = 0 ' All PORTA pins are cleared TRISA = %00000100 ' All PORTA pins except PORTA.2 are configured as outputs ...

ULPWU UNIDAD
El microcontrolador se utiliza comnmente en dispositivos independientes accionados batera que operan de forma peridica. Ejemplos tpicos son termmetros, sensores de deteccin de incendios y similares. El consumo de energa mnima es una de las prioridades aqu. Como una reduccin de la frecuencia de reloj hace que el consumo de energa se reduce, una de las soluciones ms convenientes para este problema es reducir la velocidad del reloj, es decir, utilizar cristal de cuarzo 32 KHz en lugar de 20MHz.

Configuracin del microcontrolador en modo de suspensin es un paso ms en la misma direccin.Aqu llegamos a otro tema - como para despertar el microcontrolador y la puso a modo normal?Obviamente, es necesario proporcionar algn modo una seal externa para cambiar el estado lgico de algunos pasador. La nica manera de hacerlo es por medio de dispositivos electrnicos adicionales, que por otra parte hace que aumente el consumo de energa de todo el dispositivo ... La solucin ideal sera que el microcontrolador puede despertarse peridicamente por s mismo. El circuito que hace posible que se muestra en la figura a la izquierda.
As es como funciona este circuito: Un pasador se configura como una salida y un uno lgico (1) es llevado a la misma. Esto hace que el condensador se cargar.Inmediatamente despus de esto, el mismo pin est configurado como una entrada. El cambio de estado lgico causar una interrupcin y el microcontrolador entrar en el modo de suspensin. Todo lo que queda ahora es esperar a que el condensador que se descarga por la corriente de fuga que fluye a travs de la clavija de entrada. Despus de que una interrupcin se lleva a cabo y el producto del microcontrolador con la ejecucin del programa en el modo normal. Todo el procedimiento se repite peridicamente.

Tericamente, esta es una solucin perfecta. El problema es que todos los pasadores capaces de provocar una interrupcin de esta manera son digitales y tienen corriente de fuga relativamente alto cuando su tensin no est cerca de los lmites de Vdd (1) o Vss (0). En este caso, el condensador se descarga por un corto perodo de tiempo dado que las cantidades actuales a varios cientos de microamperios. Esta es la razn por un bajo consumo de ULPWU circuito, capaz de registrar cadas lentas de tensin, se ha diseado.Su salida genera una interrupcin, mientras que su entrada est conectada a la patilla RA0 en el microcontrolador. Refirase a la figura de la izquierda, R = 200 ohms, C = 1 nF, el tiempo de descarga es aproximadamente 30mS, mientras que un consumo total de energa del microcontrolador es 1000 veces menor (varios cientos de nanoamperios).

PORTB y TRISB registra


Puerto PORTB es un nio de 8 bits de ancho, el puerto bidireccional. Los bits del registro TRISB determinar la funcin de sus patas.

Al igual que en el puerto PORTA, un uno lgico (1) en el bit TRISB registro configura el puerto apropiado pines PORTB como entrada y viceversa. Seis terminales de este puerto puede actuar como entradas analgicas (AN). Los bits del registro ANSELH determinar si estos pines se configuran como entradas analgicas o entradas y salidas digitales: RB0 = AN12 (determinado por el bit del registro ANS12 ANSELH)

RB1 = AN10 (determinado por el bit del registro ANS10 ANSELH)

RB2 = AN8 (determinado por el bit del registro ANS8 ANSELH)

RB3 = AN9 (determinado por el bit del registro ANS9 ANSELH)

RB4 = AN11 (determinado por el bit del registro ANS11 ANSELH)

RB5 = AN13 (determinado por el bit del registro ANS13 ANSELH) Cada pin del puerto PORTB se le asigna una funcin adicional relacionada con algunos de los incorporados en los mdulos perifricos, que se explicarn ms adelante. Las siguientes caractersticas hacen de este diffierent puerto desde otros puertos, por lo tanto, sus patas son de uso general:

Todos los pines del puerto PORTB se han construido en resistencias pull-up, que los hace ideales para conectar con los botones (teclado), interruptores u optoacopladores. Con el fin de conectar estas resistencias a los pines PORTB, el bit apropiado del registro WPUB debe ser fijado. *

Tener una alta resistencia (varias decenas de kiloohmios), estas resistencias 'virtuales' no afectan pines configurados como salidas, pero sirven como un complemento til cuando actan como insumos. De lo contrario, sin estas resistencias unidos los pines de entrada actuara como coma flotante debido a su alta resistencia de entrada.

* Aparte de los bits del registro WPUB, hay otro poco afecta a la instalacin de todas las resistencias de pull-up. Es el bit del registro RBPU OPTION_REG.

Puerto PORTB se puede utilizar como una fuente de interrupcin. Si est activado, cada bit del puerto PORTB configura como una entrada puede causar una interrupcin al cambiar su estado lgico. A fin de que los pins para provocar una interrupcin, el bit apropiado del registro IOCB debe ser fijado.

Debido a estas caractersticas, los pines del puerto PORTB se utilizan comnmente para el control de botones en el teclado, ya que son capaces de registrar infaliblemente ningn tipo de presin botn. No hay necesidad de 'escanear' estas entradas todo el tiempo, por lo tanto. Cuando los ejes X, Y y Z en los pins estn configurados como salidas fijados a uno lgico (1), slo es necesario esperar a una peticin de interrupcin para llegar despus de presionar un botn. Mediante la combinacin de ceros y unos de estos resultados se comprueba que se presiona el pulsador. Refirase a la figura a continuacin:

Vamos a hacerlo en mikroBasic ...

'The PORTB.1 pin is configured as a digital input. Any change of its logic state will cause 'an interrupt. It also has a pull-up resistor. All other PORTB pins are digital ... outputs. ANSEL, ANSELH = 0 ' All I/O pins are configured as digital PORTB = 0 ' All PORTB pins are cleared TRISB = %00000010 ' All PORTB pins except PORTB.1 are configured as outputs

OPTION_REG.RBPU = 0 WPUB.1 = 1 PORTB.1 pin IOCB.1 = 1 logic state change INTCON.RBIE = 1 INTCON.GIE = 1 ... PIN RB0/INT

' Pull-up resistors are enabled ' Pull-up resistor is connected to the ' The PORTB.1 pin may cause an interrupt on ' Interrupt on PORTB change is enabled ' All unmasked interrupts are enabled

El pasador RB0/INT es la nica "verdadera" fuente de interrupcin externa. Puede ser configurado para responder a la seal borde elevar (cero a uno de transicin) o el borde de la seal descendente (de uno a cero de transicin). El bit del registro INTEDG OPTION_REG se utiliza como un selector de seal.

RB6 y RB7 PINS


El PIC16F887 no est provisto de pasadores especiales para la programacin. En su lugar, esta funcin est asignada a pines I / O.Como una cuestin de hecho, los pines del puerto PORTB se utilizan para el reloj (RB6) y la transferencia de datos (RB7) durante la programacin. Adems, es necesario para proporcionar la tensin de alimentacin Vdd (5V), as como la adecuada tensin Vpp (12-14V) para la programacin de la memoria FLASH. El pin MCLR se utiliza para este propsito. Usted no tiene que pensar en todos estos detalles, ni que una de estas tensiones es que se aplic por primera vez ya que el programador se encarga de eso. Se permite que el programa para ser cargado en el microcontrolador incluso cuando se suelda en el dispositivo de destino. El programa cargado normalmente se pueden modificar de la misma manera. Este proceso se denomina ICSP (programacin In-Circuit Serial). A fin de que las ventajas de esta opcin, es necesario planificar con anticipacin. Esto significa que es necesario para instalar una miniatura 5-pin en el dispositivo de destino a fin de permitir el microcontrolador que se proporcionan con voltajes de programacin necesarios. Con el fin de evitar estos voltajes de interferir con el funcionamiento de otros mdulos conectados a los pines del microcontrolador, es necesario para aislarlos de la placa durante el proceso de programacin utilizando resistencias o puentes.

Como se puede ver, los voltajes aplicados a los pasadores en el zcalo del programador son los mismos que los utilizados durante la programacin ICSP

PORTC y registro TRISC


Puerto PORTC es un nio de 8 bits de ancho, el puerto bidireccional. Los bits del registro TRISC determinar la funcin de sus patas. Al igual que en otros puertos, un uno lgico (1) aplicada al registro TRISC configura el puerto correspondiente pin PORTC como entrada.

Todas las funciones adicionales de los bits del puerto PORTC se describir ms adelante.

PORTD y registro TRISD


Puerto PORTD es un nio de 8 bits de ancho, el puerto bidireccional. Los bits del registro TRISD determinar la funcin de sus patas. Un uno lgico (1) aplicada al registro TRISD configura el pin del puerto PORTD apropiado como una entrada.

PORTE y registro TRISE


Puerto PORTE es un puerto de 4 bits de ancho, bidireccional. Los bits del registro TRISE de determinar la funcin de sus patas. Similar a otros puertos, un uno lgico (1) aplicada al registro TRISE configura el pin del puerto PORTE apropiado como una entrada. La excepcin es el pin RE3 que siempre se configura como una entrada.

Al igual que en los puertos PORTA y PORTB, tres pines pueden ser configurados como entradas analgicas, en este caso. Los bits de Ansel registro de determinar si un alfiler actuar como una entrada analgica (AN) o una entrada / salida digital: RE0 = AN5 (determinado por el bit ANS5 del registro ANSEL);

RE1 = AN6 (determinado por el bit ANS6 del registro ANSEL); y

RE2 = AN7 (determinado por el bit ANS7 del registro ANSEL).

Let's do it in mikroBasic...

' The PORTE.0 pin is configured as an analog input while another three pins of the same ' p.o.r.t are configured as digital. ANSEL = %00100000 ' The PORTE.0 pin is configured as analog ANSELH = 0 ' All other I/O pins are configured as digital TRISE = %00000001 ' All PORTE pins except PORTE.0 are configured as outputs PORTE = 0 ' All PORTE pins are cleared ... Y el registro ANSEL ANSELH
Los registros de Ansel y ANSELH se utilizan para configurar el modo de entrada de un pin de E / S como analgico o digital.

La regla a seguir dice lo siguiente: Para configurar un pin como una entrada analgica, el bit apropiado de los registros o Ansel ANSELH se debe establecer (1). Para configurar un pin como una entrada / salida digital, el bit apropiado debe ser cero (0). El estado de los bits de Ansel registro no afecta a las funciones de salida digital. El resultado de cualquier intento de leer un pin del puerto se configura como una entrada analgica ser 0.

En Corto
Es probable que nunca escribir un programa que no utiliza los puertos, por lo que el esfuerzo que hacen para aprender todo acerca de ellos sin duda valdr la pena. Tambin, que parecen ser los ms simples mdulos dentro del microcontrolador. Esta es la forma en que se utilizan:

Al disear un dispositivo, seleccionar un puerto para ser utilizado por el microcontrolador para la comunicacin con los mdulos perifricos. Si se utilizan slo las entradas y salidas digitales, seleccione cualquier puerto que desee. Si va a utilizar

algunas de las entradas analgicas, seleccione los puertos apropiados de apoyo de configuracin de este tipo (AN0-AN13). Cada pin del puerto puede configurarse como una entrada o una salida. Los bits del TRISA, TRISB, TRISC, TRISD y registros TRISE determinar cmo los terminales de los siguientes puertos PORTA, PORTB, PORTC, PORTD y PORTE va a actuar. Tan simple como eso. Si utiliza alguna de las entradas analgicas, en primer lugar es necesario establecer los bits correspondientes de la ANSEL y registros ANSELH al comienzo del programa. Si utiliza conmutadores y los botones como fuente de entrada de la seal, se recomienda conectarse a dispositivos a los pines del puerto PORTB porque tienen resistencias pull-up conectadas. El uso de estas resistencias est habilitado por el bit del registro RBPU OPTION_REG, mientras que las resistencias individuales estn habilitadas por los bits del registro WPUB. Generalmente es necesario para responder tan pronto como los pines de entrada cambia su estado lgico. Esto no significa que usted tiene que escribir un programa para comprobar el estado de los pins de la lgica de todo el tiempo.Slo tienes que conectar a los pines PORTB y permitir que se produzca una interrupcin en cada cambio de voltaje.Los bits de los registros y IOCB INTCON estn a cargo de eso.

3,4 TIMER0
El microcontrolador PIC16F887 dispone de tres temporizadores completamente independientes y contadores marcados como TMR0, TMR1 y TMR2. Lea atentamente el captulo siguiente para aprender ms sobre ellos. Timer0 tiene una amplia gama de aplicacin en la prctica. No hay casi ningn programa sin l, ya que le permite escribir fcilmente un cdigo que es para generar pulsos de duracin arbitraria, la medicin del tiempo o cmputo de impulsos externos (eventos) casi sin limitaciones. Timer0 es un temporizador de 8-bits / contador con las siguientes caractersticas:

8-bit del temporizador / contador; 8-bits prescaler (compartido con el temporizador de vigilancia); Programable de reloj interno o externo de origen; Interrupcin por desbordamiento, y Programable reloj externo para seleccionar bordes.

La siguiente figura ilustra el esquema Timer0 con todos los bits que controlan su funcionamiento. Estos bits se almacena en el registro OPTION_REG.

OPTION_REG Registrarse

o o o o o o o o o o o

RBPU - PORTB pull-up bit de habilitacin


0 - PORTB resistencias pull-up desactivado. 1 - pins PORTB se puede conectar a tirar hacia arriba resistencias.

INTEDG - bits Edge Select interrupcin


0 - Interrumpir el flanco ascendente del pasador INT (0-1). 1 - Interrumpir el flanco descendente del pasador INT (1-0).

T0CS - TMR0 reloj de bits Select


0 - Los pulsos son llevados a la entrada Timer0/counter a travs del pin RA4. 1 - Timer0 utiliza ciclo de reloj interna (Fosc / 4).

T0SE - TMR0 poco el borde de seleccin de fuente


0 - Incremento de alta a baja transicin en el pin TMR0. 1 - Incremento de bajo a alto de transicin en el pin TMR0.

PSA - Asignacin de bits Prescaler


0 - Prescaler se asigna al WDT. 1 - Prescaler se asigna a la Timer0/counter.

PS2, PS1, PS0 - Tasa de bits Seleccione Prescaler


Prescaler tasa se establece mediante la combinacin de estos bits. Como se observa en la tabla, la misma combinacin de bits ofrece diferentes tipo de prescaler para el Timer0/counter y el temporizador perro guardin, respectivamente.

PS2 0 0 0 0 1 1 1 1

PS1 0 0 1 1 0 0 1 1

PS0 0 1 0 1 0 1 0 1

TMR0 01:02 01:04 01:08 01:16 01:32 1:64 1:128 1:256

WDT 01:01 01:02 01:04 01:08 01:16 01:32 1:64 1:128

Cuando el bit PSA est desactivada, el prescaler est asignado a la Timer0/counter como se muestra en la siguiente figura:

Vamos a hacerlo en mikroBasic ...

' In this example, Timer0 is configured as a timer and prescaler is assigned to it. unsigned cnt ' Define variable cnt sub procedure interrupt ' Interrupt routine cnt = cnt + 1 ' Interrupt causes cnt to be incremented by 1 TMR0 = 155 ' Timer0 (or counter) returns its initial value INTCON = 0x20 ' Bit T0IE is set, bit T0IF is cleared end sub main: OPTION_REG = 0x04 ' Prescaler (1:32) is assigned to Timer0 TMR0 = 155 ' Timer0 counts from 155 to 255 INTCON = 0xA0 ' Enable interrupt on TMR0 overflow ... ... ' In the following example, Timer0 is configured as counter and prescaler is assigned to it OPTION_REG = 0x20 ' Prescaler (1:2) is assigned to the Timer0 TMR0 = 155 ' Timer0 counts from 155 to 255 INTCON = 0xA0 ' Enable interrupt on TMR0 overflow ...

Cuando el bit PSA est establecido, el prescaler se asigna al temporizador perro guardin, como se muestra en la siguiente figura:

Vamos a hacerlo en mikroBasic ...

' In this example, prescaler (1:64) is assigned to watch-dog timer. main: OPTION_REG = 0x0E ' Prescaler is assigned to WDT (1:64) asm CLRWDT ' Assembly command to reset WDT end asm ... ... asm CLRWDT ' Assembly command to reset WDT end asm ...
Esta es tambin digno de mencin:

Cuando el pre-escalador se le asigna al temporizador / contador, cualquier escritura en el registro TMR0 se desactive la pre-escalador. Cuando el pre-escalador se le asigna al temporizador de reloj de perro, la instruccin CLRWDT borrar ambos. Escribir en el registro TMR0, utilizada como un contador de tiempo, no har que el contaje de impulsos para iniciar de inmediato, pero con dos ciclos de instruccin de retraso. En consecuencia, es ne cesarios para ajustar el valor escrito en el registro TMR0. Cuando el microcontrolador se establece en modo de reposo, el oscilador de reloj est apagado. No desbordamiento puede ocurrir ya que no hay pulsos para contar y por lo tanto la interrupcin de desbordamiento de TMR0 no puede despertar al microcontrolador del modo de suspensin. Cuando se utiliza como un contador de reloj externa, sin pre-escalador, una longitud de impulso mnima o un retardo entre dos impulsos debe ser 2 Tosc + 20 nS (Tosc representa el perodo de una seal de reloj generada por el oscilador). Cuando se utiliza como un contador de reloj externo con pre-escalador, una longitud de impulso mnima o el intervalo entre dos impulsos es slo 10ns. La 8-bits precontador registro no est disponible para el usuario, lo que significa que no pueden ser directamente ledo o escrito. Cuando se cambia la asignacin del prescaler Timer0 al temporizador perro guardin, la siguiente secuencia de instrucciones escritas en lenguaje ensamblador debe ser ejecutado con el fin de evitar que el microcontrolador se reinicie:

BANKSEL TMR0 CLRWDT CLRF TMR0 BANKSEL OPTION_REG BSF OPTION_REG,PSA CLRWDT MOVLW b11111000 ANDWF OPTION_REG,W IORLW b00000101 MOVWF OPTION_REG

;CLEAR WDT ;CLEAR TMR0 AND PRESCALER ;PRESCALER IS ASSIGNED TO WDT ;CLEAR WDT ;SELECT BITS PS2,PS1,PS0 AND CLEAR ;THEM USING LOGIC AND INSTRUCTION ;BITS PS2, PS1, AND PS0 SET ;PRESCALER RATE TO 1:32

Del mismo modo, cuando se cambia la asignacin de prescaler del WDT al Timer0, la siguiente secuencia de instrucciones, tambin escrito en lenguaje ensamblador, se debe ejecutar: ;CLEAR WDT AND PRESCALER ;SELECT ONLY BITS PSA,PS2,PS1,PS0 ;CLEAR THEM USNG LOGIC AND INSTRUCTION ;PRESCALER RATE IS 1:16

BANKSEL TMR0 CLRWDT BANKSEL OPTION_REG MOVLW b11110000 ANDWF OPTION_REG,W IORLW b00000011 MOVWF OPTION_REG En Corto

Con el fin de utilizar Timer0 correctamente, es necesario: Paso 1: Para seleccionar el modo:

Modo de temporizador se selecciona por el bit del registro T0CS OPTION_REG, (T0CS: 0 = temporizador, 1 contador =). Cuando se utiliza, el pre-escalador debe ser asignado al temporizador / contador borrando el bit PSA del registro OPTION_REG. La tasa de pre-escalador se establece mediante los bits PS2-PS0 del mismo registro. Cuando una interrupcin se utiliza, los GIE y TMR0IE bits del registro INTCON deben establecerse.

Paso 2: Para medir y contar Medida del tiempo:


Contar:

Restablecer el registro TMR0 o escribir un valor conocido a ella. El tiempo transcurrido (en microsegundos, si de cristal de cuarzo de 4 MHz se utiliza) se mide mediante la lectura del registro TMR0. El TMR0IF bit de bandera del registro INTCON se ajusta automticamente cada vez que el TMR0 desborda registro. Si est activado, se produce una interrupcin. La polaridad de los impulsos para ser contados en el pin RA4 es seleccionado por el bit TOSE del registro OPTION_REG (T0SE: 0 = positivo, 1 = impulsos negativos). Nmero de impulsos puede ser leda desde el registro TMR0. La pre-escalador y de interrupcin se utilizan en la misma manera que en el modo de temporizador.

3,5 TIMER1
Mdulo Timer1 es un contador de 16-bit de temporizacin /, lo que significa que se compone de dos registros (TMR1L y TMR1H). Es capaz de contar hasta 65.535 pulsos en un solo ciclo, es decir, antes de que el recuento se inicia desde cero.

Al igual que en Timer0, estos registros pueden ser ledos o escritos que en cualquier momento. En caso de que se produce un desbordamiento, una interrupcin se genera automticamente, siempre y cuando se activa. El Timer1 puede ser configurado para operar en uno de dos modos, ya sea como un temporizador o un contador. A diferencia del Timer0, ambos de estos modos de dar possibilitis adicional.

El Timer1 tiene las siguientes caractersticas:

16-bit del temporizador / contador de un par de registros; Programable de reloj interno o externo de origen; 3-bit pre-escalador; Opcional de baja potencia (LP) del oscilador; Funcionamiento sncrono o asncrono; Timer1 puerta de control (cuenta activada) a travs de comparacin o el pasador T1G; Interrupcin por desbordamiento; Wake-up en caso de desbordamiento (reloj externo), y Fuente de reloj para la Captura / Comparacin del mdulo.

Un esquema simplificado del Timer1

TEMPORIZADOR TMR1 RELOJ DE SELECCIN DE FUENTE


El bit TMR1CS del registro T1CON se utiliza para seleccionar la fuente de reloj para el Timer1: FUENTE DE RELOJ Fosc / 4 T1CKI pin TMR1CS 0 1

Cuando la fuente de reloj interno est seleccionado, el par de registros TMR1H-TMR1L se incrementar en mltiplos de pulsos Fosc segn lo determinado por el pre-escalador. Cuando la fuente de reloj externa est seleccionada, el temporizador puede operar ya sea como un temporizador o un contador. Los pulsos de reloj en el modo de contador puede ser sincronizado con el reloj del microcontrolador interno o ejecutar de forma asincrnica.

TIMER1 de Prescaler
Timer1 est provisto de un pre-escalador completamente independiente que permite la divisin 1, 2, 4 u 8 de la frecuencia de entrada de reloj. El prescaler no es directamente leer o escribir. Sin embargo, el contador de prescaler se borra automticamente despus de escribir en el registro o TMR1H TMR1L.

OSCILADOR TIMER1 de

Los pasadores RC0/T1OSO y RC1/T1OSI son, sobre todo, utilizado para registrar los impulsos procedentes de los mdulos perifricos, pero tambin tienen una funcin adicional. Como puede verse en la figura, que al mismo tiempo actan como entrada (pin RC1) y salida (pin RC0) del oscilador de cuarzo LP adicional (baja potencia). Este circuito est diseado principalmente para el funcionamiento a bajas frecuencias (hasta 200 KHz) y utiliza cristal de 32.768 KHz de cuarzo. Tal cristal es conveniente para los relojes de cuarzo debido a que es fcil de obtener un segundo de duracin pulsos dividiendo esta frecuencia. Dado que la operacin de este oscilador no depende del reloj interno, que es capaz de funcionar incluso en modo de suspensin, que se habilita estableciendo el bit de control del registro T1OSCEN T1CON. En este caso, es necesario proporcionar un retardo de tiempo corto (unos pocos milisegundos) desde el software en aras de la estabilidad del oscilador de reloj.

Tabla siguiente contiene los valores recomendados de los condensadores que son, adems de cristal de cuarzo, integrado en el oscilador. Estos valores no son crticos y se aplica la siguiente regla: cuanto mayor es la capacidad, mayor ser la estabilidad, la cual, al mismo tiempo, prolonga el tiempo necesario para la estabilidad del oscilador de reloj.
OSCILADOR FRECUENCIA 32 kHz LP 100 kHz 200 kHz C1 33 pF 15 pF 15 pF C2 33 pF 15 pF 15 pF

El consumo de energa del microcontrolador se minimiza en el modo de espera como el consumidor de energa principal, el oscilador, no funciona. El microcontrolador se establece en este modo de ejecutar la instruccin SLEEP. El problema es cmo despertar el microcontrolador, es decir, cmo generar una interrupcin que hace que suceda. Como el microcontrolador "duerme", una interrupcin debe ser activado por los mdulos perifricos. Se hace an ms complicado si es necesario despertar al microcontrolador a intervalos regulares de tiempo ...

El problema se resuelve mediante la incorporacin de un oscilador de baja potencia totalmente independiente de cuarzo capaz de operar en modo de suspensin en el microcontrolador PIC16F887. En pocas palabras, el mdulo que sola ser perifrica, est ahora integrada en el microcontrolador y asignado a la Timer1. El oscilador se activa fijando el bit T1OSCEN del registro T1CON. El bit TMR1CS se utiliza entonces para permitir que el Timer1 utilizar impulsos generados por dicho oscilador.

Una seal generada por el oscilador de cuarzo est sincronizado con el reloj del microcontrolador en la limpieza de la broca T1SYNC. En este caso, el temporizador no puede funcionar en modo de reposo porque el circuito de sincronizacin utiliza el reloj del microcontrolador. El registro TMR1 interrupcin de desbordamiento se puede habilitar. Si el bit T1SYNC se establece, tales interrupciones tambin se producir en modo de reposo.

PUERTA DEL TIMER1


La fuente de la puerta Timer1 es configurable por software para usar el pin T1G o la salida del comparador C2. Esta puerta permite que el temporizador a las seales externas directamente de tiempo utilizando el pasador T1G o seales analgicas utilizando la salida del comparador C2. Refirase a la figura en la pgina anterior. Con el fin de medir una duracin de la seal, es suficiente para permitir esta puerta y contar los impulsos en el registro TMR1.

TIMER1 en modo contador


Timer1 empieza a funcionar como un contador configurando el bit de TMR1CS. Cuenta impulsos suministrados al pasador PC0/T1CKI y se incrementa en el borde ascendente en el pulso T1CKI reloj de entrada externa. Si el bit de control T1SYNC del registro T1CON est desactivada, las entradas de reloj externas se sincronizar antes de llegar al par de registros TMR1. En otras palabras, el Timer1 se sincroniza con el reloj del microcontrolador, convirtindose en un contador sncrono. Si el microcontrolador est en modo de suspensin, mientras que el Timer1 funciona como un contador, los registros del temporizador TMR1H y TMR1L no ser modificado a pesar de que los pines de entrada se alimentan con pulsos. Dado que el reloj del microcontrolador no se ejecuta en modo de reposo, no hay entradas de reloj que se utilizar para la sincronizacin. Sin embargo, el pre-escalador se mantendr en el funcionamiento de la medida de lo que hay pulsos de reloj en los pines, ya que es un divisor de frecuencia simple.

Este contador registra un uno lgico (1) en los pines de entrada. Lo que pasa es que al menos un flanco de bajada debe estar registrado antes de iniciar el conteo de pulsos. Refirase a la figura de la izquierda. Las flechas indican los incrementos del contador.

TIMER1 En el modo TIMER


Con el fin de establecer el modo de temporizador Timer1, es necesario borrar el bit TMR1CS. Despus de eso, cada pulso generado por el oscilador interno har que el registro del temporizador de 16-bit para ser incrementado. Si el cristal de cuarzo 4MHz est en uso, este registro se incrementa cada microsegundo. En este modo, el bit T1SYNC no afecta el temporizador ya que cuenta impulsos de reloj internas utilizadas por el microcontrolador y otros mdulos internos. Por lo tanto no hay necesidad de sincronizacin.

El reloj del microcontrolador no funciona en modo de reposo para que el exceso del temporizador registro no puede causar una interrupcin en este modo.

' In this example, Timer1 is configured as a timer with the prescaler rate 1:8. Every time ' TMR1H and TMR1L registers overflow occurs, an interrupt will be requested. main: ... PIR1.TMR1IF = 0 TMR1H = 0x22 TMR1L = 0x00 T1CON.TMR1CS = 0 oscillator T1CON.T1CKPS0 = 1 T1CON.T1CKPS1 = 1 PIE1.TMR1IE = 1 INTCON = 0xC0 T1CON.TMR1ON = 1 ... T1CON Registrarse
Los bits del registro T1CON est en control de la operacin Timer1.

' Reset the TMR1IF flag bit ' Set initial value for the Timer1 ' Timer1 counts pulses from internal ' Assigned prescaler rate is 1:8 ' Enable interrupt on overflow ' Enable interrupt (bits GIE and PEIE) ' Turn the Timer1 on

T1GINV - Timer1 Puerta Invertir actos de bits como un inversor de estado lgico en la puerta pasador T1G o la salida del comparador C2 (C2OUT) puerta. Permite que el temporizador para contar los pulsos mientras la puerta est alta o baja.

1 - Temporizador 1 cuenta cuando el pasador T1G o puerta C2OUT bits es alta (1). 0 - Temporizador 1 cuenta cuando el pasador T1G o puerta C2OUT bits es baja (0).

TMR1GE - Timer1 Puerta de bit de habilitacin determina si el pin T1G o el comparador C2 com salida (C2OUT) la puerta se activa o no.Este bit se activa slo cuando el Timer1 est encendido (TMR1ON bit = 1). De lo contrario, se ignora.

1 - Timer1 se activa slo cuando la puerta Timer1 no est activo. 0 - Puerta de no afectar el funcionamiento del Timer1.

T1CKPS1, T1CKPS0 - determinar la tasa de la pre-escalador asignado al Timer1. T1CKPS1 0 0 1 1 T1CKPS0 0 1 0 1 PRESCALER TARIFA 01:01 01:02 01:04 01:08

T1OSCEN - Oscilador LP Bit de habilitacin de control

1 - Oscilador LP est habilitado para el reloj de Timer1 (oscilador de baja potencia con una frecuencia de 32,768 kHz). 0 - Oscilador LP est desactivado.

T1SYNC - Timer1 entrada externa de reloj de sincronizacin de bits de control permite la entrada del oscilador LP o el pin de entrada T1CKI para sincronizarse con el reloj del controlador interno de micro. El bit es ignorado mientras impulsos suministrados desde la fuente de reloj se cuentan microcontrolador (TMR1CS bits = 0).

1 - Entrada de sincronizacin no se sincronizarn .. 0 - entrada de reloj externo se sincronizarn .. 1 - Contar pulsos en el pin T1CKI (en el flanco ascendente 0-1). 0 - Recuento de impulsos generados por el reloj del microcontrolador. 1 - Timer1 habilitado. 0 - Timer1 personas con discapacidad.

- Temporizador TMR1 TMR1CS Fuente del Reloj Seleccione bits

TMR1ON - Timer1 En poco

En Corto
Con el fin de utilizar el Timer1 correctamente, es necesario hacer lo siguiente:

Dado que no es posible apagar el pre-escalador, su tasa debe ser ajustado mediante el uso de los bits T1CKPS1 y T1CKPS0 de la T1CON registro (Consulte la tabla anterior).

Seleccione el modo apropiado con la broca de la TMR1CS T1CON registro. (TMR1CS: 0 = la fuente de reloj es oscilador interno de cuarzo, 1 = el reloj se suministra externamente). Al establecer el bit T1OSCEN del mismo registro, el oscilador se activa y los registros TMR1H y TMR1L se incrementan en cada pulso de reloj. Contar las paradas en la limpieza de este bit. El prescaler se borra en la limpieza o escribiendo a los registros del contador. Cuando los dos registros del temporizador estn llenas de seres y un occures de desbordamiento, la bandera TMR1IF se establece y comienza el conteo desde cero.

3,6 Timer2
Timer2 es un temporizador de 8-bits que opera en una manera especfica.

Impulsos generados por el oscilador de cuarzo pase primero a travs del divisor de la tasa de los cuales se puede cambiar con los T2CKPS1 y T2CKPS0 bits. La salida del precontador se utiliza entonces para incrementar el registro TMR2 a partir de las 00h. Los valores de TMR2 y PR2 registros se comparan todo el tiempo y el TMR2 se incrementa constantemente hasta que coincida con el valor almacenado en PR2. Cuando el partido se produce, el registro TMR2 se borra automticamente. El postscaler Timer2 se incrementa en cada partido y su produccin se utiliza para generar una interrupcin si est habilitada. Los registros TMR2 y PR2 son de lectura y escritura. Contando puede ser detenido en la limpieza de la broca TMR2ON, lo que reduce el consumo de energa. El momento de la reposicin Timer2 tambin puede utilizarse como una seal de comunicacin de reloj de serie. El funcionamiento del Timer2 est bajo el control de varios bits de la T2CON registro.

T2CON Registrarse

TOUTPS3 - TOUTPS0 - Timer2 salida Postcaler bits de seleccin se utilizan para determinar la tasa de postscaler de acuerdo con la siguiente tabla: TOUTPS3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 TOUTPS2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 TOUTPS1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 TOUTPS0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 POSTSCALER TARIFA 01:01 01:02 01:03 01:04 01:05 01:06 01:07 01:08 01:09 01:10 01:11 01:12 01:13 01:14 01:15 01:16

TMR2ON - Timer2 En poco convierte el Timer2 sucesivamente.

1 - Timer2 est encendido. 0 - Timer2 est apagado.

T2CKPS1, T2CKPS0 - Timer2 Clock bits de preescala determinar la tasa de prescaler: T2CKPS1 0 0 1 T2CKPS0 0 1 x PRESCALER TARIFA 01:01 01:04 01:16

En Corto

Cuando se utiliza el Timer2, tenga en cuenta los siguientes datos relacionados con sus registros:

En el momento del encendido, el registro PR2 contiene el valor FFh. Tanto el pre-escalador y postscaler han sido aprobados por escrito al registro TMR2. Tanto el pre-escalador y postscaler han sido aprobados por escrito al registro T2CON. En cualquier reajuste - que supongo que, tanto pre-escalador y postscaler se borran.

3.7 mdulos CCP


Mdulos CCP se puede configurar para operar en varios modos diferentes, lo que hace a los perifricos ms complicado de manejar.Simplemente tratar de analizar su funcionamiento utilizando los cuadros que describen las funciones de bit y usted entender lo que estamos hablando. Por lo tanto, cuando se utiliza uno de los mdulos CCP, primero seleccione el modo que usted necesita, analizar la figura apropiada, a continuacin, cambiar los bits de los registros. O si no ... El mdulo CCP (Captura / Comparacin / PWM) es un perifrico que permite al usuario el tiempo y el control de diferentes eventos. Como su nombre lo indica, se puede configurar para funcionar en tres modos diferentes: Modo de captura proporciona un acceso al estado actual de un registro que cambia constantemente su valor. En este caso, es el temporizador de registro TMR1. Modo de comparacin compara constantemente los valores de dos registros. Uno de ellos es el temporizador de registro TMR1. PWM (Pulse Width Modulation) puede generar seales de diferente frecuencia y ciclo de trabajo en uno o ms pines de salida. Hay dos mdulos CCP integrados en el microcontrolador PIC16F887 - CCP1 y CCP2. Ellos son casi idnticos en funcionamiento con la diferencia de caractersticas mejoradas de PWM disponibles en el mdulo CCP1 solamente. En este captulo se ofrece una descripcin detallada de este mdulo. Como para el mdulo CCP2, slo las caractersticas que lo distinguen de CCP1 ser cubierto.

MDULO CCP1
El corazn del mdulo CCP1 es una CCPR1 16-bit del registro que se compone de dos registros CCPR1L y CCPR1H. Se utiliza para la captura de nmeros binarios desde el temporizador registro TMR1 (TMR1H y TMR1L) o la comparacin de nmeros binarios almacenados en los registros CCPR1 y TMR1.

Si est habilitado por el software, el temporizador TMR1 registro de reposicin puede ocurrir en cualquier partido en el modo de comparacin. Adems, el mdulo CCP1 es capaz de generar seales PWM de frecuencia variable y ciclo de trabajo. Los bits del registro CCP1CON estn en el control del mdulo CCP1.

CCP1 en modo de captura

En este modo, el registro CCP1 (que consiste en la CCPR1H y un par CCPR1L registro) captura un valor de 16-bit del temporizador TMR1 registro (que consiste en la TMR1H y un par TMR1L registro) cuando uno de los siguientes eventos en el RC2/CCP1 pin:

Cada flanco de bajada (1 -> 0); Cada flanco ascendente (0 -> 1); Cada arista cuarta ascendente (0 -> 1), y Cada arista 16a ascendente (0 -> 1).

Cul de estos eventos hacen que un conjunto de datos de 16 bits para ser capturados depende de la combinacin de cuatro bits (CCP1M3, CCP1M2, CCP1M1 y CCP1M0) del registro de control. Adems, las siguientes condiciones deben cumplirse:

El pasador RC2/CCP1 debe ser configurado como entrada, y El mdulo Timer1 debe funcionar como un temporizador o un contador sncrono.

El bit de bandera CCP1IF se establece cuando la captura se hace. Si el bit del registro CCP1IE PIE1 se establece cuando ocurre, se produce una interrupcin. Cuando las salidas del mdulo CCP1 el modo de captura, una interrupcin no deseada de captura se puede generar. Con el fin de evitar esto, tanto el bit de permitir la interrupcin CCP1IE y el bit de bandera CCP1IF debe ser limpiado antes de realizar cualquier cambio en el registro de control CCP1CON. Una interrupcin no deseada tambin se puede generar cuando se cambia de una tasa de pre-escalador a otro. Para evitar esto, el mdulo CCP1 debe ser temporalmente apagado antes de cambiar la tasa de pre-escalador. Es recomendable utilizar la siguiente secuencia de programa escrito en lenguaje ensamblador:

BANKESEL CCP1CON CLRF CCP1CON 'CONTROL REGISTER IS CLEARED 'CCP1 MODULE IS OFF MOVLW XX 'NEW PRESCALER MODE IS SELECTED MOVWF CCP1CON 'NEW VALUE IS LOADED INTO THE CONTROL REGISTER 'CCP1 MODULE IS SIMULTANEOUSLY SWITCHED ON
Let's do it in mikroBasic...

... asm BANKESEL CCP1CON CLRF CCP1CON ' CONTROL REGISTER IS CLEARED ' CCP1 MODULE IS OFF MOVLW XX ' NEW PRESCALER MODE IS SELECTED MOVWF CCP1CON ' NEW VALUE IS LOADED INTO THE CONTROL REGISTER ' CCP1 MODULE IS SIMULTANEOUSLY SWITCHED ON end asm ...

CCP1 en modo de comparacin


En este modo, el valor almacenado en el registro CCP1 se compara constantemente con el valor almacenado en el registro del temporizador TMR1. Cuando se produce una coincidencia, el estado lgico de la patilla de salida RC2/CCP1 puede ser cambiado, que depende del estado de bits en el registro de control (CCP1M3 - CCP1M0). El bit de bandera CCP1IF se establece al mismo tiempo.

Para configurar el mdulo CCP1 para funcionar en el modo de comparacin, dos condiciones deben cumplirse:

El pasador RC2/CCP1 se debe configurar como una salida, y Timer1 debe estar sincronizado con el reloj interno.

CCP1 en modo PWM


Secuencias de impulsos con una frecuencia de pulso variable y ciclo de trabajo tienen una amplia gama de aplicaciones en la automatizacin. Un ejemplo tpico es una unidad de control de potencia. Refirase a la figura de abajo. Si un cero lgico (0) indica un estado de desconexin y una lgica uno (1) indica un estado switchon, la energa elctrica para alimentar a un consumidor con ser directamente proporcional a la duracin del impulso. Esta relacin se conoce como ciclo de trabajo.

Otro ejemplo, tambin es comn en la prctica, es el uso de seales PWM en seal de unidades generadoras para producir seales de formas de onda arbitrarias, como forma de onda sinusoidal. Vea la siguiente figura:

Los dispositivos que operan con seales PWM se utilizan comnmente en la prctica como controladores de frecuencia ajustable para controlar el funcionamiento de los motores elctricos (velocidad, aceleracin, deceleracin, etc.)

La figura anterior muestra un diagrama de bloques del conjunto mdulo CCP1 a modo PWM. Con el fin de generar un pulso de ciclo de trabajo arbitrario en su pin de salida, es necesario establecer perodo de pulso (frecuencia) y duracin del impulso del primero.

PWM PERODO

La salida PWM perodo de impulso (T) depende del valor almacenado en el registro PR2 del Timer2. Se calcula por medio de la siguiente ecuacin: Perodo PWM = (PR2 +1) * 4Tosc * TMR2 pre-escala de valor Si el perodo de PWM (T) es conocido, es fcil calcular la frecuencia de la seal (F) ya que estos dos valores estn relacionadas por la ecuacin F = 1 / T.

PWM ANCHO DE PULSO


La anchura de impulsos PWM est determinado por medio de 10 bits en total: todos los bits (ocho en total) del registro CCPR1L como MSB y dos bits del registro CCP1CON como LSBs (DC1B1 y DC1B0). El resultado es un nmero de 10-bits contenidos en la frmula: Ancho de pulso = (CCPR1L, DC1B1, DC1B0) * Tosc * TMR2 pre-escala de valor La siguiente tabla muestra cmo generar seales PWM de frecuencia variable, si el microcontrolador utiliza un 20 MHz con cristal de cuarzo (Tosc = 50ns). FRECUENCIA [KHZ] TMR2 Prescaler PR2 Registrarse Slo dos cosas ms: 1,22 16 FFh 4,88 4 FFh 19,53 1 FFh 78,12 1 3Fh 156,3 1 1Fh 208,3 1 17h

El pin de salida ser constantemente establecer si la anchura de impulso es por negligencia dispuesto a ser ms grande que perodo de PWM. En este caso, el postscaler Timer2 no puede ser utilizado para la generacin de largos perodos de PWM.

Resolucin de la seal PWM


Una seal PWM es nada ms que una secuencia de impulsos con diversos ciclo de trabajo. Para una frecuencia especfica (nmero de pulsos por segundo), hay un nmero limitado de combinaciones de ciclos de trabajo. La resolucin es el nmero mximo de combinaciones del ciclo de trabajo medido en bits. Por ejemplo, una resolucin de 10-bits se traducir en 1024 ciclos de trabajo discretos, mientras que una resolucin de 8-bits se traducir en 256 ciclos de trabajo discretos etc En cuanto a este microcontrolador, la resolucin depende de los contenidos del registro PR2. La resolucin mxima se obtiene mediante la escritura nmero FFh a dicho registro. Las frecuencias de las seales PWM y resoluciones (Fosc = 20MHz): FRECUEN CIA PWM Temporizador de pre-escala PR2 Valor Resolucin mxima 1.22K HZ 16 FFh 10 4.88K HZ 4 FFh 10 19.53K HZ 1 FFh 10 78.12K HZ 1 3Fh 8 156.3K HZ 1 1Fh 7 208.3K HZ 1 17h 6

Las frecuencias de las seales PWM y resoluciones (Fosc = 8MHz): FRECUEN CIA PWM Temporizador de pre-escala 1.22K HZ 16 4.90K HZ 4 19.61K HZ 1 76.92K HZ 1 153.85K HZ 1 200.0K HZ 1

PR2 Valor Resolucin mxima

65h 8

65h 8

65h 8

19h 6

0Ch 5

09h 5

Vamos a hacerlo en mikroBasic ...

' In this example, PWM module is initialized and set to give a pulse train of 50% duty' cycle. Functions PWM1_Init(), PWM1_Start() and PWM1_Set_Duty() are used for this ' purpose. All of them are already contained in the mikroBasic PRO for PIC PWM library ' and just need to be copied to the program. dim duty_c as byte ' Define variable duty_c ... sub procedure InitMain() ANSEL,ANSELH = 0 ' All I/O pins are configured as digital PORTC,TRISC = 0 ' Initial state of port C output pins PWM1_Init(5000) ' PWM module initialization (5KHz) end sub main: InitMain() duty_c = 127 ' Initial value of duty-cycle PWM1_Start ' Start PWM1 module PWM1_Set_Duty(duty_c) ' Set PWM duty-cycle to 50% ... ...

CCP1CON Registrarse

P1M1, P1M0 - PWM bits de configuracin de salida - El pin P1A siempre se configura como una entrada en la captura / modo de comparacin. Pines P1B, P1C y actuar como puerto PORTD P1D entrada / salida de pines. P1M1 P1M0 MODO PWM con salida nica 0 0 Pin P1A emite la seal modulada. Pines P1B, P1C y P1D son puerto de entrada de D / salida Full Bridge - Configuracin Adelante

Pin P1D emite la seal modulada Pin P1A est activo Pines P1B y P1C estn inactivos La mitad de configuracin de puente 1 0 Pasadores P1A y P1B seal de salida modulada PinsP1C y P1D son entradas de los puertos D y salidas Full Bridge - configuracin inversa 1 1 Pin P1B emite la seal modulada Pin P1C est activo Pines P1A y P1D estn inactivos

DC1B1, DC1B0 - PWM fragmentos de ciclos de trabajo menos importantes - slo se utilizan en el modo PWM en el que se representan dos bits menos significativos de un nmero de 10 bits. Este nmero se utiliza para determinar el ciclo de trabajo de una seal PWM. El resto de bits (8 en total) se almacenan en el registro CCPR1L. CCP1M3 - CCP1M0 bits - se utilizan para seleccionar el modo de funcionamiento del Mdulo CCP1. CCP1M3 0 0 0 0 CCP1M2 0 0 0 0 CCP1M1 0 0 1 1 CCP1M0 0 1 0 1 MODO El mdulo est desactivada (reset) No usado Comparar el modo de CCP1IF bits se encuentra en juego No usado Modo de captura 0 1 0 0 Cada flanco descendente en el pin CCP1 Modo de captura 0 1 0 1 Cada flanco ascendente en el pin CCP1 Modo de captura 0 1 1 0 Cada borde de cuarto creciente en el pin CCP1 Modo de captura 0 1 1 1 Cada arista 16a aumento en el pin CCP1 Comparar el modo de 1 0 0 0 De salida y el bit CCP1IF se establecen en el partido del Comparar el modo de 1 0 0 1 La salida se borra y poco CCP1IF se establece en el partido del Comparar el modo de

Solicitud de interrupcin llega y CCP1IF bit se establece en el partido Comparar el modo de 1 0 1 1 CCP1IF bit est establecido, y contadores de tiempo de 1 o 2 registros se borran Modo PWM 1 1 0 0 Pines P1A y P1C estn activos de alta Pines P1B y P1D estn activos de alta Modo PWM 1 1 0 1 Pines P1A y P1C estn activos de alta Pines P1B y P1D estn activos bajo Modo PWM 1 1 1 0 Pines P1A y P1C estn activos bajo Pines P1B y P1D estn activos de alta Modo PWM 1 1 1 1 Pines P1A y P1C estn activos bajo Pines P1B y P1D estn activos bajo

MDULO CCP2
Independientemente de los nombres de diferentes registros y bits en los mdulos CCP1 y CCP2, el mdulo CCP2 representa una copia fiel del mdulo CCP1 configurado para funcionar en modo normal (capturar y comparar). Slo hay una cosa que hace que el CCP2 diferente cuando se opera en el modo de comparacin. Es la seal de reposicin Timer1. Es decir, si el convertidor A / D est habilitada, en el momento en que los valores de los registros TMR1 y CCPR2 partido, la seal de reinicio del temporizador Timer1 se iniciar automticamente el proceso de conversin A / D.

El mdulo CCP2 est tambin bajo el control de los bits de control del registro. Esta vez, es el registro CCP2CON.

CCP2CON Registrarse

DC2B1, DC2B0 - PWM fragmentos de ciclos de trabajo menos importantes - slo se utilizan en el modo PWM en el que se representan dos bits menos significativos de un nmero de 10 bits. Este nmero se utiliza para determinar el ciclo de trabajo de una seal PWM. El resto de bits (8 en total) se almacenan en el registro CCPR2L. CCP2M3 - CCP2M0 bits - se utilizan para seleccionar el modo de funcionamiento del mdulo CCP2. CCP2M3 0 0 0 0 CCP2M2 0 0 0 0 CCP2M1 0 0 1 1 CCP2M0 0 1 0 1 MODO El mdulo est desactivada (reset) No usado No usado No usado Modo de captura 0 1 0 0 Cada flanco descendente en el pin CCP2 Modo de captura 0 1 0 1 Cada borde de sensibilizacin sobre la pin CCP2 Modo de captura 0 1 1 0 Cada borde de cuarto creciente en el pin CCP2 Modo de captura 0 1 1 1 Cada arista 16a aumento en el pin CCP2 Comparar el modo de 1 0 0 0 De salida y el bit CCP2IF se establecen en el partido del Comparar el modo de 1 0 0 1 La salida se borra y poco CCP2IF se establece en el partido del

Comparar el modo de 1 0 1 0 La interrupcin se genera poco CCP2IF se establece y el pin CCP2 no se ve afectado el partido Comparar el modo de 1 0 1 1 En Mach, poco CCP2IF se establece, Timer 1 registros se borran y la conversin A / D se inicia si el convertidor A / D est habilitada. Modo PWM

En Corto
Configuracin CCP1 mdulo a modo PWM
Con el fin de establecer el mdulo CCP1 para funcionar en el modo PWM, los siguientes pasos se deben tomar:

o o o o o

Deshabilitar el pin de salida CCP1 (configurarlo como un insumo). Establecer el perodo de PWM escribiendo un valor en el registro PR2. Establecer el mdulo CCP1 para operar en el modo PWM mediante la combinacin de bits del registro CCP1CON. Ajuste el ciclo de trabajo de la seal PWM escribiendo un valor en el registro y el uso de los bits CCPR1L DC1B1 y DC1B0 del registro CCP1CON. Configurar e iniciar Timer2:
Desactive la bandera de interrupcin TMR2IF del registro PIR1. Establecer el valor Timer2 preescala utilizando los bits T2CKPS1 y T2CKPS0 del registro T2CON. Ejecute el Timer2 al establecer el bit TMR2ON del registro T2CON.

Habilitar pines PWM de salida despus de un ciclo PWM se ha completado:


Espere a que el desbordamiento del Timer2 (el bit de la TMR2IF PIR1register est establecido). Configurar el pin correspondiente como salida en la limpieza de un bit del registro TRIS.

CCP1 en modo mejorado


El modo mejorado est disponible en el mdulo CCP1 solamente. El conjunto CCP1 para operar en el modo mejorado bsicamente no difiere de la CCP1 en modo normal. La mejora en realidad se refiere a la transmisin de seales PWM a los pines de salida. Es un detalle importante porque los microcontroladores se utilizan cada vez ms en los sistemas elctricos de control de motores. Estos dispositivos no se describen en este documento, pero si alguna vez han tenido la oportunidad de trabajar con dispositivos similares, se reconocen algunas unidades que, hasta hace muy poco, fueron utilizados como mdulos independientes adicionales. Hoy en da estn integrados en los microcontroladores y puede funcionar en varios modos diferentes.

SOLA SALIDA MODO PWM


Una sola salida PWM modo se activa slo cuando los bits P1M1 y P1M0 del registro CCP1CON se borran. En este caso, una seal PWM puede estar disponible en hasta cuatro pines de salida diferentes al mismo tiempo. Adems, la seal PWM puede aparecer ya sea en forma de onda bsica o invertida. Distribucin de la seal depende de bits del registro PSTRCON, mientras que su polaridad depende de las CCP1M1 y CCP1M0 bits del registro CCP1CON. Si una salida invertida se utiliza, los pines son de baja actividad, y los pulsos con la misma forma de onda se generan siempre en parejas: en el P1A y P1C pernos y pasadores P1B y P1D, respectivamente.

MEDIA MODO DE PUENTE


En el modo de medio puente, el pasador P1A se alimenta con una seal PWM, mientras que el pasador P1B es al mismo tiempo alimenta con la seal PWM complementaria. Estos pulsos transistores MOSFET de accionamiento en la configuracin de medio puente, que activar / desactivar la corriente pase a travs de la carga.

No encienda dos transistores MOSFET simultneamente como la corriente de cortocircuito que puede ser causada por lo tanto va a ser fatal. Con el fin de evitar esto, es necesario esperar un tiempo de conmutacin entre los conductores de encendido y apagado. Este retardo de tiempo, marcado como 'td' en la siguiente figura, se proporciona por medio de bits PDC0-PDC6 del registro PWM1CON.

Como puede verse en la figura a continuacin, el modo de medio puente tambin puede ser utilizado para conducir los transistores MOSFET en la configuracin de puente completo:

FULL-BRIDGE MODE
Todos los cuatro pasadores se configuran como salidas en el modo de puente completo. En la prctica, este modo de funcionamiento se utiliza comnmente para el funcionamiento de los motores, ya que proporciona un control sencillo y lleno de velocidad y direccin de rotacin. Hay dos configuraciones de este modo: Full Bridge-Forward y Full Bridge-Reverse.

Puente completo - CONFIGURACIN DE ADELANTE


En la configuracin de puente completo hacia adelante en los siguientes casos:

Una lgica de un (1) aparece en el pin P1A (pin est activo-alto); Secuencia de impulsos aparece en el pin P1D; y Una lgica cero (0) aparece en los pines P1B y P1C (pines estn activos-bajo).

La siguiente figura muestra el estado de los pines P1A-P1D durante un ciclo completo de PWM.

Puente completo - configuracin inversa


La configuracin inversa puente completo es similar a la configuracin antes mencionada, slo que los pasadores tienen diferentes funciones:

Una lgica de un (1) aparece en el pin P1C (pin est activo-alto); Secuencia de impulsos aparece en el pin P1B, y Una lgica cero (0) aparece en la P1A y P1D pines (pines estn activos-bajo).

PWM1CON Registrarse

PRSEN PWM Reinicie Bit de habilitacin

1 - Una vez apagado automtico, el mdulo PWM se reinicia automticamente, mientras que el bit del registro ECCPASE ECCPAS se borra. 0 - Con el fin de reiniciar el mdulo PWM al auto-apagado, el bit ECCPASE debe ser limpiado desde el software.

PDC6 - PDC0 PWM bits de recuento de retraso - Un nmero binario 7-dgitos determina el nmero de ciclos de instruccin (4 * Tosc) usado como un retardo de tiempo durante la activacin de pines de salida PWM.

PSTRCON Registrarse

STRSYNC - bits de direccin Sync ajusta el tiempo de la reorientacin de pulso PWM:

1 - Redirigir se produce despus de modificar el registro PSTRCON, pero no hasta la forma de onda PWM es completa. 0 - Redirigir se produce despus de modificar el registro PSTRCON. La seal PWM en el pin de salida se cambi inmediatamente sin tener en cuenta si el ciclo anterior se ha completado o no. Tal reorientacin se utiliza cuando una seal PWM tiene que ser eliminado de la immediatley pasador. 1 - El pin P1D se alimenta con una seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTD / salida. 1 - El pin P1C se alimenta con una seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTD / salida. 1 - El pin P1B se alimenta con la seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTD / salida. 1 - El pin P1A se alimenta con la seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTC / salida.

STRD - Direccin Activar bit D determina la funcin del pin P1D.

Direccin STRC Activar bit C determina la funcin del pin P1C.

STRB - Direccin Activa B bits determina la funcin del pin P1B.

STRA - Direccin Activa bits determina la funcin del pin P1A.

ECCPAS Registrarse

ECCPASE - Auto-apagado PECC bit de estado indica si el evento estado de cierre del mdulo CCP se ha producido:

1 - mdulo CCP est en el estado de cierre. 0 - mdulo CCP opera con normalidad.

ECCPAS2 - ECCPAS0 - PECC Auto Shutdown-bits de origen Select se utilizan para seleccionar el auto apagado Estado de la fuente: ECCPAS2 0 0 0 0 1 1 1 1 ECCPAS1 0 0 1 1 0 0 1 1 ECCPAS0 0 1 0 1 0 1 0 1 SHUTHOWN ESTADO DE LA FUENTE Estado de cierre desactivada Comparador C1 cambio en la salida Comparador C2 cambio de salida El comparador C1 o C2 cambio de salida La lgica cero (0) en el pin INT La lgica cero (0) en el pin INT o cambio comparador C1 de salida La lgica cero (0) en el pin INT o cambio comparador la salida C2 La lgica cero (0) en el pin INT o cambio comparador la salida C1 o C2

PSSAC1, PSSAC0 - Pins P1A, P1C de cierre de los bits de control del Estado definir el estado lgico de la salida de pines P1A y P1C cuando el mdulo CCP est en el estado de apagado. PSSAC1 0 0 1 PSSAC0 0 1 X PINES ESTADO LGICO 0 1 De alta impedancia (Tri-State)

PSSBD1, PSSBD0 - P1B Pins, P1D de cierre de los bits de control del Estado definir el estado lgico de la salida de pines P1B y P1D cuando el mdulo CCP est en el estado de apagado. PSSBD1 0 0 1 PSSBD0 0 1 X PINES ESTADO LGICO 0 1 De alta impedancia (Tri-State)

3.8 MDULOS DE COMUNICACIN DE SERIE

El microcontrolador PIC16F887 tiene varios mdulos independientes de comunicacin en serie y cada uno de ellos puede ser configurado para operar en varios modos diferentes, que las hacen insustituible en muchas situaciones. Recuerde lo que le aconseja acerca de los mdulos CCP que el mismo se aplica aqu. No te cargues con detalles sobre el funcionamiento de todos ellos, slo tienes que seleccionar uno y aprender slo lo que realmente necesita. La USART es uno de los sistemas ms antiguos de comunicacin en serie. Las versiones modernas de este sistema se actualizan y pidi un poco diferente - EUSART.

EUSART

El Mayor Conjunto de Receptor Universal Synchronous Asynchronous transmisor (EUSART) es un mdulo de E / S serie la unidad de comunicacin perifrica. Tambin se conoce como interfaz de comunicaciones en serie (SCI).Contiene todos los generadores de reloj, registros de desplazamiento y los datos de buffers necesarios para realizar una transferencia de datos en serie de forma independiente de la ejecucin del programa principal. Como su nombre indica, aparte de usar el reloj para la sincronizacin, este mdulo tambin puede establecer conexin asncrona, que le hace nico para algunas de las aplicaciones. Por ejemplo, en caso de que es difcil o imposible para proporcionar canales especiales para la transferencia de reloj y de datos (por ejemplo, la radio o el control remoto de infrarrojos), el mdulo EUSART es definitivamente la mejor solucin posible.
El sistema EUSART integrado en el microcontrolador PIC16F887 tiene las siguientes caractersticas:

Full-duplex asncrono de transmisin y recepcin; Programable 8 - o caracteres anchos 9-bit; De deteccin de direcciones en el modo de 9-bit; Desbordamiento de bfer de entrada de la deteccin de errores, y Half-duplex de comunicacin en modo sncrono. EUSART en modo asncrono
El EUSART transmite y recibe datos utilizando un estndar de no retorno a cero (NRZ) en formato. Como puede verse en la figura a continuacin, este modo no utiliza la seal de reloj, mientras que el formato de datos que estn siendo transferidos es muy sencillo:

Brevemente, cada datos se transfieren de la siguiente manera:

En estado de reposo, la lnea de datos tiene un nivel lgico alto (1); Cada transmisin de datos se inicia con el bit de inicio que siempre es un cero (0); Cada dato es de 8 - o 9-bits de ancho (el bit LSB se transfiere primero), y Cada transmisin de datos termina con el bit de parada, que es siempre un uno (1).

La figura siguiente muestra una forma comn de conectar un microcontrolador PIC con el mdulo EUSART. El circuito RS-232 se utiliza como un convertidor de nivel de tensin.

TRANSMISOR EUSART ASNCRONO

A fin de permitir la transmisin de datos a travs del mdulo EUSART, es necesario configurar este mdulo para funcionar como un transmisor. En otras palabras, es necesario definir el estado de los bits siguientes:

TXEN = 1 - transmisor EUSART se habilita estableciendo el bit TXEN del registro TXSTA. SYNC = 0 - EUSART est configurado para funcionar en modo asncrono limpiando el bit SYNC del registro TXSTA. SPEN = 1 - Al establecer el bit SPEN del registro RCSTA, EUSART est habilitado y el pin TX / CK se configura automticamente como una salida. Si este bit se utiliza simultneamente para alguna funcin analgica, debe ser desactivado por despejar el bit correspondiente del registro ANSEL.

La parte central del transmisor EUSART es el TSR registro de desplazamiento que no es directamente accesible por el usuario. Con el fin de iniciar la transferencia de datos, el transmisor EUSART debe ser habilitada por la configuracin del bit TXEN del registro TXSTA. Los datos que se enven deben ser escrito en el registro TXREG, haciendo as que la siguiente secuencia de eventos que se produzca:

Byte ser inmediatamente transferido al registro de desplazamiento TSR; El registro TXREG queda vaco, lo cual se indica mediante el establecimiento de la TXIF bit de bandera del registro PIR1. Si el bit del registro TXIE PIE1 se establece, entre otras una Rupt se generar. Sin embargo, el indicador se establece con independencia de que uno entre Rupt est habilitada o no y que no se puede borrar por software, pero al escribir nuevos datos en el registro TXREG. La electrnica de control "empuja" los datos hacia el pin TX en sincronizacin con el reloj interno: bit de START (0) ...los datos ... Bit de parada (1). Cuando la ltima abandona el registro TSR, el bit del registro TRMT TXSTA se ajusta automticamente. Si el registro TXREG ha recibido un dato nuevo carcter en el entretanto, todo el procedimiento se repiti inmediatamente despus del bit de parada del carcter anterior se ha transmitido.

La transferencia de datos de 9-bit se habilita estableciendo el bit TX9 del registro TXSTA. El bit TX9D del registro TXSTA es el noveno bit de datos y la ms significativa. Cuando la transferencia de 9 - bits de datos, el bit de datos TX9D debe estar escrito antes de escribir los 8 bits menos significativos en el

registro TXREG. Los nueve bits de datos se transfieren al desplazamiento TSR registrar inmediatamente despus de la escritura TXREG es completa.

EUSART RECEPTOR ASNCRONO

Similar a la activacin del transmisor EUSART, con el fin de permitir que el receptor es necesario para configurar los bits siguientes:

CREN = 1 - receptor EUSART se habilita estableciendo el bit CREN del registro RCSTA; SYNC = 0 - EUSART est configurado para funcionar en modo asncrono limpiando el bit SYNC almacenado en el registro TXSTA, y SPEN = 1 - Al establecer el bit SPEN del registro RCSTA, EUSART est habilitado y el pin RX / DT se configura automticamente como una entrada. Si este bit se utiliza simultneamente para alguna funcin analgica, debe ser desactivado por despejar el bit correspondiente del registro ANSEL.

Cuando este primer paso y necesario se lleva a cabo y el bit de inicio se detecta, los datos se transfieren al registro de desplazamiento RSR a travs del pasador RX. Cuando el bit de parada se ha recibido, ocurre lo siguiente:

Los datos se envan automticamente al registro RCREG (si est vaco); El RCIF bit de bandera est establecida y una interrupcin, si est habilitada por el bit RCIE del registro PIE1 ocurre,.Al igual que en el transmisor, el bit de flag se borra automticamente al leer el registro RCREG. Tenga en cuenta que se trata de un registro de dos caracteres FIFO (primero en entrar, primero en salir) que permite una recepcin simultnea de dos bytes de datos; SiInm el registro RCREG est ocupado (contiene dos bytes) y el registro de desplazamiento detecta poco nueva parada, el OERR bit de desbordamiento se establecer. En este caso, unos nuevos datos procedentes se pierde, y el bit OEER debe ser limpiado por el software. Se lleva a cabo en la limpieza y reposicin del bit CREN; Nota: no es posible recibir nuevos datos en la medida que el bit OERR se establece. Si el bit de parada es accionado bajo (0), el bit FERR del registro RCSTA detectar recibir el error se establecer, y

Para permitir la recepcin de 9-bit de datos, es necesario para establecer el bit RX9 del registro RCSTA. RECIBIR LA DETECCIN DE ERRORES
Hay dos tipos de errores que el microcontrolador puede detectar automticamente. El primero se llama error de trama y se produce cuando el receptor no detecta el bit de parada en el momento esperado. Tal error se indica mediante el bit FERR del registro RCSTA. Si este bit est establecido, los ltimos datos recibidos pueden ser incorrectos. Aqu hay varias cosas importantes a saber:

Un error de trama no genera una interrupcin por s mismo; Si este bit est establecido, los ltimos datos recibidos tiene un error; Un error de trama (bit) no impide la recepcin de nuevos datos; El bit FERR se elimina mediante la lectura de los datos recibidos, lo que significa que el registro debe hacerse antes de la lectura de datos, y El bit FERR no se puede borrar por software. Si es necesario, se puede borrar en la limpieza de la broca SPEN del registro RCSTA. Es al mismo tiempo har que el sistema EUSART entero a poner a cero.

Hay dos tipos de errores que el microcontrolador puede detectar automticamente. El primero se llama error de trama y se produce cuando el receptor no detecta el bit de parada en el momento esperado. Tal error se indica mediante el bit FERR del registro RCSTA. Si este bit est establecido, los ltimos datos recibidos pueden ser incorrectos. Aqu hay varias cosas importantes a saber:

Un error de trama no genera una interrupcin por s mismo; Si el bit FERR se establece, los ltimos datos recibidos tiene un error; Un error de trama (bit) no impide que los nuevos datos de que se reciba; El bit FERR se elimina mediante la lectura de los datos recibidos, lo que significa que el registro debe hacerse antes de la lectura de datos, y El bit FERR no se puede borrar por software. Si es necesario, se puede borrar en la limpieza de la broca SPEN del registro RCSTA. Es al mismo tiempo har que el sistema EUSART entero a poner a cero.

Otro tipo de error se llama error de desbordamiento. Como se mencion anteriormente, la memoria FIFO puede recibir dos bytes. Un error de desbordamiento se generar en el intento de recibir el tercer personaje. En pocas palabras, no hay espacio para otro byte una y un error es inevitable. Cuando esto sucede, el bit OERR del registro RCSTA se establece. Las consecuencias son las siguientes:

Los datos ya almacenados en los registros FIFO (dos bytes) puede ser normalmente leer; No hay datos adicionales se recibirn hasta el bit OERR se borra, y Este bit no se accede directamente. Para limpiarlo, es necesario borrar el bit CREN del registro de RCSTA o restablecer el sistema EUSART en la limpieza de toda el bit SPEN del registro RCSTA. 9-BIT de recepcin de datos
Adems de recibir estndar de 8-bits de datos, el sistema EUSART soporta 9-bits de recepcin de datos. En el lado de transmisin, el noveno bit es "adjunto" en el byte original directamente antes de que el bit de STOP. En el lado de recepcin, cuando el bit RX9 del registro RCSTA se establece, el noveno bit de datos se escriben automticamente en el bit RX9D del mismo registro. Despus de recibir este byte, es necesario tener cuidado de cmo leer los bits de los bits de datos RX9D deben leerse antes de la lectura de 8 bits menos significativos del registro RCREG. De lo contrario, el bit de datos novena se borrar.

De deteccin de direcciones
Cuando el bit Adden del registro RCSTA est establecido, el mdulo EUSART es capaz de recibir datos slo 9-bits, mientras que todos los datos de 8-bits ser ignorada. Aunque parece una restriccin, estos modos permiten la comunicacin en serie entre varios microcontroladores. El principio de funcionamiento es simple. Dispositivo maestro enva una base de datos de 9 bits que representan la direccin del microcontrolador esclavo. Sin embargo, todos ellos deben tener el conjunto de bits Adden ya que permite la deteccin de direccin. Todos los microcontroladores esclavos, compartiendo la misma lnea de transmisin, recibir estos datos (direccin) y comprobar automticamente si coincide con su propia direccin. El dispositivo esclavo en el que el partido de direccin se produce, debe desactivar la deteccin de la direccin en la limpieza de su granito de arena Addendum.

El dispositivo maestro sigue enviando 8-bits de datos. Todos los datos que pasan a travs de la lnea de transmisin ser recibido por el mdulo EUSART dirigida nicamente. Cuando el ltimo byte se ha recibido, el dispositivo esclavo debe establecer el bit Adden con el fin de activar la deteccin de la nueva direccin.

TXSTA Registrarse

CSRC - bits Reloj de seleccin de fuente - se utiliza para la seleccin de la fuente de reloj. Se utiliza slo en modo sncrono.

1 - el modo maestro. Reloj se genera internamente a partir de generador de Baud Rate. 0 - el modo esclavo. Reloj se genera a partir de una fuente externa. 1 a 9 bits de transmisin de datos a travs del sistema EUSART. 0 a 8 bits de transmisin de datos a travs del sistema EUSART. 1 - Transmisin activada. 0 - Transmisin desactivada. 1 - EUSART funciona en modo sncrono. 0 - EUSART funciona en modo asncrono.

TX9 - 9-bit de habilitacin de transmisin poco

TXEN - Transmitir Bit de habilitacin

SYNC - Seleccionar el modo de EUSART bits

SENDB - Enviar poco vacaciones de caracteres slo se utiliza en modo asncrono y cuando sea necesario para observar el estndar de bus LIN.

1 - Vacaciones de la transmisin de caracteres est habilitada. 0 - transmisin carcter de salto se ha completado.

BRGH - Tasa de bits de alta seleccin de baudios determina la velocidad de transmisin en modo asincrnico. No afecta a EUSART en modo sncrono.

1 - EUSART funciona a alta velocidad. 0 - EUSART funciona a baja velocidad. 1 - TSR registro est vaco. 0 - TSR registro est lleno.

TRMT - Registro de desplazamiento de transmisin bit de estado

TX9D - noveno bit de datos de transmisin se puede utilizar como direccin o bit de paridad.

RCSTA Registrarse

SPEN - Puerto serie Bit de habilitacin

1 - Puerto serie habilitado. RX / DT y los pines TX / CK se configuran automticamente como entrada y salida, respectivamente. 0 - Puerto serie desactivado. 1 - Recepcin de datos 9-bits a travs del sistema EUSART. 0 - Recepcin de 8-bits de datos a travs del sistema EUSART.

RX9 - 9-bit Recibe Bit de habilitacin

SREN - poco ReceiveEnable solo se utiliza slo en modo sncrono cuando el microcontrolador funciona como un maestro.

1 - Recepcin sola habilitado. 0 - Recepcin sola discapacidad.

CREN - recepcin continua Bit de habilitacin acta de forma diferente dependiendo del modo de EUSART. Modo asncrono:

1 - El receptor activado. 0 - Receptor desactivado. 1 - Habilita la recepcin continua hasta que el bit CREN se borra. 0 - Deshabilita recepcin continua. 1 - Permite la deteccin de direccin de 9-bit de datos reciben.

El modo sncrono:

Addendum - Direccin Detectar Bit de habilitacin slo se utiliza en modo de deteccin de la direccin.

0 - Desactiva la deteccin de la direccin. El noveno bit se puede utilizar como un bit de paridad. 1 - error de trama se detecta en recibir. 0 - No hay error de trama. 1 - Al recibir, error de desbordamiento se detecta. 0 - No hay error de desbordamiento.

FERR - Enmarcados bit de error

OERR - bit de error de desbordamiento.

RX9D - noveno bit de datos recibidos se pueden utilizar como direccin o bit de paridad. El siguiente diagrama muestra tres palabras que aparecen en la entrada RX. El bfer de recepcin se lee despus de la tercera palabra, que la broca OEER (bit error de desbordamiento) se establezca.

EUSART generador de tasa de baudios (BRG)


Si usted mira cuidadosamente el receptor EUSART asncrono o un diagrama del transmisor, se ver que tanto el uso de una seal de reloj del temporizador local de BRG para la sincronizacin. La misma fuente de reloj tambin se utiliza en modo sncrono. El temporizador BRG se compone de dos registros de 8-bits haciendo un 16-bit del registro.

Un nmero escrito a estos dos registros determina la tasa de baudios. Adems, tanto el bit BRGH del registro TXSTA y el bit de la BRGH16 BAUDCTL registro afectar frecuencia de reloj. Tablas en las pginas siguientes contienen los valores que deben ser escritos a la SPBRG Registro de 16 bits y se asignan a las funciones SYNC, BRGH y BRGH16 bits en el fin de obtener algunas de las velocidades de transmisin estndar. Utilice la siguiente frmula para determinar la velocidad de transmisin.

Ejemplo
Para que un dispositivo en modo asncrono con una frecuencia de reloj de 16 MHz y velocidad de transmisin deseada de 9600, el generador de 8-bit Velocidad en baudios (BRG) se calcula como sigue:

BAUDCTL Registrarse

ABDOVF - Auto-deteccin de baudios bits de desbordamiento slo se utiliza en modo asncrono durante la deteccin de la velocidad de transmisin.

1 - Auto-temporizador de transmisin se ha desbordado. 0 - Auto-temporizador de transmisin no se ha desbordado. 1 - El receptor est inactivo. 0 - bit de START se ha recibido y recibe los datos est en curso.

RCIDL - Recibir bits Bandera de inactividad slo se utiliza en modo asncrono.

SCKP - bits sncrono polaridad del reloj de seleccin. El estado lgico de este bit vara en funcin del modo EUSART est activo. Modo asncrono:

1 - Transmisin de datos invertidos al pin RC6/TX/CK. 0 - Transmisin de datos no invertidas en la clavija de RC6/TX/CK. 1 - Sincronizacin en el borde de subida del reloj. 0 - Sincronizacin del reloj en el borde que cae.

El modo sncrono:

BRG16 de 16-bit poco generador de velocidad en baudios - determina si el registro SPBRGH ser utilizada, es decir, si el temporizador BRG tendr 8 o 16 bits.

1 a 16 bits generador de velocidad en baudios se utiliza. 0 a 8 bits generador de velocidad en baudios se utiliza. 1 - El receptor espera un flanco descendente en el pin RC7/RX/DT para despertar al microcontrolador del modo de suspensin. 0 - El receptor funciona normalmente. 1 - Auto-baudios modo de deteccin est activado. El bit se borra automticamente en la deteccin de la velocidad de transmisin. 0 - Auto-modo de deteccin de baudios est desactivado.

EUA despertador Bit de habilitacin

ABDEN - Auto-deteccin de baudios Activar bit se utiliza slo en modo asncrono.

Vamos a hacerlo en mikroBasic ...

' In this example, internal EUSART module is initialized and set to send back the ' message immediately after receiving it. Baud rate is set to 9600 bps. The pro 'gram uses UART library routines UART1_init(), UART1_Write_Text(), UART1_Data_Ready(), 'UART1_Write() and UART1_Read(). dim uart_rd as byte main: ANSEL,ANSELH = 0 CM1CON0.C1ON = 0 CM2CON0.C2ON = 0 UART1_Init(9600) bps Delay_ms(100) stable UART1_Write_Text("Start") while 1 if (UART1_Data_Ready() uart_rd = UART1_Read() end if UART1_Write(uart_rd) wend ... En Corto
La transmisin de datos a travs de la comunicacin asncrona EUSART:

' Configure AN pins as digital ' Disable comparators ' Initialize UART module at 9600 ' Wait for UART module to become ' Endless loop ' If data is received, ' read it, ' and send it back via UART

1. La velocidad de transmisin deseada debe establecerse mediante el uso de los bits BRGH (TXSTA registro) y BRG16 (BAUDCTL registro) y registra SPBRGH y SPBRG. 2. El bit SYNC (TXSTA registro) debe ser limpiado y el bit SPEN debe ser ajustada (RCSTA registro) a fin de habilitar el puerto en serie. 3. El bit TX9 del registro TXSTA se deben establecer en la transmisin de datos de 9 bits. 4. La transmisin de datos se habilita estableciendo el bit TXEN del registro TXSTA. El bit TXIF del registro PIR1 se ajusta automticamente. 5. Tanto poco TXIE del registro PIE1 y los bits GIE y PEIE del registro INTCON deben establecerse para que la broca TXEN para causar una interrupcin. 6. Valor del noveno bit debe ser escrito en el bit del registro TX9D TXSTA en la transmisin de datos de 9 bits. 7. La transmisin se inicia escribiendo 8-bits de datos al registro TXREG. Recepcin de datos a travs de la comunicacin asncrona EUSART:

1. Velocidad de transmisin se debe establecer mediante el uso de los bits BRGH (TXSTA registro) y BRG16 (BAUDCTL registro) y registra SPBRGH y SPBRG. 2. El bit SYNC (TXSTA registro) debe ser limpiado y el bit SPEN debe ser ajustada (RCSTA registro) a fin de habilitar el puerto en serie. 3. Tanto el bit del registro RCIE PIE1 y los bits GIE y PEIE del registro INTCON se debe establecer cuando es necesario para permitir la recepcin de datos para provocar una interrupcin. 4. El bit RX9 del registro RCSTA se debe establecer el 9 de bits de datos reciben. 5. La recepcin de datos se habilita estableciendo el bit CREN del registro RCSTA. 6. El registro RCSTA debe ser ledo con el fin de comprobar si se han producido algunos errores durante la recepcin. El noveno bit ser almacenado en este registro en la recepcin de datos de 9-bit. 7. La recibida de 8-bits de datos almacenados en el registro RCREG debe ser ledo. Ajuste del modo de deteccin de direcciones: 1. Velocidad de transmisin se debe establecer mediante el uso de los bits BRGH (TXSTA registro) y BRG16 (BAUDCTL registro) y registra SPBRGH y SPBRG. 2. El bit SYNC (TXSTA registro) debe ser limpiado y el bit SPEN debe ser ajustada (RCSTA registro) a fin de habilitar el puerto en serie. 3. El bit del bit RCIE PIE1 as como los bits GIE y PEIE del registro INTCON se debe establecer cuando es necesario para permitir la recepcin de datos para provocar una interrupcin. 4. El bit RX9 del registro RCSTA debe ser fijado. 5. El Addendum del registro RCSTA se debe establecer, lo que permite que los datos para ser reconocidos como la direccin. 6. La recepcin de datos debe ser habilitada por establecer el bit CREN del registro RCSTA. 7. Tan pronto como los datos de 9-bits es recibido, el bit RCIF del registro PIR1 se establece automticamente. Si est activado, se produce una interrupcin. 8. El registro RCSTA debe ser ledo con el fin de comprobar si se han producido algunos errores durante la recepcin. El RX9D noveno bit se establece siempre. 9. La recibida de 8-bits de datos almacenados en el registro RCREG debe ser ledo. Se debe comprobar si la combinacin de estos bits coincide con la direccin predefinida. Si la coincidencia ocurre, es necesario limpiar el bit Adden del registro RCSTA, que permite a 8-bits de datos para ser recibido.

MAESTRO SINCRNICO mdulo de puerto COM


El mdulo MSSP (Master puerto en serie sncrona) es una herramienta muy til, pero al mismo tiempo, uno de los circuitos ms complejos dentro del microcontrolador. Permite la comunicacin de alta velocidad entre el microcontrolador y otros perifricos u otros microcontroladores mediante la entrada de unos pocos / lneas de salida (tres o mximo cuatro). Por lo tanto, se utiliza comnmente para conectar el microcontrolador a las pantallas LCD, convertidores A / D, EEPROM serie, registros de desplazamiento, etc La principal caracterstica de este tipo de comunicacin es que es sncrono y adecuados para uso en sistemas con un solo maestro y uno o ms esclavos. El dispositivo maestro contiene un generador de velocidad en baudios y suministra todos los dispositivos en el sistema con el reloj. Los dispositivos esclavos pueden de este modo eliminar el circuito de reloj generacin interna. El mdulo MSSP puede funcionar en uno de dos modos:

Modo SPI (Serial Peripheral Interface), y 2 I C de modo (Inter-Integrated Circuit).

Como puede verse en la figura a continuacin, un mdulo MSSP representa slo un medio de el hardware necesario para establecer comunicacin en serie, mientras que la otra mitad se almacena en el dispositivo intercambia datos con. A pesar de que los mdulos en ambos extremos de la lnea son los mismos, sus modos son esencialmente diferentes en funcin de si operan como un maestro o un esclavo:

Si el microcontrolador a ser los controles programados a otro dispositivo o circuito (perifricos), debe ser configurada para funcionar como un maestro. Se generar reloj cuando sea necesario, es decir, slo cuando la recepcin y transmisin de datos son requeridos por el software. Obviamente, es exclusivamente del dispositivo principal para establecer la conexin o no.

En caso contrario, si el microcontrolador a programar es un perifrico de algn dispositivo ms complejo (por ejemplo, un PC), entonces debe funcionar como un esclavo. Como tal, siempre tiene que esperar a peticin de transmisin de datos para ser enviada por el dispositivo maestro.

MODO SPI
El modo SPI permite 8 bits de datos a transmitir y recibir simultneamente con 3 entradas / lneas de salida:

SDO - salida de datos serial - lnea de transmisin; SDI - datos serie en - lnea de recepcin, y SCK - Serial Clock - lnea de sincronizacin.

Aparte de estas tres lneas, existe la cuarta lnea (SS), as que puede ser utilizado si los intercambios microcontrolador datos con varios dispositivos perifricos. Refirase a la figura de abajo. SS - Slave Select - es una lnea adicional que se utiliza para la seleccin de un dispositivo especfico. Slo est activo cuando el microcontrolador est en modo esclavo, es decir, cuando la externa - dispositivo maestro requiere el intercambio de datos. El mdulo MSSP utiliza en el registro total de 4 cuando est en modo SPI:

SSPSTAT - registro de estado SSPCON - registro de control SSPBUF - bfer registro SSPSR - registro de desplazamiento (no disponible directamente)

Los tres primeros registros son de escritura / lectura y se puede cambiar en cualquier momento, mientras que el cuarto registro, ya que no est disponible, se utiliza para convertir los datos en "serial" en formato.

Como puede verse en la figura a continuacin, la parte central del mdulo SPI se compone de dos registros conectados a las patillas para la recepcin, transmisin y sincronizacin.

El registro de desplazamiento (SSPRS) est directamente conectado a los pines del microcontrolador y utilizado para la transmisin de datos en serie. El registro SSPRS tiene su entrada y salida as como los datos pueden ser desplazado dentro y fuera. En otras palabras, cada bit que aparece en la entrada (lnea de recepcin) simultneamente se desplaza a otro poco hacia la salida (lnea de transmisin). El registro SSPBUF (Buffer) es parte de la memoria utilizada para almacenar temporalmente los datos antes de ser enviado o inmediatamente despus de ser recibido. Despus de los 8 bits de datos se han recibido, el byte se mueve desde los SSPRS el registro SSPBUF. Tal operacin permite que el siguiente byte para ser recibido antes de leer los datos que acaba de ser recibidos. Cualquier escritura en el registro SSPBUF durante la transmisin / recepcin de datos se tendr en cuenta. Desde el punto de vista de los programadores, este registro es considerado el ms importante como ser las ms solicitadas. Es decir, si tenemos en cuenta la configuracin del modo por un momento, la transferencia de datos a travs de SPI en realidad viene a escribir y leer datos desde y hacia este registro, mientras que otros 'de acrobacias como los registros de movimiento se realiza automticamente por el hardware.

' In this example, PIC microcontroller (master) sends data byte to peripheral chip

' (slave) via SPI. Program uses SPI library functions SPI1_init() and SPI1_Write. dim Chip_Select as sbit at PORTC.RC0 ' Peripheral chip_select line is connected to RC0 dim Chip_Select_Direction as sbit at TRISC.0 ' TRISC0 bit defines RC0 pin to be input or output dim value as unsigned int ' Data to be sent (value) is of unsigned int type main: ANSEL, ANSELH = 0 ' All I/O pins are digital TRISB.0 = 1 TRISB.1 = 1 ' Configure RB0, RB1 pins as inputs Chip_Select = 0 ' Select peripheral chip Chip_Select_Direction = 0 ' Configure the CS# pin as an output SPI1_Init() ' Initialize SPI module SPI1_Write(value) ' Send value to peripheral chip ... En breve
Recepcin / transmisin de datos utilizando el modo SPI
Antes de comenzar la inicializacin de SPI, es necesario especificar varias opciones:

Modo Master TRISC.3 = 0 (el pin SCK es la salida del reloj); Modo esclavo TRISC.3 = 1 (el pin SCK es la entrada de reloj); Los datos de entrada de fase media o final del tiempo de salida (el bit SMP del registro SSPSTAT); El borde del reloj (el bit CKE del registro SSPSTAT); Velocidad en baudios, bits de SSPM3-SSPM0 del registro SSPCON (slo en modo master); Esclavo modo de seleccin, los bits SSPM3-SSPM0 del registro SSPCON (slo modo Esclavo).

El mdulo SPI se pone en marcha activando el bit SSPEN:

Paso 1. Los datos que se transfieren deben ser por escrito a la SSPBUF registro tampn. Si el mdulo SPI funciona en modo maestro, el microcontrolador automticamente realice los siguientes pasos 2, 3 y 4. Si el mdulo SPI funciona como esclavo, el microcontrolador no realizar estos pasos hasta que el pin SCK detecta seal de reloj.

Paso 2. Los datos se mueve ahora en el registro SSPSR y el registro SSPBUF no se borra.

Paso 3. Estos datos se desplaza a la patilla de salida (el bit MSB primero), mientras que el registro est simultneamente siendo llenado con los bits a travs de la patilla de entrada. En el modo maestro, el propio microcontrolador genera el reloj, mientras que el modo esclavo usa un reloj externo (el pin SCK).

Paso 4. El registro es SSPSR completo una vez que 8 bits de datos se han recibido. Se indica al establecer el bit BF del registro SSPSTAT y el bit SSPIF del registro PIR1. Los datos recibidos (un byte) se desplaza automticamente de la SSPSR registrarse en el registro SSPBUF.Dado que la transmisin de datos en serie se realiza automticamente, el resto del programa se ejecuta normalmente, mientras que la transmisin de datos est en curso. En este caso, la funcin del bit SSPIF es generar una interrupcin cuando una transmisin de bytes se ha completado.

Paso 5. Finalmente, los datos almacenados en el registro SSPBUF est listo para usar y debe ser movido a un registro deseado.

I 2 MODO C
I C modo (Inter IC Bus) El modo I2C (Inter IC bus) es especialmente adecuado cuando el microcontrolador y un circuito integrado, que el microcontrolador debe intercambiar datos con, estn dentro del mismo dispositivo. Por lo general, otro microcontrolador o un circuito especializado, integrado barata que pertenece a la nueva generacin de los llamados 'componentes perifricos inteligentes "(mdulos de memoria, sensores de temperatura en tiempo real, relojes, etc) Al igual que en la comunicacin serie en modo SPI, la transferencia de datos en modo I2C es sncrona y bidireccional. Esta vez slo dos pines se utilizan para la transmisin de datos. Se trata de la SDA (Serial Data) y los pines SCL (Serial Clock). El usuario debe configurar estos pines como entradas o salidas por medio de los bits TRISC. Mediante la observacin de reglas particulares (protocolos), de este modo permite hasta 122 diferentes componentes para ser conectados simultneamente de una manera sencilla mediante el uso de slo dos valiosos pines I / O. Echemos un vistazo a cmo funciona: Reloj, necesario para sincronizar el funcionamiento de ambos dispositivos, siempre se genera por el dispositivo maestro (un microcontrolador) y su frecuencia afecta directamente a la tasa de baudios. A pesar de que existe un protocolo que permite la mxima frecuencia de reloj de 3,4 MHz (denominado bus I2C de alta velocidad), este libro cubre slo el protocolo de uso ms frecuente de la frecuencia de reloj de la cual est limitada a 100 KHz. No hay limitaciones para la frecuencia mnima. Cuando los componentes del maestro y el esclavo estn sincronizados con el reloj, cada intercambio de datos es siempre iniciada por el maestro. Una vez que el mdulo MSSP se ha habilitado, se espera una condicin de arranque que se produzca. El dispositivo maestro enva primero el bit de inicio (un cero lgico) a travs del pin SDA, a continuacin, una direccin de 7-bits del dispositivo esclavo seleccionado, y finalmente, el bit que requiere datos de escritura (0) o leer (1) al dispositivo . En otras palabras, ocho bits se desplazan al registro SSPSR despus de la condicin de arranque. Todos los dispositivos esclavos que comparten la misma lnea de transmisin simultnea recibir el primer byte, pero slo uno de ellos tiene la direccin para igualar y recibe los datos completos.
2

Una vez que el primer byte ha sido enviado (slo 8-bits de datos son transmitidos), el maestro entra en modo de recepcin y espera a que el reconocimiento del dispositivo esclavo que coincidencia de direccin se ha producido. Si el dispositivo esclavo enva el bit de confirmacin de datos (1), la transferencia de datos se mantendr hasta que el dispositivo maestro (microcontrolador) enva el bit de parada.

Esta es la explicacin ms simple de cmo dos componentes se comunican. Tal un microcontrolador es tambin capaz de controlar las situaciones ms complicadas cuando 1024 diferentes componentes (10-bit de direccin), compartidos por varios dispositivos maestros diferentes, estn conectados. Estos dispositivos se usan muy poco en la prctica y no hay necesidad de discutir ms a fondo. La siguiente figura muestra el diagrama de bloques del mdulo MSSP en el modo I C.
2

El mdulo MSSP utiliza seis registros para la operacin de I C. Algunos de ellos se muestran en la figura anterior:

SSPCON SSPCON2 SSPSTAT SSPBUF SSPSR SSPADD

SSPSTAT Registrarse

SMP bit de la muestra SPI modo maestro - Este bit determina la fase de entrada de datos.

1 - estado lgico se lee al final del tiempo de salida. 0 - estado lgico se lee en el medio del tiempo de salida.

Modo esclavo SPI - Este bit debe ser borrado cuando SPI se emplea en modo esclavo. I modo C (maestro o esclavo)

1 - Control de velocidad de subida desactivado para el modo de velocidad estndar (100 kHz). 0 - Control de Velocidad de giro habilitado para el modo de alta velocidad (400k Hz).

CKE - Edge Reloj Seleccione bit selecciona el modo de sincronizacin. CKP = 0:

1 - Los datos se transfieren en flanco ascendente de pulso de reloj (0 - 1). 0 - Los datos se transfieren en el flanco descendente de pulso de reloj (1 - 0). 1 - Los datos se transfieren en el flanco descendente de pulso de reloj (1 - 0). 0 - Los datos se transfieren en flanco ascendente de pulso de reloj (0 - 1).
2

CKP = 1:

D / A - Datos / bits de la direccin se utiliza en el modo I C solamente.

1 - Indica que el ltimo byte recibido o transmitido los datos. 0 - Indica que el ltimo byte recibido o transmitido es una direccin. 1 - el ltimo bit detectado es el bit de parada. 0 - el ltimo bit detectado no es el bit de parada. 1 - ltimo bit detectado es el bit de inicio. 0 - ltimo bit detectado no es el bit de inicio.
2

P - bit de parada se utiliza en el modo I C solamente.

S - bit de inicio se utiliza en el modo I C solamente.

R / W - Leer bits escritura se utiliza en el modo I C solamente. Este bit contiene la informacin de bit R / W despus del partido la ltima direccin. Este bit slo es vlido desde el partido de la direccin del bit de inicio al lado, bit de parada o no bit ACK. En modo esclavo I C

1 - Lectura de datos. 0 - escritura de datos. 1 - Transmitir en curso. 0 - Transmitir no est en curso. 1 - El registro SSPADD debe ser actualizada. 0 - Direccin en el registro SSPADD es correcta y no necesita ser actualizado.

En el modo I C maestro

UA - bits Actualizacin de la direccin se utiliza en 10-bit de modo I2C solamente.

BF Buffer bit de estado completa Durante la recepcin de datos (en el SPI e I C modos)

1 - Recibe completa. El registro SSPBUF est lleno. 0 - Recibir no es completa. El registro SSPBUF est vaca. 1 - Los datos de transmisin en curso (no incluye los bits ACK y STOP). 0 - Transmitir datos completa (no incluye los bits ACK y STOP).

Durante la transmisin de datos (en el modo I C solamente)

SSPCON Registrarse

Colisin WCOL Escribir Detectar bits

1 - colisin detectada. Escribir en el registro SSPBUF se intent, mientras que las condiciones I2C no eran vlidos para la transmisin de empezar. 0 - No hay colisin. 1 - Un byte se recibe una nueva antes de leer los datos previamente recibidos. Puesto que no hay espacio para recibir nuevos datos, uno de estos dos octetos debe ser compensado. En este caso, los datos almacenados en el registro SSPSR est irremediablemente perdido. 0 - serie de datos se reciben correctamente.

Recibe SSPOV bits de desbordamiento Indicador

SSPEN - puerto serie sncrono Activar bit determina la funcin de micro pines y se inicializa el mdulo MSSP: En modo SPI

1 - Habilita el mdulo MSSP y configura pines SCK, SDO, SDI y SS como pines del puerto serie. 0 - Deshabilita el mdulo MSSP y configura estos pines de E / S del puerto. 1 - Habilita el mdulo MSSP y configura pines SDA y SCL como pines del puerto serie. 0 - Deshabilita el mdulo MSSP y configura estos pines de E / S del puerto.

En el modo I C

CKP - bit de polaridad del reloj de seleccin no se utiliza en el modo I C maestro. En modo SPI

1 - Estado de reposo para el reloj es un alto nivel. 0 - en estado inactivo para el reloj es un nivel bajo. 1 - Activa el reloj. 0 - Mantiene baja del reloj. Se utiliza para proporcionar ms tiempo para la estabilizacin de los datos.

En modo esclavo I C

SSPM3-SSPM0 - sncronos bits de modo Serial Port Seleccionar. SSP modo se determina mediante la combinacin de estos bits:

SSPM3 0 0 0 0 0 0

SSPM2 0 0 0 0 1 1

SSPM1 0 0 1 1 0 0

SSPM0 0 1 0 1 0 1

MODO SPI Master Mode, reloj = Fosc / 4 SPI Master Mode, reloj = Fosc/16 SPI Master Mode, reloj = Fosc/64 SPI Master Mode, reloj = (TMR de salida) / 2 Modo SPI esclavo, SS pin de control activado Modo SPI esclavo, de las SS con discapacidad de control de pines, SS puede ser utilizado como pin I / O I C modo esclavo, 7 bits de la direccin utilizada I C modo de esclava, de 10-bits de direcciones utilizado I C Master Mode, reloj = Fosc / [4 (SSPAD +1)] Mscara utilizada en modo esclavo I C No se utiliza I C modo master controlado No se utiliza No se utiliza I C modo de esclava, de 7-bits de direcciones utilizado, iniciar y detener los bits permiten interrumpir I C modo de esclavos, la direccin de 10 bits utilizada, iniciar y detener los bits permiten interrumpir

0 0 1 1 1 1 1 1 1

1 1 0 0 0 0 1 1 1

1 1 0 0 1 1 0 0 1

0 1 0 1 0 1 0 1 0

SSPCON2 Registrarse

GCEN - Convocatoria general Bit de habilitacin En modo esclavo I C slo

1 - Habilita la interrupcin cuando una direccin de llamada general (0000h) se recibe en el SSPSR. 0 - Direccin General de llamada desactivado.

ACKSTAT - Reconocer bit de estado En I C maestro de transmisin slo en el modo

1 - Reconocer que no se ha recibido de esclavos. 0 - se ha recibido informacin de esclavo.

ACKDT - Reconocer bit de datos En I C Maestro modo de recepcin nica

1 - no reconoce. 0 - Reconocer.

ACKEN - Reconocer la secuencia Bit de habilitacin En I C Maestro modo de recepcin

1 - Iniciar la condicin de reconocer a la SDA y SCL pines y transmitir los bits de datos ACKDT. Se borra automticamente por el hardware. 0 - Reconocer condicin no se inicia.

RCEN - Recibir Bit de habilitacin En modo I C nico Maestro

1 - Permite la recepcin de datos en el modo I C. 0 - Recibir desactivado.

PEN - Habilitar la condicin de STOP bits En modo I C nico Maestro

1 - Inicia la condicin de STOP en los pines SDA y SCL. Este bit se borra automticamente por el hardware. 0 - condicin de STOP no se inicia.

RSEN - poco repetida condicin de START Activado En modo I C nico maestro

1 - condicin de START aparicin de estos repetidos inici en los pines SDA y SCL. Este bit se borra automticamente por el hardware. 0 - condicin de START repetida no se inicia.

SEN - condicin de START Habilitado / bit Stretch Activado En modo I C nico Maestro

1 - Inicia la condicin de START en los pines SDA y SCL. Este bit se borra automticamente por el hardware. 0 - condicin de START no se inicia.

I 2 C en el modo Maestro
El caso ms comn es que el microcontrolador funciona como un maestro y un componente perifrico como un esclavo. Por eso, este libro cubre slo de este modo. Tambin se considera que la direccin se compone de 7 bits y un dispositivo de destino contiene un solo microcontrolador (maestro nico dispositivo). A fin de permitir mdulo MSSP en este modo, es necesario hacer lo siguiente:

Establecer la velocidad de transmisin (SSPADD registro), desactivar el control de velocidad de respuesta (al establecer el bit SMP del registro SSPSTAT) y seleccione el modo maestro (SSPCON registro). Despus de todos estos preparativos se han terminado y el mdulo se ha activado (SSPCON registro: poco SSPEN), es necesario esperar a que la electrnica interna para indicar que todo est listo para la transmisin de datos, es decir, el bit SSPIF del registro PIR1 est establecido. Este bit debe ser limpiado por el software y despus de que el microcontrolador est listo para intercambiar datos con perifricos.

TRANSMISIN DE DATOS EN EL MODO MAESTRO I2C


La transmisin de datos en el pin SDA se inicia con una lgica cero (0) que aparece en la configuracin del bit SEN del registro SSPCON2. An est activado, el microcontrolador tiene que esperar un cierto tiempo antes de que comience la comunicacin. Es la llamada "condicin de arranque" en la que los preparativos y controles internos se llevan a cabo. Si todas las condiciones se cumplen, el bit de la SSPIF PIR1 se establece y transmisin de datos se inicia tan pronto como el registro SSPBUF est cargado.

Mximo 112 circuitos integrados dispositivos esclavos) al mismo tiempo pueden compartir la misma lnea de transmisin. El primer byte de datos enviada por el dispositivo maestro contiene la direccin para que coincida con slo un dispositivo esclavo. Todas las direcciones se muestran en las hojas de datos respectivas. El octavo bit del primer byte de datos se especifica la direccin de la transmisin de datos, es decir, si el microcontrolador es para enviar o recibir datos. En este caso, el octavo bit se borra a la lgica cero (0), lo que significa que se trata de transmisin de datos.

Cuando se produce coincidencia de direccin, el microcontrolador tiene que esperar a que el bit de reconocimiento de datos. El dispositivo esclavo reconoce coincidencia de direccin en la limpieza de la broca ASKSTAT del registro SSPCON2. Si el partido ha producido correctamente, todos los bytes de datos se transmiten en la misma forma. La transmisin de datos termina configurando el bit SEN del registro SSPCON2. La condicin de parada se produce, que permite el pin SDA para recibir impulsos: Inicio - Direccin - Reconocimiento - Dato - Reconocimiento de datos .... - Reconocimiento - Detente!

Los datos de recepcin en la que el Modo 2 C Maestro


Preparaciones para la recepcin de datos son similares a los de transmisin de datos, con excepcin de que el ltimo bit del primer byte enviado (direccin que contiene) se ajusta a uno lgico (1). Se especifica que el maestro espera recibir los datos desde el dispositivo esclavo direccionado. Vamos a ver lo que sucede dentro del microcontrolador: Despus de los preparativos internos estn terminadas y el bit de inicio est establecida, el dispositivo esclavo inicia el envo de un byte a la vez. Estos bytes se almacenan en el registro SSPSR serie. Cada dato es, despus de recibir el octavo bit ltimo, cargado al registro SSPBUF desde donde se puede leer. La lectura de este registro hace que el bit de reconocimiento que se envan automticamente, lo que significa que el dispositivo maestro est listo para recibir nuevos datos. Del mismo modo, la recepcin de datos termina configurando el bit de STOP:

Inicio - Direccin - Reconocimiento - Datos - Reconocer ... - Reconocer los datos - Stop! En esta secuencia de pulsos, el bit de reconocimiento se envan al dispositivo esclavo.

GENERADOR DE VELOCIDAD DE TRANSMISIN


Con el fin de sincronizar la transmisin de datos, todos los eventos que tienen lugar en el pin SDA deben estar sincronizados con un reloj generada en el dispositivo maestro por un oscilador simple cuya frecuencia depende de la frecuencia del microcontrolador oscilador principal, el valor escrito en el registro SSPADD y el actual modo de SPI tambin.

La frecuencia de reloj del modo descrito en este libro depende de cristal de cuarzo seleccionado y el registro SPADD. La siguiente figura muestra la frmula utilizada para calcularlo.

Vamos a hacerlo en mikroBasic ...

' In this example, PIC MCU is connected to 24C02 EEPROM via SCL and SDA pins. The program ' sends one byte of data to the EEPROM address 2. Then, it reads data via I2C from EEPROM ' and sends it to PORTB in order to check if the data has been successfully written. main: ANSEL = ANSELH = PORTB = TRISB = 0 ' All pins are digital. PORTB pins are outputs. I2C1_Init(100000) ' Initialize I2C with desired clock I2C1_Start() ' I2C start signal I2C1_Wr(0xA2) ' Send byte via I2C (device address + W) I2C1_Wr(2) ' Send byte (address of EEPROM location) I2C1_Wr(0xF0) ' Send data to be written I2C1_Stop() ' I2C stop signal Delay_100ms() I2C1_Start() ' I2C start signal I2C1_Wr(0xA2) ' Send byte via I2C (device address + W) I2C1_Wr(2) ' Send byte (data address) I2C1_Repeated_Start() ' Issue I2C signal repeated start I2C1_Wr(0xA3) ' Send byte (device address + R) PORTB = I2C1_Rd(0u) ' Read the data (NO acknowledge) I2C1_Stop()

NOTAS DE INTERS ...


Cuando el microcontrolador se comunica con los componentes perifricos, puede ocurrir que la transmisin de datos falla por alguna razn. En este caso, se recomienda para comprobar el estado de algunos de los bits que puede aclarar el tema. En la prctica, el estado de estos bits se comprueba mediante la ejecucin de un subprograma de corto despus de cada transmisin y recepcin de bytes (por si acaso). WCOL (SPCON, 7) - Si tratas de escribir nuevos datos en el registro SSPBUF, mientras que otro los datos de transmisin / recepcin en curso, el bit WCOL se establecer y el contenido del registro SSPBUF se mantiene sin cambios. Escribir no se produce. Despus de esto, el bit WCOL debe ser limpiado en el software. BF (SSPSTAT, 0) - En el modo de transmisin, este bit se establece cuando la CPU escribe los datos en el registro SSPBUF y permanece establecido hasta el byte en formato de serie se desplaza desde el registro SSPSR. En el modo de recepcin, este bit se establece cuando los datos o la direccin se carga en el registro SSPBUF. Se pone a cero despus de leer el registro SSPBUF.

SSPOV (SSPCON, 6) - En el modo de recepcin, este bit se establece cuando un nuevo byte es recibido por el registro SSPSR a travs de la comunicacin en serie, mientras que los datos recibidos previamente no se ha ledo en el registro SSPBUF todava. Pines SDA y SCL - Cuando el mdulo SSP est habilitado, estos pines se convierten en salidas de desage abierto. Esto significa que deben ser conectados a las resistencias que son, en el otro extremo, conectados a la fuente de alimentacin positiva.

En breve
Recepcin / transmisin de datos en el modo I 2 C
Con el fin de establecer una comunicacin serie en modo I2C, lo siguiente se debe hacer: Configuracin del mdulo y envo de Direccin:

Valor para determinar la velocidad de transmisin debe ser escrito en el registro SSPADD. Control de SlewRate deben apagarse al establecer el bit SMP del registro SSPSTAT. Con el fin de seleccionar el modo Maestro, el valor binario de 1000 se debe escribir en los bits SSPM3-SSPM0 del registro SSPCON1. El bit SEN del registro SSPCON2 (secuencia de START) debe ser fijado. El bit SSPIF se ajusta automticamente al final de la secuencia de arranque cuando el mdulo est listo para funcionar. Se debe ser compensado. Direccin del esclavo debe ser escrito en el registro SSPBUF.

Cuando el byte se enva, el bit SSPIF (interrupcin) se ajusta automticamente despus de recibir el bit de reconocimiento del dispositivo esclavo. Los datos que se envan deben ser escritos para el registro SSPBUF. Cuando el byte se enva, el bit SSPIF (interrupcin) se ajusta automticamente despus de recibir el bit de reconocimiento del dispositivo esclavo. Con el fin de informar al dispositivo Esclavo que la transmisin de datos est completa, la condicin de parada debe ser iniciado por establecer el bit PEN del SSPCON registrarse. Con el fin de permitir la recepcin, el bit RSEN del registro SSPCON2 debe ser fijado. El bit SSPIF indica la recepcin de datos. Cuando se leen los datos desde el registro SSPBUF, el bit ACKEN del registro SSPCON2 debe establecerse con el fin de permitir que el bit de confirmacin para ser enviado. Con el fin de informar al dispositivo Esclavo que la transmisin de datos est completa, la condicin de STOP debe ser iniciado por establecer el bit PEN del SSPCON registrarse.

Los datos de transmisin:

Recepcin de datos:

3.9 Mdulos analgicos


Adems de un gran nmero de E / S digitales en los pins utilizados para la comunicacin con los mdulos perifricos, el PIC16F887 tambin tiene 14 entradas analgicas. Permiten que el microcontrolador a reconocer no slo si un pin es impulsada bajo o alto (0 o 5 V), pero para medir con precisin la tensin y convertirla en valor numrico, es decir, en formato digital. Uno de los mdulos analgicos ms importantes dentro del microcontrolador es un convertidor A / D, que tiene las siguientes caractersticas:

La conversin se realiza aplicando el mtodo de aproximacin sucesiva; Hay 14 entradas separadas analgicos conectados a los pines del microcontrolador del puerto; El convertidor A / D convierte una seal de entrada analgica en un nmero binario de 10-bit; La resolucin, es decir, la calidad de la conversin se puede ajustar para diferentes necesidades mediante la seleccin de referencias de tensin Vref-y Vref +.

Convertidor A / D
A pesar de que el uso de un convertidor A / D parece ser muy complicado, es muy sencilla, ms simple que el uso de mdulos de comunicacin temporizadores y serie, de todos modos.

El funcionamiento del convertidor A / D est en el control de los bits de cuatro registros:

Contiene ADRESH byte alto del resultado de la conversin; Contiene ADRESL byte bajo del resultado de la conversin;

Control de registro ADCON0 0, y ADCON1 registro de control 1.

ADRESH y ADRESL Registros


El proceso de convertir un valor analgico en digital tiene como resultado un nmero de 10-bits que se almacenan en los registros ADRESH y ADRESL. Hay dos formas de manipulacin de este nmero justificacin a la izquierda y derecha que simplifica su uso en gran medida. El formato del resultado de la conversin depende del bit ADFM del registro ADCON1. En caso de que el convertidor A / D no se utiliza, registros ADRESH y ADRESL puede utilizarse como registros de propsito general.

A / D REQUISITOS DE ADQUISICIN
Para el voltaje a ser medido con precisin por medio del convertidor A / D, es necesario para proporcionar un retardo de tiempo determinado entre la seleccin de una entrada analgica y la medicin en s. Este retardo de tiempo se denomina "tiempo de adquisicin" y depende principalmente de la impedancia de la fuente. Existe una ecuacin para calcular este retardo de tiempo con precisin, que en el peor de los casos equivale a aproximadamente 20US. Por lo tanto, si desea que la conversin A / D para ser exactos, no se olvide este pequeo detalle.

ADC perodo de reloj


El tiempo necesario para completar una conversin de un solo bit que se conoce como DAT. Se requiere al menos 1,6 uS. Un total de 10-bits de conversin A / D es un poco ms de lo previsto y que equivale a 11 periodos de TAD. Puesto que tanto la frecuencia de reloj del dispositivo y una fuente de conversin A / D de reloj son especificados por software, es necesario seleccionar una de las combinaciones posibles de los bits ADCS1 y ADCS0 antes de la medicin de la tensin en algunas de las aperturas entradas analgicas. Estos bits se almacenan en el registro ADCON0.

ADC FUENTE DE RELOJ Fosc / 2 Fosc / 8 Fosc/32 Frc

ADCS1

ADCS0

APARATO DE ALTA FRECUENCIA (FOSC) 20 Mhz 8 Mhz 250 nS 1 nos 4 nos 2-6 uS 4 Mhz 500 ns 2 nos 8 nos 2-6 uS 1 Mhz 2 nos 8 nos 32 nos 2-6 uS

0 0 1 1

0 1 0 1

100 ns 400 nS 1,6 uS 2-6 uS

Cualquier cambio de la frecuencia de reloj microcontrolador afectar a la A / D de velocidad de conversin, que puede afectar adversamente el resultado del ADC. El abowe tabla muestra algunas de las posibles frecuencias de reloj del dispositivo, as como la forma en que afectan a la velocidad de la conversin A / D. Los valores en las celdas sombreadas se encuentran fuera del rango recomendado.

CMO USAR EL convertidor A / D?


Con el fin de permitir que el convertidor A / D para funcionar correctamente, as como para evitar resultados inesperados, es necesario considerar la siguiente:

El convertidor A / D no se diferencia entre las seales digitales y analgicas. Con el fin de evitar errores en la medicin o para prevenir el chip se dae, todos los pines de entrada A / D debe configurarse como entradas analgicas antes del proceso de conversin se inicia. Los bits correspondientes se almacenan en el TRIS y ANSEL (ANSELH) registra; Cuando se lee el puerto con entradas analgicas marcadas como CH0-CH13, el estado de los bits correspondientes, es decir, su valor digital ser ledo como un cero lgico (0), y En trminos generales, el proceso de medicin de tensin por el convertidor se basa en la comparacin de la tensin de entrada a una escala immaginary con 1024 grados 10 (2 = 1024). La marca ms baja se denomina la tensin Vref, mientras que el ms alto que se conoce como el voltaje Vref +. La siguiente figura muestra las referencias de voltaje seleccionables y sus valores de corte, as.

Registro ADCON0

ADCS1, ADCS0 - A / D bits de reloj de conversin Seleccionar seleccionar la frecuencia de reloj que se utiliza para la sincronizacin interna del convertidor A / D. Tambin afecta a la velocidad de conversin A / D. ADCS1 0 0 1 1 ADCS2 0 1 0 1 RELOJ Fosc / 2 Fosc / 8 Fosc/32 RC *

Reloj * es generada por el oscilador interno incorporado en el convertidor A / D. CHS3-CHS0 - Analog Channel bits de seleccin de seleccionar un PIN (una entrada analgica) para la conversin A / D, es decir, la medicin de tensin:

CHS3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

CHS2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

CHS1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

CHS0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

CANAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13

PIN RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3 RA5/AN4 RE0/AN5 RE1/AN6 RE2/AN7 RB2/AN8 RB3/AN9 RB1/AN1 0 RB4/AN1 1 RB0/AN1 2 RB5/AN1 3 CVref Vref = 0,6 V

GO / DONE - Conversin A / D bit de estado determina el estado actual de la conversin:

1 - la conversin A / D est en marcha. 0 - conversin A / D es completa. Este bit se borra automticamente despus de completar la conversin A / D. 1 - Un convertidor A / D est habilitado. 0 - convertidor A / D est desactivado.

ADON - A / D El bit permite convertidor A / D.

Vamos a hacerlo en mikroBasic ...

'This example code reads analog value from channel 2 and displays it on PORTB and PORTC 'as a 10-bit binary number. dim adc_rd as word main: ANSEL = 0x04 TRISA = 0xFF ANSELH = 0 I/O TRISC = 0x3F outputs TRISB = 0

' Configure AN2 as an analog pin ' PORTA is configured as an input ' Configure all other AN pins as digital ' Pins RC7 and RC6 are configured as ' PORTB is configured as an output

while 1 temp_res = ADC_Read(2) PORTB = temp_res PORTC = temp_res >> 2 and RC6 wend end.

' Get a 10-bit result of AD conversion ' Send lower 8 bits to PORTB ' Send 2 most significant bits to RC7 ' Remain in the loop

ADCON1 Registrarse

ADFM - un formato de resultados / D Seleccione bits

1 - resultado de la conversin se justifica a la derecha. Seis bits ms significativos del registro ADRESH no se utilizan. 0 - resultado de la conversin est justificado a la izquierda. Por lo menos seis bits significativos del registro ADRESL no se utilizan.

VCFG1 - bit de referencia de voltaje selecciona la fuente de tensin de referencia negativa para el funcionamiento del convertidor A / D.

1 - La Vref patillas se alimenta con tensin de referencia negativa. 0 - tensin de alimentacin de alimentacin Vss se utiliza como una fuente de tensin de referencia negativa.

VCFG0 - bit de referencia de voltaje selecciona la fuente de tensin de referencia positiva para el funcionamiento del convertidor A / D.

1 - La Vref + pasador se alimenta con tensin de referencia positiva. 0 - Fuente de alimentacin Vdd voltaje se utiliza como una fuente de tensin de referencia positiva.

En Corto
Uso de un convertidor A / D
Con el fin de medir el voltaje en un pin de entrada por medio del convertidor A / D, el procedimiento debe realizarse: Paso 1 - Configuracin del puerto:

Escribir un uno lgico (1) a un bit del registro TRIS para configurar el pin apropiado como una entrada. Escribir un uno lgico (1) para un poco de la ANSEL registrarse para configurar el pin apropiado como una entrada analgica. Configuracin de tensin de referencia en el registro ADCON1. Seleccione un reloj de conversin A / D en el registro ADCON0. Seleccione uno de los canales de entrada CH0-CH13 del registro ADCON0. Selecciona el formato de datos utilizando el bit ADFM del registro ADCON1. Habilitar el convertidor A / D al poner el bit ADON del registro ADCON0.

Paso 2 - Configuracin del ADC mdulo:

Paso 3 - Configuracin del ADC interrupcin (opcional):

Borrar el bit ADIF. Establecer los bits ADIE, PEIE y GIE.

Paso 4 - Esperar a que el tiempo de adquisicin requerido para pasar (aproximadamente 20US). Paso 5 - Iniciar la conversin mediante el establecimiento de la GO / bit DONE del registro ADCON0. Paso 6 - Esperar a que la conversin A / D para ser completado.

Compruebe en el programa si el bit GO / DONE se borra o esperar a que un A / D de interrumpir a ocurrir (debe estar previamente habilitado). Leer registros ADRESH y ADRESL.

Paso 7 - Leer los resultados de conversin:

Comparador analgico
En adicin al convertidor A / D, hay otro mdulo, que hasta hace poco se construy slo en circuitos integrados pertenecientes a los componentes electrnicos llamados analgicas. Debido al hecho de que apenas es posible encontrar cualquier dispositivo ms complejo en automticas que de algn modo no utiliza estos mdulos, dos comparadores analgicos de alta calidad estn integrados en el microcontrolador y conectado a sus patas. Cmo funciona un comparador analgico? Bsicamente, el comparador analgico es un amplificador provisto de dos entradas y una salida. Se compara la magnitud de las tensiones en dos entradas. Dependiendo de la entrada tiene un voltaje ms alto (un valor analgico), un cero lgico (0) o un uno lgico (1) (valores digitales) aparecer en su salida:

Cuando el voltaje analgico Vin en-es mayor que en Vin +, la salida del comparador es un nivel digital bajo (0). Cuando el voltaje analgico Vin en + es mayor que en Vin-, la salida del comparador es un nivel digital de alta (1).

El microcontrolador PIC16F887 est provisto de dos comparadores analgicos tales las entradas de los cuales estn conectados a los pines de E / S RA0-RA3, mientras que sus salidas estn conectadas a las RA4 y RA5 los pins. Hay tambin una fuente de tensin de referencia ajustable interna dentro del propio microcontrolador, que se discutir ms adelante. Estos dos mdulos analgicos estn bajo el control de los bits de los registros siguientes:

CM1CON0 est en control de comparador C1; CM2CON0 est en control del comparador C2; CM2CON1 est en control del comparador C2;

FUENTE DE REFERENCIA INTERNA DE VOLTAJE


Uno de los dos voltajes analgicos proporcionados en las entradas del comparador analgico es fija y constante. Este voltaje se conoce como una "tensin de referencia '(Vref) y se pueden generar ya sea por la fuente de voltaje externo o interno. La fuente de voltaje se puede seleccionar a travs de ambos extremos de una red de escalera que consta de 16 resistencias que juntas forman un divisor de tensin.El bit del registro VRSS VRCON se utiliza para seleccionar la fuente de tensin de referencia. La tensin comparador mdulo de referencia proporciona una referencia de tensin generada internamente para los comparadores (CVref). La tensin de referencia CVref tiene 2 rangos, cada uno con 16 niveles de voltaje. Seleccin de la gama est controlado por el bit VRR del registro VRCON. El rango de tensin seleccionado puede ser la salida a la clavija RA2/AN2 utilizando el bit VROE. Adems, los bits VR0-VR3 se utilizan para seleccionar los niveles adecuados de voltaje. Vase la figura a continuacin.

Aunque la idea principal, con el mdulo de tensin de referencia era proporcionar mdulos analgicos con variando la tensin de referencia, ahora se utiliza como un convertidor D / A tambin. Como tal, demostr ser muy til en algunas aplicaciones. Su funcionamiento est bajo el control del registro VRCON.

COMPARADORES e interrumpir
Cada cambio de estado lgico de la salida de cualquier comparador hace que el bit de bandera CMIF del registro PIR a ser fijado. Estos cambios tambin se generar una interrupcin si los bits siguientes se establecen:

El bit CMIE del registro PIE = 1; El bit PEIE del registro INTCON = 1, y El bit GIE del registro INTCON = 1.

Si una interrupcin se activa cuando el microcontrolador est en modo de reposo, cualquier cambio en la salida del comparador har que el microcontrolador para salir de este modo y proceder con la operacin normal.

FUNCIONAMIENTO del comparador en el modo SLEEP


El comparador, si est habilitado antes de que el microcontrolador entra en modo de reposo, se mantiene activa. En caso de que la comparacin no se utiliza para despertar el microcontrolador, se puede desactivar para reducir al mnimo el consumo de energa. Se lleva a cabo en la limpieza de la broca CxON del registro CMxCON0. Para habilitar el comparador de despertar el microcontrolador de un sueo, el bit CxIE del registro IE2 y el bit PEIE del registro INTCON se debe establecer. La primera instruccin que se ejecutar despus de las salidas del microcontrolador del modo de reposo es el que sigue a la instruccin del sueo. Si el bit GIE del registro INTCON se pone, el microcontrolador se ejecutar la rutina de interrupcin en primer lugar.

CM1CON0 Registrarse

Los bits del registro CM1CON0 estn en el control del comparador C1. Se refiere principalmente a la conexin de las entradas. La siguiente figura muestra una parte del mdulo directamente afectados por los bits de este registro.

C1ON - comparador C1 bit de habilitacin permite comparador C1.

1 - comparador C1 est habilitado. 0 - comparador C1 est desactivado.

C1OUT - comparador C1 bit de salida es la salida del comparador C1. Si C1POL = 1 (salida del comparador est invertida)

1 - Salida analgica de tensin en el C1Vin + es inferior a la tensin analgica en C1Vin. 0 - Salida analgica de tensin en el C1Vin + es superior a la tensin analgica en C1Vin. 1 - Salida analgica de tensin en el C1Vin + es superior a la tensin analgica en C1Vin. 0 - Salida analgica de tensin en el C1Vin + es inferior a la tensin analgica en C1Vin. 1 - salida C1OUT comparador est conectada a la clavija C1OUT *. 0 - Salida del comparador slo se utiliza internamente.

Si C1POL = 0 (salida del comparador es no invertida)

Comparador C1OE C1 de habilitacin de salida poco.

* A fin de que el estado del bit C1OUT a estar presente en el pin, dos condiciones deben cumplirse: C1ON = 1 (comparador debe estar habilitado) y el pin correspondiente se debe configurar como una salida (bit TRIS = 0). C1POL - comparador C1 polaridad de salida poco Seleccionar permite que el estado de la salida del comparador C1 a ser invertida.

1 - salida del comparador C1 se invierte. 0 - salida del comparador C1 es no invertida. 1 - entrada no inversora C1Vin + est conectado a la tensin de referencia C1Vref. 0 - entrada no inversora + C1Vin est conectado a la C1IN + pasador.

C1R - comparador C1 de referencia bits Select

C1CH1, C1CH0 - comparador C1 bits de seleccin de canal C1CH1 0 0 1 1 C1CH0 0 1 0 1 COMPARADOR C1VIN ENTRADA Entrada C1Vin-est conectado a la C12IN0 patillas Entrada C1Vin-est conectado a la C12IN1 patillas Entrada C1Vin-est conectado a la C12IN2 patillas Entrada C1Vin-est conectado a la C12IN3 patillas

CM2CON0 Registrarse

Los bits del registro CM2CON0 estn en el control del comparador C2. Similar al caso anterior, figura a continuacin muestra un esquema simplificado del circuito afectado por los bits de este registro.

C2ON - Comparador C2 bit de habilitacin permite comparador C2.

1 - comparador C2 est activado, y 0 - comparador C2 est desactivado.

C2OUT - comparador bit de salida C2 es la salida del comparador C2. Si C2POL = 1 (salida del comparador invertida)

1 - Salida analgica de tensin en el C2Vin + es inferior a la tensin analgica en C2Vin. 0 - Salida analgica de tensin en el C2Vin + es superior a la tensin analgica en C2Vin. 1 - Salida analgica de tensin en el C2Vin + es superior a la tensin analgica en C2Vin. 0 - Salida analgica de tensin en el C2Vin + es inferior a la tensin analgica en C2Vin. 1 - salida C2OUT comparador est conectada a la clavija C2OUT *. 0 - Salida del comparador es interno.

Si C2POL = 0 (salida del comparador es no invertida)

C2OE - C2Output comparador Bit de habilitacin

* A fin de que el estado del bit C2OUT a estar presente en el pin, dos condiciones deben cumplirse: C2ON = 1 (comparador debe estar habilitado) y el pin correspondiente se debe configurar como una salida (bit TRIS = 0). C2POL - comparador C2 polaridad de salida poco Seleccionar permite el estado de la salida del comparador C2 a ser invertida.

1 - comparador la salida C2 se invierte. 0 - comparador C2 es de salida no invertida. 1 - entrada no inversora C2Vin + est conectado a la C2Vref tensin de referencia. 0 - entrada no inversora + C2Vin est conectado a la C2IN + pasador.

C2R - Comparador C2 referencia bits Select

C2CH1, C2CH0 comparador C2 bits de seleccin de canal C2CH1 0 0 1 1 C2CH0 0 1 0 1 COMPARADOR C2VIN ENTRADA Entrada C2Vin-est conectado a la C12IN0 patillas Entrada C2Vin-est conectado a la C12IN1 patillas Entrada C2Vin-est conectado a la C12IN2 patillas Entrada C2Vin-est conectado a la C12IN3 patillas

CM2CON1 Registrarse

Espejo Copia de la broca C1OUT Espejo Copia de la broca C2OUT C1RSEL comparador C1 de referencia Seleccione bits

1 - Variando CVref voltaje se utiliza en la fuente de referencia C1Vref tensin. 0 - 0,6 V de tensin de referencia fijo se utiliza en la fuente de referencia C1Vref tensin. 1 - Variando CVref voltaje se utiliza como una fuente de referencia C2Vref tensin. 0 - 0,6 V de tensin de referencia fija se utiliza como una fuente de referencia C2Vref tensin. 1 - Timer1 puerta utiliza la seal de pin T1G como fuente de reloj. 0 - Timer1 puerta utiliza la salida del comparador SYNCC2OUT como una fuente de reloj. 1 - comparador la salida C2 est sincronizado con el reloj del Timer1. 0 - comparador C2 es de salida de la seal asncrona.

C2RSEL - Comparador C2 referencia bits Select

T1GSS - Timer1 Fuente Puerta Seleccione bits

C2SYNC - Comparador de salida C2 sincronizacin de bits

VRCON Registrarse

Comparador VREN C1 Referencia de tensin Bit de habilitacin

1 - CVref voltaje fuente de referencia habilitada. 0 - Voltaje de fuente de referencia CVref desactivado. 1 - El pasador CVref se alimenta con CVref voltaje de la fuente de referencia. 0 - El pasador CVref se desconecta de CVref fuente de referencia. 1 - fuente de tensin de referencia se establece en la gama baja. 0 - Voltaje de fuente de referencia se ajusta a la gama alta. 1 - fuente de voltaje de referencia est en el intervalo entre Vref + y Vref. 0 - fuente de voltaje de referencia est en el intervalo entre Vdd y Vss (tensin de alimentacin).

VROE comparador de voltaje de referencia C2 Bit de habilitacin

VRR - Rango CVref poco Seleccin

VRSS - Comparador rango Vref seleccin de bit

VR3 - VR0 seleccin de valores CVref Si VRR = 1 (gama baja) Referencia de voltaje se calcula por medio de la frmula: CVref = ([VR3: VR0] / 24) Vdd Si VRR = 0 (gama alta) Referencia de voltaje se calcula por medio de la frmula: CVref = Vdd / 4 + ([VR3: VR0] / 32) Vdd

En Corto
Con el fin de utilizar adecuadamente incorporados en los comparadores, es necesario hacer lo siguiente: Paso 1 - Configuracin del mdulo:

Con el fin de seleccionar el modo adecuado, los bits de los registros y CM1CON0 CM2CON0 debe ser configurado.Interrumpir el cambio de modo debe estar deshabilitada.

Paso 2 - Internos de configuracin de voltaje de la fuente de referencia (cuando se usa). En el registro VRCON es necesario:

Seleccione uno de los dos rangos de tensin con el bit VRR. Configurar necesaria Vref utilizando los bits VR3 - VR0. Establezca el bit VROE si es necesario. Habilitar el voltaje de referencia Vref fuente configurando el bit de VREN.

Frmula utilizada para calcular la tensin de referencia: VRR = 1 (gama baja) CVref = ([VR3: VR0] / 24) VLADDER VRR = 0 (gama alta) CVref = (VLADDER / 4) + ([VR3: VR0] VLADDER/32) Vladder = Vdd o ([Vref +] - [Vref-]) o Vref +

Paso 3 - Inicio de operacin:

Habilitar una interrupcin mediante el establecimiento de bits de CMIE (PIE registro), PEIE y GIE (registro INTCON). Lea los bits C1OUT y C2OUT del registro CMCON. Lea el bit de bandera CMIF del registro PIR. Cuando se establece, este bit debe ser limpiado desde el software.

3,10 reloj oscilador


Con el fin de sincronizar todos los procesos que tienen lugar dentro del microcontrolador, es necesario para proporcionar una seal de reloj. La seal de reloj es generada por un oscilador de reloj. Tan simple como eso. Este microcontrolador cuenta con varios osciladores capaces de operar en diferentes modos. Tiene toda la historia an ms interesante ... Como puede verse en la figura a continuacin, la seal de reloj puede ser generada por externo o interno oscilador incorporado.

El oscilador externo est integrado en el microcontrolador y conectado a los pines OSC1 y OSC2. Se llama "externo", ya que est conectado a los componentes externos tales como cristal de cuarzo, circuito resonador cermico o resistencia condensador. El modo de oscilador es seleccionado por los bits de la palabra de configuracin, cargados en el microcontrolador durante la programacin. El oscilador interno consiste en dos osciladores internos separados: El oscilador HFINTOSC es un oscilador interno de alta frecuencia que opera a 8MHz. El microcontrolador puede usar un reloj generada en esta frecuencia o despus de ser dividida en pre-escalador. El oscilador LFINTOSC es un oscilador interno de baja frecuencia que opera a 31 kHz. El reloj se genera se utiliza para reloj-perro y el momento del encendido, sino que tambin se puede utilizar como un reloj para el funcionamiento del microcontrolador entero.

El bit de reloj del sistema Select (bit SCS) del registro OSCCON se utiliza para la seleccin entre oscilador externo e interno.

OSCCON Registrarse
El registro OSCCON se utiliza para seleccionar y controlar oscilador de reloj y frecuencia de reloj. Contiene los siguientes bits: bits de seleccin de frecuencia (IRCF2, IRCF1, IRCF0), los bits de estado del oscilador (HTS, LTS) y el sistema de bits de control de reloj (OSTA, SCS).

IRCF2-0 -. Internos bits de frecuencia del oscilador seleccionar la combinacin de estos tres bits determina la tasa de pre-escalador, por lo tanto, la frecuencia de reloj del oscilador interno. IRCF2 1 1 1 1 0 0 0 0 IRCF1 1 1 0 0 1 1 0 0 IRCF0 1 0 1 0 1 0 1 0 FRECUENCIA 8 MHz 4 MHz 2 MHz 1 MHz 500 kHz 250 kHz 125 kHz 31 kHz OSC. HFINTOSC HFINTOSC HFINTOSC HFINTOSC HFINTOSC HFINTOSC HFINTOSC LFINTOSC

COSTOS - oscilador de puesta en marcha de tiempo de espera de bits de estado indica que la fuente de reloj se encuentra actualmente en uso. Es de slo lectura.

1 - oscilador de reloj externo est en uso. 0 - Uno de los osciladores de reloj interno est en uso (o HFINTOSC LFINTOSC).

HTS - poco HFINTOSC Estado (8 MHz - 125 kHz) indica si el oscilador interno de alta frecuencia es estable.

1 - HFINTOSC es estable. 0 - HFINTOSC no es estable. 1 - LFINTOSC es estable. 0 - LFINTOSC no es estable.

LTS-bit LFINTOSC estable (31 kHz) indica si el oscilador interno de baja frecuencia es estable.

SCS - reloj del sistema Seleccionar bits selecciona el oscilador para ser utilizado como una fuente de reloj.

1 - oscilador interno se utiliza como una fuente de reloj.

0 - oscilador externo se utiliza como una fuente de reloj. El modo de oscilador se establece por los bits en la Palabra de configuracin escritos en la memoria del microcontrolador durante el proceso de programacin.

MODOS DE EXTERIORES DEL RELOJ


El oscilador externo puede ser configurada para funcionar en varios modos diferentes, lo que significa adems que puede operar a velocidades diferentes y utilizar diferentes componentes para la estabilizacin de la frecuencia. El modo de funcionamiento se selecciona durante el proceso de escribir un programa en el microcontrolador. En primer lugar, es necesario poner en marcha el programa en un PC para ser utilizado para la programacin. Es el programa PICFlash en este caso. Haga clic en el campo del oscilador y seleccione oscilador deseado de la lista desplegable. La informacin sobre estos ajustes se guardan automticamente en la Palabra de Configuracin. Durante el proceso de la programacin del microcontrolador, los bits de la palabra de configuracin se escriben en los registros especiales de la ROM que no estn disponibles para el usuario. Sobre la base de estos bits, el microcontrolador "sabe" qu hacer, a pesar de que no se indica explcitamente en el programa.

El modo de funcionamiento del oscilador se selecciona el programa despus de escribir y compilar estn completos.

Oscilador externo EN MODO CE


El oscilador de reloj externa establecida en modo EC utiliza un oscilador externo independiente como una fuente de reloj. La mxima frecuencia de esta seal de reloj est limitado a 20 MHz..

Las ventajas del oscilador externo cuando establecidos para operar en el modo de CE:

La fuente de reloj externa independiente est conectada a la entrada OSC1 y la OSC2 est disponible como un propsito general I / O; Es posible sincronizar el funcionamiento del microcontrolador con el resto de un panel electrnico; En este modo el microcontrolador inicia la operacin tan pronto como la fuente de alimentacin est encendido. Sin tiempo de retraso es necesario para la estabilizacin de la frecuencia, y Suspensin temporal de la operacin de la fuente de reloj externa automticamente har que el microcontrolador para detener la operacin, dejando todos los datos intactos. Despus de reiniciar el oscilador externo, el microcontrolador procede con la operacin como si nada hubiera sucedido.

Oscilador externo en LP, XT o modo HS

El oscilador externo en LP, XT y modos SA utiliza el oscilador externo dentro del microcontrolador como una fuente de reloj. La frecuencia de reloj depende del cristal de cuarzo o resonadores cermicos

conectados a OSC1 y OSC2 los pins. Dependiendo de la frecuencia de funcionamiento del componente en uso, seleccione uno de los modos siguientes:

Modo LP - (baja potencia) se utiliza para un cristal de cuarzo de baja frecuencia solamente. Este modo est diseado para conducir slo 32.768 cristales kHz normalmente en los relojes de cuarzo. Es fcil de reconocer por su pequeo tamao y forma cilndrica especfico. El consumo de corriente es el menor de los tres modos. XT modo se utiliza para el intermedio frecuencia cristales de cuarzo de hasta 8 Mhz. El consumo de corriente es el medio de los tres modos. Modo HS - (alta velocidad) se utiliza para la alta frecuencia de cristales de cuarzo de ms de 8 MHz. El consumo de corriente es la ms alta de los tres modos.

Resonadores de cermica en el modo XT o HS


Resonadores de cermica son muy similares a los cristales de cuarzo por sus caractersticas y por lo tanto conectado de la misma manera. A diferencia de los cristales de cuarzo, que son ms baratos y los osciladores que las contienen tienen caractersticas un poco ms pobres. Se utilizan para frecuencias de reloj que van desde 100 kHz a 20 MHz.

Oscilador externo en RC y MODO rcio


Componentes para la estabilizacin de la frecuencia son sin duda muy til, pero a veces innecesaria. En la mayora de los casos, el oscilador puede operar a frecuencias que no estn definidas con precisin de modo que la instalacin de dichos componentes es una prdida de dinero por lo tanto. La solucin ms sencilla y barata es usar una resistencia y un condensador para el funcionamiento del oscilador. Hay dos modos en los que estos dos componentes sre utilizados:

RC modo. Cuando el oscilador externo est configurado para operar en modo RC, el pasador OSC1 debe conectarse al circuito RC como se muestra en la figura a la derecha. El pasador OSC2 da salida a la frecuencia del oscilador RC dividida por 4.Esta seal de reloj puede ser utilizado para aplicaciones de calibracin, sincronizacin o de otro tipo.

Rcio modo. Asimismo, el circuito RC est conectada a la clavija OSC1. Esta vez, la disposicin OSC2 pasador se utiliza como un adicional de propsito general pin I / O.
En ambos casos, se recomienda el uso de componentes como se muestra en las figuras. La frecuencia de un oscilador se calcula segn la frmula F = 1 / T en la que:

f = frecuencia [Hz]; T = R * C = constante de tiempo [s]; R = resistencia de la resistencia [], y C = capacidad del condensador [F].

MODOS DE RELOJ INTERNO


El circuito oscilador interno consiste en dos osciladores separados que se pueden seleccionar como fuente de reloj del sistema: El oscilador HFINTOSC viene calibrado de fbrica y funciona a 8 Mhz. Su frecuencia puede ajustarse desde el software utilizando los bits del registro OSCTUNE. El oscilador LFINTOSC no est calibrado de fbrica y funciona a 31kHz. Al igual que el oscilador externo, el oscilador interno tambin se puede configurar para funcionar en varios modos. El modo de funcionamiento se selecciona de la misma manera que para el oscilador externo utilizando los bits de la palabra de configuracin. En otras palabras, todos los ajustes se realizan desde el software antes de escribir un programa en el microcontrolador.

OSCILADOR INTERNO EN MODO INTOSC En este modo, el pasador OSC1 est disponible como un propsito general I / O, mientras que el pasador OSC2 salidas de frecuencia seleccionado oscilador interno dividido por 4.

OSCILADOR INTERNO EN MODO INTOSCIO En este modo, ambos pasadores estn disponibles como propsito general pines I / O.

AJUSTES oscilador interno


El oscilador interno est formado por dos circuitos independientes.

1. El HFINTOSC de alta frecuencia del oscilador interno est calibrado de fbrica y funciona a 8 Mhz. Se
conecta a un postscaler (divisor de frecuencia). El postscaler permite este oscilador de impulsos de reloj de salida en una de las siete frecuencias. La seleccin de la frecuencia se realiza en el software utilizando IRCF2, IRCF1 y IRCF0 bits del registro OSCCON. El oscilador HFINTOSC se activa al seleccionar una de las siete frecuencias (entre 8 MHz y 125 kHz) y ajustar el reloj de bit del sistema Fuente (SCS) del registro OSCCON. Como puede verse en la figura a continuacin, todos los ajustes se realizan usando bits del registro OSCCON.

2. El LFINTOSC oscilador de baja frecuencia no est calibrado y funciona a 31 kHz. Se activa mediante la
seleccin de esta frecuencia de uso de bits del registro OSCCON y estableciendo el bit SCS del mismo registro.

DOS VELOCIDADES DEL RELOJ modo de Arranque


Dos velocidades de reloj de arranque modo permite al microcontrolador para proporcionar ahorros adicionales de energa cuando funciona en modo de reposo. Qu es todo esto? Cuando se configura para operar en LP, XT o HS modo, el oscilador externo se desactiva en la transicin a dormir con el fin de reducir el consumo de energa total del dispositivo. Cuando las condiciones de activacin cuando se cumplen, el microcontrolador no de inmediato comenzar a operar porque tiene que esperar a que la frecuencia de reloj se estabilice. Toma exactamente 1024 pulsos por el microcontrolador para proceder con la ejecucin del programa. Despus de 1024 impulsos son contados y slo unas pocas instrucciones de los programas se ejecutan, el microcontrolador se suele fijar de nuevo a modo de suspensin. Esto significa que la mayor parte del tiempo, as como la mayor parte de la energa suministrada por bateras se desperdicia. Este problema se resuelve mediante el uso de un oscilador interno de la ejecucin del programa, mientras que el recuento de estos pulsos de 1024 est en curso. Tan pronto como la frecuencia del oscilador externo se estabiliza, automticamente se har cargo del 'protagonismo'. Todo el proceso se activa mediante el establecimiento de un bit de la palabra de configuracin. Con el fin de programar el microcontrolador de esta manera, es necesario seleccionar la opcin Ext. Int.-conmutacin dentro del software.

Fail-Safe reloj del monitor


Como su nombre indica, el reloj del monitor a prueba de errores (FSCM) supervisa el funcionamiento del oscilador externo y permite que el microcontrolador para proceder con la ejecucin del programa a pesar de que el oscilador externo falla por alguna razn. En este caso, el oscilador interno toma su lugar.

La prueba de fallos monitor de reloj detecta el fallo comparando fuentes de reloj internas y externas. Si se necesita ms que 2mS para el reloj oscilador externo por venir, la fuente de reloj cambiar automticamente. El oscilador interno se har cargo de la funcin de la fuente de reloj principal de la operacin que est controlada por los bits del registro OSCCON. Cuando el bit del registro OSFIE PIE2 est establecido, una interrupcin ser generada. El reloj del sistema se mantendr en el que se obtengan

a partir del oscilador interno hasta que el microcontrolador se reinicia correctamente el oscilador externo y vuelve a la fuente de reloj externa. Este mdulo tambin est habilitada, cambiando la palabra de configuracin antes de iniciar el proceso de programacin. En este ejemplo, se realiza seleccionando la opcin Fail-Safe Monitor de Reloj.

OSCTUNE Registrarse
Las modificaciones en el registro OSCTUNE afecta a la frecuencia HFINTOSC, pero no la frecuencia LFINTOSC. No hay ninguna indicacin durante el funcionamiento del microcontrolador desplazamiento de frecuencia que se ha producido.

TUN4 - tun0 bits de sintona Frecuencia Mediante la combinacin de estos cinco bits, los cambios de frecuencia del oscilador de 8MHz..De esta manera, las frecuencias obtenidas por su divisin en el postscaler cambiar tambin.

TUN4 0 0 0

TUN3 1 1 1

TUN2 1 1 1

TUN1 1 1 0

TUN0 1 0 1

FRECUENCIA Mximo

0 0 1

0 0 1

0 0 1

0 0 1

1 0 1 Calibrado

1 1 1

0 0 0

0 0 0

1 0 0

0 1 0 Mnimo

3,11 memoria EEPROM


EEPROM es un segmento de memoria por separado, no es parte de la memoria de programa (ROM), ni la memoria de datos (RAM). A pesar de que lugares de la memoria EEPROM no es fcil y rpido acceso a otros registros, que son de gran importancia ya que los datos EEPROM se guardan de forma permanente, incluso despus de la prdida de poder y se puede cambiar en cualquier momento. Estas caractersticas excepcionales que lo hagan cada byte de la EEPROM valioso. El microcontrolador PIC16F887 tiene 256 localizaciones de memoria EEPROM datos controlados por los bits de los registros siguientes:

EECON1 (registro de control); EECON2 (registro de control); EEDAT (almacena los datos listos para leer y escribir), y EEADR (direccin de la ubicacin de las tiendas de EEPROM para acceder).

El registro EECON2 no es una verdad, no existe fsicamente. Se utiliza nicamente en la secuencia de datos del programa de escritura. Adems de los registros antes mencionados, los registros y EEDATH EEADRH se utilizan tambin para escribir y leer la EEPROM.Tambin se utilizan para el programa (FLASH) de memoria de lectura y escritura. Estos registros se considera una zona de riesgo y rara vez se utiliza ya que cualquier error puede ser fatal para su programa (que seguramente no desea que su microcontrolador para eliminar de forma accidental o cambiar su propio programa). No habr nuevas discusiones aqu, pero ten cuidado.

EECON1 Registrarse

EEPGD - Programa / EEPROM de datos Seleccione bits

1 - la memoria de acceso al programa. 0 - Acceso a la memoria EEPROM. 1 - Escribir se termina prematuramente y el error se ha producido. 0 - Escribir completado. 1 - Escribe en la memoria EEPROM habilitada. 0 - Escribir en la memoria EEPROM deshabilitada. 1 - Inicia la escritura en la memoria EEPROM. 0 - Escribir en la memoria EEPROM completado. 1 - Inicia la lectura de la EEPROM. 0 - Leer EEPROM deshabilitada.

WRERR - Error de EEPROM poco Bandera

WREN - EEPROM Escribir Habilitar poco.

WR - bit de control de escritura

RD - bits de control de lectura

Leer datos en la EEPROM


Con el fin de permitir que los datos se leen de la memoria EEPROM, siga el procedimiento siguiente:

Paso 1: Escriba la direccin de (00h - FFh) en el registro EEADR. Paso 2: Seleccione el bloque de memoria EEPROM en la limpieza de la broca EEPGD del registro EECON1. Paso 3: Establecer el bit RD del registro mismo de leer la posicin de memoria adecuada. Paso 4: Los datos se almacenan en el registro EEDAT y est listo para usar.

El siguiente ejemplo ilustra el procedimiento anterior cuando el programa est escrito en lenguaje ensamblador:

BSF STATUS,RP1 BCF STATUS,RP0 MOVF ADDRESS,W MOVWF EEADR BSF STATUS,RP0 BCF EECON1,EEPGD BSF EECON1,RD BCF STATUS,RP0 MOVF EEDATA,W

; ; ; ; ; ; ; ; ;

Access bank 2 Move address to the W register Write address Access bank 3 Select EEPROM memory block Read data Access bank 2 Data is stored in the W register

La secuencia de un mismo programa escrito en un lenguaje bsico es como sigue:

W = EEPROM_Read (ADDRESS)

Ahora te das cuenta de las ventajas del lenguaje Basic, no?

Escribir datos en la EEPROM


Antes de escribir datos en la memoria EEPROM es necesario para escribir datos en el registro EEDAT y la direccin apropiada para el registro EEADR. Todo lo que queda es ejecutar una secuencia del programa especial para iniciar de escritura para cada byte.Interrupciones debe ser desactivado mientras los proces de escritura de datos en la EEPROM est en curso. El siguiente ejemplo ilustra el procedimiento anterior cuando el programa est escrito en lenguaje ensamblador:

BSF STATUS,RP1 BSF STATUS,RP0 BTFSC EECON,WR1 GOTO $-1 BCF STATUS,RP0 MOVF ADDRESS,W MOVWF EEADR MOVF DATA,W MOVWF EEDATA BSF STATUS,RP0 BCF EECON1,EEPGD BSF EECON1,WREN BCF INCON,GIE BSF INTCON,GIE BCF EECON1,WREN MOVLW 55h MOVWF EECON2 MOVLW AAh MOVWF EECON2 BSF EECON1,WR

; ; ; ; ; ; ; ; ; ; ; ; ;

Wait for the previous write to complete Bank 2 Move address to W Write address Move data to W Write data Bank 3 Select EEPROM memory block Write to EEPROM enabled All interrupts disabled Interrupts enabled Write to EEPROM disabled

La secuencia de un mismo programa escrito en un lenguaje bsico es como sigue:

W = EEPROM_Write(ADDRESS, W)

Necesita un comentario? Vamos a hacerlo en mikroBasic ...

' This example demonstrates the use of EEPROM Library in mikroBasic PRO for PIC. program eeprom_test dim ii as byte ' ii variable used in the loop main: ANSEL = 0 ' Configure AN pins as digital I/O ANSELH = 0 PORTB = 0 PORTC = 0 PORTD = 0 TRISB = 0 TRISC = 0 TRISD = 0 for ii = 0 to 32 step 1 ' Fill data buffer EEPROM_Write(0x80+ii, ii) ' Write data to address 0x80+ii next ii EEPROM_Write(0x02,0xAA) ' address 2 EEPROM_Write(0x50,0x55) ' address 0x50 Delay_ms(1000) ' PORTB = 0xFF ' PORTC = 0xFF Delay_ms(1000) PORTB = 0x00 PORTC = 0x00 Delay_ms(1000) PORTB = EEPROM_Read(0x02) display it on PORTB PORTC = EEPROM_Read(0x50) and display it on PORTC Delay_ms(1000) Write data (number 0xAA) to EEPROM Write data (number 0x55) to EEPROM Blink PORTB and PORTC diodes to indicate start of reading

' Read data from EEPROM address 2 and ' Read data from EEPROM address 0x50

for ii = 0 to 32 step 1 ' Read 32 bytes block from address 0x80 PORTD = EEPROM_Read(0x80+ii) ' and display data on PORTD Delay_ms(250) next ii end.

3.12 REINICIAR! NEGRO-OUT, Brown-out o ruidos?


A primera vista, es suficiente para encender la cmara para hacer que el microcontrolador funcione. A primera vista, es suficiente para apagar la unidad para hacer que deje de funcionar. Slo a primera vista ... De hecho, de inicio y final de la operacin depender de una seal especial que se llama RESET. Una condicin de reposicin hace que el microcontrolador para detener inmediatamente la operacin y borrar sus regis tros. Una seal de reposicin puede ser generada externamente en cualquier momento (el pin MCLR es conducido bajo). Tambin puede ser generada por dentro del microcontrolador, si es necesario. Un poder, a condicin siempre causa un reinicio que se produzca. Puesto que hay muchas ocurrencias que se acompaan que tienen lugar cuando la fuente de alimentacin est encendido (intermitente de contacto de interruptor y el aumento del espumoso, el voltaje lento, estabilizacin gradual frecuencia de reloj, etc), es necesario para proporcionar un retardo de tiempo determinado por el microcontrolador antes de que comience a operar. Dos temporizadores independientes PWRT y OST se encarga de eso. El primero puede ser activada o desactivada durante el proceso de programacin. Vamos a ver lo que realmente ocurre aqu:

Cuando la tensin de alimentacin llega a 1,2 - 1,7 V, un circuito llamado de encendido se reinicia el temporizador del microcontrolador en un plazo aproximado 72mS. Temporizador Tan pronto como expire este tiempo, otro temporizador denominado arranque del oscilador genera otra seal de reposicin dentro de los perodos 1024 oscilador de cuarzo. Cuando expire este tiempo de retardo (marcado como reset T en la figura a la derecha) y el pin MCLR es excitada alta, el microcontrolador puede comenzar a ejecutar el primer programa de instruccin.
Adems de este llamado "controlado" reset que se produce en el momento en que la fuente de alimentacin continua, hay otras dos condiciones de restablecimiento llamados Negro de salida y Brown fuera que pueden ocurrir durante el funcionamiento del microcontrolador, as como en el momento la fuente de alimentacin se apaga.

NEGRO-restablecer

El restablecimiento de negro de salida tiene lugar cuando el microcontrolador est correctamente apagado. En este caso, el microcontrolador no tiene tiempo para hacer nada impredecible debido a que la tensin de alimentacin cae muy rpido en virtud de su valor mnimo. A la luz wordsthe otra se apaga, la cortina se cae y el espectculo ha terminado.

Brown-out de RESET

Cuando la tensin de alimentacin desciende lentamente (un ejemplo tpico es una descarga de la batera, aunque el microcontrolador experimenta mucho ms rpidas cadas de tensin como procesos lentos), los componentes electrnicos internos gradualmente deja de funcionar y se produce la llamada de Brown-restablecer. Antes de que el microcontrolador completamente deja de funcionar hay un riesgo de que los circuitos que operan a voltajes ms altos comenzar a realizar de forma impredecible. El reinicio brown-out tambin puede ser fatal para el programa, ya que se guarda en la memoria flash en el chip.

RUIDO

El ruido es un tipo especial de brown-out reset que se produce en el entorno industrial siempre que "parpadea de la tensin de alimentacin por un momento y cae por debajo del nivel mnimo. Incluso corto, por ejemplo un ruido en la fuente de alimentacin puede afectar considerablemente el funcionamiento del microcontrolador.

MCLR PIN

Un cero lgico (0) en el pin MCLR provoca que el microcontrolador que se restablezca inmediatamente y de una manera apropiada. Se recomienda para conectarlo como en la figura de la derecha. La funcin de los componentes adicionales es mantener "pura" lgica de un (1) durante la operacin normal. Si estos componentes se configuran para proporcionar un nivel lgico alto (1) en el pin MCLR despus de restablecer T es ms, el microcontrolador inmediatamente comenzar a operar. Esta condicin puede ser muy til cuando es necesario para sincronizar el funcionamiento del microcontrolador y la electrnica adicionales, as como el funcionamiento de varios microcontroladores.
Con el fin de evitar cualquier error que pueda ocurrir en el Brown-out reset, el PIC 16F887 tiene un "mecanismo de proteccin" built-in. Es un circuito simple, pero eficaz, que responde cada vez que la tensin de alimentacin cae por debajo de 4V durante ms de 100 microsegundos. Este circuito genera una seal de reposicin y desde ese momento el microcontrolador funciona como si se hubiera acaba de encender.

Captulo 4: Ejemplos
El propsito de este captulo es proporcionar informacin bsica que usted necesita saber con el fin de poder utilizar microcontroladores con xito en la prctica. En este captulo, por lo tanto, no contiene ningn programa o esquema super interesante dispositivo con soluciones sorprendentes. En cambio, los siguientes ejemplos son una prueba mejor que escribir un programa es un privilegio ni una cuestin de talento, pero la capacidad de los simples directivas de poner las piezas del rompecabezas juntas usando. Diseo y desarrollo de dispositivos, principalmente se reducen a el mtodo de "prueba correcta de la repeticin". Por supuesto, cuanto ms ests en l, ms complicado se hace desde las piezas del rompecabezas se unen por los nios y los arquitectos de primera clase ...

4.1 CONEXIN BSICA 4.2 COMPONENTES ADICIONALES 4.3 Ejemplo 1 - Escribir cabecera, configurar pines de E / S y utilizar la funcin de retardo 4.4 Ejemplo 2 - Instrucciones de uso, armado y LFINTOSC oscilador interno 4.5 Ejemplo 3 - TMR0 como contador, declarar nuevas variables, smbolos de uso y de rel 4.6 Ejemplo 4 - Use temporizadores TMR0, TMR1 y TMR2. Utilice las interrupciones, declarar el nuevo procedimiento 4.7 Ejemplo 5 - Uso del temporizador perro guardin Ejemplo 6 4,8 - Mdulo CCP1 como un generador de seal PWM 4.9 Ejemplo 7 - Utilice un convertidor A / D 4.10 EJEMPLO 8 - Utilizar memoria EEPROM 4.11 Ejemplo 9 - Dos dgitos contador de LED, la multiplexacin 4.12 EJEMPLO 10 - Utilizacin LCD 4.13 EJEMPLO 11 - comunicacin serie RS232 4.14 EJEMPLO 12 - Medir la temperatura con sensor de DS1820. El uso del protocolo '1-wire ' 4,15 Ejemplo 13 - la generacin de sonido, librera de sonidos ... 4.16 EJEMPLO 14 - Utilizar una pantalla grfica LCD 4.17 EJEMPLO 15 - Utilizar un panel sensible al tacto 4.18 EJEMPLO 16 - Utilizar un teclado 4x4

4.1 CONEXIN BSICA


A fin de que el microcontrolador para funcionar correctamente, es necesario proporcionar:

Fuente de alimentacin; Restablecer la seal, y Seal de reloj.

Como puede verse en la figura anterior, se trata de circuitos sencillos. Pero no es siempre el caso. Si el dispositivo de destino se utiliza para controlar costosas mquinas o dispositivos de soporte de vida, todo se complica cada vez ms. De todos modos, esta sencilla solucin va a hacer por el momento ...

FUENTE DE ALIMENTACIN
Aunque el PIC16F887 puede operar a diferentes voltajes de alimentacin, por qu 'la ley de Murphy "prueba? Un 5V DC tensin de alimentacin es el ms adecuado. El circuito, que se muestra en la pgina anterior, utiliza una barata integrado de tres terminales LM7805 regulador positivo y proporciona una estabilidad de la tensin alta calidad y muy corriente suficiente para permitir que los mdulos de microcontroladores y perifricos para operar con normalidad (los medios suficientes 1A).

La seal de reset
A fin de que el microcontrolador para funcionar correctamente, un uno lgico (VCC) debe ser aplicada en el pasador de reposicin. Un botn de conectar el pin de reset MCLR a GND no es necesario, pero es casi siempre proporcionada, ya que permite que el microcontrolador se recuperan rpidamente si algo sale mal. Al pulsar este botn, el pin MCLR se suministra con 0V, el microcontrolador se produce y el restablecimiento de la ejecucin del programa comienza desde el principio. Una resistencia de 10K se utiliza para evitar acortar el carril 5V DC a la tierra desde que ocurre cuando el botn se pulsa RESET.

Seal de reloj
A pesar de que el microcontrolador tiene un oscilador incorporado, no puede funcionar sin componentes externos que hacen que su funcionamiento estable y determinar su frecuencia de

operacin. Dependiendo de los componentes en uso y sus frecuencias de funcionamiento, el oscilador se puede ejecutar en cuatro modos diferentes:

LP - Cristal de baja potencia; XT - Cristal / resonador; SA - Cristal de alta velocidad / resonador, y RC - resistencia / condensador.

Cul es el punto de utilizar estos modos?Debido al hecho de que es casi imposible disear un oscilador para operar de forma estable sobre un amplio rango de frecuencias, el microcontrolador debe estar familiarizado con el tipo de cristal de cuarzo conectado de manera que se puede ajustar el funcionamiento de su oscilador de reloj a la misma. Por eso, todos los programas que se utilizan para los microcontroladores de programacin contiene una opcin para la seleccin del oscilador modo. Vase la figura de la izquierda.

Cristal de cuarzo
Cuando el cristal de cuarzo se utiliza para estabilizar la frecuencia, la incorporada en el oscilador funciona a una frecuencia precisa que no se ve afectada por cambios en el voltaje de suministro de potencia y temperatura. Esta frecuencia est por lo general aparece en la carcasa de cristal de cuarzo. Adems de los cristales, los condensadores C1 y C2 tambin debe estar conectado como por esquema de arriba. Su capacitancia no es de gran importancia. Por lo tanto, los valores indicados en la mesa de al lado el esquema debe ser considerado como una recomendacin, y no como una regla estricta.

Resonador cermico

Un resonador de cermica es ms barato, pero muy similar al cuarzo por su funcin y modo de funcionamiento. Por ello, estos dos esquemas, que ilustran su conexin con el microcontrolador, son idnticos. Sin embargo, en comparacin con el cristal de cuarzo, la capacitancia de los condensadores C1 y C2 es ligeramente diferente debido a las diferentes caractersticas elctricas. Consulte la tabla siguiente.

Resonadores de cermica normalmente estn conectados a osciladores cuando no es necesario para proporcionar una frecuencia extremadamente precisa.

RC oscilador
Si la frecuencia de funcionamiento no importa, entonces no hay necesidad de utilizar componentes adicionales costosos para su estabilizacin. En su lugar, una simple red RC, como se muestra en la figura a continuacin, se debe utilizar. En este caso, slo la entrada de oscilador de reloj del microcontrolador se utiliza, lo que significa que la seal de reloj con la Fosc / 4 frecuencia aparecer en el pasador OSC2. Esta frecuencia es la misma que la frecuencia de funcionamiento del microcontrolador, es decir, representa la velocidad de ejecucin de la instruccin.

Oscilador externo
Si se requiere para sincronizar el funcionamiento de varios microcontroladores o si por alguna razn, no es posible utilizar cualquiera de las configuraciones anteriores, una seal de reloj puede ser generada por un oscilador externo. Refirase a la figura de abajo.

4.2 COMPONENTES ADICIONALES


A pesar del hecho de que el microcontrolador es un producto de la tecnologa moderna, es de ninguna utilidad si no est conectado a los componentes adicionales. En pocas palabras, la aparicin de voltaje en los pines del microcontrolador no significa nada si no se utiliza para realizar ciertas operaciones, tales como convertir algo de encendido / apagado, cambio, etc mostrar Esta seccin cubre algunos de los componentes ms utilizados en la prctica adicionales tales como resistencias, transistores, LEDs, pantallas LED, pantallas LCD y RS-232 mdulos de comunicacin.

Interruptores y pulsantes de

Interruptores y pulsadores es probable que los componentes ms simples que proporcionan la forma ms sencilla de llevar la tensin en unos pines del microcontrolador de entrada. Por supuesto, no es tan simple como que en la prctica ... Lo que lo hace complicado es un rebote de contacto. El rebote de contacto es un problema comn con los interruptores mecnicos. Cuando los contactos chocan juntos, su impulso y la elasticidad de actuar en conjunto para causar un rebote. El resultado es una corriente rpidamente impulsos elctricos en lugar de una transicin limpia de cero a plena corriente. En su mayora se produce debido a las vibraciones, las pequeas asperezas y la suciedad entre los contactos. El rebote ocurre demasiado rpido de modo que no es posible notar cuando estos componentes se utilizan normalmente.

Sin embargo, esto causa problemas en algunos circuitos lgicos y analgicos que responden suficientemente rpido como para malinterpretar encendido / apagado impulsos como una secuencia de datos. En otras palabras, todo el proceso no dura mucho tiempo (unos pocos micro o milisegundos), pero lo suficiente como para ser registrado por el microcontrolador. Cuando slo un pulsador se utiliza como una fuente de seal de contador, se producen errores en casi el 100% de los casos. Una de las posibles soluciones a este problema es conectar a un circuito simple RC para suprimir rpidos cambios de voltaje. Dado que el perodo de rebote no est definido, los valores de los componentes no puede determinarse con precisin. En la mayora de los casos, se recomienda el uso de los mismos valores, como se muestra en la figura a continuacin.

Si la estabilidad completa se requiere entonces medidas radicales deben ser tomadas. La salida del circuito lgico, como se muestra en la figura a continuacin (flip-flop RS), cambiar su estado lgico despus de detectar el primer pulso disparado por un rebote de contacto. Esta solucin es ms cara (interruptor SPDT), pero ms seguro sin duda.

Adems de estas soluciones de hardware, hay tambin una solucin de software sencillo. Cuando el programa comprueba el estado lgico de un pin de entrada y detecta un cambio, la comprobacin debe hacerse una vez ms despus de un cierto retraso. La verificacin de cambio significa que el botn del interruptor / pulsador ha cambiado su posicin. Las ventajas de esta solucin son claras: es de forma gratuita y se puede aplicar a los contactos de baja calidad.

RELS

Un rel es un interruptor elctrico que abre y cierra bajo el control de otro circuito elctrico. Por lo tanto, conectado a los pines de salida del microcontrolador y se utiliza para activar / desactivar los dispositivos de potencia tales como motores, transformadores, resistencias, bombillas, etc Estos dispositivos se colocan casi siempre lejos de los componentes sensibles a bordo. Hay varios tipos de rels y todos funcionan de la misma manera. Cuando la corriente fluye a travs de la bobina, el rel es operado por un electroimn para abrir o cerrar uno o ms conjuntos de contactos.Similar a acopladores pticos, no hay conexin galvnica (contacto elctrico) entre la entrada y salida de los rels. Rels por lo general requieren de alta tensin y alta corriente para iniciar la operacin, pero tambin los hay en miniatura que pueden ser activadas por baja corriente directa alimentado por un pin del microcontrolador.
La figura siguiente muestra la forma ms comn de conectar un rel a la red otros dispositivos de potencia.

Con el fin de evitar que el alto voltaje de autoinduccin, causada por una parada repentina del flujo de corriente a travs de la bobina, un diodo polarizado invertida est conectado en paralelo a la bobina. El propsito de este diodo es 'cortar' el pico de tensin.

DIODOS LED
Usted probablemente sabe todo lo que usted debe saber acerca de los LED, pero tambin debemos pensar en las generaciones ms jvenes ... Vamos a ver, cmo destruir un LED? Bueno ... fcilmente.

Quick Burning
Al igual que cualquier otro diodo, los LEDs tienen dos extremos-un nodo y un ctodo. Conecte un diodo correctamente a la tensin de alimentacin y que emitir luz felizmente. Gire el diodo al revs y aplicar la misma tensin de alimentacin (aunque sea por un momento).Es probable que no emiten luz - nunca ms!

Slow Burning
Hay un nominal (lo consideran como mximo) corriente especificada para cada LED que no se debe superar. Si esto sucede, el diodo emitir luz ms intensa, pero slo durante un corto perodo de tiempo.

Algo para recordar


Del mismo modo, todo lo que necesita hacer es quitar una resistencia limitadora de corriente se muestra a continuacin. Dependiendo de la tensin de alimentacin, los efectos podran ser espectaculares.

DISPLAY LED

Bsicamente, una pantalla LED no es ms que varios LEDs moldeados en el caso mismo plstico. Hay muchos tipos de pantallas y algunos de ellos estn compuestos de varias decenas incorporados en los diodos que pueden visualizar smbolos diferentes. Sin embargo, la pantalla ms utilizada es un display de 7 segmentos. Se compone de 8 LEDs. Siete segmentos de un dgito se disponen en forma de rectngulo para mostrar los smbolos, mientras que el segmento adicional se utiliza para mostrar un punto decimal. Con el fin de simplificar la conexin, los nodos o ctodos de todos los diodos estn conectados a un solo pasador de modo que hay pantallas nodo comn y pantallas comunes de ctodo, respectivamente. Segmentos estn marcadas con las letras de la A a g, adems de DP, como se muestra en la figura a continuacin. Cuando se conecta una pantalla LED, cada diodo es tratada por separado, lo que significa que cada uno debe tener su propia resistencia limitadora de corriente.
Aqu hay algunas cosas que usted debe prestar atencin a la hora de comprar pantallas de LED:

Como se mencion anteriormente, dependiendo de si los nodos o ctodos estn conectados a la clavija comn, hay pantallas nodo comn y pantallas comunes catdicos. No hay ninguna diferencia entre ellos para nada en su apariencia lo que se recomienda para corroborar que se va a utilizar antes de instalarla.

La corriente mxima que cada pin del microcontrolador puede recibir o dar es limitado. Por lo tanto, si varias pantallas estn conectados al microcontrolador entonces llamado bajo LED actuales limitados a 2mA slo debe ser utilizado. Segmentos de la pantalla suelen ser marcadas con las letras de A a G, pero no hay una regla que indica rpida visualizacin pines que estn conectados. Por esta razn, es muy importante para comprobar la conexin antes de empezar a escribir un programa o el diseo de un dispositivo.

LED muestra conectado al microcontrolador normalmente ocupan un gran nmero de valiosos pines I / O, que puede ser molesto, especialmente cuando es necesario para visualizar mltiples nmeros dgitos. Es an ms complicado si, por ejemplo, es necesario para mostrar dos 6-dgitos. Un simple clculo muestra que 96 pines de salida son necesarios en este caso. La solucin a este problema se denomina multiplexacin. As es como una ilusin ptica basada en el mismo principio de funcionamiento como una cmara de pelcula est hecha. Slo un dgito est activo en un momento, pero cambian sus condiciones de encendido / apagado tan rpidamente hormigonado la impresin de que todos los dgitos de un nmero son activos simultneamente.

Echemos un vistazo a la figura de arriba. En primer lugar un byte que representa las unidades se carga en el puerto PORT2 microcontrolador y transistor T1 se activa al mismo tiempo. Despus de un tiempo, el transistor T1 est apagado, un byte que representa decenas se carga a PORT2 y el transistor T2 se activa. Este procedimiento se repite cclicamente a alta velocidad para todos los dgitos y transistores correspondientes. Un hecho decepcionante, lo que indica que el microcontrolador es slo una especie de ordenador en miniatura diseado para slo entienden el lenguaje de ceros y unos se expresa plenamente cuando se muestran los dgitos. Es decir, el microcontrolador no sabe lo que las unidades, decenas o centenares son, ni lo que diez dgitos que se usan para que parezca. Por esta razn, cada nmero que se muestra debe someterse al procedimiento siguiente: En primer lugar, un nmero de varios dgitos debe ser dividido en unidades, decenas etc en una subrutina especializado. Entonces cada uno de estos dgitos debe ser almacenado en un byte especfico. Dgitos de obtener la apariencia reconocible para los seres humanos mediante la realizacin de un procedimiento sencillo llamado "enmascaramiento". En otras palabras, un nmero binario se sustituye con una combinacin diferente de bits. Por ejemplo, el dgito 8 (0000 1000) se sustituye por el nmero binario 0111 1111 con el fin de activar todos los LEDs que muestran este dgito. El diodo nico que queda inactiva aqu est reservado para el punto decimal. Si el puerto microcontrolador est conectado a una pantalla de modo que "a" que el bit 0 segmento activa, poco "b" 1 segmento se activa, el bit 2 del segmento "c", etc, entonces la tabla de abajo muestra mscara binario apropiado para cada dgito.

DGITOS PARA MOSTRAR dp 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 un 1 0 1 1 0 1 1 1 1 1 b 1 1 1 1 1 0 0 1 1 1

MOSTRAR SEGMENTOS c 1 1 0 1 1 1 1 1 1 1 d 1 0 1 1 0 1 1 0 1 1 e 1 0 1 0 0 0 1 0 1 0 F 1 0 0 0 1 1 1 0 1 1 g 0 0 1 1 1 1 1 0 1 1

Adems de los dgitos (0-9), hay algunas letras del alfabeto - A, C, E, J, F, U, H, L, b, c, d, O, R, T-que tambin se puede mostrar por enmascaramiento. En caso de que las pantallas comunes del nodo se utilizan, todos los que se incluyen en la tabla de arriba debe ser reemplazado con ceros y viceversa. Adems, los transistores PNP debe utilizarse como conductores.

IC

Un acoplador ptico es un componente comnmente utilizado para microcontrolador galvnicamente separadas de cualquier corriente potencialmente peligroso o tensin en su entorno. Optoacoplador suelen tener fuentes de uno, dos o cuatro de luz (LED) en su entrada, mientras que en su salida, frente a los diodos, hay el mismo nmero de componentes sensibles luz (fototransistores, foto-tiristores o phototriacs). La cuestin es que un acoplador ptico utiliza un trayecto corto de transmisin ptica para transferir una seal entre los diodos y componentes foto-sensibles, mientras que los mantiene aislado elctricamente. Este aislamiento tiene sentido slo si estos componentes por separado alimentado. De esta manera, el microcontrolador y sus mdulos adicionales estn completamente protegidos de alto voltaje y ruidos que por lo general les hacen sufrir daos o funcionar de una manera impredecible. Los optoacopladores utilizados con ms frecuencia son los que tienen fototransistores sobre su produccin. Cuando se trata de los optoacopladores con el interior de la base-a-pin 6 de conexin (tambin hay optoacopladores sin ella), la base puede dejarse sin conectar.

La red de R / C se indica por una lnea punteada en la figura anterior es una conexin opcional que reduce los efectos del ruido mediante la eliminacin de impulsos muy cortos.

PANTALLA LCD
Una pantalla LCD se fabrica especficamente para el uso con los microcontroladores, lo que significa que no pueda ser activado por circuitos estndar de CI. Se utiliza para mostrar diferentes mensajes en una pantalla de cristal lquido en miniatura. La pantalla LCD se describe aqu es por su bajo precio y una gran capacidad de uso ms frecuente en la prctica. Se basa en el controlador HD44780 (Hitachi) y muestra los mensajes en dos lneas de 16 caracteres cada una. Distintos smbolos como las letras del alfabeto, las letras griegas, signos de puntuacin, smbolos matemticos, etc se pueden mostrar en ella. Tambin es

posible visualizar smbolos creados por el usuario. Otras funciones tiles incluyen cambio automtico de mensajes (izquierda y derecha), el aspecto del cursor, retroiluminacin LED, etc

La pantalla LCD Pines


A lo largo de un lado de la placa pequea impresa de la pantalla LCD hay pasadores que permiten que se conecta al microcontrolador.Hay un total de 14 pines marcados con los nmeros (16, si hay una luz de fondo est disponible). Sus funciones se describen en la tabla:: FUNCIN Suelo Fuente de alimentacin Contraste NMERO DE PIN 1 2 3 4 NOMBRE Vss Vdd Vee RS STATE LOGIC 0 1 DESCRIPCIN 0V +5 V 0 - Vdd D0 - D7 considerado como comandos D0 - D7 considerarse como datos Escribir los datos (desde el controlador de LCD) Leer los datos (de LCD para el controlador) El acceso a personas con discapacidad LCD Normal de funcionamiento Los datos o comandos que se transfieren a la pantalla LCD Bit 0 LSB El bit 1 El bit 2 El bit 3 Bit 4 El bit 5 El bit 6 Bit 7 MSB

El control de funcionamiento

R/W

0 1

0 1 Del 1 al 0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1

7 8 9 Los datos o comandos 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

Pantalla LCD

Una pantalla de LCD es un panel delgado y plano se utiliza para mostrar diferentes contenidos. Se compone de dos lneas cada uno con hasta 16 caracteres de 5x8 pxeles o 5x11. El funcionamiento de una pantalla LCD 5x8 se describe aqu, ya que es ms frecuentemente utilizado.

Contraste de la pantalla depende de la tensin de alimentacin y si los mensajes se muestran en una o dos lneas. Por esta razn, un voltaje variable (0-Vdd) se aplica a la clavija marcada como Vee mediante un potencimetro de ajuste. Algunas pantallas LCD tienen una luz de fondo integrada (LED de color azul o verde). Cuando la luz se utiliza, una resistencia limitadora de corriente debe ser conectado en serie con uno de los pasadores para el suministro de luz de fondo de potencia (similar a los LED).

Si no hay caracteres de la imagen o si se atenan cuando la pantalla se enciende, lo primero que se debe hacer es comprobar el potencimetro de ajuste de contraste. Est ajustado correctamente? Lo mismo se aplica si el modo de funcionamiento de la pantalla se ha cambiado (escribir en una o dos lneas).

LCD Memoria
Pantalla LCD contiene tres bloques de memoria:

DDRAM Display Data RAM; CGRAM Generador de caracteres de RAM, y Carcter CGROM Generador de ROM. Memoria DDRAM

La memoria DDRAM se utiliza para almacenar los caracteres que se mostrar. Es capaz de almacenar hasta 80 caracteres. Algunas posiciones de memoria estn directamente relacionados con los campos de caracteres en la pantalla. El principio de funcionamiento de la memoria DDRAM es muy sencillo: basta con configurar una pantalla para incrementar direcciones automticamente (desplazamiento a la derecha) y establecer la direccin de partida para el mensaje que se mostrar (por ejemplo, 00 hexadecimal). Despus de eso, todos los caracteres enviados a travs de lneas D0-D7 se mostrar en la pantalla como un mensaje que se utilizan para - de izquierda a derecha. En este caso, mostrando aperturas desde el campo primer carcter en la primera lnea porque la direccin de partida es 00 hexadecimal. No importa cuntos caracteres se envan, slo los diecisis primeros sern visibles en la pantalla, mientras que el resto de ellos se guarda y se muestra posteriormente con el comando de cambio. En la prctica, la pantalla LCD es como una ventana en el cambio de direccin izquierda-derecha en las posiciones de memoria que contengan caracteres distintos. Esto es, de hecho, cmo el efecto del mensaje desplazamiento sobre la pantalla se ha creado.

Si el cursor est activado, siempre se coloca en el campo de caracteres actualmente dirigida. En otras palabras, tan pronto como el carcter apropiado aparece en la posicin del cursor, la coursor se mueve automticamente al siguiente campo requerido. Como su nombre indica, la memoria DDRAM es un tipo de memoria RAM, lo que significa que los datos se pueden escribir y leer de ella, mientras que su contenido se pierde irremediablemente cuando se desconecta la alimentacin.

CGROM memoria
CGROM la memoria contiene un mapa de carcter estndar con todos los caracteres que se pueden visualizar en la pantalla. Cada personaje se le asigna una ubicacin de memoria:

Las direcciones de las ubicaciones de memoria CGROM coincidir con los caracteres ASCII estndar. Vamos a ver lo que significa acctually. Si el programa es ejecutado por el microcontrolador se encuentra con "P carcter de envo a puerto un comando, el valor binario 0101 0000 aparecer en el puerto. Este valor es equivalente ASCII de carcter P. Como resultado, el smbolo correspondiente al 0101 0000 ubicacin de memoria CGROM, es decir, la letra P, se visualiza en la pantalla. Lo mismo sucede con todas las letras del alfabeto (maysculas y pequeas), pero no a los nmeros. Si usted mira cuidadosamente el mapa de la pgina anterior, te dars cuenta de que las direcciones de todos los dgitos se desplaza hacia adelante en un 48 en relacin con sus valores (dgito 0 es la direccin 48, el dgito 1 direccin es 49, el dgito 2 direccin es 50, etc) . Por lo tanto, con el fin de mostrar los dgitos correctamente, es necesario aadir nmero decimal 48 a cada uno de ellos antes de enviarlo a una pantalla LCD.

Qu es ASCII? Desde sus inicios hasta la actualidad, los ordenadores pueden reconocer los nmeros solamente, pero no las letras.Esto significa que todos los datos de un permutas PC con un dispositivo perifrico se convierte en formato binario, aunque el mismo es reconocido por los seres humanos como cartas (teclado es un ejemplo excelente). En otras palabras, cada carcter coincide con una combinacin nica de ceros y unos. ASCII es la codificacin de caracteres basado en el alfabeto Ingls. El cdigo

ASCII especifica una correspondencia entre los smbolos de caracteres estndar y sus equivalentes numricos.

CGRAM MEMORIA
Adems de los caracteres estndar, la pantalla LCD tambin se pueden mostrar smbolos definidos por el usuario en el tamao de los pxeles 5x8. Se habilita por un tipo especial de memoria RAM llamada CGRAM (64 bytes). Los registros de memoria de 8 bits de ancho, pero slo 5 bits ms bajos se utilizan. Lgica uno (1) en cada registro representa un campo atenuado, mientras que 8 localidades agrupados juntos representan un carcter. Refirase a la figura a continuacin:

Los smbolos se define generalmente En un principio del programa por ceros y unos simples de escritura a los registros de la memoria CGRAM con el fin de formar las formas deseadas. Con el fin de mostrarlos, es suficiente para especificar la direccin de memoria adecuada. Preste atencin a la primera columna de

la hoja de CGROM de caracteres. No contiene las direcciones de memoria RAM, pero los smbolos que se debate aqu. En este ejemplo, los medios 'display 0' - pantalla 'smiley', significa 'una pantalla smbolo "" ancla "de pantalla, etc

LCD Comandos bsicos


Todos los datos enviados a un LCD a travs de los pasadores de D0-D7 sern interpretados ya sea como un comando o datos a, que depende del estado lgico de la clavija de RS:

RS = 1 - Los bits D0-D7 son las direcciones de los caracteres que se muestran. Un procesador incorporado en la pantalla LCD se dirige a un personaje de el mapa de caracteres y la muestra. La direccin DDRAM especifica la ubicacin en la pantalla en la que el personaje se va a mostrar. Esta direccin est predefinida o la direccin del carcter enviado anteriormente se incrementa automticamente. RS = 0 - bits D0 - D7 son los comandos utilizados para establecer el modo de funcionamiento de la pantalla.

Aqu est una lista de comandos relacionados con el funcionamiento de la pantalla LCD: COMAN DO Borrar pantalla Inicio del cursor Entrada modo de juego Mostrar control on / off Cursor / Pantalla de cambio Funcin de conjunto Establezca la direccin CGRAM Establezca la direccin DDRAM Lea "BUSY" bandera (BF) Escriba a CGRAM o DDRAM Leer de CGRAM o DDRAM R S R W D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 TIEMPO DE EJECUCI N 1.64mS 1.64mS

0 0

0 0

0 0

0 0

0 0

0 0

0 0

0 0

0 1 I/ D

1 x

40US

40US

D/ C N

R/ L F

40US

DL

40US

CGRAM direccin

40US

Direccin DDRAM

40US

BF

Direccin DDRAM

D7

D6

D5

D4

D3

D2

D1

D0

40US

D7

D6

D5

D4

D3

D2

D1

D0

40US

I / D 1 = Incremento (por 1) R / L 1 = Desplazamiento a la derecha 0 = Disminucin (por 1) 0 = Desplazamiento a la izquierda S 1 = Pantalla cambio de DL 1 = 8-bit de interfaz 0 = Mostrar cambio de 0 = 4-bit de interfaz D 1 = Pantalla en la N 1 = Pantalla de dos lneas 0 = 0 = apagado de pantalla de visualizacin en una sola lnea U 1 = cursor en la F 1 = formato de caracteres puntos 5x10 0 = 0 = cursor fuera de formato de caracteres puntos 5x7 B 1 = parpadeo del cursor en D / C 1 = cambio de pantalla 0 = parpadeo del cursor apagado 0 = Desplazamiento del cursor
QU ES UNA bandera de ocupado?
En comparacin con el microcontrolador, el LCD es un componente extremadamente lento. Por esta razn, era necesario para proporcionar una seal que, en cada ejecucin del comando, indican que la pantalla est lista para recibir siguiente pieza de datos. Esta seal se llama la bandera de ocupado y puede ser ledo desde la lnea de D7. Pantalla LCD est preparado para recibir nuevos datos cuando la tensin en esta lnea es 0V (BF = 0).

LCD Conexin
Dependiendo de cuntas lneas se utilizan para conectar un LCD al microcontrolador, hay de 8 bits y 4 bits de modos de funcionamiento de la pantalla LCD. El modo apropiado se selecciona al comienzo de la operacin en el proceso llamado "inicializacin". El modo de 8 bits LCD utiliza los pines D0-D7 para transferir datos, como se explica en la pgina anterior. El propsito principal del modo de 4-bit LCD es valiosa para salvar pines I / O del microcontrolador. Slo los 4 bits ms altos (D4-D7) se utilizan para la comunicacin de aqu, mientras que otros pueden dejarse sin conectar. Cada pieza de datos se envan a la pantalla LCD en dos pasos - cuatro bits superiores son enviadas primero (normalmente a travs de lneas D4-D7), entonces cuatro bits ms bajos.Como resultado del proceso de inicializacin, la pantalla LCD es capaz de enlazar e interpretar bits recibidos

correctamente.

Adems, los datos rara vez se lee de la pantalla LCD. En la mayora de los casos, el microcontrolador enva datos a la pantalla LCD, lo que significa que es posible ahorrar un adicional pin I / O por simple conectando el pin R / W a tierra. Este ahorro tiene su precio, por supuesto. Aunque el proceso de visualizacin de datos se realiza normalmente, no ser posible leer la bandera de ocupado, ya que no es posible leer la pantalla o bien. La buena noticia es que hay una solucin simple a este problema. Despus de enviar un carcter o un comando de la pantalla LCD, es necesario darle el tiempo suficiente para prepararse para recibir otra. Debido al hecho de que se tarda aproximadamente 1.64mS para un comando para que sea ejecutado, ser suficiente para esperar alrededor de 2 ms.

LCD de inicializacin
Tan pronto como la fuente de alimentacin pasa, la pantalla LCD se desactiva automticamente. Todo el proceso dura aproximadamente 15 ms. Despus de eso, la pantalla est lista para funcionar y su modo de funcionamiento est configurado por defecto. Esto significa que:

1. Pantalla se borra. 2. Modo DL = 1 - Comunicacin a travs de la interfaz de 8 bits N = 0 - Los datos se muestran en una lnea F = 0 - Formato de caracteres de la fuente es de 5 x 8 pxeles 3. Mostrar / cursor de encendido / apagado D = 0 - Display apagado U = 0 - fuera del cursor B = 0 - Parpadeo del cursor apagado 4. Entrada de caracteres ID = 1 direcciones de la pantalla se incrementa automticamente en 1 S = 0 Pantalla desplazar fuera
En la mayora de los casos de auto-rearme ocurre normalmente. Sobre todo, pero no siempre. Si por alguna razn la tensin de alimentacin no llega al mximo dentro de 10 ms, la pantalla empezar a llevar a cabo completamente imprevisible. Si la fuente de alimentacin no es capaz de cumplir esta condicin, o

si es necesario para proporcionar un funcionamiento seguro, el proceso de inicializacin se requiere. Se produce una condicin de reposicin nuevo, permitiendo as la visualizacin para operar normalmente. Hay dos algoritmos de inicializacin. Cul se va a realizar depende de si la conexin con el microcontrolador se establece a travs de 4 - o interfaz de 8-bits. La inicializacin siguiente proceso es el mismo para ambos algoritmos. Usted slo tiene que especificar algunos comandos bsicos y despus de eso, usted ser capaz de enviar masajes para la pantalla LCD. La figura siguiente ilustra la inicializacin de 8-bits de la pantalla LCD:

No es un error! En este algoritmo, el mismo valor es tres veces sucesivamente, enva y se muestra en la pantalla LCD. El procedimiento descrito en la inicializacin de 4-bit es el siguiente:

Vamos a hacerlo en mikroBasic ...

'In mikroBasic for PIC, it is sufficient to write only one function to perform the 'whole process of LCD initialization. Prior to calling this function it is necessary 'to declare bits LCD_D4-LCD_D7, LCD_RS and LCD_EN. ... sub procedure Lcd_Init ' Initialize LCD ...

EJEMPLOS PRCTICOS

El proceso de creacin de un nuevo proyecto es muy simple. Seleccione la opcin Nuevo proyecto en el men Proyecto, como se muestra en la figura de la derecha.

Aparecer una ventana llamada Asistente para nuevo proyecto, que le guiar a travs del proceso de creacin de un nuevo proyecto, parece. La ventana de introduccin de esta aplicacin contiene una lista de acciones a realizar cuando se crea un nuevo proyecto. Haga clic en Siguiente.
El proceso de creacin de un nuevo proyecto se puede dividir en cinco pasos:

1. Seleccin del microcontrolador para escribir un programa para. En este caso, es PIC16F887. 2. Seleccin del reloj del dispositivo. En este caso, es 8 MHz de reloj. 3. La seleccin del nombre y la ubicacin del proyecto. En este caso, el nombre del proyecto es la primera _Project y se guardar en la carpeta C: \ Mis proyectos. El compilador aade automticamente la extensin. Mbppi al nombre del proyecto y un archivo de cdigo fuente con el mismo nombre (First_Project. MBA) se crear en su seno. 4. En caso de que el proyecto consta de varios archivos de cdigo fuente, es necesario especificar todos ellos e incluir en el proyecto haciendo clic en el botn Agregar. En este ejemplo, no hay archivos de origen adicionales dentro del proyecto. 5. Por ltimo, es necesario aprobar todas las opciones seleccionadas, haga clic en Finalizar.

Despus de crear el proyecto, una nueva ventana en blanco para escribir un programa en el que aparecen. Consulte la figura siguiente.

Cuando el programa est escrito, es necesario compilarlo en un cdigo hexadecimal, seleccionando una de las opciones de generacin en el men Proyecto.:

Para crear un archivo. Hexagonal, seleccione Build (Ctrl + F9) en el men Proyecto o haga clic en el icono de la barra de herramientas de generacin de proyectos. La construccin todos los proyectos (Shift + F9) opcin genera todos los archivos dentro del proyecto, las bibliotecas (si hay un cdigo fuente para ellos) y los archivos def para el chip en uso. La opcin Build + Program (Ctrl + F11) es especial, ya que permite que el PRO mikroBasic para PIC compilador para cargar automticamente el programa en el microcontrolador despus de la compilacin. El proceso de programacin se realiza mediante el programador PICFlash.

Todos los errores detectados durante la compilacin se muestran en la ventana de mensajes. Si no se encuentran errores, el PRO mikroBasic para PIC compilador genera archivos de salida.

4,3 Ejemplo 1
Escribir cabecera, configurar pines de E / S y utilizar la funcin de retardo
Aqu es un sencillo programa que tiene por objeto simplemente para encender un LED pocos PORTB. Utilice este ejemplo para estudiar lo que es un programa real parece. La siguiente figura muestra el esquema de conexin adecuado, mientras que el programa correspondiente se encuentra en la pgina siguiente.

Cuando la fuente de alimentacin pasa, cada segundo el LED emite luz PORTB, lo que indica que el microcontrolador est correctamente conectado y funciona normalmente. Este ejemplo muestra cmo una cabecera escritas correctamente parece. Cabecera es el mismo para todos los programas descritos en este documento por lo que se omiten en los siguientes ejemplos. De todos modos, se considera que al comienzo de cada programa marcado como cabecera.

Para hacer este ejemplo ms interesante, que permitir a los LEDs conectados a PORTB a parpadear. Hay varias maneras de hacerlo:

1. Tan pronto como el microcontrolador est activada, todos los LEDs se emiten luz para un segundo. La funcin de retardo est a cargo de la misma en el programa. Slo tienes que configurar retardo expresado en milisegundos. 2. Despus de un segundo, el programa entra en el bucle y permanece all mientras variable k es menor que 20. La variable se incrementa en 1 despus de cada iteracin. Dentro del bucle for, el ciclo de trabajo de los pulsos es de 5:1 (500 ms: 100 ms) y cualquier cambio de estado lgico de los pines de salida hace que todos los LED parpadeen. 3. Cuando el programa se cierra el bucle, los cambios en la lgica del Estado (PORTB 0xb 01.010.101) y el programa entra en el bucle while infinito y permanece all tanto tiempo como 1 = 1 (bucle infinito). En este circuito el estado lgico PORTB se invierte cada 200 ms.

4,4 Ejemplo 2
Utilice las instrucciones de montaje y LFINTOSC oscilador interno ...
Este ejemplo es en realidad una secuela de la anterior. Se trata de un problema poco ms complicado ... La idea es hacer que los LEDs en un abrir y cerrar PORTB lentamente. Se puede hacer mediante el establecimiento de parmetro de retardo a ser grande en la funcin de retardo. Pero tambin hay otra forma ms eficiente de hacerlo. Te acuerdas de que este microcontrolador tiene un oscilador de LFINTOSC integrada que opera en la frecuencia de 31kHz? Ahora, es hora de darle una oportunidad. El programa comienza con el bucle do-hasta y se mantiene esta memoria para 20 ciclos. Despus de cada iteracin, se proporciona retraso de 100ms, lo cual se refleja como un LED PORTB relativamente rpido parpadeo. Cuando el programa se sale de este bucle, el microcontrolador inicia mediante el

oscilador LFINTOSC como una fuente de seal de reloj. LED parpadea mucho ms lento ahora, a pesar de que el programa ejecuta el mismo do-while con 10 veces menor demora. Para demostrar una situacin potentionally peligroso, bits de control son activados por instrucciones de montaje. En pocas palabras, al entrar o salir de una secuencia de montaje en el programa, el compilador no guardar los datos en el activo del banco de RAM, lo que significa que en esta seccin del programa, la seleccin del banco depende de francos suizos se inscribe en el uso. Al volver a la seccin de programa escrito en Basic, los bits de control RP0 y RP1 deben regresar al estado que tenan antes de entrar en la secuencia de montaje. En este caso, la variable saveBank auxiliar se utiliza para guardar el estado de estos dos bits.

Header ********************************************* program example_2 ' Program name dim k as byte ' Variable k is of byte type dim saveBank as byte ' Variable saveBank is of byte type main: ' Start of program k = 0 ' Initial value of variable k ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTB = 0 ' All PORTB pins are set to 0 TRISB = 0 ' PORTB pins are configured as outputs do PORTB = not PORTB Delay_ms(100) k = k+1 loop until k=20 ' ' ' ' Invert PORTB logic state 100mS delay Increment k by 1 Remain in loop while k<20

k=0 ' Reset variable k saveBank = STATUS and %01100000 ' Save the state of bits RP0 and RP1 ' (bits 5 and 6 of the STATUS register) asm ' Start of assembly sequence bsf STATUS,RP0 ' Select memory bank containing bcf STATUS,RP1 ' the OSCCON register bcf OSCCON,6 ' Select internal oscillator LFINTOSC bcf OSCCON,5 ' with a frequency of 31KHz bcf OSCCON,4 bsf OSCCON,0 ' Microcontroller uses internal oscillator end asm ' End of assembly sequence STATUS = STATUS and %10011111 ' Bits RP0 and RP1 return their original state STATUS = STATUS or saveBank do PORTB = not PORTB Delay_ms(10) k = k+1 loop until k=20 ' ' ' ' Invert PORTB logic state 10 mS delay Increment k by 1 Remain in loop while k<20

stay_here: goto stay_here ' Endless loop

end.
Usted ha notado que la fuente de seal de reloj se cambia sobre la marcha. Si desea asegurarse de que, quite cristal de cuarzo antes de encender el microcontrolador. El microcontrolador no empezar a funcionar debido a la Palabra de configuracin cargado con el programa requiere que el cristal de cuarzo que se preste. Si se quita este cristal ms tarde, durante una operacin, no pasar nada, es decir que no afectar al funcionamiento del microcontrolador en absoluto.

4,5 Ejemplo 3
TMR0 como contador, declarar nuevas variables, smbolos de uso, utilice un rel ...
En los dos ejemplos anteriores el microcontrolador ejecuta el programa sin verse afectada por su entorno. Prcticamente, basados en microcontroladores los dispositivos que funcionan de esta manera son muy raras (por ejemplo, un controlador de nen simple seal).Clavijas de entrada tambin se utilizan en este ejemplo. El esquema que se da en la figura de abajo, mientras que el programa est en la pgina siguiente. Todava es muy simple. Temporizador TMR0 se utiliza como un contador. La entrada del contador est conectado a un pulsador de tal manera que cualquier presin botn hace que el temporizador TMR0 para contar un pulso. Cuando el nmero de impulsos coincide con el nmero almacenado en el registro de prueba, un uno lgico (5V) aparecer en el pasador PORTD.3. Esta tensin se utiliza para activar un rel electromecnico, y esto un poco por eso se llama 'relay' en el programa. Aqu, la prueba de registro de nmero de tiendas 5. Por supuesto, puede ser cualquier nmero que se obtiene ya sea por la computacin o define como una constante. Adems, el microcontrolador puede ejecutar algn otro dispositivo en lugar de rel, mientras que un sensor puede ser usado en lugar del botn pulsador. Este ejemplo ilustra una de las aplicaciones ms comunes del microcontrolador en la industria, cuando algo se lleva a cabo tantas veces como sea necesario, entonces algo ms debe estar encendido o apagado ....

' Header****************************************************** program example_3 ' Program name symbol RELAY = PORTD.3 ' Pin PORTD.3 is named RELAY dim TEST as byte ' Variable TEST is of byte type main: ' Start of program TEST = 5 ' Constant TEST = 5 ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTA = 0 ' Reset PORTA TRISA = 0xFF ' All portA pins are configured as inputs PORTD = 0 ' Reset PORTD TRISD = %11110111 ' Pin RD3 is configured as an output, while other pins are ' configured as inputs OPTION_REG.5 = 1 ' Counter TMR0 receives pulses through the RA4 pin OPTION_REG.3 = 1 ' Prescaler rate is 1:1 TMR0 = 0 ' Reset timer/counter TMR0 while 1 if TMR0 = TEST then constant TEST? RELAY = 1 RELAY) end if wend end. ' Does the number in timer match ' Numbers match. Set the RD3 bit (output ' Remain in endless loop ' End of program

Slo un smbolo (Relay) se utiliza aqu. Se le asigna el tercer pin del PORTD en la declaracin.

symbol RELAY = PORTD.3 ' Symbol RELAY = PORTD.3

Si varios pines del puerto D se conectan a los rels, la expresin anterior se puede escribir de esta manera, as:

4,6 Ejemplo 4
Utilice Timer0, Timer1 y Timer2. Utilice las interrupciones, declarar el nuevo procedimiento ...
Si usted ha ledo los ejemplos anteriores, es probable que haya notado una desventaja del uso de las demoras. En todos estos casos, el microcontrolador es "cautivo" y no hace nada. Simplemente espera a que un cierto tiempo para pasar. Tales residuos de tiempo a menudo es un lujo inaceptable y algn otro mtodo debe ser empleado aqu. Te acuerdas de la historia de los temporizadores? Las interrupciones? En este ejemplo se hace la conexin entre ellos de una manera prctica. El esquema sigue siendo el mismo y el desafo tambin. Es necesario proporcionar un retardo de tiempo suficientemente largo para observar cambios en un puerto. Temporizador TMR0 con pre-escalador asignado se utiliza para este propsito. Se genera una interrupcin en cada registro de desbordamiento del temporizador y cada incrementos de rutina de interrupcin de la variable cnt por 1.Cuando llegue a 50, el PORTB se incrementa en 1. Todo el procedimiento se lleva a cabo "entre bastidores", que permite al microcontrolador para hacer otra cosa.

' Header****************************************************** program example_4a ' Start of program dim cnt as byte ' Define variable cnt as byte sub procedure interrupt ' should ' generated cnt = cnt + 1 ' incremented by 1 TMR0 = 96 ' value INTCON = 0x20 ' end sub ' main: OPTION_REG = 0x84 ANSEL = 0 digital ANSELH = 0 TRISB = 0 outputs PORTB = 0x0 TMR0 = 96 INTCON = 0xA0 cnt = 0 while 1 if cnt = 50 then PORTB = PORTB + 1 cnt = 0 end if wend end. ' End of program This subprocedure determines what be done when an interrupt is Interrupt causes cnt to be Timer TMR0 is returned its initial Bit T0IE is set, bit T0IF is cleared End of interrupt routine

' Start of program ' Prescaler is assigned to timer TMR0 ' All I/O pins are configured as ' All PORTB pins are configured as ' ' ' ' ' ' ' ' Reset PORTB Timer T0 counts from 96 to 255 Enable interrupt TMR0 Variable cnt is assigned a 0 Endless loop Increment PORTB after 50 interrupts Increment number on PORTB by 1 Reset variable cnt

Se genera una interrupcin en cada temporizador registro TMR0 desbordamiento.

'Header****************************************************** program example_4b ' Program name dim cnt as byte ' Define variable cnt sub procedure interrupt cnt = cnt+1 incremented by 1 PIR1.TMR1IF = 0 TMR1H = 0x80 returned TMR1L = 0x00 ' Define interrupt subprocedure ' Interrupt causes cnt to be ' Reset bit TMR1IF ' TMR1H and TMR1L timer registers are ' their initial values

end sub main: ANSEL = 0 digital ANSELH = 0 PORTB = 0xF0 TRISB = 0 T1CON = 1 PIR1.TMR1IF = 0 TMR1H = 0x80 TMR1L = 0x00 PIE1.TMR1IE = 1 cnt = 0 INTCON = 0xC0 while 1 if cnt = 76 then interrupts PORTB = not PORTB cnt = 0 end if wend end.

' End of interrupt routine ' Start of program ' All I/O pins are configured as ' ' ' ' ' Initial value of PORTB bits PORTB pins are configured as outputs Set timer TMR1 Reset bit TMR1IF Set initial value for timer TMR1

' Enable interrupt on overflow ' Reset variable cnt ' Enable interrupt (bits GIE and PEIE) ' Endless loop ' Change PORTB state after 76 ' Number in PORTB is inverted ' Reset variable cnt

' End of program

En este caso, una interrupcin se habilita despus de que el temporizador registro TMR1 (TMR1H y TMR1L) de desbordamiento. La combinacin de bits cambiantes en PORTB es diferente de la que en el ejemplo anterior.

'Header****************************************************** program example_4c ' Program name dim cnt as byte ' Define variable cnt as byte sub procedure Replace PORTB = not PORTB end sub sub procedure interrupt if PIR1.TMR2IF then cnt = cnt +1 PIR1.TMR2IF = 0 TMR2 = 0 end if end sub ' Define procedure Replace ' Define new procedure Replace ' Procedure inverts port state ' ' ' ' ' Define interrupt subprocedure If bit TMR2IF = 1, Increment variable cnt by 1 Reset bit and reset register TMR2

' End of interrupt routine

main: cnt = 0 ANSEL = 0 digital ANSELH = 0 PORTB = %10101010 TRISB = 0 outputs T2CON = 0xFF TMR2 = 0 PIE1.TMR2IE = 1 INTCON = 0xC0 while 1 if cnt > 30 then interrupts Replace state cnt = 0 end if wend end.

' Start of program ' Reset variable cnt ' All I/O pins are configured as ' Logic state on PORTB pins ' All PORTB pins are configured as ' ' ' ' Set timer T2 Initial value of timer register TMR2 Enable interrupt Set bits GIE and PEIE

' Endless loop ' Change PORTB after more than 30 ' Function Replace inverts the PORTB ' Reset variable cnt

' End of program

Esta vez, se genera una interrupcin despus de temporizador registro de desbordamiento TMR2 se produce. El procedimiento Reemplazar, que normalmente no pertenece a mikroBasic, se utiliza en este ejemplo para invertir puerto estado pasadores.

4,7 Ejemplo 5
Utilice el temporizador perro guardin
Este ejemplo ilustra cmo el temporizador de reloj perro no debe ser utilizado. Un comando que se utiliza para reiniciar el contador se ha dejado intencionadamente en el bucle principal del programa, lo que le permiti ganar la batalla del tiempo y hacer que el microcontrolador que se restablezca. Como resultado, el microcontrolador se restablece cada vez, que es indicado por los LEDs PORTB parpadear.

'Header****************************************************** program example_5 ' Program name main: ' Start of program OPTION_REG = 0x0E ' Prescaler is assigned to timer WDT (1:64) asm CLRWDT ' Assembly command to reset WDT timer end asm PORTB = 0x0F ' Initial value of the PORTB register TRISB = 0 ' All PORTB pins are configured as outputs Delay_ms(300) ' 30mS delay PORTB = 0xF0 ' Port PORTB value different from initial while 1 ' Endless loop. Program remains here until WDT wend ' timer resets the microcontroller end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesaria para que el temporizador de vigilancia mediante la seleccin deltemporizador Watchdog - opcin Activado en m programador.

4.8 Ejemplo 6
Mdulo CCP1 como un generador de seal PWM
Este ejemplo ilustra el uso de CCP1 mdulo en modo PWM. Para hacerlo ms interesante, la anchura de impulsos de salida P1A (PORTC, 2) se puede cambiar con los pulsadores simblicamente marcado como "oscura" y "brillante", mientras que la anchura conjunto es visible como una combinacin binaria en PORTB. El funcionamiento de este mdulo est bajo el control de los procedimientos pertenecientes a la Biblioteca especializada PWM. Tres de ellos se utilizan aqu:

1. PWM1_init tiene el prototipo: sub procedure PWM1_Init( const freq as

longint )
Parmetro de frecuencia fija la frecuencia de la seal PWM expresada en Herz. En este ejemplo es 5 KHz. 2. PWM1_Start tiene el prototipo: sub procedure PWM1_Start() 3. PWM1_Set_Duty tiene el prototipo: sub

procedure PWM1_Set_Duty( dim duty_ratio as byte )


Duty_ratio parmetro establece la duracin del pulso en una secuencia de pulsos.
La biblioteca de PWM tambin contiene el procedimiento PWM_Stop utiliza para desactivar este modo. Su prototipo es: sub procedurePWM1_Stop()

' Header ****************************************************** program example_6 ' Program name dim current_duty, old_duty, oldstate as byte ' Define variables current_duty ' old_duty and oldstate main: ' Start of program ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTA = 255 ' PORTA initial state TRISA = 255 ' All PORTA pins are configured as inputs PORTB = 0 ' Initial state of PORTB TRISB = 0 ' All PORTB pins are configured as outputs

PORTC = 0 TRISC = 0 PWM1_Init(5000) current_duty = 16 old_duty = 0 PWM1_Start()

' ' ' ' ' '

PORTC initial state All PORTC pins are configured as outputs PWM module initialization (5 KHz) Initial value of variable current_duty Reset variable old_duty Start PWM1 module

while 1 ' Endless loop if oldstate and Button(PORTA, 0,1,1) then ' If the button connected to RA0 is pressed current_duty = current_duty + 1 ' increment variable current_duty if Button(PORTA, 0, 1, 1) then oldstate = 255 end if end if if oldstate and Button(PORTA, 1,1,1) then ' If the button connected to RA1 is pressed current_duty = current_duty - 1 ' decrement value current_duty if Button(PORTA, 1, 1, 1) then oldstate = 255 end if end if if old_duty <> current_duty then and old_duty are not PWM1_Set_Duty(current_duty) a new value, old_duty = current_duty value PORTB = old_duty PORTB end if Delay_ms(200) wend end.
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:

' If current_duty ' equal set PWM to ' save the new ' and show it on

' 200mS delay

PWM Botn

4,9 Ejemplo 7
Use un convertidor A / D
Un convertidor A / D, previsto en el PIC16F887 se utiliza en este ejemplo. Es necesario decir que todo es sencillo? Una seal analgica variable se aplica a la patilla AN2, mientras que el 10 - resultado poco de conversin se muestra en los puertos PORTB y PORD (8 bits menos significativos en PORTD y 2 MSB en PORTB). GND se utiliza como una tensin de referencia Vref negativo, mientras que el VCC se utiliza como una referencia de tensin positiva. Si utiliza una tensin varriable como Vref + (refirase a la parte discontinua del esquema) que ser capaz de "estirar y encoger" el rango de medicin de tensin.

En otras palabras, el convertidor A / D siempre genera un nmero binario de 10-bits, lo que significa que detecta 1024 niveles de voltaje (210 = 1.024) en total. La diferencia entre dos niveles de tensin no es siempre la misma. Cuanto menor es la diferencia entre Vref + y Vref-, menor es la diferencia entre dos niveles de 1024. Como se puede ver, el convertidor A / D es capaz de detectar ligeros cambios en el voltaje.

'Header****************************************************** program example_7 ' Program name dim temp_res as word ' Variable temp_res is of word type main: ' Start of program ANSEL = 0x0C ' Pin AN2 is configured as analog TRISA = 0xFF ' All PORTA pins are configured as inputs

ANSELH = 0 TRISB = 0x3F TRISD = 0 ADCON1.B4 = 0

' ' ' ' '

Other pins are configured as digital PORTB pins RB7 and RB6 are configured as outputs All PORTD pins are configured as outputs Positive voltage reference is VCC.

while 1 ' Endless loop temp_res = ADC_Read(2) ' Result of A/D conversion is copied to temp_res PORTD = temp_res ' 8 LSBs are moved to PORTD PORTB = temp_res >> 2 ' 2 MSBs are moved to bits RB6 and RB7 wend end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca de ADC en el Library Manager antes de compilar:

ADC

4,10 Ejemplo 8
El uso de memoria EEPROM
Este ejemplo ilustra escribir y leer desde incorporada en la memoria EEPROM. El programa funciona como sigue. El ciclo principal se lee la ubicacin de la memoria EEPROM en la direccin 5. El programa entra entonces en un bucle sin fin en el que PORTB se incrementa y el estado de PORTA.2 entrada se comprueba. En el momento de pulsar la tecla marcada MEMO, un nmero almacenado en PORTB ser guardado en la memoria EEPROM en la direccin 5 y leer directamente de l y se muestra en PORTD en formato binario.

'Header****************************************************** program example_8 ' Program name main: ' Start of program ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTB = 0 ' PORTB initial value TRISB = 0 ' All PORTB pins are configured as outputs PORTD = 0 ' PORTB initial value TRISD = 0 ' All PORTD pins are configured as outputs TRISA = 0xFF ' All PORTA pins are configured as inputs

PORTD = EEPROM_Read(5) ' Read EEPROM memory at address 5 while 1 ' Endless loop PORTB = PORTB + 1 ' Increment PORTB by 1 Delay_ms(100) ' 100mS delay while not PORTA.B2 ' Remain in this loop as long as the button is pressed if not PORTA.B2 then EEPROM_Write(5,PORTB) ' If MEMO is pressed, save PORTB PORTD = EEPROM_Read(5) ' Read written data end if wend wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la librera EEPROM en el Library Manager antes de compilar:

EEPROM

Con el fin de comprobar si este programa funciona correctamente, basta con pulsar el botn MEMO y luego apagar el microcontrolador.Despus de reiniciarlo, el programa mostrar el PORTD el valor almacenado en la memoria EEPROM en addrsess 5. Recuerde que en el momento de la escritura, este valor se muestra en PORTB.

4,11 Ejemplo 9
Cuatro dgitos LED contra, la multiplexacin
El microcontrolador funciona como un contador de cuatro dgitos aqu. Variable i se incrementa (lo suficientemente lento como para ser notado) y su valor se muestra en un display de cuatro dgitos LED (9999-0). El objetivo es convertir un nmero binario a decimal, que se dividi en cuatro dgitos (miles, centenas, decenas y unidades). Dado que los segmentos de la pantalla LED estn conectados en paralelo, es necesario asegurarse de que cambian lo suficientemente rpido para hacer impresin de emisin de luz simultnea (tiempo multiplexado por divisin). En este ejemplo, el temporizador TMR0 est a cargo de la multiplexacin de tiempo, mientras que la funcin de mscara se utiliza para convertir un nmero binario a decimal.

'Header****************************************************** program example_9 ' Program name dim shifter, portd_index as byte ' Variables shifter and portd_index are of byte type digit, number as word ' Variables digit and number are of word type portd_array as word[4] ' Array portd_array has 4 members of word type sub function mask (dim num as Word) as Word ' Subroutine for masking select case num ' used to convert binary case 0 result = $3F ' numbers into appropriate case 1 result = $06 ' combination of bits to be case 2 result = $5B ' displayed on LED display case 3 result = $4F case 4 result = $66 case 5 result = $6D case 6 result = $7D case 7 result = $07 case 8 result = $7F case 9 result = $6F end select ' Case end end sub ' End of subroutine sub procedure interrupt ' Start of interrupt routine PORTA = 0 ' Turn off all 7-segment displays PORTD = portd_array [portd_index] ' Send appropriate value to PORTD PORTA = shifter ' Turn on appropriate 7-segment display shifter = shifter << 1 ' Move shifter to the next digit

if (shifter > 8) then shifter = 1 end if Inc(portd_index) ' Increment portd_index

if (portd_index > 3) then portd_index = 0 ' Turn on 1st, turn off 4th 7segment display end if TMR0 = 0 T0IF_bit = 0 end sub main: ANSEL = 0 ANSELH = 0 OPTION_REG = $80 prescaler) digit = 0 portd_index = 0 shifter = 1 TMR0 = 0 INTCON = $A0 PORTA = 0 TRISA = 0 PORTD = 0 TRISD = 0 number = 6789 ' Reset TIMER0 value ' Clear Timer0 interrupt flag ' End of interrupt routine ' Start of program ' Configure analog pins as digital I/O ' Timer0 settings (Timer0 work as timer with ' ' ' ' ' ' ' ' ' ' Initial value of variable Turn on 1st LED display Initial value of variable Clear Timer0 Enable interrupt with GIE Clear PORTA Set PORTA as output Clear PORTD Set PORTD as output Some initial value on LED ' ' ' ' ' ' ' ' digit shifter and T0IE bits

display

while TRUE ' Endless loop digit = number / 1000 portd_array[3] = mask(digit) digit = (number / 100) mod 10 portd_array[2] = mask(digit) digit = (number / 10) mod 10 portd_array[1] = mask(digit) digit = number mod 10 portd_array[0] = mask(digit) Delay_ms(1000) Inc(number) if (number > 9999) then number = 0 end if wend end. ' End of program

Extract thousands and store it to PORTD Extract hundreds and store it to PORTD Extract tens and store it to PORTD Extract ones and store it to PORTD

array array array array

' One second delay ' Increment number ' Start to count from zero

4,12 Ejemplo 10
Utilice la pantalla LCD
Este ejemplo ilustra el uso de una pantalla LCD alfanumrica. Las bibliotecas de funciones que este programa sea ms sencillo. Dos mensajes escritos en dos lneas en la pantalla: mikroElektronika LCD de ejemplo Dos segundos ms tarde, el segundo mensaje se sustituye con la tensin presente en la entrada convertidor A / D (el pasador RA2). Por ejemplo: mikroElektronika Voltaje: 3.141V De todos modos, la temperatura actual o algn otro valor medido se puede visualizar en vez de la tensin.

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:

ADC LCD

'Header*************************************************** *** program example_10 ' Program name dim LCD_RS as sbit at RB4_bit ' Lcd module connections LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit

LCD_D4_Direction LCD_D5_Direction LCD_D6_Direction LCD_D7_Direction connections

as as as as

sbit sbit sbit sbit

at at at at

TRISB0_bit TRISB1_bit TRISB2_bit TRISB3_bit ' End Lcd module

dim text as string [16] type dim ch, adc_rd as word word type dim tlong as longword type main: TRISB = 0 configured as outputs PORTB = 0xFF INTCON = 0 ANSEL = 0x04 analog input TRISA = 0x04 ANSELH = 0 digital Lcd_Init() Lcd_Cmd(_LCD_CURSOR_OFF) Lcd_Cmd(_LCD_CLEAR) text = "mikroElektronika" Lcd_Out(1,1,text) first line text = "LCD example" Lcd_Out(2,1,text) the second line ADCON1 = 0x80 TRISA = 0xFF as inputs Delay_ms(2000) text = "Voltage=" while 1 adc_rd = ADC_Read(2) input. Lcd_Out(2,1,text) line tlong = adc_rd * 5000 millivolts tlong = tlong / 1023 ch = (tlong / 1000) mod millivolts)

' Variable text is of string ' Variables ch and adc_rd are of ' Variable tlong is of longword ' Start of program ' All port PORTB pins are ' All interrupts disabled ' Pin RA2 is configured as an ' Rest of pins is configured as ' LCD display initialization ' LCD command (cursor off) ' LCD command (clear LCD) ' Define the first message ' Write the first message in the ' Define the second message ' Write the second message in ' A/D voltage reference is VCC ' All PORTA pins are configured ' Define the third message ' Endless loop ' A/D conversion. Pin RA2 is an ' Write result in the second ' Convert the result in ' 0..1023 -> 0-5000mV 10 ' Extract volts (thousands of

' from result Lcd_Chr(2,9,48+ch) ' Write result in ASCII format Lcd_Chr_CP(".") ' Write the decimal pint ch = (tlong / 100) mod 10 ' Extract hundreds of millivolts

Lcd_Chr_CP(48+ch) ch = (tlong / 10) mod 10 Lcd_Chr_CP(48+ch) ch = tlong mod 10 millivolts Lcd_Chr_CP(48+ch) Lcd_Chr_CP("V") Delay_ms(1) wend end. ' End of program

' ' ' '

Write result in ASCII format Extract tens of millivolts Write result in ASCII format Extract digits for

' Write result in ASCII format ' Write a mark for voltage "V" ' 1mS delay

4,13 Ejemplo 11
Comunicacin serie RS232
Este ejemplo ilustra el uso de mdulo EUSART del microcontrolador. La conexin entre el microcontrolador y un PC se elabora en cumplimiento con el estndar de comunicacin RS232. El programa funciona como sigue. Cada byte recibido la comunicacin serie se muestra mediante diodos LED conectados al PORTB y se enva automticamente al remitente sobre el mismo. La forma ms fcil de probar el funcionamiento del programa es el uso de un programa estndar de Windows llamado Hyper Terminal.

' Header****************************************************** program example_11 ' Program name dim i as byte ' Variable is of byte type main: ' Start of program UART1_Init(19200) ' Initialize USART module ' (8 bit, 19200 baud rate, no parity bit...) while 1 ' Endless if UART1_Data_Ready() then i = UART1_Read() UART1_Write(i) end if wend end. loop ' If data has been received ' read it ' and send it back

' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca UART en el Library Manager antes de compilar:

UART

4,14 Ejemplo 12
Medir la temperatura con el sensor DS1820. El uso del protocolo '1-wire '...
La medicin de temperatura es una de las operaciones ms comunes realizadas por el microcontrolador. Un sensor de temperatura DS1820 se utiliza aqu para medir. Es capaz de medir la temperatura dentro del intervalo de -55 C a 125 C con un 0,5 C de exactitud.Para transferir datos al microcontrolador, un tipo especial de comunicacin serial denominado 1-wire se utiliza. Debido a su aplicacin simple y ancho, tales sensores son dirigidos y controlados por las funciones almacenados en la biblioteca One_Wire.

Esta biblioteca contiene tres funciones en total:

Ow_Reset se utiliza para reiniciar el sensor; Ow_Read se utiliza para recibir los datos del sensor, y Ow_Write se utiliza para enviar comandos al sensor.

Aqu puede ver la ventaja de utilizar las bibliotecas con listas para usar las funciones. Usted, evidentemente, no es necesario estudiar la documentacin aportada por el fabricante a fin de utilizar este sensor adecuadamente. Es suficiente para copiar las funciones apropiadas para el programa. Si usted quiere saber cmo cualquiera de estas funciones se declara, simplemente haga clic derecho sobre l y seleccione la opcin de ayuda.

' Header****************************************************** program example_12 ' Program name dim LCD_RS as sbit at RB4_bit ' Lcd module connections LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB0_bit LCD_D5_Direction as sbit at TRISB1_bit

LCD_D6_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB3_bit ' End Lcd module connections ' Set TEMP_RESOLUTION to the corresponding resolution of the DS18x20 sensor in use: ' 18S20: 9 (default setting can be 9,10,11 or 12); 18B20: 12 const TEMP_RESOLUTION as byte = 9 ' Constant TEMP_RESOLUTION is of byte type dim text as char[9] ' Variable text is of char type temp as word ' Variable temp is of word type sub procedure Display_Temperature( dim temp2write as word ) const RES_SHIFT = TEMP_RESOLUTION - 8 dim temp_whole as byte ' Variable temp_whole is of byte type temp_fraction as word ' Variable temp_fraction is of word type text = "000.0000" if (temp2write and 0x8000) then ' Check if temperature is negative text[0] = "-" temp2write = not temp2write + 1 end if temp_whole = word(temp2write >> RES_SHIFT) ' Extract temp_whole if ( temp_whole div 100 ) then ' Convert temp_whole to characters text[0] = temp_whole div 100 + 48 else text[0] = "0" end if text[1] = (temp_whole div 10) mod 10 + 48 ' tens text[2] = temp_whole mod 10 + 48 ' ones temp_fraction = word(temp2write << (4-RES_SHIFT)) ' temp_fraction temp_fraction = temp_fraction and 0x000F ' convert it to temp_fraction = temp_fraction * 625 ' int text[4] = word(temp_fraction div 1000) + 48 ' thousands text[5] = word((temp_fraction div 100) mod 10 + 48) hundreds text[6] = word((temp_fraction div 10) mod 10 + 48) tens Extract Extract Extract and unsigned Extract ' Extract ' Extract

text[7] = word(temp_fraction mod 10) + 48 ones Lcd_Out(2, 5, text) temperature on Lcd end sub main: ' Start of program ANSEL = 0 ' Configure analog pins as digital I/O ANSELH = 0 text = "000.0000" Lcd_Init() ' Initialize Lcd Lcd_Cmd(_LCD_CLEAR) ' Clear Lcd Lcd_Cmd(_LCD_CURSOR_OFF) ' Turn off cursor Lcd_Out(1, 1, " Temperature: ")

' Extract ' Print

Lcd_Chr(2,13,178) ' Print degree character, "C" for Centigrades ' Different LCD displays have different char code for degree Lcd_Chr(2,14,"C") ' If you see greek letter alpha type 178 instead of 223 while 1 ' Temperature is read in the main loop Ow_Reset(PORTE, 2) ' Onewire reset signal Ow_Write(PORTE, 2, 0xCC) ' Issue command SKIP_ROM Ow_Write(PORTE, 2, 0x44) ' Issue command CONVERT_T Delay_us(120) Ow_Reset(PORTE, 2) Ow_Write(PORTE, 2, 0xCC) ' Issue command SKIP_ROM Ow_Write(PORTE, 2, 0xBE) ' Issue command READ_SCRATCHPAD temp = Ow_Read(PORTE, 2) temp = (Ow_Read(PORTE, 2) << 8) + temp Display_Temperature(temp) ' Format and display result on Lcd Delay_ms(520) wend end. ' 520 mS delay ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:

One_Wire LCD

4,15 Ejemplo 13
La generacin de sonido, librera de sonidos ...
Las seales de audio a menudo se utiliza cuando es necesario llamar la atencin del usuario para hacer algo, para confirmar que uno de los botones es presionado, para advertir que los valores mnimos y mximos se alcanzan, etc Puede ser slo un "beep" como seal de as como melodas ms largos o ms cortos. Este ejemplo muestra cmo generar un sonido con las funciones que pertenecen a la biblioteca de sonido.

Adicionalmente a estas funciones, la funcin del botn tambin se utiliza para probar los pulsadores.

'Header****************************************************** program example_13 ' Program name sub procedure Tone1() Sound_Play(659, 250) ' Frequency = 659Hz, duration = 250ms end sub sub procedure Tone2() Sound_Play(698, 250) ' Frequency = 698Hz, duration = 250ms end sub sub procedure Tone3() Sound_Play(784, 250) ' Frequency = 784Hz, duration = 250ms end sub

sub procedure Melody() ' Play the melody "Yellow house" Tone1() Tone2() Tone3() Tone3() Tone1() Tone2() Tone3() Tone3() Tone1() Tone2() Tone3() Tone1() Tone2() Tone3() Tone3() Tone1() Tone2() Tone3() Tone3() Tone3() Tone2() Tone2() Tone1() end sub sub procedure ToneA() ' Tones used in Melody2 function Sound_Play( 880, 50) end sub sub procedure ToneC() Sound_Play(1046, 50) end sub sub procedure ToneE() Sound_Play(1318, 50) end sub sub procedure Melody2() ' Play Melody2 dim counter as byte for counter = 9 to 1 step -1 ToneA() ToneC() ToneE() next counter end sub main: ' Start of program ANSEL = 0 ANSELH = 0 ' Configure analog pins as digital I/O

C1ON_bit = 0 ' Disable comparators C2ON_bit = 0 TRISB = 0xF0 ' Configure RB7..RB4 as inputs and RB3 as output Sound_Init(PORTD, 3) Sound_Play(880, 5000) while TRUE ' Endless loop if (Button(PORTB,7,1,1)) then ' If PORTB.7 is pressed play Tone1 Tone1() while (RB7_bit <> 0) nop ' Wait for the button to be released wend end if if (Button(PORTB,6,1,1)) then ' If PORTB.6 is pressed play Tone1 Tone2()

while (RB6_bit <> 0) nop ' Wait for the button to be released wend end if if (Button(PORTB,5,1,1)) then ' If PORTB.5 is pressed play Tone1 Melody2() while (RB5_bit <> 0) nop ' Wait for the button to be released wend end if if (Button(PORTB,4,1,1)) then ' If PORTB.4 is pressed play Tone1 Melody() while (RB4_bit <> 0) nop ' Wait for the button to be released wend end if wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:

Botn Sonido

4,16 Ejemplo 14
Use pantalla LCD grfica
Una pantalla grfica LCD (GLCD) proporciona un mtodo avanzado para la visualizacin de los mensajes visuales. Mientras que la pantalla LCD de carcter slo puede mostrar caracteres alfanumricos, el GLCD tambin puede mostrar los mensajes en forma de dibujos y mapas de bits. Los ms comnmente utilizados grfica LCD tiene una resolucin de pantalla de 128x64 pxeles. El contraste GLCD se puede ajustar por medio de potencimetro P1. Aqu, el GLCD muestra un camin del mapa de bits de los cuales se almacena en la truck_bmp.mbas archivo.

'Header****************************************************** program example_14 ' Program name dim GLCD_DataPORT as byte at PORTD dim GLCD_CS1 as sbit at RB0_bit ' Glcd module connections GLCD_CS2 as sbit at RB1_bit GLCD_RS as sbit at RB2_bit GLCD_RW as sbit at RB3_bit GLCD_EN as sbit at RB4_bit GLCD_RST as sbit at RB5_bit dim GLCD_CS1_Direction as sbit at TRISB0_bit GLCD_CS2_Direction as sbit at TRISB1_bit GLCD_RS_Direction as sbit at TRISB2_bit GLCD_RW_Direction as sbit at TRISB3_bit GLCD_EN_Direction as sbit at TRISB4_bit GLCD_RST_Direction as sbit at TRISB5_bit ' End Glcd module

connections dim counter as byte someText as char[18] sub procedure Delay2S() ' 2 seconds delay sub function Delay_ms(2000) end sub main: ANSEL = 0 ANSELH = 0 ' Start of program ' Configure analog pins as digital I/O

Glcd_Init() ' Initialize Glcd Glcd_Fill(0x00) ' Clear Glcd while TRUE Glcd_Image(@truck_bmp) Delay2S() delay2S() Glcd_Fill(0x00) ' Endless loop ' Draw image ' Clear Glcd

Glcd_Box(62,40,124,63,1) ' Draw box Glcd_Rectangle(5,5,84,35,1) ' Draw rectangle Glcd_Line(0, 0, 127, 63, 1) ' Draw line Delay2S() counter = 5 while (counter <= 59) ' Draw horizontal and vertical lines Delay_ms(250) Glcd_V_Line(2, 54, counter, 1) Glcd_H_Line(2, 120, counter, 1) Counter = counter + 5 wend Delay2S() Glcd_Fill(0x00) ' Clear Glcd Glcd_Set_Font(@Character8x7, 8, 7, 32) ' Choose font "Character8x7" Glcd_Write_Text("mikroE", 1, 7, 2) ' Write string for counter = 1 to 10 ' Draw circles Glcd_Circle(63,32, 3*counter, 1) next counter Delay2S() Glcd_Box(10,20, 70,63, 2) Delay2S() Glcd_Fill(0xFF) Glcd_Set_Font(@Character8x7, 8, 7, 32) someText = "8x7 Font" ' Draw box ' Fill Glcd ' Change font

Glcd_Write_Text(someText, 5, 0, 2) delay2S() Glcd_Set_Font(@System3x5, 3, 5, 32) someText = "3X5 CAPITALS ONLY" Glcd_Write_Text(someText, 60, 2, 2) delay2S() Glcd_Set_Font(@font5x7, 5, 7, 32) someText = "5x7 Font" Glcd_Write_Text(someText, 5, 4, 2) delay2S()

' Write string ' Change font ' Write string ' Change font ' Write string

Glcd_Set_Font(@FontSystem5x7_v2, 5, 7, 32) ' Change font someText = "5x7 Font (v2)" Glcd_Write_Text(someText, 5, 6, 2) ' Write string delay2S() wend end. ' End of program
truck_bmp.mbas file:

module bitmap ' Module with bitmap code const truck_bmp as byte[1024] = (0,0,0,0,0,248,8,8,8,8,8,8,12,12,12,12,12,10,10,10,10,10,10,9,9 ,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,137,137,137,137,137,137,137,137,137,137,137,1 37,137,9,9,9,9,9, 9,9,9,9,9,9,13,253,13,195,6,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,255,0, 0,0,0,0,0,0,0,0,0,240,240,240,240,240,224,224,240,240,240,240,2 40,224,192,192,22 4,240,240,240,240,240,224,192,0,0,0,255,255,255,255,255,195,195 ,195,195,195,195, 195,3,0,0,0,0,0,0,0,0,0,0,0,0,255,240,79,224,255,96,96,96,32,32 ,32,32,32,32,32,3 2,32,32,32,32,32,64,64,64,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,255,25 5,255,255,255,0,0 ,0,0,255,255,255,255,255,0,0,0,0,255,255,255,255,255,0,0,0,255, 255,255,255,255,1 29,129,129,129,129,129,129,128,0,0,0,0,0,0,0,0,0,0,0,0,255,1,24 8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,16,224,24,36,196,70,130,130,133,217,102,112,160,19 2,96,96,32,32,160 ,160,224,224,192,64,64,128,128,192,64,128,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 63,96,96,96,224,96,96,96,96,96,96,99,99,99,99,99,96,96,96,96,99 ,99,99,99,99,96,9 6,96,96,99,99,99,99,99,96,96,96,99,99,99,99,99,99,99,99,99,99,9 9,99,99,96,96,96,

96,96,96,96,64,64,64,224,224,255,246,1,14,6,6,2,2,2,2,2,2,2,2,2 ,2,2,130,67,114,6 2,35,16,16,0,7,3,3,2,4,4,4,4,4,4,4,28,16,16,16,17,17,9,9,41,112 ,32,67,5,240,126, 174,128,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,12 7,127,127,127,255 ,255,247,251,123,191,95,93,125,189,189,63,93,89,177,115,243,229 ,207,27,63,119,25 5,207,191,255,255,255,255,255,255,255,255,127,127,127,127,127,1 27,127,127,255,25 5,255,127,127,125,120,120,120,120,120,248,120,120,120,120,120,1 20,248,248,232,14 3,0,0,0,0,0,0,0,0,128,240,248,120,188,220,92,252,28,28,60,92,92 ,60,120,248,248,9 6,192,143,168,216,136,49,68,72,50,160,96,0,0,0,0,0,0,0,0,0,128, 192,248,248,248,2 48,252,254,254,254,254,254,254,254,254,254,254,254,255,255,255, 255,255,246,239,2 08,246,174,173,169,128,209,208,224,247,249,255,255,252,220,240, 127,255,223,255,2 55,255,255,255,255,254,254,255,255,255,255,255,255,255,254,255, 255,255,255,255,2 55,255,254,254,254,254,254,254,254,254,254,254,254,254,254,254, 255,255,255,255,2 55,255,254,255,190,255,255,253,240,239,221,223,254,168,136,170, 196,208,228,230,2 48,127,126,156,223,226,242,242,242,242,242,177,32,0,0,0,0,0,0,0 ,0,0,0,1,1,1,1,3, 3,3,7,7,7,7,7,15,15,15,7,15,15,15,7,7,15,14,15,13,15,47,43,43,4 3,43,43,47,111,23 9,255,253,253,255,254,255,255,255,255,255,191,191,239,239,239,1 91,255,191,255,25 5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2 55,255,255,255,25 5,255,255,255,255,255,255,127,127,127,127,255,255,191,191,191,1 91,255,254,255,25 3,255,255,255,251,255,255,255,127,125,63,31,31,31,31,31,31,63,1 5,15,7,7,3,3,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 ,1,3,3,3,11,11,11 ,11,7,3,14,6,6,6,2,18,19,19,3,23,21,21,17,1,19,19,3,6,6,14,15,1 5,7,15,15,15,11,2 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) implements end. ' End of module

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca GLCD en el Administrador de la Biblioteca antes de la compilacin. Adems, es necesario incluir el Bitmap.mbas documento en el proyecto.

4,17 Ejemplo 15
El uso de un panel tctil
Un panel tctil es un fino, autoadhesivo panel transparente colocado sobre la pantalla de un LCD grfico. Es muy sensible a la presin de modo que incluso un toque suave hace que algunos cambios en la seal de salida. Hay unos pocos tipos de panel tctil. La ms simple es un panel tctil resistivo.

Se compone de dos lminas transparentes rgidas, formando un "sandwich" estructura, que tienen capas resistivas en sus lados interiores. La resistencia de estas capas generalmente no excede de 1K. Los lados opuestos de estas lminas tienen contactos disponibles para su uso a travs de un cable plano.

El proceso de determinacin de las coordenadas del punto en el que se pulsa el panel tctil se puede dividir en dos etapas. El primero es la determinacin de la coordenada X y la segunda es la determinacin de la coordenada Y del punto. Con el fin de determinar la coordenada X, es necesario conectar el contacto izquierdo en la superficie del suelo a una y el contacto adecuado para la fuente de alimentacin. Esto permite un divisor de tensin que se forman prensando el panel tctil. El valor del divisor se lee en el contacto con el fondo de la tensin superficial B. puede ir dentro del rango de 0 V a la fuente de alimentacin (5V) y depende de la coordenada X. Si el punto est ms cerca del contacto izquierdo de la superficie A, la tensin ser ms cercano a 0V.

Con el fin de determinar la coordenada Y, es necesario conectar el contacto con el fondo en la superficie B a tierra, y el contacto superior a la fuente de alimentacin. En este caso, el voltaje se lee en el contacto izquierdo de la superficie A. Con el fin de conectar un panel tctil al microcontrolador es necesario proporcionar un circuito de control del panel tctil. Por medio de este circuito, el microcontrolador conecta los contactos adecuados del panel tctil al suelo y la fuente de alimentacin (como se describi anteriormente) a fin de determinar las coordenadas X e Y. El contacto inferior de la superficie B y el contacto izquierdo de la superficie A estn conectados al microcontrolador es un convertidor A / D. Las coordenadas X e Y se determina midiendo la tensin en estos contactos, respectivamente. El programa relacionado describe un men en la pantalla grfica LCD, vuelve el circuito de control del panel tctil de encendido / apagado (panel sensible al tacto de conduccin) y lee los resultados de la conversin A / D, que en realidad representan las coordenadas X e Y del punto. Sobre la base de estas coordenadas es posible decidir lo que quiere el microcontrolador que hacer. En este ejemplo, el microcontrolador se activa / desactiva dos pines digitales conectados a los LEDs A y B. Funciones pertenecientes a la GLCD, librares Glcd_Fonts y ADC se utilizan en este ejemplo. Como la superficie del panel tctil es ligeramente ms grande que la superficie de la pantalla LCD grfico, es necesario realizar la calibracin del software del panel de toque con el fin de proporcionar una mayor precisin al determinar las coordenadas

'Header****************************************************** program example_15 ' Name of program dim GLCD_DataPORT as byte at PORTD ' GLCD module connections dim GLCD_CS1 as sbit at RB0_bit GLCD_CS2 as sbit at RB1_bit GLCD_RS as sbit at RB2_bit GLCD_RW as sbit at RB3_bit GLCD_EN as sbit at RB4_bit GLCD_RST as sbit at RB5_bit dim GLCD_CS1_Direction as sbit at TRISB0_bit GLCD_CS2_Direction as sbit at TRISB1_bit GLCD_RS_Direction as sbit at TRISB2_bit GLCD_RW_Direction as sbit at TRISB3_bit

GLCD_EN_Direction as sbit at TRISB4_bit GLCD_RST_Direction as sbit at TRISB5_bit ' End Glcd module connections dim x_coord, y_coord, x_coord128, y_coord64 as longint ' Scaled x-y position sub function GetX() as word PORTC.0 = 1 drive on, TOP drive off) PORTC.1 = 0 Delay_ms(5) result = ADC_Read(0) end sub sub function GetY() as word PORTC.0 = 0 drive off, TOP drive on) PORTC.1 = 1 Delay_ms(5) result = ADC_Read(1) end sub ' Reading X ' DRIVEA = 1 (LEFT drive on, RIGHT ' DRIVEB = 0 (BOTTOM drive off) ' READ-X (BOTTOM) ' Reading Y ' DRIVEA = 0 (LEFT drive off, RIGHT ' DRIVEB = 1 (BOTTOM drive on) ' READ-X (LEFT)

main: ' Start of program PORTA = 0x00 TRISA = 0x03 ' RA0 i RA1 are analog inputs ANSEL = 0x03 ANSELH = 0 ' Configure other analog pins as digital I/O PORTC = 0 TRISC = 0 ' PORTC pins are configured as outputs

Glcd_Init() ' Glcd_Init_EP5 Glcd_Set_Font(@font5x7, 5, 7, 32) ' Choose font size 5x7 Glcd_Fill(0) ' Clear GLCD Glcd_Write_Text("TOUCHPANEL EXAMPLE",10,0,1) Glcd_Write_Text("MIKROELEKTRONIKA",17,7,1) Glcd_Rectangle(8,16,60,48,1) ' Outline two buttons on GLCD: Glcd_Rectangle(68,16,120,48,1) Glcd_Box(10,18,58,46,1) Glcd_Box(70,18,118,46,1) Glcd_Write_Text("BUTTON1",14,3,0) Glcd_Write_Text("RC6 OFF",14,4,0) Glcd_Write_Text("BUTTON2",74,3,0) Glcd_Write_Text("RC7 OFF",74,4,0) while TRUE ' Read X-Y and convert it to 128x64 space x_coord = GetX() y_coord = GetY() x_coord128 = (x_coord * 128) / 1024 y_coord64 = 64 -((y_coord *64) / 1024)

' If BUTTON1 is selected: if ((x_coord128 >= 10) and (x_coord128 <= 58) and (y_coord64 >= 18) and (y_coord64 <= 46)) then if(PORTC.6 = 0) then PORTC.6 = 1 Glcd_Write_Text("RC6 ON ",14,4,0) else PORTC.6 = 0 Glcd_Write_Text("RC6 OFF",14,4,0) end if end if ' If BUTTON2 is selected: if ((x_coord128 >= 70) and (x_coord128 <= 118) and (y_coord64 >= 18) and (y_coord64 <= 46)) then if(PORTC.7 = 0) then PORTC.7 = 1 Glcd_Write_Text("RC7 ON ",74,4,0) else PORTC.7 = 0 Glcd_Write_Text("RC7 OFF",74,4,0) end if end if Delay_ms(100) wend ' While true end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:GLCD ADC C_Stdlib

4.18 Ejemplo 16
Utilice un teclado 4x4
Un teclado es slo un conjunto de pulsadores conectados de tal manera para formar los filas 'y' columnas ', reduciendo as un nmero de pines I / O necesarias para su conexin. Un teclado con 16 pulsadores dispuestos en 4 filas y 4 columnas se utiliza en este ejemplo. El teclado 4x4 biblioteca contiene todas las funciones necesarias para la lectura de este teclado, as como para inicializar el puerto que est conectado. A fin de demostrar el funcionamiento del teclado 4x4, el mensaje se muestra en una pantalla LCD.

'Header****************************************************** program example_16 ' Program name dim kp, curX, curY as byte dim keypadPORT as byte at PORTD ' This variable must be defined in all projects using Keypad Lib. ' It define the port used for keypad connection dim LCD_RS as sbit at RB4_bit ' Lcd module connections LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit

LCD_EN_Direction LCD_D4_Direction LCD_D5_Direction LCD_D6_Direction LCD_D7_Direction connections

as as as as as

sbit sbit sbit sbit sbit

at at at at at

TRISB5_bit TRISB0_bit TRISB1_bit TRISB2_bit TRISB3_bit ' End Lcd module

main: curX=1 cursor position curY=1 ANSEL = 0 ANSELH = 0 TRISB = 0 PORTB = 0xFF Keypad_Init() Lcd_Init() Lcd_Cmd(_LCD_CLEAR)

' Start of program ' For keeping a record of the 2x16 LCD ' Configure analog pins as digital I/O

' Initialize keypad on PORTC ' Initialize LCD on PORTB, ' Clear display

while true ' Wait for some key to be pressed and released kp = 0 while kp = 0 kp = Keypad_Key_Click() Delay_ms(10) wend select case kp ' Prepare value for output case 1 kp = "1" case 2 kp = "2" case 3 kp = "3" case 4 kp = "A" case 5 kp = "4" case 6 kp = "5" case 7 kp = "6" case 8 kp = "B" case 9 kp = "7" case 10 kp = "8" case 11 kp = "9" case 12 kp = "C" case 13 kp = "*" case 14 kp = "0" case 15 kp = "#" case 16 kp = "D" end select if (curY > 16) then ' Change cursor position if (curX = 1) then Lcd_Cmd(_LCD_SECOND_ROW) curX = 2 curY = 1 else Lcd_Cmd(_LCD_FIRST_ROW) curX = 1 curY = 1

end if end if Lcd_Chr_CP(kp) ' Display on LCD Inc(curY) wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar: Keypad4x4 LCD

S-ar putea să vă placă și