94233914-mikrobasic

May 28, 2018 | Author: Antonio Morales Alonso | Category: Microcontroller, Bit, Central Processing Unit, Instruction Set, Decimal
Share Embed Donate


Short Description

Download 94233914-mikrobasic...

Description

Capítulo 1: El Mundo de los Microcontroladores La situación nos encontramos hoy en el campo de los microcontroladores tiene sus inicios en el desarrollo de la tecnología de circuitos integrados. Esto nos permitió almacenar cientos de miles de transistores en un chip, que era una condición previa para la fabricación de microprocesadores. Las primeras computadoras se hicieron mediante la adición de periféricos, tales como las líneas de memoria, entrada / salida, temporizadores y otros circuitos, a la misma. Mayor incremento en la densidad de paquete resultó en el diseño de un circuito integrado que contenía tanto el procesador y los periféricos. Así es como el primer chip con una microcomputadora integrada, más tarde conocido como el microcontrolador, se ha desarrollado.

   

1.1 Introducción 1.2 NÚMEROS, NÚMEROS, NÚMEROS ... 1.3 debe conocer los detalles 1.4 Microcontroladores PIC

1.1 INTRODUCCIÓN Novicios en electrónica 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 más 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 añadir a la misma. Aunque se considera una máquina de computación potente, no es capaz de establecer una comunicación directa con los periféricos. En su lugar, los circuitos especializados debe ser utilizado para este propósito. Esto es lo que era en el principio y sigue siendo la misma hoy en día.

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

TODO EL MICROCONTROLADOR ES CAPAZ DE Los microcontroladores son muy populares hoy en día. Solo presta atención al ejemplo de abajo y usted entenderá las razones de su gran éxito. No va a tomar mucho de su tiempo, sólo un par de minutos. Alrededor de hace diez años, el proceso de diseñar un dispositivo electrónico para controlar un ascensor en un edificio de varios pisos fue extremadamente difícil, incluso para un equipo de expertos. ¿Alguna vez has pensado en lo que los requisitos de un elevador normal tiene que cumplir? ¿Cómo lidiar con la situación cuando dos o más personas lo llaman el mismo ascensor, al mismo tiempo? ¿Cuál llamada tiene la prioridad? Cómo manejar las preguntas de seguridad? La pérdida de electricidad? Error en la operación? El mal uso?Después de resolver estas cuestiones básicas, un proceso difícil de diseñar una electrónica adecuada utilizando un gran número de chips de propósito especial que viene a continuación. 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 duración y tratar. Por último, cuando el dispositivo está terminado y probado muchas veces, el momento crucial viene. El momento en el que tomar una respiración profunda y cambiar la fuente de alimentación. La fiesta ha terminado en este punto, los dispositivos electrónicos casi nunca empiezan a operar de inmediato. Prepárese para muchas noches sin dormir, correcciones, mejoras ... y no te olvides, todavía estamos hablando sobre la ejecución 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 construcción se interesen en su trabajo. Por supuesto, si tienes suerte, otro día le traerá una oferta de bloqueo de un nuevo inversor. Un nuevo edificio tiene cuatro pisos más. ¿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 electrónica? Incluso si te las arreglas para hacer esa joya de la electrónica, el inversor va a esperar frente a su puerta pidiendo una cámara en el ascensor. O para escuchar música relajante en caso de avería 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 electrónica "realmente significa. No, no, espera, vamos a corregir, así es como fue sino hasta los primeros microcontroladores fueron diseñados pequeños dispositivos, potente y barata. Desde el momento en su programación dejó de ser una ciencia, todo ha ido en otra dirección ... Electrónica capaces de controlar un pequeño submarino, una grúa o un ascensor ahora se construyen en un solo chip.Microcontroladores ofrecen una amplia gama de aplicaciones, pero sólo 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 simulación. Si todo funciona bien, la construcción del microcontrolador en el dispositivo. Si alguna vez tiene que cambiar, mejorar o actualizar el programa, simplemente lo hacemos. ¿Hasta cuándo? Hasta que usted se sienta satisfecho. Eso es todo.

¿Sabía usted que todas las personas se pueden clasificar en uno de los 10 grupos-aquellos que están familiarizados con el sistema numérico binario y los que no están familiarizados con ella. Tú no lo

entiendes? A continuación, siguen perteneciendo a este último grupo. Si desea cambiar su estado de leer el siguiente texto que describe brevemente algunos de los conceptos básicos que se utilizan más en este libro (sólo para estar seguros de que estamos en la misma página).

1.2 NÚMEROS, NÚMEROS, NÚMEROS ... La matemática es una ciencia tan buena! Todo es tan lógico ... Todo el universo puede ser descrito con diez dígitos solamente. Pero, ¿realmente tiene que ser así? ¿Necesitamos exactamente diez dígitos? Por supuesto que no, es sólo una cuestión de hábito. Recuerda las lecciones de la escuela. Por ejemplo, ¿qué significa el número 764 media: cuatro unidades, seis decenas y cientos siete. Es tan simple como eso! ¿Podría ser descrito de una manera más complicada? Por supuesto: 4 + 60 + 700. Aún más complicado? En definitiva: 4 * 1 + 6 + 7 * 10 * 100. ¿Podría este número parezca más científica? La 0

1

respuesta es sí otra vez: 4 * 10 + 6 * 10 * + 7 10 exactamente estos números: 10

0,

1

10 y 10

2?

2.

¿Qué significa realmente? ¿Por qué utilizamos

¿Por qué siempre tiene que ver el número 10?La respuesta

es porque se utiliza diez dígitos diferentes (0, 1, 2, ... 8, 9). En otras palabras, se utiliza el sistema de base 10 el número, es decir, numérico decimal.

Sistema numérico BINARIO ¿Qué pasaría si sólo dos dígitos, se utilizaron-0 y 1? O si no, no sabe cómo determinar si algo es de 3 o 5 veces mayor que otra cosa? O si se restringe cuando se comparan dos tamaños, es decir, si tan sólo pudiéramos decir que algo existe (1) o no existe (0)? La respuesta es 'nada especial', se seguiría utilizando los números de la misma manera como lo hacemos ahora, pero sería un poco diferente. Por ejemplo: 11011010. ¿Cuántas páginas de un libro es el número 11011010 se incluyen? Con el fin de enterarse de que, sólo tienes que seguir la misma lógica que en el ejemplo anterior, pero en orden inverso. Como se puede ver aquí, todo está basado en sólo dos dígitos, 0 y 1, es decir, en el sistema base-2 numérico (sistema numérico binario).

Es claramente el mismo número representado en dos sistemas numéricos diferentes. La única diferencia entre estos dos formatos es el número de dígitos que los componen. Un dígito (2) se utiliza para escribir el número 2 en sistema decimal, mientras que dos dígitos (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 aritmética binaria! ¿Tiene usted alguna idea de dónde se utiliza? Excepto en condiciones de laboratorio estrictamente controladas, incluso los circuitos electrónicos más complejos no puede determinar con precisión la diferencia entre dos tamaños (dos valores de tensión, por ejemplo) si son demasiado pequeños (inferiores a varios voltios). La razón para ello radica en el ruido y algo que se conoce como un "entorno de trabajo real" (los cambios impredecibles de la tensión de alimentación, cambios de temperatura, la tolerancia a los valores de los componentes integrados, etc.) Imagine una computadora que opera en los números decimales mediante la interpretación de la siguiente manera: 0 = 0V, 1 = 5V, 2 = 10 V, 3 = 15V, 20V = 4 ... 9 = 45V. ¿Alguien dijo baterías? Una solución mucho más simple es la lógica binaria en la que 0 indica que no hay tensión y 1 indica que hay una tensión. Es más fácil escribir 0 o 1 en lugar de oraciones completas "no hay tensión" o "hay una tensión ', respectivamente. Se trata de un cero lógico (0) y un uno lógico (1) que hace frente a la electrónica perfectamente, y fácilmente lleva a cabo todas las operaciones matemáticas infinitamente complejas. Obviamente, la electrónica estamos hablando de matemáticas aplicadas en la que todos los números están representados por dos dígitos solamente y donde sólo es importante saber si hay una tensión o no. Por supuesto, estamos hablando de la electrónica digital.

SISTEMA hexadecimales En el comienzo del desarrollo de la computadora había muchos problemas cuando se trabaja con números binarios. Por esta razón, un nuevo sistema numérico, el uso de 16 símbolos diferentes y se estableció un llamado sistema numérico hexadecimal. Se compone de diez dígitos 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á cuál es el

propósito de este aparente extraña combinación? Basta con mirar lo bien que encaja la historia de los números binarios y lo comprenderás.

El mayor número que puede ser representado por 4 dígitos binarios es el número 1111. Se corresponde con el número 15 en un sistema decimal, mientras que se representa por la letra F en sistema hexadecimal. Es el mayor número de 1 dígito en el sistema hexadecimal.¿Ves cómo con habilidad se utiliza? El mayor número escrito con ocho dígitos binarios es al mismo tiempo el más grande 2-dígitos hexadecimales. Recuerde que utilizan los ordenadores de 8 dígitos binarios. ¿Coincidencia?

Código BCD Un código BCD es un código binario de los números decimales (sólo previa ponga B-C Oded ecimal D). Se compone de números binarios cuatro dígitos que representan los diez primeros dígitos (0, 1, 2, 3 ... 8, 9). A pesar de que cuatro bits pueden dar 16 combinaciones posibles en total, el código BCD hace ventaja de los primeros diez solamente.

NÚMERO DE CONVERSIÓN DEL SISTEMA El sistema numérico binario es el más comúnmente usado, el sistema decimal es el más comprensible, mientras que el sistema hexadecimal es en algún punto intermedio. Por lo tanto, es muy importante para aprender a convertir los números de un sistema numérico a otro, es decir, cómo convertir una secuencia de ceros y unos en los valores comprensibles.

Conversión binario número decimal Mismos dígitos en un número binario tienen valores diferentes en función de su posición en ese número. Cada posición puede contener 1 o 0 y su valor puede ser fácilmente determinado por el recuento de su posición desde la derecha. Para realizar una conversión binario número decimal es necesario multiplicar dígitos (0 o 1) con su valor de posición (2

0,

2

1, 2

3

2, 2 etc) y añadir todos los resultados. La

magia de la conversión binario decimal funciona ... Mira el siguiente ejemplo:

Para que los números decimales de 0 a 3 para ser representados, lo que necesita sólo dos dígitos binarios. Para un mayor número, los dígitos binarios adicionales deben ser utilizados. Así, a fin de que los números decimales de 0 a 7 para ser representados, tres dígitos binarios son necesarios, de los números del 0 al 15, cuatro dígitos etc En pocas palabras, el mayor número binario que consta de n dígitos 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 dígitos binarios le permiten representar números decimales de 0 a 15, lo que equivale a 16 valores diferentes en total.

PARA LA CONVERSIÓN HEXADECIMAL número decimal Para realizar una conversión hexadecimal a decimal, cada dígito hexadecimal debe ser multiplicado por 16 planteada por su valor de posición y después de eso, los resultados obtenidos deben ser agregados. Por ejemplo:

Hexadecimal a número binario CONVERSIÓN No es necesario realizar ningún cálculo para convertir números hexadecimales en binario. Los dígitos hexadecimales son simplemente reemplazados por dígitos binarios correspondientes. Puesto que el valor máximo de un dígito hexadecimal es equivalente a número decimal 15, es necesario el uso de cuatro dígitos binarios para representar un dígito hexadecimal. Por ejemplo:

Un cuadro comparativo de la izquierda muestra los valores de los números 0-255 representados en tres diferentes sistemas numéricos.Esta es probablemente la forma más fácil de entender la lógica común aplicado a todos los sistemas numéricos.

Números que marcan El sistema de numeración hexadecimal es, junto con los sistemas numéricos binario y decimal, considerado el más importante para nosotros. Es fácil convertir cualquier número hexadecimal a binario. También es fácil de recordar. Sin embargo, este tipo de conversiones pueden confundirnos. Por ejemplo, ¿qué significa la frase "Es necesario contar hasta 110 productos en la línea de ensamblaje" significa realmente? Dependiendo de si se trata de sistema binario, decimal o hexadecimal, el resultado podría ser de 6, 110 o 272 productos, respectivamente. Para evitar estas situaciones y otras similares, diferentes prefijos y sufijos se agregan directamente a los números. Los prefijos $ y números hexadecimales 0x marca. Por ejemplo, 10AF número hexadecimal se ve, ya sea como $ 10AF o 0x10AF. Del mismo modo, los números binarios generalmente obtiene el prefijo%. Si un número no tiene ni sufijo ni prefijo se considera decimal.Desafortunadamente, esta forma de números que marcan no está estandarizado, sin embargo, depende de la aplicación específica.

BIT

En teoría, un bit es la unidad básica de información ... Vamos a olvidar esto por un momento y echar un vistazo a lo que es en la práctica.La respuesta es: nada especial, un poco es sólo un dígito binario. Al igual que en el sistema de numeración decimal, donde los mismos dígitos de un número no tiene el mismo valor (por ejemplo, los dígitos en el número decimal 444), la 'importancia' de bits depende de su posición en el número binario. A diferencia del sistema numérico decimal, dígitos binarios que no se les conoce como las unidades, decenas, etc, pero el bit cero (poco más a la derecha), primer bit (segundo desde la derecha), etc Dado que el sistema binario utiliza sólo dos dígitos 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 utilización de números decimales que tales expresiones son muy comunes.Sería correcto decir por ejemplo, "el valor del bit sexto de cualquier número binario es equivalente a 64 número decimal". Pero somos humanos y los hábitos viejos son duros de matar ... Además, ¿cómo sonaría 'número uno-uno-cero-uno-cero ...'?

BYTE Un byte se compone de ocho bits se agrupan. Si un bit es un dígito, entonces bytes representan números. Todas las operaciones matemáticas se puede realizar sobre ellos, al igual que al común de números decimales. Al igual que los dígitos de cualquier número, los dígitos de bytes no tiene el mismo significado que sea. El mayor valor tiene el bit de la izquierda llamado el bit más 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 número más grande decimal que puede ser representado por un byte es 255 (una combinación representa un cero). Un mordisco se conoce como medio de un byte. En función 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 electrónica dentro de circuitos integrados digitales, microcontroladores o procesadores parece? ¿Qué circuitos de realizar complicadas operaciones matemáticas y la toma de decisiones parece? ¿Sabe usted que sus esquemas aparentemente complicadas comprenden sólo unos pocos componentes diferentes llamados circuitos lógicos o compuertas lógicas?

1.3 debe conocer los detalles El funcionamiento de circuitos lógicos se basa en los principios establecidos por un matemático británico George Boole en el medio del siglo 19, incluso antes de la primera bombilla fue inventada. Originalmente, la idea principal era expresar las formas lógicas a través de funciones algebraicas. Pronto había lugar a un producto real que, mucho después, evaluados en lo que hoy se

conoce como AND, OR y NOT circuitos lógicos. El principio de la operación se conoce como álgebra de Boole.

CIRCUITOS DE LÓGICA Algunas de las instrucciones del programa dan los mismos resultados que las puertas lógicas. El principio de su funcionamiento se discutirá más adelante.

Y la puerta

La puerta lógica "Y" tiene dos o más entradas y una salida. Vamos a suponer que la puerta utilizado en este ejemplo sólo tiene dos entradas. Un uno lógico (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 más de dos entradas: una lógica de un (1) aparecerá en su salida solamente cuando todas las entradas son impulsados alto (1).Cualquier otra combinación de tensiones de entrada dará como resultado un cero lógico (0) en su salida.Cuando se utiliza en el programa, la lógica y es realizado por una instrucción de programa que se discutirán más adelante. Sólo recuerde que la lógica y en el programa se refiere a los bits correspondientes de dos registros. O PUERTA

Del mismo modo, las puertas OR también tienen dos o más entradas y una salida. Si la puerta tiene sólo dos entradas se aplica lo siguiente. Un uno lógico (1) aparecerá en la salida si cualquiera de las entradas (A o B) es excitada alta (1). Si la puerta O tiene más de dos

entradas a continuación, se aplica lo siguiente. Un uno lógico (1) aparece en su salida si al menos una entrada es excitada alta (1). Si todas las entradas están a cero lógico (0), la salida será a cero lógico (0) también.

En el programa, el peración se realiza de la misma manera como la lógica y funcionamiento. NO PUERTA La puerta lógica NO tiene sólo una entrada y salida de un solo. Se opera de una manera extremadamente sencilla. Cuando un cero lógico (0) aparece en su entrada, un uno lógico (1) aparece en su salida y viceversa. Esto significa que esta puerta invierte la señal y por lo tanto, se llama a menudo inversor.

El NO lógica 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 número, el valor invertido es en realidad un complemento de los mismos. El complemento de un número es un valor que añade a ese número lo hace llegar al mayor número de 8 dígitos binarios. En otras palabras, la suma de un número de 8 dígitos y su complemento es siempre 255.

EXCLUSIVA O PUERTA

La puerta OR EXCLUSIVA (XOR) es un poco complicado en comparación con otras puertas. Es una especie de combinación de todos ellos. Un uno lógico (1) aparece en su salida sólo cuando sus entradas tienen diferentes estados lógicos.

En el programa, la instrucción apropiada se utiliza comúnmente para comparar dos bytes. La resta tiene el mismo propósito (si el resultado es 0, los bytes son iguales), pero la ventaja de la operación lógica OR EXCLUSIVA es que nunca da resultados negativos.

REGISTRO En resumen, un registro o una célula de memoria es un circuito electrónico que puede memorizar el estado de un byte.

SFR REGISTROS Además de los registros que no tienen ninguna función especial y predefinida, cada microcontrolador también tiene un número de registros especiales de función (SFR) la función de los cuales está predefinida por el fabricante. Sus bits están 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 operación de estos circuitos, es decir, el microcontrolador. Imagínese ocho interruptores que controlan el funcionamiento de un pequeño 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 pequeños circuitos integrados dentro del microcontrolador, estos circuitos son a través de pines del microcontrolador conectados a los periféricos 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 electrónica, periféricos adicionales, es decir. Cada microcontrolador tiene una o más 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 función del pin como desee. Por ejemplo, supongamos que usted quiere que su dispositivo para activar / desactivar tres LED de señal y al mismo tiempo controlar el estado lógico 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 fácilmente desde el software, lo que significa que una función pasador se puede cambiar durante la operación.

Una de las características importantes de los pines de entrada / salida (I / O) es una corriente máxima que pueden manejar. Para la mayoría de los microcontroladores, la corriente suministrada desde un pasador es suficiente para activar un LED o algún otro dispositivo de bajo consumo (10-20 mA). Otra característica importante es un pasador de resistencia ascendente puede ser proporcionado. La resistencia de actuación conecta el pin apropiado a la tensión de alimentación positiva. También se puede utilizar cuando el pasador está configurado como una entrada conectada a un interruptor o un botón 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 lógico (1) a algunos de los bits de registro, el pin del microcontrolador apropiado es automáticamente configurado como una entrada. La tensión suministrada al pasador que es visible en su puerto como 0 o 1. De lo contrario, por escrito un cero lógico a la SFR, el pasador de puerto correspondiente está configurado como una salida. Tensión proporcionada en tales una patilla de salida (0V o 5V) refleja el estado del bit de registro apropiado (lógica 0 o 1, respectivamente).

Unidad de memoria El módulo de memoria es una parte del microcontrolador utilizado para el almacenamiento de datos. La forma más sencilla de explicarlo es mediante la comparación con un armario con muchos cajones. Supongamos, los cajones están claramente marcados para permitir que sus contenidos pueden ser fácilmente disponibles mediante la lectura de las etiquetas en la parte frontal de los cajones. De la misma manera, cada dirección de memoria corresponde a una posición de memoria. El contenido de cualquier lugar se puede acceder y leer por su dirección. Memoria puede ser escrito o leer.

Hay varios tipos de memoria dentro del microcontrolador: Memoria de sólo lectura (ROM) Memoria de sólo lectura (ROM) se utiliza para guardar de forma permanente el programa a ejecutar por el microcontrolador. El tamaño de un programa se escriba depende del tamaño de esta memoria. Microcontroladores actuales utilizan comúnmente de 16 bits de direccionamiento, lo que significa que son capaces de hacer frente a un máximo 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 término proviene del proceso de fabricación, donde partes del chip están enmascarados antes de que el proceso de fotolitografía. En caso de una producción a gran escala, el precio es muy bajo. Olvídalo ...

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 después 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 fabricación y características de la radiación UV memoria EPROM son totalmente idénticos 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 borrarán bajo luz ultravioleta fuerte. Después de unos minutos de tal 'tomar el sol' es posible cargar un nuevo programa en él. La instalación de esta ventana es complicado, que normalmente afecta el precio. En nuestra opinión, por desgracia, negativo ... Memoria Flash La memoria flash, conocida como la sucesora de la EPROM UV, se hizo en los años 80 en los laboratorios de Intel. Dado que la memoria se puede escribir como un número prácticamente ilimitado de veces, los microcontroladores con memoria Flash ROM son ideales para el aprendizaje, la experimentación y la producción en pequeña escala. Debido a su gran popularidad, la mayoría de los microcontroladores se fabrican en la actualidad la tecnología 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 alimentación 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 adición, es necesario disponer de un registro que representa lo que en la vida cotidiana se llama la "suma". Por esta razón, uno de los registros de la RAM se llama la "suma" y se utiliza para almacenar los resultados de adición.

ROM programable y borrable eléctricamente (EEPROM) El contenido de la EEPROM se puede cambiar durante la operación (similar a la RAM), pero sigue siendo guardan de forma permanente, incluso después de la pérdida de potencia (similar a la ROM). En consecuencia, la EEPROM se utiliza a menudo para almacenar valores, creados durante la operación, que deben ser permanentemente guardados. Por ejemplo, si se quiere diseñar una cerradura electrónica o una alarma, que sería genial para permitir al usuario crear e introducir la contraseña, pero es inútil si se pierde cada vez que la fuente de alimentación se apaga. La solución ideal es un microcontrolador con un EEPROM integrado.

INTERRUMPIR La mayoría de los programas utilizan interrupciones en su ejecución normal. El propósito del microcontrolador es principalmente para responder a los cambios en su entorno. En otras palabras, cuando una acción se lleva a cabo, el microcontrolador hace algo ... Por ejemplo, cuando se presiona un botón en un control remoto de televisión, 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 días, lo cual no es práctico en absoluto. Por ello, el microcontrolador se ha aprendido un truco durante su evolución. En lugar de constante control de cada pin o bit, los delegados de microcontroladores de la "cuestión de espera" a un "especialista" que responda sólo cuando la atención pasa algo digno. Una señal que informa a la unidad central de proceso sobre dicha acción se llama una interrupción.

BUS

Un bus se compone de 8, 16 o más cables. Hay dos tipos de autobuses: el bus de direcciones y el bus de datos. El bus de dirección consiste en tantas líneas como sea necesario para el direccionamiento de memoria. Se utiliza para tranfer una dirección 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 más importantes son:

  

Instrucciones de instrucciones del programa Decoder decodifica y ejecuta otros circuitos sobre la base de que; Unidad aritmético lógica (ALU) realiza todas las operaciones matemáticas y lógicas 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 operación de la ALU. Es una especie de mesa de trabajo se utiliza para almacenar todos los datos en los que alguna operación se va a realizar (suma, cambio / movimiento, etc.) También 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 número almacenado en el acumulador (número es mayor o menor que cero, etc.) El acumulador es también llamado el registro de trabajo y que se conoce como registro W o por lo tanto sólo W.

COMUNICACIÓN DE SERIE Una conexión en paralelo entre el microcontrolador y los periféricos establecida a través de puertos de entrada / salida es una solución ideal cuando la distancia entre ellos es de varios metros. De lo contrario, cuando es necesario para establecer la comunicación en distancias más largas la conexión en paralelo está fuera de cuestión. Comunicación serial se utiliza en su lugar. Hoy en día, la mayoría de los microcontroladores disponen de varios módulos diferentes para la comunicación serie integrados en ellos como equipo estándar. ¿Cuál de estos módulos se utilizará depende de muchos factores de los cuales los más importantes son:

   

¿Cuántos dispositivos el microcontrolador tiene que intercambiar datos con? ¿Con qué rapidez el intercambio de datos tienen que ser? ¿Cuál es la distancia entre los dispositivos? ¿Es necesario para enviar y recibir datos al mismo tiempo?

Una de las cosas más importantes sobre la comunicación 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 furúnculos programador / usuario hasta la escritura simple (que se envíen datos) y la lectura (los datos recibidos).

TRANSFERENCIA DE DATOS La velocidad de datos se utiliza el término para designar el número 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 máximo de bytes 37 y mínimo 27 puede ser transferida por segundo. Los módulos más utilizados de comunicación en serie son los siguientes:

I 2 C (INTER circuito integrado)

Un circuito inter-integrado es un módulo para el intercambio de datos serie entre microcontroladores y circuitos integrados especializados de una nueva generación. Se utiliza cuando la distancia entre estos dispositivos es corto (receptor y el transmisor están generalmente en la misma placa impresa). La conexión se establece a través de dos conductores. Uno se utiliza para transferencia de datos, mientras que el otro se utiliza para la sincronización (señal de reloj). Como puede verse en la figura a continuación, un dispositivo siempre es un dispositivo maestro. Realiza el direccionamiento de un dispositivo esclavo antes de la comunicación 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 estándar) o 10 Kb / s (modo de cámara 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 través de un bus I2C se limita a varios metros.

SPI (Serial Bus Peripheral Interface) Una serie de interfaz periférica (SPI) es un módulo de bus de comunicación serial que utiliza tres o cuatro conductores. Un conductor se utiliza para recibir datos, uno para enviar datos, uno para la sincronización y una alternativa para la selección de un dispositivo para comunicarse. Es una conexión dúplex completo, lo que significa que los datos pueden ser enviados y recibidos simultáneamente. La máxima velocidad de datos es mayor que en el módulo de comunicación I2C.

UART (Receptor asíncrono universal / EMISOR) Como su nombre indica, la comunicación USART es asincrónica, lo que significa que no hay ninguna línea especial para la transferencia de la señal del reloj se usa. En algunas aplicaciones, como la conexión de radio o el control de las ondas a distancia por infrarrojos, esta característica es fundamental. Dado que sólo una línea de comunicación se utiliza, tanto el receptor y el transmisor funcionan a la velocidad predefinida mismo con el fin de mantener la sincronización necesaria. Esta es una forma muy simple de transferencia de datos a medida que básicamente se reduce a la conversión 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 operación armónica y sincrónica de todos los circuitos dentro del microcontrolador. El oscilador está configurada para utilizar un cristal de cuarzo o resonador cerámico para la estabilización de la frecuencia, sino que también 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 más lenta varias veces. Esto sucede porque cada instrucción se ejecuta en varios pasos. En algunos microcontroladores, el mismo número de ciclos se requiere para ejecutar todas las instrucciones, mientras que en otros, el número 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 ejecución de una instrucción no es 50ns, pero 200, 400 o 800 nS, dependiendo del tipo de microcontrolador.

Circuito de alimentación Hay dos cosas que vale la pena la atención cuando se habla del circuito microcontrolador fuente de alimentación:





Brown a cabo es una condición potencialmente peligrosa que se produce en el momento en el microcontrolador está apagado o cuando la tensión de alimentación se reduce a su valor mínimo debido al ruido. Como el microcontrolador se compone de varios circuitos con diferentes niveles de voltaje de funcionamiento, tal condición 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 condición de reposición que se produzca tan pronto como el microcontrolador entra en un estado de emergencia a cabo marrón. Pin de reset se refiere generalmente como MCLR (Master Reset En abierto). Se utiliza para causar una reposición externa del microcontrolador mediante la aplicación de un cero lógico (0) o un uno lógico (1) a la misma, la cual depende del tipo del microcontrolador. En caso de que el circuito fuera marrón no está integrado en el microcontrolador, un circuito simple externo para restablecer marrón 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 solución, todavía hay muchas razones para utilizarlo. La frecuencia del oscilador como se define con

precisión y muy estable, de modo que los impulsos que genera son siempre la misma anchura, lo que les hace ideales para la medición del tiempo. Tales osciladores se utilizan también 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 mayoría de los programas usan estos en miniatura de los cronómetros electrónicos. Su corazón hace 8 - o 16 - bit, SFR los contenidos de los cuales se incrementa automáticamente por cada pulso que viene. Una vez que un registro está totalmente cargado, una interrupción 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 medición 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 continuación, tal temporizador se convierte en un mostrador. Esto es sólo una explicación sencilla del funcionamiento del temporizador / contador. Como usted ya sabe, es más complicado en la práctica.

¿CÓMO FUNCIONA EL RELOJ? Así es como el reloj funciona en la práctica: los impulsos generados por el oscilador de cuarzo son directamente, oa través de un pre-escalador, trajo al circuito que se incrementa el número almacenado en

el temporizador de registro. Al incorporar un cristal de cuarzo con una frecuencia de 4 MHz se aplica lo siguiente: si una instrucción (un ciclo de máquina) tiene una duración de cuatro períodos de oscilador de cuarzo a continuación, mediante la incorporación de un cristal de cuarzo con una frecuencia de 4 MHz este número se incrementa un millón de veces por segundo ( cada microsegundo).

Es fácil de medir los intervalos de tiempo cortos, de hasta 256 microsegundos, en la forma descrita anteriormente, ya que es el número más grande que un registro puede almacenar. Esta restricción puede ser fácilmente integrado por utilizar un oscilador más lento, se registra con más bits, prescaler o interrupciones. Las dos primeras soluciones tienen algunos inconvenientes por lo que es más conveniente utilizar prescalers o interrumpe.

EL USO DE UN Prescaler EN FUNCIONAMIENTO DEL TEMPORIZADOR Un pre-escalador es un dispositivo electrónico que se usa para reducir la frecuencia por una tasa de división predefinido. Con el fin de generar un impulso en su salida, es necesario llevar a pulsos 1, 2, 4 o más en su entrada. La mayoría de los microcontroladores disponen de uno o más bulit-en prescalers y su tasa de división se puede cambiar desde dentro del programa. La pre-escalador se utiliza cuando es necesario medir períodos más largos de tiempo.

USO DE INTERRUPCIÓN EN FUNCIONAMIENTO DEL TEMPORIZADOR Si el registro contador de tiempo se compone de 8 bits, el número más grande que puede almacenar es 255. Para registros de 16 bits es el número 65.535. Si ese número se supera, el temporizador se reinicia automáticamente y el conteo empezará desde cero otra vez. Esta condición se denomina un desbordamiento. Si se activa desde el programa, el desbordamiento puede causar una interrupción, lo que da unas posibilidades completamente nuevas. Por ejemplo, el estado de los registros utilizados para

segundo escrutinio, minutos o días se puede cambiar en una rutina de interrupción. Todo el proceso (a excepción de la rutina de interrupción) se realiza automáticamente detrás de las escenas, lo que permite que los circuitos principales del microcontrolador para funcionar normalmente.

La figura anterior ilustra el uso de una interrupción en el funcionamiento del temporizador. Los retrasos de duración arbitraria, que tiene casi ninguna influencia en la ejecución del programa principal, se puede obtener fácilmente mediante la asignación 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 electrónico mismo es capaz de funcionar en dos modos diferentes. La única diferencia es que en este caso pulsos a ser contados llegan a través de la patilla de entrada del microcontrolador y su duración (anchura) es generalmente indefinido.Esta es la razón por que no se puede utilizar para medir el tiempo, pero puede ser utilizado para otros fines tales como contar los productos en una línea de montaje, el número de eje de rotación, 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 máximo, el restablecimiento microcontrolador se produce y la ejecución del programa se inicia desde la primera instrucción. El objetivo es evitar que esto ocurra mediante el uso de un comando específico. De todos modos, la idea se basa en el hecho de que cada programa se ejecuta en varios bucles más largos o más cortos. Si las instrucciones para el restablecimiento del temporizador de vigilancia se establecen en los lugares apropiados del programa, además de comandos que se ejecutan con regularidad, entonces el funcionamiento del temporizador de vigilancia no afectará a la ejecución del programa. Si por cualquier razón, por lo general debido al ruido de fabricación, el contador de programa "se atasca" en algún lugar de memoria de la que no hay vuelta atrás, el temporizador de vigilancia no se

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

Convertidor A / D

Las señales 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 analógico a digital es un circuito electrónico que convierte las señales continuas a discretas números digitales. En otras palabras, este circuito convierte un valor analógico en un número binario y la envía a la CPU para su procesamiento posterior. Este módulo se utiliza así para la tensión de entrada de PIN (valor analógico) de medición. El resultado de la medición es un número (valor digital) utilizados y transformados luego en el programa.

Arquitectura interna Todos los microcontroladores actualizados implementar uno de los dos modelos básicos de diseño 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-sólo tiene un bloque de memoria y un bus de 8 bits de datos. Como todos los datos se intercambian a través de estas 8 líneas, el autobús se sobrecarga y la comunicación es lenta e ineficiente. La CPU puede leer una instrucción 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 línea de programa que lee una memoria RAM registro llamado "suma" debe ser incrementado en uno (instrucción: incf SUM ), el microcontrolador hará lo siguiente: 1. Lea la parte de la instrucción de programa que especifique ¿Qué debe hacerse (en este caso el ' incf"instrucción para el incremento se va a realizar). 2. Lea la otra parte de la misma instrucción que especifica en qué datos se deben realizar (en este caso es la "suma" de registro). 3. Después de haber sido incrementado, el contenido de este registro debe ser escrito en el registro de la que se leyó (la dirección 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 líneas y se conecta a la CPU a ROM. En consecuencia, la CPU puede leer una instrucción 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, sólo 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 después de ser compilado en código máquina.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 instrucción 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 líneas, tanto la instrucción y los datos se pueden leer simultáneamente el uso de estos bits de reserva. Por esta razón, todas las instrucciones son de un solo ciclo de instrucciones, excepto en la instrucción 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 instrucción), la instrucción siguiente programa es leído a través del bus otra. Con microcontroladores con la arquitectura de von Neumann, uno nunca sabe la cantidad de memoria para ser ocupado por el programa. Básicamente, la mayoría de las instrucciones del programa ocupan dos posiciones de memoria (uno contiene información sobre lo que debe hacer, mientras que la otra contiene información sobre la cual los datos se debe hacer). Sin embargo, no es una regla dura y rápida, pero el caso más común. En la arquitectura de Harvard el bus programa es más ancho que un byte, que permite a cada palabra programa que consiste de instrucción y de datos, es decir, una posición de memoria - una instrucción 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 restricción principal es el número de instrucciones disponibles. Los fabricantes suelen emplear una de las dos soluciones opuestas y microcontroladores de diseño que implementan el número más pequeño o más 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 básicas solamente (suma, resta, copiado, etc.) Otras operaciones, más complicadas se realizan mediante la combinación de ellos. Por ejemplo, la multiplicación en el programa debe ser realizado como una adición sucesiva. Es lo mismo que si usted trata de explicar a alguien, utilizando sólo 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 cuestión de hecho, no es tan difícil de explicar donde está el aeropuerto si usted usa las palabras correctas, como izquierda, derecha, kilómetros, etc

CISC (informático complejo conjunto de instrucciones) CISC es lo opuesto a RISC. Microcontroladores diseñados para reconocer a más de 200 instrucciones diferentes pueden hacer un montón de cosas a gran velocidad. Sin embargo, es necesario comprender cómo tomar todas las que tal oferta ricos conjunto de instrucciones, que no es nada fácil ...

CÓMO HACER LA ELECCIÓN CORRECTA? Bueno, usted es un principiante y que ha tomado la decisión de ir a la aventura de trabajar con los microcontroladores. Felicidades por su elección. Pero, no es tan fácil 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 diseñar un dispositivo basado en microcontrolador, piense en lo siguiente: el número de entradas y salidas se requiere su proyecto? En caso de que realizar algunas operaciones que no sean a su vez sólo relés de encendido / apagado? ¿Necesita algunos módulos especializados, tales como la comunicación serie, A / D, etc convertidor? Cuando se crea una imagen clara de lo que usted necesita, el rango de selección se reduce considerablemente y es tiempo de pensar en el precio. ¿Vas a

hacer que varios de estos dispositivos? Varios cientos de? ¿Un millón? 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 fácilmente. Estudio de un modelo en particular. Aprenda todo lo que necesita, no entrar en detalles. Resolver un problema específico y algo increíble va a suceder, usted será capaz de manejar cualquier modelo perteneciente a la familia de microcontroladores. Recuerde que aprender a andar en bicicleta. Después de varias contusiones que recibió cuando empezó, que fueron capaces de mantener el equilibrio y entonces fácilmente montar cualquier otra bicicleta. Y, por supuesto, que nunca olvidará la programación 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 Periférico), pero es mejor conocido como un PIC. Su antepasado, llamado el PIC1650, fue diseñado en 1975 por General Instruments. Fue pensado para fines totalmente diferentes. Unos diez años más tarde, este circuito se convirtió en un microcontrolador PIC real, mediante la adición de la memoria EEPROM. Si desea obtener más información al respecto, sólo sigue leyendo. El propósito principal de este libro es proporcionar al usuario información necesaria él / ella necesita saber con el fin de ser capaz de utilizar los microcontroladores en la práctica. A fin de evitar largas explicaciones e historias interminables sobre las características ú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 atención y lo suficientemente simple para ser aprendida fácilmente por todo el mundo. Por lo tanto, a pesar de que los capítulos 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 través de más de 8 líneas. Dependiendo del ancho de bus, hay 12 -, 14 - y los microcontroladores de 16 bits. Siguiente tabla muestra las principales características de estas tres categorías 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 ución 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-Línea 8 - bits, 12 bits de longitud de palabra de instrucciones PIC10 FXXX

0,37 5a 0,75

16 a 24

6 a 8

4a8

0a 2

8

0a 1

1x8

-

-

-

PIC12 FXXX

0,75 a 1,5

25 a 38

8

4a8

0a 3

8

0a 1

1x8

-

-

EEP RO M

PIC16 FXXX

0,75 a3

25 a 134

14 a 44

20

0a 3

8

0a 2

1x8

-

-

EEP RO M

PIC16 HVXX X

1.5

25

18 a 20

20

-

-

-

1x8

-

-

Vdd = 15V

Mid-Range 8 - arquitectura de bits, 14 bits de instrucciones Largo del Mundo PIC12 FXXX

1,75 a 3,5

64 a 128

8

20

0a 4

10

1

1a2x 8 1 x 16

-

0a 1

EEP RO M

PIC12 HVXX X

1,75

64

8

20

0a 4

10

1

1a2x 8 1 x 16

-

0a 1

-

PIC16 FXXX

1,75 a 14

64 a 368

14 a 64

20

0a 13

8o 10

0a 2

1a2x 8 1 x 16

US ART I2C SPI

0a 3

-

PIC16 HVXX X

1,75 a 3,5

64 a 128

14 a 20

20

0a 12

2

2x81 x 16

US ART I2C SPI

-

-

10

High-End 8 - la arquitectura bits, 16 bits de longitud de palabra de instrucciones

PIC18 FXXX

4a 128

256 393 6

18 a 80

PIC18 FXXJX X

8a 128

102 4393 6

28 a 10 0

PIC18 FXXKX X

8a 64

768 393 6

28 a 44

32 a 48

4a 16

40 a 48

10 a 16

64

10 a 13

10 o 12

10

10

0a2x agosto 2a3x 16

2.0 CA N2. 0 US ART I2C SPI

0a 5

-

2

0a2x agosto 2a3x 16

US B 2.0 Eth ern et US ART I2C SPI

2a 5

-

2

1x83 x 16

US ART I2C SPI

2

-

0a 3

Todos los microcontroladores PIC uso arquitectura Harvard, lo que significa que su memoria de programa se conecta a la CPU durante más de 8 líneas. Dependiendo del ancho de bus, hay 12 -, 14 - y los microcontroladores de 16 bits. Tabla de arriba muestra las principales características de estas tres categorías. Como se puede observar en la tabla de la página 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 tamaño de la palabra programa hay la categoría microcontrolador primera, segunda y tercera, es decir, 12 -, 14 - o microcontroladores de 16-bit. Tener similares de 8-bit del núcleo, todos ellos utilizan el mismo conjunto de instrucciones y el «esqueleto» del hardware básico conectado a unidades más o menos periférica. Microcontroladores PIC con las palabras del programa de 14 bits son los más probable es que la mejor opción para los principiantes. He aquí por qué ...

INSTRUCCIONES DE JUEGO El conjunto de instrucciones para la 16F8XX incluye 35 instrucciones en total. La razón de un número tan pequeño de instrucciones reside en la arquitectura RISC. Las instrucciones están bien optimizados desde el punto de velocidad de funcionamiento, la sencillez en la arquitectura y la compacidad del código. El inconveniente de la arquitectura RISC es que el usuario se espera para hacer frente a estas instrucciones. Por supuesto, esto sólo es relevante si se utiliza el lenguaje ensamblador para la programación. Este libro trata de la programación en un lenguaje de programación de alto nivel denominado básico, lo que significa que la mayoría del trabajo ha sido ya realizada por otra persona. Sólo tienes que usar las instrucciones relativamente simples.

Tiempo de ejecución de Todas las instrucciones de los microcontroladores PIC son de un solo ciclo de instrucciones. La única excepción 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 ejecución de la instrucción, mientras que el segundo ciclo se ejecuta como un NOP (no operación). De ciclo simple las instrucciones consisten en cuatro ciclos de reloj. Esto significa que si un oscilador 4MHz se utiliza, se tardará 1μS para una instrucción a ejecutar. El tiempo de ejecución de la instrucción de instrucciones de salto es 2μS. Instrucción del programa conjunto de palabras de 14 bits microcontroladores PIC: INSTRUCCIÓN

DESCRIPCIÓN

OPERACIÓN

BANDERA

CLK

*

Instrucciones de transferencia de datos MOVLW k

Mueva constante a W

k -> w

1

MOVWF f

Mover W a f

W -> f

1

MOVF f, d

Mover f para d

f -> d

Z

1

CLRW

Clear W

0 -> W

Z

1

1, 2

CLRF f

F Clear

0 -> f

SWAPF f, d

Intercambia nibbles de f

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

Z

1

2

1

1, 2

Lógica y aritmética-Instrucciones ADDLW k

Añadir W y constante

W + K -> W

C, DC, Z

1

ADDWF f, d

Añadir W y F

W + f -> d

C, DC, Z

1

SUBLW k

Resta W de la constante

kW -> W

C, DC, Z

1

SUBWF f, d

Restar W de f

FW -> d

C, DC, Z

1

Andlw k

Y lógico con W con una constante

W y K -> W

Z

1

ANDWF f, d

Y lógico con W con f

W y F -> d

Z

1

IORLW k

OR lógico con W con una constante

W o K -> W

Z

1

IORWF f, d

OR lógico con W con f

W o f -> d

Z

1

1, 2

XORWF f, d

Lógico OR exclusivo con W con constante

W XOR k -> W

Z

1

1, 2

XORLW k

Lógico OR exclusivo con W con f

W XOR f -> d

Z

1

INCF f, d

Incrementa f en 1

f 1 -> f

Z

1

1, 2

DECF f, d

Disminuir f por una

F-1 -> f

Z

1

1, 2

RLF f, d

Gire f izquierdo a través de bit de acarreo

C

1

1, 2

RRF f, d

Gire f derecha a través de bit de acarreo

C

1

1, 2

COMF f, d

Complementar f

Z

1

1, 2

f -> d

1, 2

1, 2

1, 2

Orientados a bits Instrucciones BCF f, b

B poco clara en la f

0 -> f (b)

1

1, 2

BSF f, b

B poco clara en la f

1 -> f (b)

1

1, 2

Instrucciones de control del programa BTFSC f, b

Prueba bit b de f. Salta la siguiente instrucción, si claro.

Salta si f (b) = 0

1 (2)

3

BTFSS F, B

Prueba bit b de f. Salta la siguiente instrucción

Salta si f (b) = 1

1 (2)

3

si se establece. DECFSZ f, d

Disminuir f. Salta la siguiente instrucción, si claro.

F-1 -> d salto si Z=1

1 (2)

1, 2, 3

INCFSZ f, d

Incrementar f. Salta la siguiente instrucción si se establece.

f 1 -> d salto si Z=0

1 (2)

1, 2, 3

GOTO k

Ir a dirección

k -> PC

2

CONVOCATORIA k

Llame a subrutina

PC -> TOS, k > PC

2

REGRESAR

Retorno de la subrutina

Archivo -> PC

2

RETLW k

Volver con la constante en la W

k -> W, Archivo -> PC

2

Retfie

Retorno de interrupción

Archivo -> PC, 1 -> GIE

2

Otras instrucciones NOP

No hay operación

Archivo -> PC, 1 -> GIE

CLRWDT

Borrar temporizador de vigilancia

0 -> WDT, 1 -> A, 1 -> EP

A, PD

1

DORMIR

Entra en el modo de suspensión

0 -> WDT, 1 -> A, 0 -> EP

A, PD

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 instrucción 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 lógico (1), la instrucción 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.

Capítulo 2: Programación de Microcontroladores Usted sabe sin duda que no es suficiente para conectar simplemente el microcontrolador a otros componentes y gire la fuente de alimentación para hacerlo funcionar, ¿no? Hay más por hacer. Microcontroladores necesita ser programado para ser capaz de realizar algo útil. Este capítulo trata de la programación en Basic y que vamos a describir sólo 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 respiración profunda y comenzar a ...

  

2.1 LENGUAJES DE PROGRAMACIÓN 2.2 LAS BASES DEL lenguaje de programación BASIC 2.3 COMPILADOR mikroBasic PRO PARA PIC

2.1 LENGUAJES DE PROGRAMACIÓN

El microcontrolador ejecuta el programa cargado en la memoria Flash.Es un código ejecutable llamado que consta de una secuencia aparentemente extraña de ceros y unos. Dependiendo de la arquitectura del microcontrolador, este código binario está organizado en 12 -, 14 - o 16bit de las palabras de ancho. Cada palabra es considerada por la CPU como una instrucción a ejecutar durante el funcionamiento del microcontrolador. Como es mucho más fácil para nosotros tratar con el sistema numérico hexadecimal, el código ejecutable suele ser representado como una secuencia de números hexadecimales denominada código hexadecimal que, hace mucho tiempo, solía 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 código ejecutable fue infinitamente cansado, el primer lenguaje de alto nivel de programación llamado lenguaje ensamblador fue creado. Esto hizo que el proceso de programación de un poco más 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 código ejecutable por medio de un programa especial instalado en un PC llamado ensamblador. Se compila la instrucción por instrucción sin optimización. Las principales ventajas del lenguaje ensamblador son su simplicidad y el hecho de que cada instrucción del programa coincide con una sola posición de memoria. En otras palabras, el lenguaje ensamblador permite un control completo de todos los procesos que son en curso dentro del microcontrolador, que todavía hace que sea popular hoy en día. Por otro lado, los programas se ejecutan siempre a altas velocidades y en la mayoría 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 programación similar al lenguaje que utilizan en el habla cotidiana. Por último, de alto nivel, incluyendo lenguajes de programación 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 declaración en la base. El programador no tiene que estar familiarizado con el conjunto de instrucciones del microcontrolador en desuso. Ya no es posible saber cómo cada instrucción se ejecuta, pero no importa de todos modos. En caso afirmativo, el problema se resuelve mediante la adición 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 código máquina. A diferencia de ensamblador, compiladores para lenguajes de programación de alto nivel crear un código ejecutable que no siempre es el más 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 código hexadecimal. Aquí es un ejemplo de un sencillo programa escrito en Basic:

VENTAJAS DE LOS LENGUAJES DE PROGRAMACIÓN 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 instrucción apropiada para la multiplicación de dos números. Por supuesto, hay una manera de resolver este tema, debido a las matemáticas, que le

permite realizar operaciones complejas se hacía dividido en una serie de ideas simples. En consecuencia, la multiplicación puede ser fácilmente sustituido por adición sucesiva (axb = a + a + un + ... + a). Y aquí estamos, justo en el comienzo de una historia muy larga ... Todavía no hay ninguna razón para preocuparse por lo que usted utilice uno de los lenguajes de programación de alto nivel, como Basic, como el compilador de forma automática encontrar una solución a estas cuestiones y otras similares. Sólo tienes que escribir a * b.

2.2 LAS BASES DEL lenguaje de programación BASIC Similar a la utilización de cualquier lenguaje que no se limita a los libros y revistas solamente, el lenguaje de programación Basic no está estrechamente relacionado con ningún tipo especial de sistema informático, el procesador o de funcionamiento. Es un lenguaje de propósito general. Este hecho puede hacer que algunos problemas como la lengua básica varía ligeramente dependiendo de su aplicación (por ejemplo, diferentes dialectos de una lengua). Por lo tanto, no vamos a hacerle una descripción detallada de todos los atributos de la base de este libro. En su lugar, vamos a describir una aplicación concreta del lenguaje de programación Basic, es decir, básico utilizado por el PRO mikroBasic para PIC compilador.

El lenguaje de programación Basic es un lenguaje de programación sencillo y fácil de entender. Para usarlo correctamente, es suficiente para conocer algunos de los elementos básicos que cada programa se compone de. Estos son:

           

Identificadores Comentarios Operadores Expresiones Instrucciones Constantes Variables Símbolos Directivas Etiquetas Los procedimientos y funciones Módulos

Aquí está un ejemplo de cómo no se debe escribir un programa.No hay comentarios están incluidos, los nombres de las etiquetas de los no tienen sentido, las secciones de código no se agrupan ... Este programa va a funcionar correctamente, pero su propósito y la forma de ejecución será sólo conocido por el programador que lo ha escrito (al menos por un día o dos). La siguiente figura ilustra la estructura de un programa simple escrito en Basic, señalando las partes que la componen. Este es un ejemplo de cómo se debe escribir un programa. Las diferencias son más que obvias ...

Estructura del Programa Al igual que otros lenguajes de programación, 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 mayoría 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 opción Archivo> Nuevo, pero nuevo proyecto>. ¿Por qué es eso? Bueno, usted escribe un programa en un documento con la extensión. Mbas (mikroBasic). Usted diligencia escribir, escribir, escribir ... Cuando se compila en un código hexadecimal, un nuevo documento con la extensión. Hex se creará. Al mismo tiempo, el compilador creará

automáticamente varios documentos en adición a la misma. El propósito 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 sólo una parte de ella.

Sólo para estar seguros de que estamos en la misma página ... A partir de ahora el módulo de la palabra refiere a un documento con la extensión. MBA. El texto que contiene se refiere como un programa. Cada proyecto escrito en el PRO mikroBasic para PIC compilador tiene la extensión. Mbppi (m ICRO B ASIC P royecto para PI C) y se compone de al menos un módulo (módulo principal). Cada proyecto en mikroBasic PRO para PIC requiere un módulo principal único. Se identifica por el programa y la palabra clave indica al compilador desde donde iniciar el proceso de compilación. Al crear con éxito un proyecto vacío en el asistente de proyectos, el módulo principal se mostrarán automáticamente en la ventana Editor de código:

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 excepción de los comentarios. Como se mencionó anteriormente, el proyecto también puede incluir otros módulos que, a diferencia de la principal, comienzan con la palabra clave módulo.

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

Para hacer que el compilador de familiarizarse con todos los módulos que forman parte de un proyecto, es necesario especificar en el módulo principal utilizando la palabra clave incluyen seguido de un nombre de módulo citado. La extensión de estos archivos no deben ser incluidos. Sólo un módulo por la cláusula de inclusión está permitida. El número de incluir cláusulas no es limitado, pero todos ellos deben ser especificados inmediatamente después del nombre del programa (módulo 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" ... ORGANIZACIÓN DEL MÓDULO PRINCIPAL Básicamente, el módulo principal se puede dividir en dos secciones: declaraciones y el cuerpo del programa. ¿Qué es una declaración en la programación? Una declaración es un proceso de definición de las propiedades de los identificadores para ser utilizados en el programa. Como la mayoría de otros lenguajes de programación, básico también 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 declaración 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 número 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 cómo escribir el módulo principal correctamente:

ORGANIZACIÓN DE LOS MÓDULOS DE OTROS Otros módulos comenzar con la palabra clave módulo. Cada módulo consta de tres secciones: incluyen, la interfaz y la implementación.Sólo la sección de implementación 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 básicas, 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 utilización de identificadores:

      

Los identificadores pueden contener todas las letras del alfabeto (mayúsculas y minúsculas), números (0-9) y el carácter guión bajo (_). El primer carácter de un identificador no debe ser un dígito. Ningún identificador puede contener caracteres especiales como! [{# $% &, Etc Basic no distingue entre mayúsculas y minúsculas, lo que significa que primero, primer y la primera se consideran idénticos. La ^ (acento circunflejo) símbolo se utiliza para referirse a un operador de exponenciación, el * (asterisco) símbolo se utiliza para denotar la multiplicación, mientras que los otros símbolos 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 más información 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 código 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 compilación. A pesar de que los comentarios no pueden afectar a la ejecución 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 algún momento. Sin comentarios, es casi imposible de entender, incluso los programas más simples.

ETIQUETAS Las etiquetas proporcionan la manera más fácil de controlar el flujo del programa. Se utilizan para marcar las líneas particulares en el programa de instrucción 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 número o un carácter cuyo valor no se puede cambiar durante la ejecución 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 válido. Las constantes están 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

PREFIJO

Decimal

EJEMPLO const MAX = 100

Hexadecimal

0x o $

const MAX = 0xFF

Binario

De punto flotante

const MAX =% 11011101

Las constantes se declaran en la parte de declaración 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 mayúsculas. El tipo de una constante es automáticamente reconocido por su tamaño.En el ejemplo siguiente, el mínimo 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 "pequeño" 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 número 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 están encerrados entre comillas dobles. Un espacio en blanco puede ser incluido también en la constante de cadena como un carácter. Las constantes de cadena se utilizan para representar cantidades no numéricos, 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 envío de la constante Message_1 a un LCD hará que 'presione el botón 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 ejecución del programa. Cada variable se declara con un nombre único que debe ser un identificador válido. Por ejemplo, para sumar dos números(numero1 + numero2) en el programa, es necesario tener una variable para representar lo que en la vida cotidiana llame a la suma. En este número1 caso, el número y la suma son variables. La sintaxis de una declaración ú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. Además 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 válidos, 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 SÍMBOLOS Los símbolos en Basic permiten crear macros simples sin parámetros. Esto significa que cualquier línea de código puede ser reemplazado con un identificador único. Los símbolos, cuando se utiliza correctamente, puede aumentar la legibilidad del código y la reutilización. Los símbolos se declaró al principio del módulo, justo después del nombre del módulo y opcionales incluyen directiva. El alcance de un símbolo es siempre limitado al módulo en el que ha sido declarada.

symbol symbol_name = code

En este caso, symbol_name debe ser un identificador válido para ser utilizado en todo el código. El especificador de código puede ser cualquier línea de código (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 símbolos que se utilizan en el programa. El compilador simplemente reemplazará todos los símbolos con líneas de código correspondientes a ellas cuando se declaran.

TIPOS DE DATOS BÁSICOS DEL LENGUAJE Hay varios tipos de datos que pueden ser utilizados en el lenguaje de programación de base. Tabla a continuación muestra el rango de valores de estos datos puede tener cuando se utiliza en su forma básica.

TIPO DE DATOS

DESCRIPCIÓN

TAMAÑO (NÚMERO DE BITS)

RANGO DE VALORES

poco

Un bit

1

0o1

sbit

Un bit

1

0o1

byte, char

Carácter

8

0 ... 255

corto

Entero con signo de corto

8

-127 ... 128

palabra

Entero sin signo

16

0 ... 65535

entero

Entero con signo

16

-32768 ... 32767

LongWord

Palabra de 32 bits

32

0 ... 4294967295

Entero

Palabra de 32 bits firmado

32

-2147483648 ... 2147483647

flotar

De punto flotante

32

± 1.17549435082 * 10 ... ± 6.80564774407 * 10 38

38

Automatic Data Conversión de tipos El compilador realiza automáticamente la conversión implícita en las siguientes situaciones:



si una instrucción requiere una expresión de tipo particular, pero la expresión de tipo diferente se utiliza;  si un operador requiere un operando de tipo particular, pero operando de diferente tipo se utiliza;  si una función requiere un parámetro formal de tipo particular, pero se le asigna un objeto de tipo diferente, y  si el resultado de la función no coincide con el retorno declarado función del tipo de datos. PROMOCIÓN Cuando operandos son de tipos diferentes, conversión implícita promueve un complejo menos a un tipo más 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 asignación y estados que requieren una expresión de tipo particular, el valor correcto se almacena en destino sólo si el resultado de la expresión no exceda el rango de destino. De lo contrario, si la expresión se evalúa como un tipo más complejo de lo esperado, los datos de exceso simplemente se recorta, es decir, los bytes más 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

EXPLÍCITA Conversiones de tipos La conversión explícita se puede ejecutar sobre cualquier expresión en cualquier momento al escribir la palabra clave deseada tipo (float byte, una palabra corta, entero, entero largo, ...) antes de la expresión que se va a convertir. La expresión debe ir entre paréntesis. La conversión explícita no se puede realizar sobre el operando a la izquierda del operador de asignación.

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

Un caso especial de la conversión es una conversión explícita entre tipos de datos y sin signo, ya que no afecta a la representación binaria de los datos.

dim a as byte dim b as short '... b = -1 a = byte(b) ' a is 255, not -1 ' Data doesn’t change its binary representation %11111111 ' it is just interpreted differently by the compiler OPERADORES Un operador es un símbolo que se utiliza para denotar aritmética en particular, la lógica o alguna otra operación. Cada operación se lleva a cabo en una o más operandos (variables o constantes) en una expresión. Además, cada operador cuenta con la ejecución de la prioridad y la asociatividad. Si una expresión contiene más de un operando, el orden de su ejecución se determina por el nivel de prioridad. Hay cuatro categorías prioritarias en Basic. Los operadores que pertenecen a la misma categoría tienen la misma prioridad. Si dos o más operadores tienen el mismo nivel de prioridad, las operaciones se realizan de izquierda a derecha. Paréntesis se puede utilizar para definir la prioridad de la operación dentro de una expresión. Cada categoría tiene asignado ya sea de izquierda a derecha o izquierda Derechapara regla de la asociatividad. Consulte la tabla a continuación. PRIORIDAD

OPERADORES

ASOCIATIVIDAD

Alto

@ No + -

de derecha a izquierda

* / Div mod y >>

es mayor que

b> a

si b es mayor que un

>=

es mayor que o igual a

un> = 5

Si uno es mayor que o igual a 5

<

es menor que

a 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 número 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 ( 0); Cada flanco ascendente (0 -> 1); Cada arista cuarta ascendente (0 -> 1), y Cada arista 16a ascendente (0 -> 1).

¿Cuál de estos eventos hacen que un conjunto de datos de 16 bits para ser capturados depende de la combinación de cuatro bits (CCP1M3, CCP1M2, CCP1M1 y CCP1M0) del registro de control. Además, las siguientes condiciones deben cumplirse:

 

El pasador RC2/CCP1 debe ser configurado como entrada, y El módulo Timer1 debe funcionar como un temporizador o un contador síncrono.

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 interrupción. Cuando las salidas del módulo CCP1 el modo de captura, una interrupción no deseada de captura se puede generar. Con el fin de evitar esto, tanto el bit de permitir la interrupción CCP1IE y el bit de bandera CCP1IF debe ser limpiado antes de realizar cualquier cambio en el registro de control CCP1CON. Una interrupción no deseada también se puede generar cuando se cambia de una tasa de pre-escalador a otro. Para evitar esto, el módulo 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 comparación 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 lógico 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 módulo CCP1 para funcionar en el modo de comparación, 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 automatización. Un ejemplo típico es una unidad de control de potencia. Refiérase a la figura de abajo. Si un cero lógico (0) indica un estado de desconexión y una lógica uno (1) indica un estado switchon, la energía eléctrica para alimentar a un consumidor con será directamente proporcional a la duración del impulso. Esta relación se conoce como ciclo de trabajo.

Otro ejemplo, también es común en la práctica, es el uso de señales PWM en señal de unidades generadoras para producir señales de formas de onda arbitrarias, como forma de onda sinusoidal. Vea la siguiente figura:

Los dispositivos que operan con señales PWM se utilizan comúnmente en la práctica como controladores de frecuencia ajustable para controlar el funcionamiento de los motores eléctricos (velocidad, aceleración, deceleración, etc.)

La figura anterior muestra un diagrama de bloques del conjunto módulo CCP1 a modo PWM. Con el fin de generar un pulso de ciclo de trabajo arbitrario en su pin de salida, es necesario establecer período de pulso (frecuencia) y duración del impulso del primero.

PWM PERÍODO

La salida PWM período de impulso (T) depende del valor almacenado en el registro PR2 del Timer2. Se calcula por medio de la siguiente ecuación: Período PWM = (PR2 +1) * 4Tosc * TMR2 pre-escala de valor Si el período de PWM (T) es conocido, es fácil calcular la frecuencia de la señal (F) ya que estos dos valores están relacionadas por la ecuación 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 número de 10-bits contenidos en la fórmula: Ancho de pulso = (CCPR1L, DC1B1, DC1B0) * Tosc * TMR2 pre-escala de valor La siguiente tabla muestra cómo generar señales PWM de frecuencia variable, si el microcontrolador utiliza un 20 MHz con cristal de cuarzo (Tosc = 50ns). FRECUENCIA [KHZ]

1,22

4,88

19,53

78,12

156,3

208,3

TMR2 Prescaler

16

4

1

1

1

1

PR2 Registrarse

FFh

FFh

FFh

3Fh

1Fh

17h

Sólo dos cosas más:

 

El pin de salida será constantemente establecer si la anchura de impulso es por negligencia dispuesto a ser más grande que período de PWM. En este caso, el postscaler Timer2 no puede ser utilizado para la generación de largos períodos de PWM.

Resolución de la señal PWM Una señal PWM es nada más que una secuencia de impulsos con diversos ciclo de trabajo. Para una frecuencia específica (número de pulsos por segundo), hay un número limitado de combinaciones de ciclos de trabajo. La resolución es el número máximo de combinaciones del ciclo de trabajo medido en bits. Por ejemplo, una resolución de 10-bits se traducirá en 1024 ciclos de trabajo discretos, mientras que una resolución de 8-bits se traducirá en 256 ciclos de trabajo discretos etc En cuanto a este microcontrolador, la resolución depende de los contenidos del registro PR2. La resolución máxima se obtiene mediante la escritura número FFh a dicho registro. Las frecuencias de las señales PWM y resoluciones (Fosc = 20MHz): FRECUEN CIA PWM

1.22K HZ

4.88K HZ

19.53K HZ

78.12K HZ

156.3K HZ

208.3K HZ

Temporizador de pre-escala

16

4

1

1

1

1

PR2 Valor

FFh

FFh

FFh

3Fh

1Fh

17h

Resolución máxima

10

10

10

8

7

6

Las frecuencias de las señales PWM y resoluciones (Fosc = 8MHz): FRECUEN CIA PWM

1.22K HZ

4.90K HZ

19.61K HZ

76.92K HZ

153.85K HZ

200.0K HZ

Temporizador de pre-escala

16

4

1

1

1

1

PR2 Valor

65h

65h

65h

19h

0Ch

09h

Resolución máxima

8

8

8

6

5

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 configuración de salida - El pin P1A siempre se configura como una entrada en la captura / modo de comparación. Pines P1B, P1C y actuar como puerto PORTD P1D entrada / salida de pines. P1M1

P1M0

MODO PWM con salida única

0

0

0

1

Pin P1A emite la señal modulada. Pines P1B, P1C y P1D son puerto de entrada de D / salida Full Bridge - Configuración Adelante

Pin P1D emite la señal modulada Pin P1A está activo Pines P1B y P1C están inactivos La mitad de configuración de puente 1

0

Pasadores P1A y P1B señal de salida modulada PinsP1C y P1D son entradas de los puertos D y salidas Full Bridge - configuración inversa

1

Pin P1B emite la señal modulada Pin P1C está activo Pines P1A y P1D están inactivos

1

DC1B1, DC1B0 - PWM fragmentos de ciclos de trabajo menos importantes - sólo se utilizan en el modo PWM en el que se representan dos bits menos significativos de un número de 10 bits. Este número se utiliza para determinar el ciclo de trabajo de una señal 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 Módulo CCP1. CCP1M3

CCP1M2

CCP1M1

CCP1M0

MODO

0

0

0

0

El módulo está desactivada (reset)

0

0

0

1

No usado

0

0

1

0

0

0

1

1

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

1

0

1

0

Comparar el modo de

Solicitud de interrupción 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

1

1

0

1

Pines P1A y P1C están activos de alta Pines P1B y P1D están activos de alta Modo PWM Pines P1A y P1C están activos de alta Pines P1B y P1D están activos bajo Modo PWM

1

1

1

0

Pines P1A y P1C están activos bajo Pines P1B y P1D están activos de alta Modo PWM

1

1

1

1

Pines P1A y P1C están activos bajo Pines P1B y P1D están activos bajo

MÓDULO CCP2 Independientemente de los nombres de diferentes registros y bits en los módulos CCP1 y CCP2, el módulo CCP2 representa una copia fiel del módulo CCP1 configurado para funcionar en modo normal (capturar y comparar). Sólo hay una cosa que hace que el CCP2 diferente cuando se opera en el modo de comparación. Es la señal de reposición 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 señal de reinicio del temporizador Timer1 se iniciará automáticamente el proceso de conversión A / D.

El módulo CCP2 está también 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 - sólo se utilizan en el modo PWM en el que se representan dos bits menos significativos de un número de 10 bits. Este número se utiliza para determinar el ciclo de trabajo de una señal 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 módulo CCP2. CCP2M3

CCP2M2

CCP2M1

CCP2M0

MODO

0

0

0

0

El módulo está desactivada (reset)

0

0

0

1

No usado

0

0

1

0

No usado

0

0

1

1

No usado Modo de captura

0

1

0

0

0

1

0

1

Cada flanco descendente en el pin CCP2 Modo de captura Cada borde de sensibilización 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 interrupción se genera poco CCP2IF se establece y el pin CCP2 no se ve afectado el partido Comparar el modo de

1

0

1

1

1

1

x

x

En Mach, poco CCP2IF se establece, Timer 1 registros se borran y la conversión A / D se inicia si el convertidor A / D está habilitada. Modo PWM

En Corto Configuración CCP1 módulo a modo PWM Con el fin de establecer el módulo CCP1 para funcionar en el modo PWM, los siguientes pasos se deben tomar:

  

Deshabilitar el pin de salida CCP1 (configurarlo como un insumo). Establecer el período de PWM escribiendo un valor en el registro PR2. Establecer el módulo CCP1 para operar en el modo PWM mediante la combinación de bits del registro CCP1CON. Ajuste el ciclo de trabajo de la señal PWM escribiendo un valor en el registro y el uso de los bits CCPR1L DC1B1 y DC1B0 del registro CCP1CON. Configurar e iniciar Timer2:

 



o o o o o

Desactive la bandera de interrupción 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 después 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 módulo CCP1 solamente. El conjunto CCP1 para operar en el modo mejorado básicamente no difiere de la CCP1 en modo normal. La mejora en realidad se refiere a la transmisión de señales PWM a los pines de salida. Es un detalle importante porque los microcontroladores se utilizan cada vez más en los sistemas eléctricos 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 módulos independientes adicionales. Hoy en día están integrados en los microcontroladores y puede funcionar en varios modos diferentes.

SOLA SALIDA MODO PWM Una sola salida PWM modo se activa sólo cuando los bits P1M1 y P1M0 del registro CCP1CON se borran. En este caso, una señal PWM puede estar disponible en hasta cuatro pines de salida diferentes al mismo tiempo. Además, la señal PWM puede aparecer ya sea en forma de onda básica o invertida. Distribución de la señal 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 señal PWM, mientras que el pasador P1B es al mismo tiempo alimenta con la señal PWM complementaria. Estos pulsos transistores MOSFET de accionamiento en la configuración de medio puente, que activar / desactivar la corriente pase a través de la carga.

No encienda dos transistores MOSFET simultáneamente 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 conmutación 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 continuación, el modo de medio puente también puede ser utilizado para conducir los transistores MOSFET en la configuración de puente completo:

FULL-BRIDGE MODE Todos los cuatro pasadores se configuran como salidas en el modo de puente completo. En la práctica, este modo de funcionamiento se utiliza comúnmente para el funcionamiento de los motores, ya que proporciona un control sencillo y lleno de velocidad y dirección de rotación. Hay dos configuraciones de este modo: Full Bridge-Forward y Full Bridge-Reverse.

Puente completo - CONFIGURACIÓN DE ADELANTE En la configuración de puente completo hacia adelante en los siguientes casos:

  

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

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

Puente completo - configuración inversa La configuración inversa puente completo es similar a la configuración antes mencionada, sólo que los pasadores tienen diferentes funciones:

  

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

PWM1CON Registrarse

PRSEN PWM Reinicie Bit de habilitación

 

1 - Una vez apagado automático, el módulo PWM se reinicia automáticamente, mientras que el bit del registro ECCPASE ECCPAS se borra. 0 - Con el fin de reiniciar el módulo PWM al auto-apagado, el bit ECCPASE debe ser limpiado desde el software.

PDC6 - PDC0 PWM bits de recuento de retraso - Un número binario 7-dígitos determina el número de ciclos de instrucción (4 * Tosc) usado como un retardo de tiempo durante la activación de pines de salida PWM.

PSTRCON Registrarse

STRSYNC - bits de dirección Sync ajusta el tiempo de la reorientación de pulso PWM:

 

1 - Redirigir se produce después de modificar el registro PSTRCON, pero no hasta la forma de onda PWM es completa. 0 - Redirigir se produce después de modificar el registro PSTRCON. La señal PWM en el pin de salida se cambió inmediatamente sin tener en cuenta si el ciclo anterior se ha completado o no. Tal reorientación se utiliza cuando una señal PWM tiene que ser eliminado de la immediatley pasador.

STRD - Dirección Activar bit D determina la función del pin P1D.

 

1 - El pin P1D se alimenta con una señal 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.

Dirección STRC Activar bit C determina la función del pin P1C.

 

1 - El pin P1C se alimenta con una señal 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.

STRB - Dirección Activa B bits determina la función del pin P1B.

 

1 - El pin P1B se alimenta con la señal 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.

STRA - Dirección Activa bits determina la función del pin P1A.

 

1 - El pin P1A se alimenta con la señal 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.

ECCPAS Registrarse

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

 

1 - módulo CCP está en el estado de cierre. 0 - módulo 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

ECCPAS1

ECCPAS0

SHUTHOWN ESTADO DE LA FUENTE

0

0

0

Estado de cierre desactivada

0

0

1

Comparador C1 cambio en la salida

0

1

0

Comparador C2 cambio de salida

0

1

1

El comparador C1 o C2 cambio de salida

1

0

0

La lógica cero (0) en el pin INT

1

0

1

La lógica cero (0) en el pin INT o cambio comparador C1 de salida

1

1

0

La lógica cero (0) en el pin INT o cambio comparador la salida C2

1

1

1

La lógica 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 lógico de la salida de pines P1A y P1C cuando el módulo CCP está en el estado de apagado. PSSAC1

PSSAC0

PINES ESTADO LÓGICO

0

0

0

0

1

1

1

X

De alta impedancia (Tri-State)

PSSBD1, PSSBD0 - P1B Pins, P1D de cierre de los bits de control del Estado definir el estado lógico de la salida de pines P1B y P1D cuando el módulo CCP está en el estado de apagado. PSSBD1

PSSBD0

PINES ESTADO LÓGICO

0

0

0

0

1

1

1

X

De alta impedancia (Tri-State)

3.8 MÓDULOS DE COMUNICACIÓN DE SERIE

El microcontrolador PIC16F887 tiene varios módulos independientes de comunicación 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 módulos CCP que el mismo se aplica aquí. ¿No te cargues con detalles sobre el funcionamiento de todos ellos, sólo tienes que seleccionar uno y aprender sólo lo que realmente necesita. La USART es uno de los sistemas más antiguos de comunicación 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 módulo de E / S serie la unidad de comunicación periférica. También 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 ejecución del programa principal. Como su nombre indica, aparte de usar el reloj para la sincronización, este módulo también puede establecer conexión asíncrona, que le hace único para algunas de las aplicaciones. Por ejemplo, en caso de que es difícil 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 módulo EUSART es definitivamente la mejor solución posible. El sistema EUSART integrado en el microcontrolador PIC16F887 tiene las siguientes características:

 Full-duplex asíncrono de transmisión y recepción;  Programable 8 - o caracteres anchos 9-bit;  De detección de direcciones en el modo de 9-bit;  Desbordamiento de búfer de entrada de la detección de errores, y  Half-duplex de comunicación en modo síncrono. EUSART en modo asíncrono El EUSART transmite y recibe datos utilizando un estándar de no retorno a cero (NRZ) en formato. Como puede verse en la figura a continuación, este modo no utiliza la señal de reloj, mientras que el formato de datos que están siendo transferidos es muy sencillo:

Brevemente, cada datos se transfieren de la siguiente manera:

   

En estado de reposo, la línea de datos tiene un nivel lógico alto (1); Cada transmisión 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 transmisión de datos termina con el bit de parada, que es siempre un uno (1).

La figura siguiente muestra una forma común de conectar un microcontrolador PIC con el módulo EUSART. El circuito RS-232 se utiliza como un convertidor de nivel de tensión.

TRANSMISOR EUSART ASÍNCRONO

A fin de permitir la transmisión de datos a través del módulo EUSART, es necesario configurar este módulo 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 asíncrono 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 automáticamente como una salida. Si este bit se utiliza simultáneamente para alguna función analógica, 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 configuración del bit TXEN del registro TXSTA. Los datos que se envíen 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 vacío, 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 electrónica de control "empuja" los datos hacia el pin TX en sincronización 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 automáticamente. Si el registro TXREG ha recibido un dato nuevo carácter en el entretanto, todo el procedimiento se repitió inmediatamente después del bit de parada del carácter 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 más 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 después de la escritura TXREG es completa.

EUSART RECEPTOR ASÍNCRONO

Similar a la activación 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 asíncrono 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 automáticamente como una entrada. Si este bit se utiliza simultáneamente para alguna función analógica, 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 través del pasador RX. Cuando el bit de parada se ha recibido, ocurre lo siguiente:

 





Los datos se envían automáticamente al registro RCREG (si está vacío); El RCIF bit de bandera está establecida y una interrupción, si está habilitada por el bit RCIE del registro PIE1 ocurre,.Al igual que en el transmisor, el bit de flag se borra automáticamente 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 recepción simultánea 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 reposición 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 recepción de 9-bit de datos, es necesario para establecer el bit RX9 del registro RCSTA. RECIBIR LA DETECCIÓN DE ERRORES Hay dos tipos de errores que el microcontrolador puede detectar automáticamente. 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 interrupción por sí mismo; Si este bit está establecido, los últimos datos recibidos tiene un error; Un error de trama (bit) no impide la recepción 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 automáticamente. 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 interrupción 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 recibirán 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 recepción de datos Además de recibir estándar de 8-bits de datos, el sistema EUSART soporta 9-bits de recepción de datos. En el lado de transmisión, el noveno bit es "adjunto" en el byte original directamente antes de que el bit de STOP. En el lado de recepción, cuando el bit RX9 del registro RCSTA se establece, el noveno bit de datos se escriben automáticamente en el bit RX9D del mismo registro. Después de recibir este byte, es necesario tener cuidado de cómo 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 detección de direcciones Cuando el bit Adden del registro RCSTA está establecido, el módulo EUSART es capaz de recibir datos sólo 9-bits, mientras que todos los datos de 8-bits será ignorada. Aunque parece una restricción, estos modos permiten la comunicación en serie entre varios microcontroladores. El principio de funcionamiento es simple. Dispositivo maestro envía una base de datos de 9 bits que representan la dirección del microcontrolador esclavo. Sin embargo, todos ellos deben tener el conjunto de bits Adden ya que permite la detección de dirección. Todos los microcontroladores esclavos, compartiendo la misma línea de transmisión, recibir estos datos (dirección) y comprobar automáticamente si coincide con su propia dirección. El dispositivo esclavo en el que el partido de dirección se produce, debe desactivar la detección de la dirección en la limpieza de su granito de arena Addendum.

El dispositivo maestro sigue enviando 8-bits de datos. Todos los datos que pasan a través de la línea de transmisión será recibido por el módulo EUSART dirigida únicamente. Cuando el último byte se ha recibido, el dispositivo esclavo debe establecer el bit Adden con el fin de activar la detección de la nueva dirección.

TXSTA Registrarse

CSRC - bits Reloj de selección de fuente - se utiliza para la selección de la fuente de reloj. Se utiliza sólo en modo síncrono.

 

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.

TX9 - 9-bit de habilitación de transmisión poco

 

1 a 9 bits de transmisión de datos a través del sistema EUSART. 0 a 8 bits de transmisión de datos a través del sistema EUSART.

TXEN - Transmitir Bit de habilitación

 

1 - Transmisión activada. 0 - Transmisión desactivada.

SYNC - Seleccionar el modo de EUSART bits

 

1 - EUSART funciona en modo síncrono. 0 - EUSART funciona en modo asíncrono.

SENDB - Enviar poco vacaciones de caracteres sólo se utiliza en modo asíncrono y cuando sea necesario para observar el estándar de bus LIN.

 

1 - Vacaciones de la transmisión de caracteres está habilitada. 0 - transmisión carácter de salto se ha completado.

BRGH - Tasa de bits de alta selección de baudios determina la velocidad de transmisión en modo asincrónico. No afecta a EUSART en modo síncrono.

 

1 - EUSART funciona a alta velocidad. 0 - EUSART funciona a baja velocidad.

TRMT - Registro de desplazamiento de transmisión bit de estado

 

1 - TSR registro está vacío. 0 - TSR registro está lleno.

TX9D - noveno bit de datos de transmisión se puede utilizar como dirección o bit de paridad.

RCSTA Registrarse

SPEN - Puerto serie Bit de habilitación

 

1 - Puerto serie habilitado. RX / DT y los pines TX / CK se configuran automáticamente como entrada y salida, respectivamente. 0 - Puerto serie desactivado.

RX9 - 9-bit Recibe Bit de habilitación

 

1 - Recepción de datos 9-bits a través del sistema EUSART. 0 - Recepción de 8-bits de datos a través del sistema EUSART.

SREN - poco ReceiveEnable solo se utiliza sólo en modo síncrono cuando el microcontrolador funciona como un maestro.

 

1 - Recepción sola habilitado. 0 - Recepción sola discapacidad.

CREN - recepción continua Bit de habilitación actúa de forma diferente dependiendo del modo de EUSART. Modo asíncrono:

 

1 - El receptor activado. 0 - Receptor desactivado.

El modo síncrono:

 

1 - Habilita la recepción continua hasta que el bit CREN se borra. 0 - Deshabilita recepción continua.

Addendum - Dirección Detectar Bit de habilitación sólo se utiliza en modo de detección de la dirección.



1 - Permite la detección de dirección de 9-bit de datos reciben.



0 - Desactiva la detección de la dirección. El noveno bit se puede utilizar como un bit de paridad.

FERR - Enmarcados bit de error

 

1 - error de trama se detecta en recibir. 0 - No hay error de trama.

OERR - bit de error de desbordamiento.

 

1 - Al recibir, error de desbordamiento se detecta. 0 - No hay error de desbordamiento.

RX9D - noveno bit de datos recibidos se pueden utilizar como dirección o bit de paridad. El siguiente diagrama muestra tres palabras que aparecen en la entrada RX. El búfer de recepción se lee después 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 asíncrono o un diagrama del transmisor, se verá que tanto el uso de una señal de reloj del temporizador local de BRG para la sincronización. La misma fuente de reloj también se utiliza en modo síncrono. El temporizador BRG se compone de dos registros de 8-bits haciendo un 16-bit del registro.

Un número escrito a estos dos registros determina la tasa de baudios. Además, tanto el bit BRGH del registro TXSTA y el bit de la BRGH16 BAUDCTL registro afectar frecuencia de reloj. Tablas en las páginas 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 transmisión estándar. Utilice la siguiente fórmula para determinar la velocidad de transmisión.

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

BAUDCTL Registrarse

ABDOVF - Auto-detección de baudios bits de desbordamiento sólo se utiliza en modo asíncrono durante la detección de la velocidad de transmisión.

 

1 - Auto-temporizador de transmisión se ha desbordado. 0 - Auto-temporizador de transmisión no se ha desbordado.

RCIDL - Recibir bits Bandera de inactividad sólo se utiliza en modo asíncrono.

 

1 - El receptor está inactivo. 0 - bit de START se ha recibido y recibe los datos está en curso.

SCKP - bits síncrono polaridad del reloj de selección. El estado lógico de este bit varía en función del modo EUSART está activo. Modo asíncrono:

 

1 - Transmisión de datos invertidos al pin RC6/TX/CK. 0 - Transmisión de datos no invertidas en la clavija de RC6/TX/CK.

El modo síncrono:

 

1 - Sincronización en el borde de subida del reloj. 0 - Sincronización del reloj en el borde que cae.

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.

EUA despertador Bit de habilitación

 

1 - El receptor espera un flanco descendente en el pin RC7/RX/DT para despertar al microcontrolador del modo de suspensión. 0 - El receptor funciona normalmente.

ABDEN - Auto-detección de baudios Activar bit se utiliza sólo en modo asíncrono.

 

1 - Auto-baudios modo de detección está activado. El bit se borra automáticamente en la detección de la velocidad de transmisión. 0 - Auto-modo de detección de baudios está desactivado.

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 ...

' 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

En Corto La transmisión de datos a través de la comunicación asíncrona EUSART:

1. La velocidad de transmisión 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 transmisión de datos de 9 bits. 4. La transmisión de datos se habilita estableciendo el bit TXEN del registro TXSTA. El bit TXIF del registro PIR1 se ajusta automáticamente. 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 interrupción. 6. Valor del noveno bit debe ser escrito en el bit del registro TX9D TXSTA en la transmisión de datos de 9 bits. 7. La transmisión se inicia escribiendo 8-bits de datos al registro TXREG. Recepción de datos a través de la comunicación asíncrona EUSART:

1. Velocidad de transmisión 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 recepción de datos para provocar una interrupción. 4. El bit RX9 del registro RCSTA se debe establecer el 9 de bits de datos reciben. 5. La recepción de datos se habilita estableciendo el bit CREN del registro RCSTA. 6. El registro RCSTA debe ser leído con el fin de comprobar si se han producido algunos errores durante la recepción. El noveno bit será almacenado en este registro en la recepción de datos de 9-bit. 7. La recibida de 8-bits de datos almacenados en el registro RCREG debe ser leído. Ajuste del modo de detección de direcciones: 1. Velocidad de transmisión 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 recepción de datos para provocar una interrupción. 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 dirección. 6. La recepción 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 automáticamente. Si está activado, se produce una interrupción. 8. El registro RCSTA debe ser leído con el fin de comprobar si se han producido algunos errores durante la recepción. El RX9D noveno bit se establece siempre. 9. La recibida de 8-bits de datos almacenados en el registro RCREG debe ser leído. Se debe comprobar si la combinación de estos bits coincide con la dirección 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 SINCRÓNICO módulo de puerto COM El módulo MSSP (Master puerto en serie síncrona) es una herramienta muy útil, pero al mismo tiempo, uno de los circuitos más complejos dentro del microcontrolador. Permite la comunicación de alta velocidad entre el microcontrolador y otros periféricos u otros microcontroladores mediante la entrada de unos pocos / líneas de salida (tres o máximo cuatro). Por lo tanto, se utiliza comúnmente para conectar el microcontrolador a las pantallas LCD, convertidores A / D, EEPROM serie, registros de desplazamiento, etc La principal característica de este tipo de comunicación es que es síncrono y adecuados para uso en sistemas con un solo maestro y uno o más 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 generación interna. El módulo 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 continuación, un módulo MSSP representa sólo un medio de el hardware necesario para establecer comunicación en serie, mientras que la otra mitad se almacena en el dispositivo intercambia datos con. A pesar de que los módulos en ambos extremos de la línea son los mismos, sus modos son esencialmente diferentes en función de si operan como un maestro o un esclavo:

Si el microcontrolador a ser los controles programados a otro dispositivo o circuito (periféricos), debe ser configurada para funcionar como un maestro. Se generará reloj cuando sea necesario, es decir, sólo cuando la recepción y transmisión de datos son requeridos por el software. Obviamente, es exclusivamente del dispositivo principal para establecer la conexión o no.

En caso contrario, si el microcontrolador a programar es un periférico de algún dispositivo más complejo (por ejemplo, un PC), entonces debe funcionar como un esclavo. Como tal, siempre tiene que esperar a petición de transmisión de datos para ser enviada por el dispositivo maestro.

MODO SPI El modo SPI permite 8 bits de datos a transmitir y recibir simultáneamente con 3 entradas / líneas de salida:

  

SDO - salida de datos serial - línea de transmisión; SDI - datos serie en - línea de recepción, y SCK - Serial Clock - línea de sincronización.

Aparte de estas tres líneas, existe la cuarta línea (SS), así que puede ser utilizado si los intercambios microcontrolador datos con varios dispositivos periféricos. Refiérase a la figura de abajo. SS - Slave Select - es una línea adicional que se utiliza para la selección de un dispositivo específico. Sólo está activo cuando el microcontrolador está en modo esclavo, es decir, cuando la externa - dispositivo maestro requiere el intercambio de datos. El módulo MSSP utiliza en el registro total de 4 cuando está en modo SPI:

   

SSPSTAT - registro de estado SSPCON - registro de control SSPBUF - búfer 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 continuación, la parte central del módulo SPI se compone de dos registros conectados a las patillas para la recepción, transmisión y sincronización.

El registro de desplazamiento (SSPRS) está directamente conectado a los pines del microcontrolador y utilizado para la transmisión 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 (línea de recepción) simultáneamente se desplaza a otro poco hacia la salida (línea de transmisión). El registro SSPBUF (Buffer) es parte de la memoria utilizada para almacenar temporalmente los datos antes de ser enviado o inmediatamente después de ser recibido. Después de los 8 bits de datos se han recibido, el byte se mueve desde los SSPRS el registro SSPBUF. Tal operación 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 transmisión / recepción de datos se tendrá en cuenta. Desde el punto de vista de los programadores, este registro es considerado el más importante como ser las más solicitadas. Es decir, si tenemos en cuenta la configuración del modo por un momento, la transferencia de datos a través 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 automáticamente 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 Recepción / transmisión de datos utilizando el modo SPI Antes de comenzar la inicialización 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 (sólo en modo master); Esclavo modo de selección, los bits SSPM3-SSPM0 del registro SSPCON (sólo modo Esclavo).

El módulo SPI se pone en marcha activando el bit SSPEN:

Paso 1. Los datos que se transfieren deben ser por escrito a la SSPBUF registro tampón. Si el módulo SPI funciona en modo maestro, el microcontrolador automáticamente realice los siguientes pasos 2, 3 y 4. Si el módulo SPI funciona como esclavo, el microcontrolador no realizar estos pasos hasta que el pin SCK detecta señal 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á simultáneamente siendo llenado con los bits a través 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 automáticamente de la SSPSR registrarse en el registro SSPBUF.Dado que la transmisión de datos en serie se realiza automáticamente, el resto del programa se ejecuta normalmente, mientras que la transmisión de datos está en curso. En este caso, la función del bit SSPIF es generar una interrupción cuando una transmisión 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 2

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, están dentro del mismo dispositivo. Por lo general, otro microcontrolador o un circuito especializado, integrado barata que pertenece a la nueva generación de los llamados 'componentes periféricos inteligentes "(módulos de memoria, sensores de temperatura en tiempo real, relojes, etc) Al igual que en la comunicación serie en modo SPI, la transferencia de datos en modo I2C es síncrona y bidireccional. Esta vez sólo dos pines se utilizan para la transmisión 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 observación de reglas particulares (protocolos), de este modo permite hasta 122 diferentes componentes para ser conectados simultáneamente de una manera sencilla mediante el uso de sólo dos valiosos pines I / O. Echemos un vistazo a cómo 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 máxima frecuencia de reloj de 3,4 MHz (denominado bus I2C de alta velocidad), este libro cubre sólo el protocolo de uso más frecuente de la frecuencia de reloj de la cual está limitada a 100 KHz. No hay limitaciones para la frecuencia mínima. Cuando los componentes del maestro y el esclavo están sincronizados con el reloj, cada intercambio de datos es siempre iniciada por el maestro. Una vez que el módulo MSSP se ha habilitado, se espera una condición de arranque que se produzca. El dispositivo maestro envía primero el bit de inicio (un cero lógico) a través del pin SDA, a continuación, una dirección 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 después de la condición de arranque. Todos los dispositivos esclavos que comparten la misma línea de transmisión simultánea recibirá el primer byte, pero sólo uno de ellos tiene la dirección para igualar y recibe los datos completos.

Una vez que el primer byte ha sido enviado (sólo 8-bits de datos son transmitidos), el maestro entra en modo de recepción y espera a que el reconocimiento del dispositivo esclavo que coincidencia de dirección se ha producido. Si el dispositivo esclavo envía el bit de confirmación de datos (1), la transferencia de datos se mantendrá hasta que el dispositivo maestro (microcontrolador) envía el bit de parada.

Esta es la explicación más simple de cómo dos componentes se comunican. Tal un microcontrolador es también capaz de controlar las situaciones más complicadas cuando 1024 diferentes componentes (10-bit de dirección), compartidos por varios dispositivos maestros diferentes, están conectados. Estos dispositivos se usan muy poco en la práctica y no hay necesidad de discutir más a fondo. 2

La siguiente figura muestra el diagrama de bloques del módulo MSSP en el modo I C.

2

El módulo MSSP utiliza seis registros para la operación 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 lógico se lee al final del tiempo de salida. 0 - estado lógico 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 estándar (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 sincronización. 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).

CKP = 1:

 

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

D / A - Datos / bits de la dirección 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 dirección.

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

 

1 - el último bit detectado es el bit de parada. 0 - el último bit detectado no es el bit de parada.

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

 

1 - último bit detectado es el bit de inicio. 0 - último bit detectado no es el bit de inicio. 2

R / W - Leer bits escritura se utiliza en el modo I C solamente. Este bit contiene la información de bit R / W después del partido la última dirección. Este bit sólo es válido desde el partido de la dirección 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.

En el modo I ² C maestro

 

1 - Transmitir en curso. 0 - Transmitir no está en curso.

UA - bits Actualización de la dirección se utiliza en 10-bit de modo I2C solamente.

 

1 - El registro SSPADD debe ser actualizada. 0 - Dirección en el registro SSPADD es correcta y no necesita ser actualizado.

BF Buffer bit de estado completa Durante la recepción 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á vacía.

Durante la transmisión de datos (en el modo I ² C solamente)

 

1 - Los datos de transmisión en curso (no incluye los bits ACK y STOP). 0 - Transmitir datos completa (no incluye los bits ACK y STOP).

SSPCON Registrarse

Colisión WCOL Escribir Detectar bits

 

1 - colisión detectada. Escribir en el registro SSPBUF se intentó, mientras que las condiciones I2C no eran válidos para la transmisión de empezar. 0 - No hay colisión.

Recibe SSPOV bits de desbordamiento Indicador





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.

SSPEN - puerto serie síncrono Activar bit determina la función de micro pines y se inicializa el módulo MSSP: En modo SPI

 

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

En el modo I ² C

 

1 - Habilita el módulo MSSP y configura pines SDA y SCL como pines del puerto serie. 0 - Deshabilita el módulo MSSP y configura estos pines de E / S del puerto.

CKP - bit de polaridad del reloj de selección 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.

En modo esclavo I ² C

 

1 - Activa el reloj. 0 - Mantiene baja del reloj. Se utiliza para proporcionar más tiempo para la estabilización de los datos.

SSPM3-SSPM0 - síncronos bits de modo Serial Port Seleccionar. SSP modo se determina mediante la combinación de estos bits:

SSPM3

SSPM2

SSPM1

SSPM0

MODO

0

0

0

0

SPI Master Mode, reloj = Fosc / 4

0

0

0

1

SPI Master Mode, reloj = Fosc/16

0

0

1

0

SPI Master Mode, reloj = Fosc/64

0

0

1

1

SPI Master Mode, reloj = (TMR de salida) / 2

0

1

0

0

Modo SPI esclavo, SS pin de control activado

0

1

0

1

Modo SPI esclavo, de las SS con discapacidad de control de pines, SS puede ser utilizado como pin I / O

0

1

1

0

I ² C modo esclavo, 7 bits de la dirección utilizada

0

1

1

1

I ² C modo de esclava, de 10-bits de direcciones utilizado

1

0

0

0

I ² C Master Mode, reloj = Fosc / [4 (SSPAD +1)]

1

0

0

1

Máscara utilizada en modo esclavo I ² C

1

0

1

0

No se utiliza

1

0

1

1

I ² C modo master controlado

1

1

0

0

No se utiliza

1

1

0

1

No se utiliza

1

1

1

0

I ² C modo de esclava, de 7-bits de direcciones utilizado, iniciar y detener los bits permiten interrumpir

1

1

1

1

I ² C modo de esclavos, la dirección de 10 bits utilizada, iniciar y detener los bits permiten interrumpir

SSPCON2 Registrarse

GCEN - Convocatoria general Bit de habilitación En modo esclavo I ² C sólo

 

1 - Habilita la interrupción cuando una dirección de llamada general (0000h) se recibe en el SSPSR. 0 - Dirección General de llamada desactivado.

ACKSTAT - Reconocer bit de estado En I ² C maestro de transmisión sólo en el modo

 

1 - Reconocer que no se ha recibido de esclavos. 0 - se ha recibido información de esclavo.

ACKDT - Reconocer bit de datos En I ² C Maestro modo de recepción única

 

1 - no reconoce. 0 - Reconocer.

ACKEN - Reconocer la secuencia Bit de habilitación En I ² C Maestro modo de recepción

 

1 - Iniciar la condición de reconocer a la SDA y SCL pines y transmitir los bits de datos ACKDT. Se borra automáticamente por el hardware. 0 - Reconocer condición no se inicia.

RCEN - Recibir Bit de habilitación En modo I ² C único Maestro

 

2

1 - Permite la recepción de datos en el modo I C. 0 - Recibir desactivado.

PEN - Habilitar la condición de STOP bits En modo I ² C único Maestro

 

1 - Inicia la condición de STOP en los pines SDA y SCL. Este bit se borra automáticamente por el hardware. 0 - condición de STOP no se inicia.

RSEN - poco repetida condición de START Activado En modo I ² C único maestro

 

1 - condición de START aparición de estos repetidos inició en los pines SDA y SCL. Este bit se borra automáticamente por el hardware. 0 - condición de START repetida no se inicia.

SEN - condición de START Habilitado / bit Stretch Activado En modo I ² C único Maestro

 

1 - Inicia la condición de START en los pines SDA y SCL. Este bit se borra automáticamente por el hardware. 0 - condición de START no se inicia.

I 2 C en el modo Maestro El caso más común es que el microcontrolador funciona como un maestro y un componente periférico como un esclavo. Por eso, este libro cubre sólo de este modo. También se considera que la dirección se compone de 7 bits y un dispositivo de destino contiene un solo microcontrolador (maestro único dispositivo). A fin de permitir módulo MSSP en este modo, es necesario hacer lo siguiente:

Establecer la velocidad de transmisión (SSPADD registro), desactivar el control de velocidad de respuesta (al establecer el bit SMP del registro SSPSTAT) y seleccione el modo maestro (SSPCON registro). Después de todos estos preparativos se han terminado y el módulo se ha activado (SSPCON registro: poco SSPEN), es necesario esperar a que la electrónica interna para indicar que todo está listo para la transmisión de datos, es decir, el bit SSPIF del registro PIR1 está establecido. Este bit debe ser limpiado por el software y después de que el microcontrolador está listo para intercambiar datos con periféricos.

TRANSMISIÓN DE DATOS EN EL MODO MAESTRO I2C La transmisión de datos en el pin SDA se inicia con una lógica cero (0) que aparece en la configuración del bit SEN del registro SSPCON2. Aún está activado, el microcontrolador tiene que esperar un cierto tiempo antes de que comience la comunicación. Es la llamada "condición 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 transmisión de datos se inicia tan pronto como el registro SSPBUF está cargado.

Máximo 112 circuitos integrados dispositivos esclavos) al mismo tiempo pueden compartir la misma línea de transmisión. El primer byte de datos enviada por el dispositivo maestro contiene la dirección para que coincida con sólo 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 dirección de la transmisión de datos, es decir, si el microcontrolador es para enviar o recibir datos. En este caso, el octavo bit se borra a la lógica cero (0), lo que significa que se trata de transmisión de datos.

Cuando se produce coincidencia de dirección, el microcontrolador tiene que esperar a que el bit de reconocimiento de datos. El dispositivo esclavo reconoce coincidencia de dirección 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 transmisión de datos termina configurando el bit SEN del registro SSPCON2. La condición de parada se produce, que permite el pin SDA para recibir impulsos: Inicio - Dirección - Reconocimiento - Dato - Reconocimiento de datos .... - Reconocimiento - ¡Detente!

Los datos de recepción en la que el Modo 2 C Maestro Preparaciones para la recepción de datos son similares a los de transmisión de datos, con excepción de que el último bit del primer byte enviado (dirección que contiene) se ajusta a uno lógico (1). Se especifica que el maestro espera recibir los datos desde el dispositivo esclavo direccionado. Vamos a ver lo que sucede dentro del microcontrolador: Después de los preparativos internos están terminadas y el bit de inicio está establecida, el dispositivo esclavo inicia el envío de un byte a la vez. Estos bytes se almacenan en el registro SSPSR serie. Cada dato es, después 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 envían automáticamente, lo que significa que el dispositivo maestro está listo para recibir nuevos datos. Del mismo modo, la recepción de datos termina configurando el bit de STOP:

Inicio - Dirección - Reconocimiento - Datos - Reconocer ... - Reconocer los datos - Stop! En esta secuencia de pulsos, el bit de reconocimiento se envían al dispositivo esclavo.

GENERADOR DE VELOCIDAD DE TRANSMISIÓN Con el fin de sincronizar la transmisión 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 también.

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 fórmula 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 INTERÉS ... Cuando el microcontrolador se comunica con los componentes periféricos, puede ocurrir que la transmisión de datos falla por alguna razón. En este caso, se recomienda para comprobar el estado de algunos de los bits que puede aclarar el tema. En la práctica, el estado de estos bits se comprueba mediante la ejecución de un subprograma de corto después de cada transmisión y recepción de bytes (por si acaso). WCOL (SPCON, 7) - Si tratas de escribir nuevos datos en el registro SSPBUF, mientras que otro los datos de transmisión / recepción en curso, el bit WCOL se establecerá y el contenido del registro SSPBUF se mantiene sin cambios. Escribir no se produce. Después de esto, el bit WCOL debe ser limpiado en el software. BF (SSPSTAT, 0) - En el modo de transmisión, 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 recepción, este bit se establece cuando los datos o la dirección se carga en el registro SSPBUF. Se pone a cero después de leer el registro SSPBUF.

SSPOV (SSPCON, 6) - En el modo de recepción, este bit se establece cuando un nuevo byte es recibido por el registro SSPSR a través de la comunicación en serie, mientras que los datos recibidos previamente no se ha leído en el registro SSPBUF todavía. Pines SDA y SCL - Cuando el módulo SSP está habilitado, estos pines se convierten en salidas de desagüe abierto. Esto significa que deben ser conectados a las resistencias que son, en el otro extremo, conectados a la fuente de alimentación positiva.

En breve Recepción / transmisión de datos en el modo I 2 C Con el fin de establecer una comunicación serie en modo I2C, lo siguiente se debe hacer: Configuración del módulo y envío de Dirección:

     

Valor para determinar la velocidad de transmisión 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 automáticamente al final de la secuencia de arranque cuando el módulo está listo para funcionar. Se debe ser compensado. Dirección del esclavo debe ser escrito en el registro SSPBUF.



Cuando el byte se envía, el bit SSPIF (interrupción) se ajusta automáticamente después de recibir el bit de reconocimiento del dispositivo esclavo.

Los datos de transmisión:

  

Los datos que se envían deben ser escritos para el registro SSPBUF. Cuando el byte se envía, el bit SSPIF (interrupción) se ajusta automáticamente después de recibir el bit de reconocimiento del dispositivo esclavo. Con el fin de informar al dispositivo Esclavo que la transmisión de datos está completa, la condición de parada debe ser iniciado por establecer el bit PEN del SSPCON registrarse.

Recepción de datos:

  

Con el fin de permitir la recepción, el bit RSEN del registro SSPCON2 debe ser fijado. El bit SSPIF indica la recepción 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 confirmación para ser enviado. Con el fin de informar al dispositivo Esclavo que la transmisión de datos está completa, la condición de STOP debe ser iniciado por establecer el bit PEN del SSPCON registrarse.

3.9 Módulos analógicos Además de un gran número de E / S digitales en los pins utilizados para la comunicación con los módulos periféricos, el PIC16F887 también tiene 14 entradas analógicas. Permiten que el microcontrolador a reconocer no sólo si un pin es impulsada bajo o alto (0 o 5 V), pero para medir con precisión la tensión y convertirla en valor numérico, es decir, en formato digital. Uno de los módulos analógicos más importantes dentro del microcontrolador es un convertidor A / D, que tiene las siguientes características:

   

La conversión se realiza aplicando el método de aproximación sucesiva; Hay 14 entradas separadas analógicos conectados a los pines del microcontrolador del puerto; El convertidor A / D convierte una señal de entrada analógica en un número binario de 10-bit; La resolución, es decir, la calidad de la conversión se puede ajustar para diferentes necesidades mediante la selección de referencias de tensión Vref-y Vref +.

Convertidor A / D A pesar de que el uso de un convertidor A / D parece ser muy complicado, es muy sencilla, más simple que el uso de módulos de comunicación 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 conversión; Contiene ADRESL byte bajo del resultado de la conversión;

 

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

ADRESH y ADRESL Registros El proceso de convertir un valor analógico en digital tiene como resultado un número de 10-bits que se almacenan en los registros ADRESH y ADRESL. Hay dos formas de manipulación de este número justificación a la izquierda y derecha que simplifica su uso en gran medida. El formato del resultado de la conversión 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 propósito general.

A / D REQUISITOS DE ADQUISICIÓN Para el voltaje a ser medido con precisión por medio del convertidor A / D, es necesario para proporcionar un retardo de tiempo determinado entre la selección de una entrada analógica y la medición en sí. Este retardo de tiempo se denomina "tiempo de adquisición" y depende principalmente de la impedancia de la fuente. Existe una ecuación para calcular este retardo de tiempo con precisión, que en el peor de los casos equivale a aproximadamente 20US. Por lo tanto, si desea que la conversión A / D para ser exactos, no se olvide este pequeño detalle.

ADC período de reloj El tiempo necesario para completar una conversión de un solo bit que se conoce como DAT. Se requiere al menos 1,6 uS. Un total de 10-bits de conversión A / D es un poco más de lo previsto y que equivale a 11 periodos de TAD. Puesto que tanto la frecuencia de reloj del dispositivo y una fuente de conversión 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 medición de la tensión en algunas de las aperturas entradas analógicas. Estos bits se almacenan en el registro ADCON0.

ADC FUENTE DE RELOJ

ADCS1

APARATO DE ALTA FRECUENCIA (FOSC)

ADCS0

20 Mhz

8 Mhz

4 Mhz

1 Mhz

Fosc / 2

0

0

100 ns

250 nS

500 ns

2 nos

Fosc / 8

0

1

400 nS

1 nos

2 nos

8 nos

Fosc/32

1

0

1,6 uS

4 nos

8 nos

32 nos

Frc

1

1

2-6 uS

2-6 uS

2-6 uS

2-6 uS

Cualquier cambio de la frecuencia de reloj microcontrolador afectará a la A / D de velocidad de conversión, 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 conversión A / D. Los valores en las celdas sombreadas se encuentran fuera del rango recomendado.

CÓMO 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 señales digitales y analógicas. Con el fin de evitar errores en la medición o para prevenir el chip se dañe, todos los pines de entrada A / D debe configurarse como entradas analógicas antes del proceso de conversión se inicia. Los bits correspondientes se almacenan en el TRIS y ANSEL (ANSELH) registra; Cuando se lee el puerto con entradas analógicas marcadas como CH0-CH13, el estado de los bits correspondientes, es decir, su valor digital será leído como un cero lógico (0), y En términos generales, el proceso de medición de tensión por el convertidor se basa en la comparación de la tensión de entrada a una escala immaginary con 1024 grados 10 (2 = 1024). La marca más baja se denomina la tensión Vref, mientras que el más 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 conversión Seleccionar seleccionar la frecuencia de reloj que se utiliza para la sincronización interna del convertidor A / D. También afecta a la velocidad de conversión A / D. ADCS1

ADCS2

RELOJ

0

0

Fosc / 2

0

1

Fosc / 8

1

0

Fosc/32

1

1

RC *

Reloj * es generada por el oscilador interno incorporado en el convertidor A / D. CHS3-CHS0 - Analog Channel bits de selección de seleccionar un PIN (una entrada analógica) para la conversión A / D, es decir, la medición de tensión:

CHS3

CHS2

CHS1

CHS0

CANAL

PIN

0

0

0

0

0

RA0/AN0

0

0

0

1

1

RA1/AN1

0

0

1

0

2

RA2/AN2

0

0

1

1

3

RA3/AN3

0

1

0

0

4

RA5/AN4

0

1

0

1

5

RE0/AN5

0

1

1

0

6

RE1/AN6

0

1

1

1

7

RE2/AN7

1

0

0

0

8

RB2/AN8

1

0

0

1

9

RB3/AN9

1

0

1

0

10

RB1/AN1 0

1

0

1

1

11

RB4/AN1 1

1

1

0

0

12

RB0/AN1 2

1

1

0

1

13

RB5/AN1 3

1

1

1

0

CVref

1

1

1

1

Vref = 0,6 V

GO / DONE - Conversión A / D bit de estado determina el estado actual de la conversión:

 

1 - la conversión A / D está en marcha. 0 - conversión A / D es completa. Este bit se borra automáticamente después de completar la conversión A / D.

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

 

1 - Un convertidor A / D está habilitado. 0 - convertidor A / D está desactivado.

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 conversión se justifica a la derecha. Seis bits más significativos del registro ADRESH no se utilizan. 0 - resultado de la conversión 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 tensión de referencia negativa para el funcionamiento del convertidor A / D.

 

1 - La Vref patillas se alimenta con tensión de referencia negativa. 0 - tensión de alimentación de alimentación Vss se utiliza como una fuente de tensión de referencia negativa.

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

 

1 - La Vref + pasador se alimenta con tensión de referencia positiva. 0 - Fuente de alimentación Vdd voltaje se utiliza como una fuente de tensión 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 - Configuración del puerto:

 

Escribir un uno lógico (1) a un bit del registro TRIS para configurar el pin apropiado como una entrada. Escribir un uno lógico (1) para un poco de la ANSEL registrarse para configurar el pin apropiado como una entrada analógica.

Paso 2 - Configuración del ADC módulo:

    

Configuración de tensión de referencia en el registro ADCON1. Seleccione un reloj de conversión 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 3 - Configuración del ADC interrupción (opcional):

 

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

Paso 4 - Esperar a que el tiempo de adquisición requerido para pasar (aproximadamente 20US). Paso 5 - Iniciar la conversión mediante el establecimiento de la GO / bit DONE del registro ADCON0. Paso 6 - Esperar a que la conversión 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).

Paso 7 - Leer los resultados de conversión:



Leer registros ADRESH y ADRESL.

Comparador analógico En adición al convertidor A / D, hay otro módulo, que hasta hace poco se construyó sólo en circuitos integrados pertenecientes a los componentes electrónicos llamados analógicas. Debido al hecho de que apenas es posible encontrar cualquier dispositivo más complejo en automáticas que de algún modo no utiliza estos módulos, dos comparadores analógicos de alta calidad están integrados en el microcontrolador y conectado a sus patas. ¿Cómo funciona un comparador analógico? Básicamente, el comparador analógico 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 más alto (un valor analógico), un cero lógico (0) o un uno lógico (1) (valores digitales) aparecerá en su salida:

 

Cuando el voltaje analógico Vin en-es mayor que en Vin +, la salida del comparador es un nivel digital bajo (0). Cuando el voltaje analógico 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 analógicos tales las entradas de los cuales están conectados a los pines de E / S RA0-RA3, mientras que sus salidas están conectadas a las RA4 y RA5 los pins. Hay también una fuente de tensión de referencia ajustable interna dentro del propio microcontrolador, que se discutirá más adelante. Estos dos módulos analógicos están 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 analógicos proporcionados en las entradas del comparador analógico es fija y constante. Este voltaje se conoce como una "tensión 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 través de ambos extremos de una red de escalera que consta de 16 resistencias que juntas forman un divisor de tensión.El bit del registro VRSS VRCON se utiliza para seleccionar la fuente de tensión de referencia. La tensión comparador módulo de referencia proporciona una referencia de tensión generada internamente para los comparadores (CVref). La tensión de referencia CVref tiene 2 rangos, cada uno con 16 niveles de voltaje. Selección de la gama está controlado por el bit VRR del registro VRCON. El rango de tensión seleccionado puede ser la salida a la clavija RA2/AN2 utilizando el bit VROE. Además, los bits VR0-VR3 se utilizan para seleccionar los niveles adecuados de voltaje. Véase la figura a continuación.

Aunque la idea principal, con el módulo de tensión de referencia era proporcionar módulos analógicos con variando la tensión de referencia, ahora se utiliza como un convertidor D / A también. 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 lógico de la salida de cualquier comparador hace que el bit de bandera CMIF del registro PIR a ser fijado. Estos cambios también se generará una interrupción 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 interrupción 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 operación 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 comparación no se utiliza para despertar el microcontrolador, se puede desactivar para reducir al mínimo el consumo de energía. Se lleva a cabo en la limpieza de la broca CxON del registro CMxCON0. Para habilitar el comparador de despertar el microcontrolador de un sueño, el bit CxIE del registro IE2 y el bit PEIE del registro INTCON se debe establecer. La primera instrucción que se ejecutará después de las salidas del microcontrolador del modo de reposo es el que sigue a la instrucción del sueño. Si el bit GIE del registro INTCON se pone, el microcontrolador se ejecutará la rutina de interrupción en primer lugar.

CM1CON0 Registrarse

Los bits del registro CM1CON0 están en el control del comparador C1. Se refiere principalmente a la conexión de las entradas. La siguiente figura muestra una parte del módulo directamente afectados por los bits de este registro.

C1ON - comparador C1 bit de habilitación 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 analógica de tensión en el C1Vin + es inferior a la tensión analógica en C1Vin. 0 - Salida analógica de tensión en el C1Vin + es superior a la tensión analógica en C1Vin.

Si C1POL = 0 (salida del comparador es no invertida)

 

1 - Salida analógica de tensión en el C1Vin + es superior a la tensión analógica en C1Vin. 0 - Salida analógica de tensión en el C1Vin + es inferior a la tensión analógica en C1Vin.

Comparador C1OE C1 de habilitación de salida poco.

 

1 - salida C1OUT comparador está conectada a la clavija C1OUT *. 0 - Salida del comparador sólo se utiliza internamente.

* 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.

C1R - comparador C1 de referencia bits Select

 

1 - entrada no inversora C1Vin + está conectado a la tensión de referencia C1Vref. 0 - entrada no inversora + C1Vin está conectado a la C1IN + pasador.

C1CH1, C1CH0 - comparador C1 bits de selección de canal C1CH1

C1CH0

COMPARADOR C1VIN ENTRADA

0

0

Entrada C1Vin-está conectado a la C12IN0 patillas

0

1

Entrada C1Vin-está conectado a la C12IN1 patillas

1

0

Entrada C1Vin-está conectado a la C12IN2 patillas

1

1

Entrada C1Vin-está conectado a la C12IN3 patillas

CM2CON0 Registrarse

Los bits del registro CM2CON0 están en el control del comparador C2. Similar al caso anterior, figura a continuación muestra un esquema simplificado del circuito afectado por los bits de este registro.

C2ON - Comparador C2 bit de habilitación 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 analógica de tensión en el C2Vin + es inferior a la tensión analógica en C2Vin. 0 - Salida analógica de tensión en el C2Vin + es superior a la tensión analógica en C2Vin.

Si C2POL = 0 (salida del comparador es no invertida)

 

1 - Salida analógica de tensión en el C2Vin + es superior a la tensión analógica en C2Vin. 0 - Salida analógica de tensión en el C2Vin + es inferior a la tensión analógica en C2Vin.

C2OE - C2Output comparador Bit de habilitación

 

1 - salida C2OUT comparador está conectada a la clavija C2OUT *. 0 - Salida del comparador es interno.

* 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.

C2R - Comparador C2 referencia bits Select

 

1 - entrada no inversora C2Vin + está conectado a la C2Vref tensión de referencia. 0 - entrada no inversora + C2Vin está conectado a la C2IN + pasador.

C2CH1, C2CH0 comparador C2 bits de selección de canal C2CH1

C2CH0

COMPARADOR C2VIN ENTRADA

0

0

Entrada C2Vin-está conectado a la C12IN0 patillas

0

1

Entrada C2Vin-está conectado a la C12IN1 patillas

1

0

Entrada C2Vin-está conectado a la C12IN2 patillas

1

1

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 tensión. 0 - 0,6 V de tensión de referencia fijo se utiliza en la fuente de referencia C1Vref tensión.

C2RSEL - Comparador C2 referencia bits Select

 

1 - Variando CVref voltaje se utiliza como una fuente de referencia C2Vref tensión. 0 - 0,6 V de tensión de referencia fija se utiliza como una fuente de referencia C2Vref tensión.

T1GSS - Timer1 Fuente Puerta Seleccione bits

 

1 - Timer1 puerta utiliza la señal de pin T1G como fuente de reloj. 0 - Timer1 puerta utiliza la salida del comparador SYNCC2OUT como una fuente de reloj.

C2SYNC - Comparador de salida C2 sincronización de bits

 

1 - comparador la salida C2 está sincronizado con el reloj del Timer1. 0 - comparador C2 es de salida de la señal asíncrona.

VRCON Registrarse

Comparador VREN C1 Referencia de tensión Bit de habilitación

 

1 - CVref voltaje fuente de referencia habilitada. 0 - Voltaje de fuente de referencia CVref desactivado.

VROE comparador de voltaje de referencia C2 Bit de habilitación

 

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.

VRR - Rango CVref poco Selección

 

1 - fuente de tensión de referencia se establece en la gama baja. 0 - Voltaje de fuente de referencia se ajusta a la gama alta.

VRSS - Comparador rango Vref selección de bit

 

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 (tensión de alimentación).

VR3 - VR0 selección de valores CVref Si VRR = 1 (gama baja) Referencia de voltaje se calcula por medio de la fórmula: CVref = ([VR3: VR0] / 24) Vdd Si VRR = 0 (gama alta) Referencia de voltaje se calcula por medio de la fórmula: 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 - Configuración del módulo:



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 configuración de voltaje de la fuente de referencia (cuando se usa). En el registro VRCON es necesario:

   

Seleccione uno de los dos rangos de tensión 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.

Fórmula utilizada para calcular la tensión 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 operación:

  

Habilitar una interrupción 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 señal de reloj. La señal 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 aún más interesante ... Como puede verse en la figura a continuación, la señal 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 cerámico o resistencia condensador. El modo de oscilador es seleccionado por los bits de la palabra de configuración, cargados en el microcontrolador durante la programación. 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 después 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 también 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 selección 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 selección 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 combinación de estos tres bits determina la tasa de pre-escalador, por lo tanto, la frecuencia de reloj del oscilador interno. IRCF2

IRCF1

IRCF0

FRECUENCIA

OSC.

1

1

1

8 MHz

HFINTOSC

1

1

0

4 MHz

HFINTOSC

1

0

1

2 MHz

HFINTOSC

1

0

0

1 MHz

HFINTOSC

0

1

1

500 kHz

HFINTOSC

0

1

0

250 kHz

HFINTOSC

0

0

1

125 kHz

HFINTOSC

0

0

0

31 kHz

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 sólo 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.

LTS-bit LFINTOSC estable (31 kHz) indica si el oscilador interno de baja frecuencia es estable.

 

1 - LFINTOSC es estable. 0 - LFINTOSC no 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 configuración escritos en la memoria del microcontrolador durante el proceso de programación.

MODOS DE EXTERIORES DEL RELOJ El oscilador externo puede ser configurada para funcionar en varios modos diferentes, lo que significa además que puede operar a velocidades diferentes y utilizar diferentes componentes para la estabilización 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 programación. Es el programa PICFlash en este caso. Haga clic en el campo del oscilador y seleccione oscilador deseado de la lista desplegable. La información sobre estos ajustes se guardan automáticamente en la Palabra de Configuración. Durante el proceso de la programación del microcontrolador, los bits de la palabra de configuración se escriben en los registros especiales de la ROM que no están disponibles para el usuario. Sobre la base de estos bits, el microcontrolador "sabe" qué hacer, a pesar de que no se indica explícitamente en el programa.

El modo de funcionamiento del oscilador se selecciona el programa después de escribir y compilar están 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 máxima frecuencia de esta señal 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 propósito general I / O; Es posible sincronizar el funcionamiento del microcontrolador con el resto de un panel electrónico; En este modo el microcontrolador inicia la operación tan pronto como la fuente de alimentación está encendido. Sin tiempo de retraso es necesario para la estabilización de la frecuencia, y Suspensión temporal de la operación de la fuente de reloj externa automáticamente hará que el microcontrolador para detener la operación, dejando todos los datos intactos. Después de reiniciar el oscilador externo, el microcontrolador procede con la operación 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 cerámicos

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á diseñado para conducir sólo 32.768 cristales kHz normalmente en los relojes de cuarzo. Es fácil de reconocer por su pequeño tamaño y forma cilíndrica específico. 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 más de 8 MHz. El consumo de corriente es la más alta de los tres modos.

Resonadores de cerámica en el modo XT o HS Resonadores de cerámica son muy similares a los cristales de cuarzo por sus características y por lo tanto conectado de la misma manera. A diferencia de los cristales de cuarzo, que son más baratos y los osciladores que las contienen tienen características un poco más 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 estabilización de la frecuencia son sin duda muy útil, pero a veces innecesaria. En la mayoría de los casos, el oscilador puede operar a frecuencias que no están definidas con precisión de modo que la instalación de dichos componentes es una pérdida de dinero por lo tanto. La solución más 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 señal de reloj puede ser utilizado para aplicaciones de calibración, sincronización o de otro tipo.

Rcio modo. Asimismo, el circuito RC está conectada a la clavija OSC1. Esta vez, la disposición OSC2 pasador se utiliza como un adicional de propósito 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 según la fórmula 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 fábrica 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 fábrica y funciona a 31kHz. Al igual que el oscilador externo, el oscilador interno también 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 configuración. 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 propósito 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 están disponibles como propósito 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 fábrica 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 selección 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 continuación, 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 selección 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 energía 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 transición a dormir con el fin de reducir el consumo de energía total del dispositivo. Cuando las condiciones de activación 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 ejecución del programa. Después de 1024 impulsos son contados y sólo unas pocas instrucciones de los programas se ejecutan, el microcontrolador se suele fijar de nuevo a modo de suspensión. Esto significa que la mayor parte del tiempo, así como la mayor parte de la energía suministrada por baterías se desperdicia. Este problema se resuelve mediante el uso de un oscilador interno de la ejecución del programa, mientras que el recuento de estos pulsos de 1024 está en curso. Tan pronto como la frecuencia del oscilador externo se estabiliza, automáticamente se hará cargo del 'protagonismo'. Todo el proceso se activa mediante el establecimiento de un bit de la palabra de configuración. Con el fin de programar el microcontrolador de esta manera, es necesario seleccionar la opción Ext. Int.-conmutación 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 ejecución del programa a pesar de que el oscilador externo falla por alguna razón. 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 más que 2mS para el reloj oscilador externo por venir, la fuente de reloj cambiará automáticamente. El oscilador interno se hará cargo de la función de la fuente de reloj principal de la operación que está controlada por los bits del registro OSCCON. Cuando el bit del registro OSFIE PIE2 está establecido, una interrupción 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 módulo también está habilitada, cambiando la palabra de configuración antes de iniciar el proceso de programación. En este ejemplo, se realiza seleccionando la opción 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 indicación durante el funcionamiento del microcontrolador desplazamiento de frecuencia que se ha producido.

TUN4 - tun0 bits de sintonía Frecuencia Mediante la combinación de estos cinco bits, los cambios de frecuencia del oscilador de 8MHz..De esta manera, las frecuencias obtenidas por su división en el postscaler cambiar también.

TUN4

TUN3

TUN2

TUN1

TUN0

FRECUENCIA

0

1

1

1

1

Máximo

0

1

1

1

0

0

1

1

0

1

0

0

0

0

1

0

0

0

0

0

1

1

1

1

1

1

0

0

1

0

1

0

0

0

1

1

0

0

0

0

Calibrado

Mínimo

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 fácil y rápido acceso a otros registros, que son de gran importancia ya que los datos EEPROM se guardan de forma permanente, incluso después de la pérdida de poder y se puede cambiar en cualquier momento. Estas características 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 (dirección de la ubicación de las tiendas de EEPROM para acceder).

El registro EECON2 no es una verdad, no existe físicamente. Se utiliza únicamente en la secuencia de datos del programa de escritura. Además de los registros antes mencionados, los registros y EEDATH EEADRH se utilizan también para escribir y leer la EEPROM.También 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.

WRERR - Error de EEPROM poco Bandera

 

1 - Escribir se termina prematuramente y el error se ha producido. 0 - Escribir completado.

WREN - EEPROM Escribir Habilitar poco.

 

1 - Escribe en la memoria EEPROM habilitada. 0 - Escribir en la memoria EEPROM deshabilitada.

WR - bit de control de escritura

 

1 - Inicia la escritura en la memoria EEPROM. 0 - Escribir en la memoria EEPROM completado.

RD - bits de control de lectura

 

1 - Inicia la lectura de la EEPROM. 0 - Leer EEPROM deshabilitada.

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 dirección 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 posición 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 básico 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 dirección 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 básico 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 cámara para hacer que el microcontrolador funcione. A primera vista, es suficiente para apagar la unidad para hacer que deje de funcionar. Sólo a primera vista ... De hecho, de inicio y final de la operación dependerá de una señal especial que se llama RESET. Una condición de reposición hace que el microcontrolador para detener inmediatamente la operación y borrar sus regis tros. Una señal de reposición puede ser generada externamente en cualquier momento (el pin MCLR es conducido bajo). También puede ser generada por dentro del microcontrolador, si es necesario. Un poder, a condición siempre causa un reinicio que se produzca. Puesto que hay muchas ocurrencias que se acompañan que tienen lugar cuando la fuente de alimentación está encendido (intermitente de contacto de interruptor y el aumento del espumoso, el voltaje lento, estabilización 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 programación. Vamos a ver lo que realmente ocurre aquí:

Cuando la tensión de alimentación 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 señal de reposición dentro de los períodos 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 instrucción. Además de este llamado "controlado" reset que se produce en el momento en que la fuente de alimentación 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 alimentación 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 tensión de alimentación cae muy rápido en virtud de su valor mínimo. A la luz wordsthe otra se apaga, la cortina se cae y el espectáculo ha terminado.

Brown-out de RESET

Cuando la tensión de alimentación desciende lentamente (un ejemplo típico es una descarga de la batería, aunque el microcontrolador experimenta mucho más rápidas caídas de tensión como procesos lentos), los componentes electrónicos 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 más altos comenzar a realizar de forma impredecible. El reinicio brown-out también 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 tensión de alimentación por un momento y cae por debajo del nivel mínimo. Incluso corto, por ejemplo un ruido en la fuente de alimentación puede afectar considerablemente el funcionamiento del microcontrolador.

MCLR PIN

Un cero lógico (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 función de los componentes adicionales es mantener "pura" lógica de un (1) durante la operación normal. Si estos componentes se configuran para proporcionar un nivel lógico alto (1) en el pin MCLR después de restablecer T es más, el microcontrolador inmediatamente comenzará a operar. Esta condición puede ser muy útil cuando es necesario para sincronizar el funcionamiento del microcontrolador y la electrónica 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 protección" built-in. Es un circuito simple, pero eficaz, que responde cada vez que la tensión de alimentación cae por debajo de 4V durante más de 100 microsegundos. Este circuito genera una señal de reposición y desde ese momento el microcontrolador funciona como si se hubiera acaba de encender.

Capítulo 4: Ejemplos El propósito de este capítulo es proporcionar información básica que usted necesita saber con el fin de poder utilizar microcontroladores con éxito en la práctica. En este capítulo, por lo tanto, no contiene ningún 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 cuestión de talento, pero la capacidad de los simples directivas de poner las piezas del rompecabezas juntas usando. Diseño y desarrollo de dispositivos, principalmente se reducen a el método de "prueba correcta de la repetición". Por supuesto, cuanto más estás en él, más complicado se hace desde las piezas del rompecabezas se unen por los niños y los arquitectos de primera clase ...

                 

4.1 CONEXIÓN BÁSICA 4.2 COMPONENTES ADICIONALES 4.3 Ejemplo 1 - Escribir cabecera, configurar pines de E / S y utilizar la función de retardo 4.4 Ejemplo 2 - Instrucciones de uso, armado y LFINTOSC oscilador interno 4.5 Ejemplo 3 - TMR0 como contador, declarar nuevas variables, símbolos 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 guardián Ejemplo 6 4,8 - Módulo CCP1 como un generador de señal PWM 4.9 Ejemplo 7 - Utilice un convertidor A / D 4.10 EJEMPLO 8 - Utilizar memoria EEPROM 4.11 Ejemplo 9 - Dos dígitos contador de LED, la multiplexación 4.12 EJEMPLO 10 - Utilización LCD 4.13 EJEMPLO 11 - comunicación serie RS232 4.14 EJEMPLO 12 - Medir la temperatura con sensor de DS1820. El uso del protocolo '1-wire ' 4,15 Ejemplo 13 - la generación de sonido, librería de sonidos ... 4.16 EJEMPLO 14 - Utilizar una pantalla gráfica LCD 4.17 EJEMPLO 15 - Utilizar un panel sensible al tacto 4.18 EJEMPLO 16 - Utilizar un teclado 4x4

4.1 CONEXIÓN BÁSICA A fin de que el microcontrolador para funcionar correctamente, es necesario proporcionar:

  

Fuente de alimentación; Restablecer la señal, y Señal 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 máquinas o dispositivos de soporte de vida, todo se complica cada vez más. De todos modos, esta sencilla solución va a hacer por el momento ...

FUENTE DE ALIMENTACIÓN Aunque el PIC16F887 puede operar a diferentes voltajes de alimentación, ¿por qué 'la ley de Murphy "prueba? Un 5V DC tensión de alimentación es el más adecuado. El circuito, que se muestra en la página anterior, utiliza una barata integrado de tres terminales LM7805 regulador positivo y proporciona una estabilidad de la tensión alta calidad y muy corriente suficiente para permitir que los módulos de microcontroladores y periféricos para operar con normalidad (los medios suficientes 1A).

La señal de reset A fin de que el microcontrolador para funcionar correctamente, un uno lógico (VCC) debe ser aplicada en el pasador de reposición. Un botón 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 rápidamente si algo sale mal. Al pulsar este botón, el pin MCLR se suministra con 0V, el microcontrolador se produce y el restablecimiento de la ejecución 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 botón se pulsa RESET.

Señal 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

operación. 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.

¿Cuál es el punto de utilizar estos modos?Debido al hecho de que es casi imposible diseñar 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 programación contiene una opción para la selección del oscilador modo. Véase 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. Además de los cristales, los condensadores C1 y C2 también 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 recomendación, y no como una regla estricta.

Resonador cerámico

Un resonador de cerámica es más barato, pero muy similar al cuarzo por su función y modo de funcionamiento. Por ello, estos dos esquemas, que ilustran su conexión con el microcontrolador, son idénticos. Sin embargo, en comparación con el cristal de cuarzo, la capacitancia de los condensadores C1 y C2 es ligeramente diferente debido a las diferentes características eléctricas. Consulte la tabla siguiente.

Resonadores de cerámica normalmente están 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 estabilización. En su lugar, una simple red RC, como se muestra en la figura a continuación, se debe utilizar. En este caso, sólo la entrada de oscilador de reloj del microcontrolador se utiliza, lo que significa que la señal 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 ejecución de la instrucción.

Oscilador externo Si se requiere para sincronizar el funcionamiento de varios microcontroladores o si por alguna razón, no es posible utilizar cualquiera de las configuraciones anteriores, una señal de reloj puede ser generada por un oscilador externo. Refiérase a la figura de abajo.

4.2 COMPONENTES ADICIONALES A pesar del hecho de que el microcontrolador es un producto de la tecnología moderna, es de ninguna utilidad si no está conectado a los componentes adicionales. En pocas palabras, la aparición 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 sección cubre algunos de los componentes más utilizados en la práctica adicionales tales como resistencias, transistores, LEDs, pantallas LED, pantallas LCD y RS-232 módulos de comunicación.

Interruptores y pulsantes de

Interruptores y pulsadores es probable que los componentes más simples que proporcionan la forma más sencilla de llevar la tensión en unos pines del microcontrolador de entrada. Por supuesto, no es tan simple como que en la práctica ... Lo que lo hace complicado es un rebote de contacto. El rebote de contacto es un problema común con los interruptores mecánicos. Cuando los contactos chocan juntos, su impulso y la elasticidad de actuar en conjunto para causar un rebote. El resultado es una corriente rápidamente impulsos eléctricos en lugar de una transición limpia de cero a plena corriente. En su mayoría se produce debido a las vibraciones, las pequeñas asperezas y la suciedad entre los contactos. El rebote ocurre demasiado rápido de modo que no es posible notar cuando estos componentes se utilizan normalmente.

Sin embargo, esto causa problemas en algunos circuitos lógicos y analógicos que responden suficientemente rápido 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 sólo un pulsador se utiliza como una fuente de señal 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 rápidos cambios de voltaje. Dado que el período de rebote no está definido, los valores de los componentes no puede determinarse con precisión. En la mayoría de los casos, se recomienda el uso de los mismos valores, como se muestra en la figura a continuación.

Si la estabilidad completa se requiere entonces medidas radicales deben ser tomadas. La salida del circuito lógico, como se muestra en la figura a continuación (flip-flop RS), cambiará su estado lógico después de detectar el primer pulso disparado por un rebote de contacto. Esta solución es más cara (interruptor SPDT), pero más seguro sin duda.

Además de estas soluciones de hardware, hay también una solución de software sencillo. Cuando el programa comprueba el estado lógico de un pin de entrada y detecta un cambio, la comprobación debe hacerse una vez más después de un cierto retraso. La verificación de cambio significa que el botón del interruptor / pulsador ha cambiado su posición. Las ventajas de esta solución son claras: es de forma gratuita y se puede aplicar a los contactos de baja calidad.

RELÉS

Un relé es un interruptor eléctrico que abre y cierra bajo el control de otro circuito eléctrico. 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 relés y todos funcionan de la misma manera. Cuando la corriente fluye a través de la bobina, el relé es operado por un electroimán para abrir o cerrar uno o más conjuntos de contactos.Similar a acopladores ópticos, no hay conexión galvánica (contacto eléctrico) entre la entrada y salida de los relés. Relés por lo general requieren de alta tensión y alta corriente para iniciar la operación, pero también los hay en miniatura que pueden ser activadas por baja corriente directa alimentado por un pin del microcontrolador. La figura siguiente muestra la forma más común de conectar un relé a la red otros dispositivos de potencia.

Con el fin de evitar que el alto voltaje de autoinducción, causada por una parada repentina del flujo de corriente a través de la bobina, un diodo polarizado invertida está conectado en paralelo a la bobina. El propósito de este diodo es 'cortar' el pico de tensión.

DIODOS LED Usted probablemente sabe todo lo que usted debe saber acerca de los LED, pero también debemos pensar en las generaciones más jóvenes ... Vamos a ver, cómo destruir un LED? Bueno ... fácilmente.

Quick Burning Al igual que cualquier otro diodo, los LEDs tienen dos extremos-un ánodo y un cátodo. Conecte un diodo correctamente a la tensión de alimentación y que emitirá luz felizmente. Gire el diodo al revés y aplicar la misma tensión de alimentación (aunque sea por un momento).Es probable que no emiten luz - nunca más!

Slow Burning Hay un nominal (lo consideran como máximo) corriente especificada para cada LED que no se debe superar. Si esto sucede, el diodo emitirá luz más intensa, pero sólo durante un corto período de tiempo.

Algo para recordar Del mismo modo, todo lo que necesita hacer es quitar una resistencia limitadora de corriente se muestra a continuación. Dependiendo de la tensión de alimentación, los efectos podrían ser espectaculares.

DISPLAY LED

Básicamente, una pantalla LED no es más que varios LEDs moldeados en el caso mismo plástico. Hay muchos tipos de pantallas y algunos de ellos están compuestos de varias decenas incorporados en los diodos que pueden visualizar símbolos diferentes. Sin embargo, la pantalla más utilizada es un display de 7 segmentos. Se compone de 8 LEDs. Siete segmentos de un dígito se disponen en forma de rectángulo para mostrar los símbolos, mientras que el segmento adicional se utiliza para mostrar un punto decimal. Con el fin de simplificar la conexión, los ánodos o cátodos de todos los diodos están conectados a un solo pasador de modo que hay pantallas ánodo común y pantallas comunes de cátodo, respectivamente. Segmentos están marcadas con las letras de la A a g, además de DP, como se muestra en la figura a continuación. 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 atención a la hora de comprar pantallas de LED:



Como se mencionó anteriormente, dependiendo de si los ánodos o cátodos están conectados a la clavija común, hay pantallas ánodo común y pantallas comunes catódicos. 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 máxima que cada pin del microcontrolador puede recibir o dar es limitado. Por lo tanto, si varias pantallas están conectados al microcontrolador entonces llamado bajo LED actuales limitados a 2mA sólo debe ser utilizado. Segmentos de la pantalla suelen ser marcadas con las letras de A a G, pero no hay una regla que indica rápida visualización pines que están conectados. Por esta razón, es muy importante para comprobar la conexión antes de empezar a escribir un programa o el diseño de un dispositivo.

LED muestra conectado al microcontrolador normalmente ocupan un gran número de valiosos pines I / O, que puede ser molesto, especialmente cuando es necesario para visualizar múltiples números dígitos. Es aún más complicado si, por ejemplo, es necesario para mostrar dos 6-dígitos. Un simple cálculo muestra que 96 pines de salida son necesarios en este caso. La solución a este problema se denomina multiplexación. Así es como una ilusión óptica basada en el mismo principio de funcionamiento como una cámara de película está hecha. Sólo un dígito está activo en un momento, pero cambian sus condiciones de encendido / apagado tan rápidamente hormigonado la impresión de que todos los dígitos de un número son activos simultáneamente.

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. Después 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 cíclicamente a alta velocidad para todos los dígitos y transistores correspondientes. Un hecho decepcionante, lo que indica que el microcontrolador es sólo una especie de ordenador en miniatura diseñado para sólo entienden el lenguaje de ceros y unos se expresa plenamente cuando se muestran los dígitos. Es decir, el microcontrolador no sabe lo que las unidades, decenas o centenares son, ni lo que diez dígitos que se usan para que parezca. Por esta razón, cada número que se muestra debe someterse al procedimiento siguiente: En primer lugar, un número de varios dígitos debe ser dividido en unidades, decenas etc en una subrutina especializado. Entonces cada uno de estos dígitos debe ser almacenado en un byte específico. Dígitos de obtener la apariencia reconocible para los seres humanos mediante la realización de un procedimiento sencillo llamado "enmascaramiento". En otras palabras, un número binario se sustituye con una combinación diferente de bits. Por ejemplo, el dígito 8 (0000 1000) se sustituye por el número binario 0111 1111 con el fin de activar todos los LEDs que muestran este dígito. 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 máscara binario apropiado para cada dígito.

DÍGITOS PARA MOSTRAR

MOSTRAR SEGMENTOS dp

un

b

c

d

e

F

g

0

0

1

1

1

1

1

1

0

1

0

0

1

1

0

0

0

0

2

0

1

1

0

1

1

0

1

3

0

1

1

1

1

0

0

1

4

0

0

1

1

0

0

1

1

5

0

1

0

1

1

0

1

1

6

0

1

0

1

1

1

1

1

7

0

1

1

1

0

0

0

0

8

0

1

1

1

1

1

1

1

9

0

1

1

1

1

0

1

1

Además de los dígitos (0-9), hay algunas letras del alfabeto - A, C, E, J, F, U, H, L, b, c, d, O, R, T-que también 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. Además, los transistores PNP debe utilizarse como conductores.

IC

Un acoplador óptico es un componente comúnmente utilizado para microcontrolador galvánicamente separadas de cualquier corriente potencialmente peligroso o tensión 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 número de componentes sensibles luz (fototransistores, foto-tiristores o phototriacs). La cuestión es que un acoplador óptico utiliza un trayecto corto de transmisión óptica para transferir una señal entre los diodos y componentes foto-sensibles, mientras que los mantiene aislado eléctricamente. Este aislamiento tiene sentido sólo si estos componentes por separado alimentado. De esta manera, el microcontrolador y sus módulos adicionales están completamente protegidos de alto voltaje y ruidos que por lo general les hacen sufrir daños o funcionar de una manera impredecible. Los optoacopladores utilizados con más frecuencia son los que tienen fototransistores sobre su producción. Cuando se trata de los optoacopladores con el interior de la base-a-pin 6 de conexión (también hay optoacopladores sin ella), la base puede dejarse sin conectar.

La red de R / C se indica por una línea punteada en la figura anterior es una conexión opcional que reduce los efectos del ruido mediante la eliminación de impulsos muy cortos.

PANTALLA LCD Una pantalla LCD se fabrica específicamente para el uso con los microcontroladores, lo que significa que no pueda ser activado por circuitos estándar de CI. Se utiliza para mostrar diferentes mensajes en una pantalla de cristal líquido en miniatura. La pantalla LCD se describe aquí es por su bajo precio y una gran capacidad de uso más frecuente en la práctica. Se basa en el controlador HD44780 (Hitachi) y muestra los mensajes en dos líneas de 16 caracteres cada una. Distintos símbolos como las letras del alfabeto, las letras griegas, signos de puntuación, símbolos matemáticos, etc se pueden mostrar en ella. También es

posible visualizar símbolos creados por el usuario. Otras funciones útiles incluyen cambio automático de mensajes (izquierda y derecha), el aspecto del cursor, retroiluminación LED, etc

La pantalla LCD Pines A lo largo de un lado de la placa pequeña impresa de la pantalla LCD hay pasadores que permiten que se conecta al microcontrolador.Hay un total de 14 pines marcados con los números (16, si hay una luz de fondo está disponible). Sus funciones se describen en la tabla:: FUNCIÓN

NÚMERO DE PIN

NOMBRE

STATE LOGIC

DESCRIPCIÓN

Suelo

1

Vss

-

0V

Fuente de alimentación

2

Vdd

-

+5 V

Contraste

3

Vee

-

0 - Vdd

4

RS

0 1

D0 - D7 considerado como comandos D0 - D7 considerarse como datos

R/W

0 1

Escribir los datos (desde el controlador de LCD) Leer los datos (de LCD para el controlador)

6

E

0 1 Del 1 al 0

El acceso a personas con discapacidad LCD Normal de funcionamiento Los datos o comandos que se transfieren a la pantalla LCD

7

D0

0/1

Bit 0 LSB

8

D1

0/1

El bit 1

9

D2

0/1

El bit 2

10

D3

0/1

El bit 3

11

D4

0/1

Bit 4

12

D5

0/1

El bit 5

13

D6

0/1

El bit 6

14

D7

0/1

Bit 7 MSB

El control de funcionamiento

Los datos o comandos

Pantalla LCD

5

Una pantalla de LCD es un panel delgado y plano se utiliza para mostrar diferentes contenidos. Se compone de dos líneas cada uno con hasta 16 caracteres de 5x8 píxeles o 5x11. El funcionamiento de una pantalla LCD 5x8 se describe aquí, ya que es más frecuentemente utilizado.

Contraste de la pantalla depende de la tensión de alimentación y si los mensajes se muestran en una o dos líneas. Por esta razón, un voltaje variable (0-Vdd) se aplica a la clavija marcada como Vee mediante un potenciómetro 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 atenúan cuando la pantalla se enciende, lo primero que se debe hacer es comprobar el potenciómetro 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 líneas).

LCD Memoria Pantalla LCD contiene tres bloques de memoria:

 DDRAM Display Data RAM;  CGRAM Generador de caracteres de RAM, y  Carácter 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 están 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 automáticamente (desplazamiento a la derecha) y establecer la dirección de partida para el mensaje que se mostrará (por ejemplo, 00 hexadecimal). Después de eso, todos los caracteres enviados a través de líneas 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 carácter en la primera línea porque la dirección de partida es 00 hexadecimal. No importa cuántos caracteres se envían, sólo los dieciséis primeros serán visibles en la pantalla, mientras que el resto de ellos se guarda y se muestra posteriormente con el comando de cambio. En la práctica, la pantalla LCD es como una ventana en el cambio de dirección izquierda-derecha en las posiciones de memoria que contengan caracteres distintos. Esto es, de hecho, cómo 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 carácter apropiado aparece en la posición del cursor, la coursor se mueve automáticamente 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 alimentación.

CGROM memoria CGROM la memoria contiene un mapa de carácter estándar con todos los caracteres que se pueden visualizar en la pantalla. Cada personaje se le asigna una ubicación de memoria:

Las direcciones de las ubicaciones de memoria CGROM coincidir con los caracteres ASCII estándar. Vamos a ver lo que significa acctually. Si el programa es ejecutado por el microcontrolador se encuentra con "P carácter de envío a puerto un comando, el valor binario 0101 0000 aparecerá en el puerto. Este valor es equivalente ASCII de carácter P. Como resultado, el símbolo correspondiente al 0101 0000 ubicación de memoria CGROM, es decir, la letra P, se visualiza en la pantalla. Lo mismo sucede con todas las letras del alfabeto (mayúsculas y pequeñas), pero no a los números. Si usted mira cuidadosamente el mapa de la página anterior, te darás cuenta de que las direcciones de todos los dígitos se desplaza hacia adelante en un 48 en relación con sus valores (dígito 0 es la dirección 48, el dígito 1 dirección es 49, el dígito 2 dirección es 50, etc) . Por lo tanto, con el fin de mostrar los dígitos correctamente, es necesario añadir número 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 números solamente, pero no las letras.Esto significa que todos los datos de un permutas PC con un dispositivo periférico 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 carácter coincide con una combinación única de ceros y unos. ASCII es la codificación de caracteres basado en el alfabeto Inglés. El código

ASCII especifica una correspondencia entre los símbolos de caracteres estándar y sus equivalentes numéricos.

CGRAM MEMORIA Además de los caracteres estándar, la pantalla LCD también se pueden mostrar símbolos definidos por el usuario en el tamaño de los píxeles 5x8. Se habilita por un tipo especial de memoria RAM llamada CGRAM (64 bytes). Los registros de memoria de 8 bits de ancho, pero sólo 5 bits más bajos se utilizan. Lógica uno (1) en cada registro representa un campo atenuado, mientras que 8 localidades agrupados juntos representan un carácter. Refiérase a la figura a continuación:

Los símbolos 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 dirección de memoria adecuada. Preste atención a la primera columna de

la hoja de CGROM de caracteres. No contiene las direcciones de memoria RAM, pero los símbolos que se debate aquí. En este ejemplo, los medios 'display 0' - pantalla 'smiley', significa 'una pantalla símbolo "" ancla "de pantalla, etc

LCD Comandos básicos Todos los datos enviados a un LCD a través de los pasadores de D0-D7 serán interpretados ya sea como un comando o datos a, que depende del estado lógico 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 dirección DDRAM especifica la ubicación en la pantalla en la que el personaje se va a mostrar. Esta dirección está predefinida o la dirección del carácter enviado anteriormente se incrementa automáticamente. 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

R S

R W

D 7

D 6

D 5

D 4

D 3

D 2

D 1

D 0

TIEMPO DE EJECUCI ÓN

Borrar pantalla

0

0

0

0

0

0

0

0

0

1

1.64mS

Inicio del cursor

0

0

0

0

0

0

0

0

1

x

1.64mS

Entrada modo de juego

0

0

0

0

0

0

0

1

I/ D

S

40US

Mostrar control on / off

0

0

0

0

0

0

1

D

U

B

40US

Cursor / Pantalla de cambio

0

0

0

0

0

1

D/ C

R/ L

x

x

40US

Función de conjunto

0

0

0

0

1

DL

N

F

x

x

40US

Establezca la dirección CGRAM

0

0

0

1

Establezca la dirección DDRAM

0

0

1

Dirección DDRAM

40US

Lea "BUSY" bandera (BF)

0

1

BF

Dirección DDRAM

-

Escriba a CGRAM o DDRAM

1

0

D7

D6

D5

D4

D3

D2

D1

D0

40US

Leer de CGRAM o DDRAM

1

1

D7

D6

D5

D4

D3

D2

D1

D0

40US

CGRAM dirección

40US

I / D 1 = Incremento (por 1) R / L 1 = Desplazamiento a la derecha 0 = Disminución (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 líneas 0 = 0 = apagado de pantalla de visualización en una sola línea 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 comparación con el microcontrolador, el LCD es un componente extremadamente lento. Por esta razón, era necesario para proporcionar una señal que, en cada ejecución del comando, indican que la pantalla está lista para recibir siguiente pieza de datos. Esta señal se llama la bandera de ocupado y puede ser leído desde la línea de D7. Pantalla LCD está preparado para recibir nuevos datos cuando la tensión en esta línea es 0V (BF = 0).

LCD Conexión Dependiendo de cuántas líneas 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 operación en el proceso llamado "inicialización". El modo de 8 bits LCD utiliza los pines D0-D7 para transferir datos, como se explica en la página anterior. El propósito principal del modo de 4-bit LCD es valiosa para salvar pines I / O del microcontrolador. Sólo los 4 bits más altos (D4-D7) se utilizan para la comunicación de aquí, mientras que otros pueden dejarse sin conectar. Cada pieza de datos se envían a la pantalla LCD en dos pasos - cuatro bits superiores son enviadas primero (normalmente a través de líneas D4-D7), entonces cuatro bits más bajos.Como resultado del proceso de inicialización, la pantalla LCD es capaz de enlazar e interpretar bits recibidos

correctamente.

Además, los datos rara vez se lee de la pantalla LCD. En la mayoría de los casos, el microcontrolador envía 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 visualización 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 solución simple a este problema. Después de enviar un carácter 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 inicialización Tan pronto como la fuente de alimentación pasa, la pantalla LCD se desactiva automáticamente. Todo el proceso dura aproximadamente 15 ms. Después 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 - Comunicación a través de la interfaz de 8 bits N = 0 - Los datos se muestran en una línea F = 0 - Formato de caracteres de la fuente es de 5 x 8 píxeles 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 automáticamente en 1 S = 0 Pantalla desplazar fuera En la mayoría de los casos de auto-rearme ocurre normalmente. Sobre todo, pero no siempre. Si por alguna razón la tensión de alimentación no llega al máximo dentro de 10 ms, la pantalla empezará a llevar a cabo completamente imprevisible. Si la fuente de alimentación no es capaz de cumplir esta condición, o

si es necesario para proporcionar un funcionamiento seguro, el proceso de inicialización se requiere. Se produce una condición de reposición nuevo, permitiendo así la visualización para operar normalmente. Hay dos algoritmos de inicialización. Cuál se va a realizar depende de si la conexión con el microcontrolador se establece a través de 4 - o interfaz de 8-bits. La inicialización siguiente proceso es el mismo para ambos algoritmos. Usted sólo tiene que especificar algunos comandos básicos y después de eso, usted será capaz de enviar masajes para la pantalla LCD. La figura siguiente ilustra la inicialización de 8-bits de la pantalla LCD:

No es un error! En este algoritmo, el mismo valor es tres veces sucesivamente, envía y se muestra en la pantalla LCD. El procedimiento descrito en la inicialización 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 PRÁCTICOS

El proceso de creación de un nuevo proyecto es muy simple. Seleccione la opción 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 través del proceso de creación de un nuevo proyecto, parece. La ventana de introducción de esta aplicación contiene una lista de acciones a realizar cuando se crea un nuevo proyecto. Haga clic en Siguiente. El proceso de creación de un nuevo proyecto se puede dividir en cinco pasos:

1. Selección del microcontrolador para escribir un programa para. En este caso, es PIC16F887. 2. Selección del reloj del dispositivo. En este caso, es 8 MHz de reloj. 3. La selección del nombre y la ubicación del proyecto. En este caso, el nombre del proyecto es la primera _Project y se guardará en la carpeta C: \ Mis proyectos. El compilador añade automáticamente la extensión. Mbppi al nombre del proyecto y un archivo de código 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 código fuente, es necesario especificar todos ellos e incluir en el proyecto haciendo clic en el botón 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.

Después 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 código hexadecimal, seleccionando una de las opciones de generación 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 generación de proyectos. La construcción todos los proyectos (Shift + F9) opción genera todos los archivos dentro del proyecto, las bibliotecas (si hay un código fuente para ellos) y los archivos def para el chip en uso. La opción Build + Program (Ctrl + F11) es especial, ya que permite que el PRO mikroBasic para PIC compilador para cargar automáticamente el programa en el microcontrolador después de la compilación. El proceso de programación se realiza mediante el programador PICFlash.

Todos los errores detectados durante la compilación 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 función 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 conexión adecuado, mientras que el programa correspondiente se encuentra en la página siguiente.

Cuando la fuente de alimentación pasa, cada segundo el LED emite luz PORTB, lo que indica que el microcontrolador está correctamente conectado y funciona normalmente. Este ejemplo muestra cómo 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 más 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 función de retardo está a cargo de la misma en el programa. Sólo tienes que configurar retardo expresado en milisegundos. 2. Después 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 después de cada iteración. Dentro del bucle for, el ciclo de trabajo de los pulsos es de 5:1 (500 ms: 100 ms) y cualquier cambio de estado lógico de los pines de salida hace que todos los LED parpadeen. 3. Cuando el programa se cierra el bucle, los cambios en la lógica 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 lógico 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 más complicado ... La idea es hacer que los LEDs en un abrir y cerrar PORTB lentamente. Se puede hacer mediante el establecimiento de parámetro de retardo a ser grande en la función de retardo. Pero también hay otra forma más 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. Después de cada iteración, se proporciona retraso de 100ms, lo cual se refleja como un LED PORTB relativamente rápido parpadeo. Cuando el programa se sale de este bucle, el microcontrolador inicia mediante el

oscilador LFINTOSC como una fuente de señal de reloj. LED parpadea mucho más lento ahora, a pesar de que el programa ejecuta el mismo do-while con 10 veces menor demora. Para demostrar una situación 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 sección del programa, la selección del banco depende de francos suizos se inscribe en el uso. Al volver a la sección de programa escrito en Basic, los bits de control RP0 y RP1 deben regresar al estado que tenían 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> 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 ubicación de la memoria EEPROM en la dirección 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 número almacenado en PORTB será guardado en la memoria EEPROM en la dirección 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 librería EEPROM en el Library Manager antes de compilar:



EEPROM

Con el fin de comprobar si este programa funciona correctamente, basta con pulsar el botón MEMO y luego apagar el microcontrolador.Después 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 dígitos LED contra, la multiplexación El microcontrolador funciona como un contador de cuatro dígitos aquí. Variable i se incrementa (lo suficientemente lento como para ser notado) y su valor se muestra en un display de cuatro dígitos LED (9999-0). El objetivo es convertir un número binario a decimal, que se dividió en cuatro dígitos (miles, centenas, decenas y unidades). Dado que los segmentos de la pantalla LED están conectados en paralelo, es necesario asegurarse de que cambian lo suficientemente rápido para hacer impresión de emisión de luz simultánea (tiempo multiplexado por división). En este ejemplo, el temporizador TMR0 está a cargo de la multiplexación de tiempo, mientras que la función de máscara se utiliza para convertir un número 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 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

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

' ' ' ' ' ' ' '

digit shifter and T0IE bits

display

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 alfanumérica. Las bibliotecas de funciones que este programa sea más sencillo. Dos mensajes escritos en dos líneas en la pantalla: mikroElektronika LCD de ejemplo Dos segundos más tarde, el segundo mensaje se sustituye con la tensión presente en la entrada convertidor A / D (el pasador RA2). Por ejemplo: mikroElektronika Voltaje: 3.141V De todos modos, la temperatura actual o algún otro valor medido se puede visualizar en vez de la tensión.

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes librerías 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

' Variable text is of string

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)

' Start of program ' All port PORTB pins are

text = "mikroElektronika" Lcd_Out(1,1,text) first line text = "LCD example" Lcd_Out(2,1,text) the second line

' Define the first message ' Write the first message in the

ADCON1 = 0x80 TRISA = 0xFF as inputs Delay_ms(2000) text = "Voltage="

' A/D voltage reference is VCC ' All PORTA pins are configured

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)

' Endless loop ' A/D conversion. Pin RA2 is an

' Variables ch and adc_rd are of ' Variable tlong is of longword

' 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 second message ' Write the second message in

' Define the third message

' 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

' ' ' '

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

end. ' End of program

4,13 Ejemplo 11 Comunicación serie RS232 Este ejemplo ilustra el uso de módulo EUSART del microcontrolador. La conexión entre el microcontrolador y un PC se elabora en cumplimiento con el estándar de comunicación RS232. El programa funciona como sigue. Cada byte recibido la comunicación serie se muestra mediante diodos LED conectados al PORTB y se envía automáticamente al remitente sobre el mismo. La forma más fácil de probar el funcionamiento del programa es el uso de un programa estándar 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 medición de temperatura es una de las operaciones más 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 comunicación serial denominado 1-wire se utiliza. Debido a su aplicación 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 documentación 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 cómo cualquiera de estas funciones se declara, simplemente haga clic derecho sobre él y seleccione la opción 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 = 70) and (x_coord128 = 18) and (y_coord64
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF