mikrobasic0

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

Transcript of mikrobasic0

Page 1: mikrobasic0

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.

Page 2: mikrobasic0

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

Page 3: mikrobasic0

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.

Page 4: mikrobasic0

¿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

Page 5: mikrobasic0

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

respuesta es sí otra vez: 4 * 10 0 + 6 * 10 *

1 + 7 10

2. ¿Qué significa realmente? ¿Por qué utilizamos

exactamente estos números: 10 0,

10 1 y 10

2? ¿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).

Page 6: mikrobasic0

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

Page 7: mikrobasic0

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 2, 2

3 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 4 a

1 = 16 - 1 = 15

Page 8: mikrobasic0

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.

Page 9: mikrobasic0

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

Page 10: mikrobasic0

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

Page 11: mikrobasic0

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

Page 12: mikrobasic0

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.

Page 13: mikrobasic0

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.

Page 14: mikrobasic0

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.

Page 15: mikrobasic0

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.

Page 16: mikrobasic0

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)

Page 17: mikrobasic0

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

Page 18: mikrobasic0

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?

Page 19: mikrobasic0

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

Page 20: mikrobasic0

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

Page 21: mikrobasic0

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

Page 22: mikrobasic0

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

Page 23: mikrobasic0

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

Page 24: mikrobasic0

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

Page 25: mikrobasic0

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.

Page 26: mikrobasic0

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

Page 27: mikrobasic0

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

Page 28: mikrobasic0

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

Page 29: mikrobasic0

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

Familia

ROM

[Kbytes

]

RAM

[bytes

]

Pines

Reloj Frecuencia.[MH

z]

Entradas A / D

Resolución del

convertid

or A / D

Compar-dor

es

08.16 -

Los temporizadore

s de bits

Co

mm de serie.

Salidas

PW

M

Otros

Page 30: mikrobasic0

Base-Línea 8 - bits, 12 bits de longitud de palabra de instrucciones

PIC10FXXX

0,375 a 0,75

16 a 24

6 a 8

4 a 8 0 a 2

8 0 a 1

1 x 8 - - -

PIC12FXXX

0,75 a

1,5

25 a 38

8 4 a 8 0 a 3

8 0 a 1

1 x 8 - - EEPROM

PIC16FXXX

0,75 a 3

25 a

134

14 a 44

20 0 a 3

8 0 a 2

1 x 8 - - EEPROM

PIC16HVXX

X 1.5 25

18 a 20

20 - - - 1 x 8 - - Vdd =

15V

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

PIC12FXXX

1,75

a 3,5

64

a 128

8 20 0 a 4

10 1 1 a 2 x 8 1 x 16

- 0 a 1

EEP

ROM

PIC12

HVXXX

1,75 64 8 20 0 a 4

10 1 1 a 2 x 8 1 x 16

- 0 a 1

-

PIC16FXXX

1,75 a 14

64 a

368

14 a 64

20 0 a 13

8 o 10

0 a 2

1 a 2 x 8 1 x 16

USART I2C SPI

0 a 3

-

PIC16HVXX

X

1,75 a

3,5

64 a

128

14 a

20

20 0 a 12

10 2 2 x 8 1 x 16

USART I2C SPI

- -

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

PIC18FXXX

4 a 128

256 -

3936

18

a 80

32 a 48 4 a 16

10 o 12

0 a 3

0 a 2 x agosto 2 a 3 x

16

2.0 CAN2.0

USART

I2C SPI

0 a 5

-

PIC18

FXXJX

X

8 a

128

1024 -

3936

28 a

100

40 a 48 10 a

16 10 2

0 a 2 x agosto

2 a 3 x 16

US

B 2.0 Ethern

et USART

I2C SPI

2 a

5 -

PIC18FXXKX

X

8 a 64

768

- 3936

28 a 44

64 10 a 13

10 2 1 x 8 3 x 16

US

ART I2C SPI

2 -

Page 31: mikrobasic0

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:

I N S T R U C C I Ó N D E S C R I P C I Ó N O P E R A C I Ó N B A N D E R A C L K *

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 1, 2

CLRW Clear W 0 -> W Z 1

Page 32: mikrobasic0

CLRF f F Clear 0 -> f Z 1 2

SWAPF f, d Intercambia nibbles de

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

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 1, 2

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 1, 2

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 1,

2

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 f -> d Z 1 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

Page 33: mikrobasic0

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 1

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

Page 34: mikrobasic0

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.

Page 35: mikrobasic0

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

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

Page 36: mikrobasic0

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.

Page 37: mikrobasic0

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:

Page 38: mikrobasic0

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

Page 39: mikrobasic0

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.

Page 40: mikrobasic0

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

Page 41: mikrobasic0

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á

Page 42: mikrobasic0

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.

Page 43: mikrobasic0

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:

Page 44: mikrobasic0

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:

Page 45: mikrobasic0

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

Page 46: mikrobasic0

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

Page 47: mikrobasic0

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

Page 48: mikrobasic0

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.

Page 49: mikrobasic0

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.

F O R M A T O P R E F I J O E J E M P L O

Decimal

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

Page 50: mikrobasic0

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

Page 51: mikrobasic0

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 ' Symbol MAXALLOWED for numeric

value

symbol OUT = PORTA ' Symbol OUT for SFR

symbol MYDELAY = Delay_ms(762) ' Symbol MYDELAY for procedure

call

dim cnt as byte ' Variable cnt

main:

if cnt > MAXALLOWED then ' Program checks whether cnt >

216

cnt = 0 ' If yes,

OUT.1 = 0 ' the following three commands

MYDELAY ' are to be executed

end if

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

Page 52: mikrobasic0

T I P O D E D A T O S

D E S C R I P C I Ó N T A M A Ñ O

( N Ú M E R O D E B I T S )

R A N G O D E V A L O R E S

poco Un bit 1 0 o 1

sbit Un bit 1 0 o 1

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 -38 ... ± 6.80564774407 *

10 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

Page 53: mikrobasic0

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.

P R I O R I D A D O P E R A D O R E S A S O C I A T I V I D A D

Alto @ No + - de derecha a izquierda

* / Div mod y >> << de izquierda a derecha

+ - O XOR de izquierda a derecha

Bajo = <> <> <=> = de izquierda a derecha

Operadores aritméticos

Los operadores aritméticos se utilizan para realizar operaciones aritméticas. Estas operaciones se

realizan sobre los operandos numéricos y siempre devuelven resultados numéricos. Las operaciones

binarias se realizan sobre dos operandos, mientras que las operaciones se llevan a cabo en unarios un

operando. Todos los operadores aritméticos se asocian de izquierda a derecha.

Page 54: mikrobasic0

O P E R A D O R O P E R A C I Ó N

+ Adición

- Sustracción

* Multiplicación

/ División - de punto flotante

div División - redondear hacia abajo

mod Recordatorio

División por cero

Si un cero (0) se utiliza de forma explícita como el segundo operando en la operación de división (x div 0),

el compilador informará de un error y no generará un código. En el caso de la división implícita en donde

el segundo operando es un objeto cuyo valor es 0 (x div y, donde y = 0), el resultado será indefinido.

OPERADORES RELACIONALES

Los operadores relacionales se utilizan para comparar dos variables y determinar la validez de su

relación. En mikroBasic, todos los operadores relacionales volver 255 si la expresión es verdadera, o cero

(0) si es falso. Lo mismo se aplica en expresiones tales como "si la expresión es verdadera, entonces ..."

O P E R A D O R S E N T I D O E J E M P L O V E R D A D C O N D I C I O N E S

> 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 <b si a es menor que b

<= es menor o igual a a <= b si a es menor o igual a b

= es igual a un 6 = si A es igual a 6

<> no es igual a A <> B si uno no es igual a b

LÓGICA operadores bit a bit

Lógica operadores bit a bit se llevan a cabo en los bits de un operando. Se asocian de izquierda a

derecha. La única excepción es el operador de complemento bit a bit, no que se asocia de derecha a

izquierda. Los operadores bit a bit se enumeran en la tabla de la derecha:

Los operadores bit a bit y, OR y XOR realizar operaciones lógicas sobre los pares apropiados de bits de

los operandos. El operador nocomplementa cada bit de un operando solo.

O P E R A N D O S E N T I D O E J E M P L O R E S U L T A D O

<< Mover a la izquierda A = B 2 << B =

11110011 A =

11001100

>> Desplazamiento a la

derecha A = B >> 3

B = 11110011

A = 00011110

y AND bit a bit C = A y B

A = 11100011

B = 11001100

C = 11000000

o OR bit a bit C = A o B A =

11100011 C =

11101111

Page 55: mikrobasic0

B =

11001100

no NOT bit a bit A = B que

no B =

11001100 A =

00110011

xor EXOR bit a bit C = A xor B

A = 11100011

B = 11001100

C = 00101111

Los operadores bit a bit y, OR y XOR realizar operaciones lógicas sobre los pares apropiados de bits de

los operandos. El operador nocomplementa cada bit de un operando solo.

$1234 and $5678 ' result is $1230 because:

' $1234 : 0001 0010 0011 0100

' $5678 : 0101 0110 0111 1000

' ----------------------------

' and : 0001 0010 0011 0000 ... that is, $1230

$1234 or $5678 ' equals $567C

$1234 xor $5678 ' equals $444C

not $1234 ' equals $EDCB

Bit a bit Operadores de desplazamiento

Hay dos operadores de desplazamiento en mikroBasic. Estos son el operador << que se mueve bits a la

izquierda y el operador >> que se mueve bits a la derecha. Ambos operadores tienen dos operandos cada

uno. El operando de la izquierda es un objeto de mover, mientras que el operando de la derecha es un

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 (<<), los bits de la izquierda se descartan, mientras que los 'nuevos' bits

a la derecha se asignan ceros.Cambiando operando sin signo a la izquierda por n posiciones es

equivalente a multiplicar con 2 n.

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

desechados para el bit de signo.

dim num as word ' declare variable num as word

num = 1 ' asign it decimal value 1 (00000000 00000001 bin.)

num << 5 ' equals 32 (00000000 00100000 bin.)

Al cambiar operando de la derecha (>>), los bits de la derecha se descartan, mientras que los 'nuevos'

bits a la izquierda son ceros asignados (en caso de firmar operando) o el bit de signo (en el caso de la

firma operando). El cambio operando a la derecha por n posiciones es equivalente a dividiéndolo por 2 n.

dim num as integer ' declare variable num as signed integer

num = 0xFF56 ' asign it hex value FF56 (11111111 01010110 bin.)

num >> 4 ' equals 0xFFF5 (11111111 11110101 bin.)

Page 56: mikrobasic0

Sentencias condicionales

Las condiciones son ingredientes comunes de un programa. Permiten que uno o una serie de sentencias

que se ejecutarán en función de la validez de una expresión. En otras palabras: 'Si se cumple la condición

(...), hacer (...). De lo contrario, hacer (...) ". Una sentencia condicional se puede seguir, ya sea por una

sola declaración o por un bloque de instrucciones a ejecutar.

Declaración condicional IF

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

if expression then

operations

end if

Si el resultado de la expresión es verdadera (no 0), las operaciones se llevan a cabo, a continuación, el

programa continúa con la ejecución. Si el resultado de la expresión es falsa (0), las operaciones no se

llevan a cabo y el programa continúa inmediatamente con la ejecución.

El operador si también se puede utilizar en combinación con los operadores else:

if expression then

operations1

else

other operations2

end if

Si el resultado de la expresión es verdadero (no 0), operaciones1 se llevan a cabo, de lo contrario

operaciones2 se realizan. El programa continúa con la ejecución después de estas operaciones se llevan

a cabo.

IF anidadas

SI anidada necesitan atención adicional. Una sentencia if anidada es una frase que se utiliza dentro de la

otra sentencia if. Como regla general, que se analizan a partir de la ifstatement más anidada, mientras

que cada sentencia else se une a la más cercana disponible si a su izquierda:

Instrucción Select Case

Page 57: mikrobasic0

La instrucción Select Case es una sentencia condicional con múltiples ramificaciones. Se compone de un

selector de expresión (condición) y una lista de valores posibles de la expresión. La sintaxis de la

instrucción Select Case es:

El especificador selector es una expresión que debe evaluar como un valor integral.

Especificadores valor_1 ... value_n representan valores posibles selectores y puede ser literales,

constantes o expresiones constantes.Los especificadores statements_1 ... statements_n puede ser

ninguna de las declaraciones.

La cláusula más caso es opcional.

En primer lugar, la expresión del selector se evalúa. A continuación, se compara con todos los valores

disponibles. Si el partido se encuentra, las declaraciones después de la evaluación de partido y termina la

instrucción Select Case. Si hay varias coincidencias, tras las declaraciones del primer partido será

ejecutado. Si ninguno de los valores coincide con el selector, luego default_statements en la cláusula else

caso (si lo hay) se ejecutan.

Aquí está un ejemplo de la instrucción Select Case:

select case decimal_digit ' Decimal-digit value is being

checked

case 0

mask = %01111110 ' Display "0"

case 1

mask = %00110000 ' Display "1"

case 2

mask = %01101101

case 3

mask = %01111001

case 4

mask = %00110011

case 5

mask = %01011011

case 6

mask = %01011111

case 7

mask = %01110000

case 8

mask = %01111111

case 9

mask = %01111011

end select

Page 58: mikrobasic0

Esta rutina de programa convierte los dígitos decimales en combinación binaria adecuada en el puerto

con el fin de mostrar en una pantalla de LED.

Bucles de programa

Algunas instrucciones (operaciones) se tienen que ejecutar más de una vez en el programa. Un conjunto

de comandos que se repiten hace un bucle de programa. ¿Cuántas veces se ejecutará, es decir, la

duración del programa se mantendrá dentro de un bucle, depende de las condiciones para salir del bucle.

Bucle WHILE

El bucle mientras se lleva a cabo cuando el número de iteraciones no se especifica. Es necesario

comprobar la condición de iteración antes de la ejecución de un bucle. En pocas palabras, el bucle while

se ejecuta mientras que todas las condiciones necesarias para su ejecución se cumplen ... La sintaxis del

bucle while es el siguiente:

while expression

statements

wend

Las declaraciones especificador representa un grupo de instrucciones que se ejecutan repetidamente

siempre que el valor del especificador de expresión que representa una expresión es verdadera. En otras

palabras, el programa permanece en el bucle hasta que la expresión se convierte en falsa. El valor de

expresión se comprueba antes de la siguiente iteración se ejecuta. En consecuencia, si es falsa antes de

entrar en el bucle, no ejecuta iteraciones, es decir, los estados nunca será ejecutado. El programa

Page 59: mikrobasic0

procederá a la ejecución desde el final del bucle, mientras que (a partir de las instrucciones siguientes de

la instrucción Wend).

Un tipo especial del bucle de programa es un bucle sin fin. Se crea si la condición para salir de bucle se

mantiene sin cambios dentro del bucle.

En este caso, la ejecución es simple como el resultado entre paréntesis es siempre cierto (1 se Allways

ser diferente de 0), lo que significa que el programa permanece en el bucle.

while 1 ' ‘true’ can be written instead of ‘1’

... ' Expressions will be unceasingly executed (endless

loop)

...

wend

DE LOOP

El bucle se ejecuta cuando el número de iteraciones se especifica. La sintaxis del bucle for es el siguiente:

for counter = initial_value to final_value [step step_value]

statements

next counter

En este caso, con cada iteración del bucle, la variable contador se incrementa en step_value. El

parámetro step_value es un valor opcional entero, considerado uno si se omite. Antes de la primera

iteración, el contador (contador) se ajusta a su valor inicial (initial_value) y se incrementará hasta que se

alcanza o supera el valor final (final_value). Las declaraciones se realizarán con cada

iteración. Iinitial_value y final_value deben ser compatibles con las expresiones del mostrador, mientras

que el especificador de declaraciones puede ser cualquier sentencia que no cambia el valor del

contador. Tenga en cuenta que el parámetro step_value puede ser negativo, lo que permite una cuenta

regresiva.

for k=1 to 5 ' Increase variable k five times (from 1 to 5) and

operation ' keep on executing "operation" every time

...

next k

Un conjunto de instrucciones (funcionamiento) se ejecutará cinco veces. Después de eso, se determinó

que la k <5 es falsa (después de 5 iteraciones k = 5) y el programa saldrá del bucle for.

Do Loop

El bucle do se lleva a cabo cuando el número de iteraciones no se especifica. El bucle se ejecuta

repetidamente hasta que la expresión se evalúa como verdadera. La sintaxis del bucle do es la siguiente:

do

statements

loop until expression

Page 60: mikrobasic0

En este caso, el especificador de estados representa un grupo de instrucciones que se ejecutan siempre

que la expresión (expresión) es verdadera. Las condiciones de bucle se comprueban al final del bucle, por

lo que el bucle se ejecuta al menos una vez, independientemente de si la condición es verdadera o

falsa. En el ejemplo siguiente, el programa permanece en el bucle do hasta una variable alcanza 1E06 (un

millón de iteraciones).

a = 0 ' Set initial value

do

a = a+1 ' Operation in progress

loop until a <= 1E06 ' Check condition

Escribir código en lenguaje ensamblador

A veces un programa en Basic requiere que partes del código que se escriben en lenguaje

ensamblador. De este modo algunas partes del programa puede ser ejecutado en una forma

definida con precisión por el período exacto de tiempo. Por ejemplo, cuando es necesario para

proporcionar impulsos muy cortos (de unos pocos microsegundos) para aparecer

periódicamente en un pin del microcontrolador, la mejor solución es escribir un código de

montaje para el control de duración del impulso. El comando ASM se utiliza para introducir una

o más instrucciones de montaje para el programa escrito en Basic:

asm

Assembly language instructions

...

end asm

Instrucciones de montaje puede utilizar objetos (constantes, variables, rutinas, etc) que deben ser

previamente declaradas en el lenguaje Basic. No hace falta decir que estos objetos se declaran de

acuerdo con las reglas del lenguaje Visual Basic. Consulte el siguiente ejemplo:

Page 61: mikrobasic0

ARRAYS

Una matriz es una lista finita y dispuesto de las variables del mismo tipo, llamados elementos. Este tipo se

llama el tipo base. Cada elemento se le asigna un índice único modo que los elementos diferentes pueden

tener el mismo valor. Un arreglo se declara especificando el tipo de sus elementos (llamado tipo de

matriz), su nombre y el número de sus elementos encerrados entre corchetes:

dim array_name as component_type [number_of_components]

Los elementos de un array se identifican por su posición. Los índices van de 0 (el primer elemento de una

matriz) a N-1 (N es el número de elementos incluidos en una matriz). El compilador debe saber cuántas

posiciones de memoria para asignar, cuando se declara una matriz y debido a que el tamaño de la matriz

no puede ser variable.

E L E M E N T S O F A R R A Y C O N T E N T S O F E L E M E N T

shelf[0] 7

shelf[1] 23

shelf[2] 34

shelf[3] 0

shelf[4] 0

shelf[5] 12

shelf[6] 9

... ...

... ...

shelf [99] 23

Para ilustrarlo, una matriz puede ser considerado como una lista más corta o más larga de las variables

del mismo tipo, donde cada una de ellas se le asigna un número ordinal siempre a partir de cero. Esta

matriz se llama un vector. Tabla de la derecha muestra una matriz denominada plataforma que consta de

100 elementos.

Page 62: mikrobasic0

En este caso, el contenido de una variable (elemento) representa una serie de productos de la plataforma

contiene. Los elementos se accede por la indexación, es decir, mediante la especificación de sus índices

entre corchetes:

dim shelf as byte [100] ' Declare the array "shelf" with 100

elements

shelf [4] = 12 ' 12 items are ‘placed’ on shelf [4]

temp = shelf [1] ' Variable shelf [1] is copied to

' variable temp

En las matrices constantes, los elementos pueden ser asignados a sus contenidos durante la declaración

de matriz. En el siguiente ejemplo, un calendario constante de matriz se ha declarado el nombre y cada

elemento se le asigna un número específico de días:

const CALENDAR as byte [12]=

(31,28,31,30,31,30,31,31,30,31,30,31)

El número de valores asignados no debe exceder la longitud de la matriz especificada, pero puede ser

menor. En este caso, los finales de los elementos exceso será asignado ceros.

GoTo

La sentencia goto le permite hacer un salto absoluto a otro punto en el programa. Tenga cuidado al usar

esta declaración ya que su ejecución provoca un salto incondicional haciendo caso omiso de cualquier

tipo de limitaciones de anidación. El punto de destino es identificado por una etiqueta, que se utiliza como

un argumento para la instrucción goto. Una etiqueta consiste en un identificador válido seguido por dos

puntos (:) La sintaxis de la sentencia goto es.:

goto: label_name

Esta sentencia se ejecuta un salto al especificador LABEL_NAME lo que representa una etiqueta. La

sentencia goto puede preceder o seguir a la etiqueta. Por lo tanto, no es posible saltar dentro o fuera de

un procedimiento o función. La sentencia goto se puede utilizar para salir de cualquier nivel de las

estructuras anidadas. No es recomendable para ir en un bucle u otra sentencia estructurada, ya que

puede dar resultados inesperados.

Page 63: mikrobasic0

GOSUB DECLARACIÓN

Una subrutina es una porción de código dentro de un programa más amplio ejecutado sobre la

demanda. Se realiza una tarea específica y es relativamente independiente del resto del código. El

intérprete saltar a la subrutina, ejecutarlo, y volver al programa principal.Palabras clave GOSUB y el

retorno se utilizan en el lenguaje Basic para indicar comienzo y final de la subrutina.

gosub label_name

...

...

...

label_name:

...

return

Las subrutinas son considerados por muchos a ser difícil de mantener, difícil de leer y digerir, al igual que

la sentencia goto. Úsalos sólo si usted no tiene una solución mejor.

Acceder a los BITS INDIVIDUALES

Compilador mikroBasic PRO para PIC, instalado en su PC, incluye una lista de los microcontroladores PIC

soportados con todos los registros, sus direcciones exactas y los nombres de bits. El compilador le

permite acceder a los bits individuales de estos registros por sus nombres, sin especificar sus posiciones

(el compilador ya se "sabe" ellos). Hay un número de formas de acceder y modificar un bit individual

dentro de un registro. Vamos a tener acceso a el bit GIE (Global Interrupt Enable bit), por ejemplo. Es el

séptimo bit del registro INTCON. Una forma de acceder a este bit por su nombre es para escribir lo

siguiente:

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

En lugar de un nombre poco, una variable, llamada constante, la función o una expresión encerrada entre

paréntesis se pueden utilizar para denotar la posición de bit en un registro. Además, para el acceso a bit

individual no son constantes globales predefinidas B0, B1, ..., B7, o 0, 1, ... 7, donde 7 se considera el bit

más significativo.

INTCON.B0 = 0 ' Clear bit 0 of the INTCON register

ADCON0.5 = 1 ' Set bit 5 of the ADCON0 register

i = 5

STATUS.(i+1) = 1 ' Set bit 6 of the STATUS register

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

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

Page 64: mikrobasic0

SBIT TIPO

El PRO mikroBasic para PIC compilador tiene el tipo de datos sbit. Este es el menor tipo de datos se

refiere a un solo bit. Si sbit tipo se asigna a una variable, el bit apropiado de algún registro será cambiado

por cambiar esa variable sin specyfing el nombre del registro y la ubicación. La variable sbit se

comportará como un puntero. Con el fin de declarar la variable sbit, basta con escribir:

dim Bit_name as sbit at Register_name.Bit_position

program MyProgram ' Main module

...

dim Output1 as sbit at PORTB.0 ' Variable Output1 is of sbit

type

...

Output1 = 1 ' Pin PORTB.0 is set (5V)

BIT TIPO

El PRO mikroBasic para PIC compilador proporciona el tipo de datos de bits que pueden ser utilizados

para las declaraciones de variables.

dim bf as bit

A diferencia de las variables de tipo sbit, sólo el nombre de bit se declaró aquí, mientras que el compilador

almacena bits variable en algunos de los registros libres de RAM. Como puede verse, no es necesario

especificar un poco de algún registro específico. La ubicación exacta de la variable de tipo bit es

desconocido para el usuario.

Tipos de bit y sbit llevan a cabo con las siguientes limitaciones:

No se puede utilizar las listas de argumentos y como valores de retorno de la función

No se puede utilizar como un miembro de las estructuras

No se puede utilizar como elementos de matriz

No se puede inicializar

No se puede ser señalado

Sus direcciones no puede ser de color rojo, por lo tanto, el operador unitario @ no se puede utilizar con variable de este tipo

dim ptr as ^bit ' invalid

dim arr as array[5] of bit ' invalid

PROCEDIMIENTOS Y FUNCIONES

Las funciones y procedimientos, que se conocen como rutinas, son subprogramas (bloques portaválvulas

declaración) que realizan una tarea determinada sobre la base de una serie de parámetros de

entrada. Las funciones devuelven un valor después de la ejecución, mientras que los procedimientos no lo

hacen.

Page 65: mikrobasic0

PROCEDIMIENTOS

Un procedimiento es un bloque con nombre de código, es decir, una subrutina con algunas características

adicionales. Por ejemplo, se puede aceptar parámetros. Los procedimientos se declaran de la siguiente

manera:

sub procedure procedure_name(parameter_list)

[ local declarations ]

procedure body

end sub

El especificador procedure_name representa un nombre de procedimiento y puede ser cualquier identificador válido.

El especificador parameter_list entre paréntesis representa una lista de parámetros

formales declarados similares a las variables. En mikroBasic PRO para PIC, los parámetros se pasan a un procedimiento por valor. Para pasar parámetros por dirección, es necesario añadir la palabra clave ByRef al comienzo de la declaración de parámetros.

Local declarations son declaraciones opcionales de variables y constantes que se

refieren al procedimiento que se indica solamente.

Procedure body es una secuencia de sentencias que se ejecutarán después de

llamar al procedimiento.

Los procedimientos son llamados por su nombre seguido de los parámetros reales colocados en el mismo

orden que los parámetros formales a juego. Tras una llamada a procedimiento, todos los parámetros

formales se crean como objetos locales inicializadas por valores de los argumentos reales.

'Add two numbers

sub procedure add (dim byref sum as word, dim x, y as byte)

sum = x + y ' add numbers x and y and store result into sum

variable

end sub ' end of subprocedure

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

ejemplo: add (gross_weight, net_weight, tare_weight)

FUNCIONES

Las funciones deben ser debidamente declarado con el fin de interpretar correctamente durante el

proceso de compilación.

sub function function_name(parameter_list) as return_type

[ local declarations ]

function body

end sub

Cada declaración contiene los siguientes elementos:

Nombre de la función es un identificador por el cual será posible llamar a una función (function_name en el ejemplo).

Tipo de resultado (valor devuelto) es el tipo de datos de los datos devueltos (return_type en el ejemplo).

Page 66: mikrobasic0

Declaración de los parámetros: cada parámetro consiste en una variable, un puntero constante, o una matriz precedido por su especificador de tipo de datos similar a cualquier declaración periódica variable (lista_de_parametros en el ejemplo). Se utilizan para transmitir información a la función cuando se le llama.

Declaraciones locales son declaraciones opcionales de variables y constantes que sólo se refieren a la función dada.

Cuerpo de la función es una secuencia de sentencias que se ejecutarán después de llamar a la función.

Aquí está un ejemplo de cómo definir y utilizar la función de potencia:

'function which calculates xn based on input parameters x and n

(n > 0)

sub function power(dim x, n as byte) as longint ' x and n are

bytes, result is longint

dim i as byte ' i is a byte

result = 1 ' result = 1 if n = 0

if n > 0 then

for i = 1 to n

result = result*x

next i

end if

end sub

Ahora, podemos llamar a la función de potencia para el cálculo de 3 12,

por ejemplo:

tmp = power(3, 12) ' Calculate 312

Funciones y procedimientos BIBLIOTECAS

Las declaraciones de todas las funciones y procedimientos que se utilizan en Basic se suelen almacenar

en los archivos de bibliotecas de módulos especiales llamados. Antes de utilizar cualquiera de ellos en el

programa, es necesario especificar el módulo apropiado por medio de la cláusula de incluir al comienzo

del programa. Es sólo una regla general. Pero si usted escribe un programa en el compilador mikroBasic

PRO para PIC es suficiente para comprobar la biblioteca que desee en la lista y el módulo

correspondiente se incluirá automáticamente en el proyecto. Este compilador ya tiene un número de esas

bibliotecas. Si el compilador encuentra una función desconocida o procedimiento durante la ejecución del

programa, primero se buscará su declaración en las bibliotecas de préstamo anteriormente.

Rutinas incorporadas EN mikroBasic PRO PARA PIC

Además de librerías de funciones y el procedimiento, el PRO mikroBasic para PIC compilador proporciona

un conjunto de útiles funciones integradas:

Helo

Hola

Mayor

La más alta

Inc

Diciembre

Chr.

Ord

SETBIT

ClearBit

TestBit

Delay_us

Page 67: mikrobasic0

Delay_ms

Vdelay_Advanded_ms

Vdelay_ms

Delay_Cyc

Clock_KHz

Clock_MHz

Reajustar

CLRWDT

DisableContextSaving

SetFuncCall

SetOrg

GetDateTime

GetVersion

Los delay_us y rutinas Delay_ms se generan en el lugar de llamada.

Los Vdelay_ms, Delay_Cyc y Get_Fosc_kHz son reales rutinas básicas. Sus fuentes se pueden encontrar

en el archivo Delays.mbas encuentra en la carpeta usos del compilador.

PREPROCESSOR

Un preprocesador es una parte integral de cada compilador. Su función es reconocer y ejecutar las

instrucciones del preprocesador.¿Cuáles son las instrucciones del preprocesador? Estas son las

instrucciones especiales que no pertenecen al lenguaje Basic, pero se integran en el compilador. Antes de

la compilación, el compilador activa el preprocesador que pasa por el programa en la búsqueda de estas

instrucciones. Si alguno encuentra, el preprocesador simplemente reemplazarlos por otro texto que,

dependiendo del tipo de comando, puede ser un archivo (comando incluyen) o simplemente una corta

secuencia de caracteres (comando definir). Entonces, el proceso de recopilación se inicia. Las

instrucciones del preprocesador pueden estar en cualquier lugar en el programa de origen y se refieren

únicamente a la parte del programa después de su aparición hasta el final del programa.

Directiva de preprocesador INCLUYEN

Muchos programas suelen repetir el mismo conjunto de comandos en varias ocasiones. Con el fin de

acelerar el proceso de escribir un programa, estos comandos y declaraciones suelen agruparse en

módulos específicos que pueden ser fácilmente incluidas en el programa usando la directiva include. Para

ser más precisos, la directiva include texto de las importaciones procedentes de otro documento, no

importa si se trata de un conjunto de comandos, comentarios, etc, en el programa.

Page 68: mikrobasic0

Compilación condicional

Directivas de compilación condicional se utilizan normalmente para hacer que los programas de código

fácil de modificar y compilar para microcontroladores diferentes. mikroBasic PRO para PIC compatible con

la compilación condicional. Todas las directivas de compilación condicional debe ser completado dentro

del módulo en el que han comenzado.

Page 69: mikrobasic0

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

Directivas condicionales # if, # elif, # else y # endif se ejecutan similares a las sentencias condicionales

básicas comunes. Si una expresión se escribe después de # si tiene un valor distinto de cero, entonces

las líneas de programa a raíz de la directiva # if será tratado como un código de programa válido y se

compila en un código hexadecimal. La sintaxis del mismo es:

#if constant_expression_1 'If constant_expression_1 is

not zero,

<section_1> 'section_1 will be compiled

[#elif constant_expression_2 'If constant_expression_2 is

not zero,

<section_2>] 'section_2 will be compiled

...

[#elif constant_expression_n 'If constant_expression_n is

not zero,

<section_n>] 'section_n will be compiled

[#else 'If none of previous sections

are compiled

<final_section>] 'final_section will be

compiled

#endif

Cada directiva # if en un archivo de origen debe ir acompañada de un cierre directiva # endif. Cualquier número de directivas # elif pueden aparecer entre las directivas # if y # endif, pero sólo una directiva # else está permitido. La directiva # else, si existe, debe ser la última directiva antes de # endif.

Sección puede ser cualquier código de programa que puede ser reconocido por el compilador o preprocesador. El preprocesador selecciona una sola sección, mediante la evaluación después de cada constant_expression # si o directiva # elif hasta que encuentra un verdadero (no cero) constant_expression.

Si todas las expresiones constantes de evaluar a falso o sin directivas # elif aparecen, el preprocesador selecciona el final_section después de la cláusula # else. Si la cláusula # else se omite y todas las instancias de constant_expression en el bloque # if se evalúe como falsa, ninguna sección serán seleccionados para su posterior procesamiento.

Finalmente, el resultado es que sólo una sección de código, incluso el vacío una, será compilado.

PUNTEROS

Como usted sabe, todos los objetos en el programa (variable, procedimiento, subrutina, etc) se le asigna

una dirección de memoria específica. Cuando se declara una variable en el programa, el compilador

automáticamente le asigna un lugar libre de memoria RAM.Durante la programación, estas direcciones se

mantienen ocultos a los programadores. En otras palabras - Las direcciones son "secreto" usado ... La

posibilidad de acceder a diferentes objetos por sus nombres (identificadores) en lugar de direcciones es

una de las principales ventajas de los lenguajes de programación de alto nivel. Como una cuestión de

hecho es mucho más fácil tratar con palabras (nombres) que con números. Además, el compilador se

encarga de asociar los objetos y sus adresses. Direccionamiento de los objetos mediante la

especificación de sus nombres se llama direccionamiento directo.

Page 70: mikrobasic0

Sin embargo, a veces tienes que lidiar con las direcciones de las localizaciones de memoria. A

continuación, se utilizan los punteros - las variables que sostienen la dirección de memoria de un

objeto. En este caso, es posible acceder a los objetos que utilizan punteros sólo.Esta manera de abordar

por eso se llama direccionamiento indirecto.

Antes de utilizar un puntero, es necesario para declarar su tipo de datos. Simplemente, añadir un prefijo

intercalación (^) antes de que el tipo.

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

type

Si se requiere para almacenar una variable en algún lugar específico de memoria RAM, entonces la

directiva absoluta debe ser utilizado en el programa de la siguiente manera:

dim variable_a as word absolute 12 ' variable_a will occupy 1

word

' (16 bits) at address 12

Ahora bien, si desea acceder a los datos de ubicación de la memoria del puntero, es necesario agregar un

símbolo de intercalación después del nombre del puntero. Por ejemplo, vamos a declarar el puntero del

pointer_p mencionado que apunta a una palabra (en este caso, se ha definido previamente variable_a

almacenado en la dirección 12 en la memoria RAM). El variable_a puntas se le asignará el valor 26:

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

...

...

pointer_p = 12 'Pointer_p points to memory adress 12

...

pointer_p^ = 26 'Variable a at memory address 12 has

value 26

'Similar to the absolute directive that is used for variables,

the org

'directive specifies the starting address of a routine in ROM.

It is

'appended to the routine declaration. For example:

sub procedure proc(dim par as word) org 0x200 ' Procedure will

start at

... ' the address

0x200

end sub

En este caso, el puntero pointer_p se asigna el valor 12 (pointer_p = 12), lo que significa que la dirección

de memoria 12 se especifica por la presente.

Page 71: mikrobasic0

Si desea cambiar el valor de una variable en punta, es suficiente para cambiar el valor del puntero y

añadir un símbolo de intercalación (^) como un sufijo a la misma. Refiérase a la figura en el variable_a

derecha, variable en la dirección 12 se asigna el valor 26 por medio del puntero pointer_p.

Los punteros pueden apuntar a los datos almacenados en cualquier espacio de memoria disponible y

puede residir en cualquier espacio de memoria disponible, salvo en el espacio de memoria de programa

(ROM).

Page 72: mikrobasic0

@ OPERADOR

El operador @ devuelve la dirección de un objeto, es decir, crea un puntero a su operando. Las siguientes

reglas se aplican aquí:

Si X es una variable, @ X devuelve la dirección de X.

Si F es una rutina (función o procedimiento), @ F crea un puntero a F.

dim temp as word

ptr_b as ^byte

ptr_arr as ^byte[10]

arr as byte[10]

main:

ptr_b = @arr ' @ operator will return ^byte

temp = @arr ' @ operator will return ^byte

ptr_arr = @arr ' @ operator will return ^byte[10]

end.

Si la variable X es de tipo de matriz, el operador @ volverá puntero a su elemento de base primera,

excepto cuando el lado izquierdo de la instrucción en la que X se utiliza es un puntero de matriz. En este

caso, el operador @ volverá puntero a la matriz, no para el elemento de base primera.

Estructura de un programa en mikroBasic PRO para PIC:

1. Cada programa comienza normalmente con un comentario que proporciona información sobre el propósito del programa, la fecha de la escritura del programa, programador, la versión, los cambios realizados en relación con la versión previa, etc estos comentarios (cabecera) no son obligatorias, pero es una buena costumbre escribirlos y tenerlos en el programa.

2. El código de cada programa se inicia con una directiva del programa seguido por el nombre del programa.

3. Si el programa, aparte del módulo principal, contiene otros módulos, así, sus nombres deben ser especificados usando la directiva include (un include por cada módulo). En consecuencia, si el compilador, al compilar el módulo principal, llega a un objeto no declarado (función, variable, etc), primero tratar de encontrar su declaración dentro de los módulos declarados. Si no hay ninguna declaración al respecto se encuentra, el compilador informará de un error.

4. La directiva include (si hay alguna) es seguido por una porción de código de la intención de declarar las variables, constantes, procedimientos, subprogramas, funciones y otros objetos para ser usados más tarde en el programa.Estas declaraciones se utilizan para reservar memoria RAM para almacenar datos registra así como para indicar al compilador la forma de ejecutar alguna función o procedimiento. Por ejemplo, un dato de tipo byte, ocupa sólo un registro, mientras que una de datos de tipo flotador ocupa cuatro registros.

5. El programa principal se inicia con la principal: la Directiva (siempre seguido de dos puntos). También se le llama un "cuerpo del programa.

6. Cada programa termina con el final. Directiva (siempre seguido de un período).

Page 73: mikrobasic0

2.3 COMPILADOR mikroBasic PRO PARA PIC

Todo lo que has leído hasta ahora acerca de la programación en Basic es sólo una teoría. Es útil saber,

por supuesto, pero no hay que olvidar que este lenguaje de programación no es mucho en relación con

algo concreto y tangible. Usted experimentará muchos problemas con los nombres exactos de los

registros, sus direcciones, nombres de los bits de control especiales y muchos otros cuando empieza a

escribir su primer programa en Basic. El punto es que se necesita más que una teoría para hacer que el

microcontrolador hacer algo útil.

Teniendo en cuenta un dicho «más vale prevenir que curar", tenemos que recordar todas las cosas que

deben se han establecido antes de comenzar a escribir un programa para el microcontrolador. En primer

lugar, usted necesita un programa instalado en su PC que entiende el lenguaje de programación que se

va a utilizar y que proporciona un entorno de trabajo adecuado para ello. No hay tal compilador sutable

para un solo tipo de microcontroladores ni para todos los microcontroladores. Se trata de software que se

utiliza para la programación de microcontroladores similares de un fabricante. Ya hemos introducido el

lenguaje mikroBasic que ha sido especialmente diseñado para la programación de microcontroladores

PIC. Ahora, cuando usted sabe lo suficiente sobre él, es el momento de presentar el software que se va a

utilizar para el desarrollo y edición de sus proyectos. Este software se llama el mikroBasic PRO para PIC

compilador. Es IDE (Integrated Development Environment) incluye todas las herramientas que necesita

para desarrollar sus proyectos (editor, compilador de depuración, etc)

Como su nombre lo indica, el PRO mikroBasic para PIC compilador está pensado para escribir programas

para microcontroladores PIC en el lenguaje Basic. Contiene información sobre la arquitectura de los

microcontroladores PIC (registros, sus direcciones exactas, módulos de memoria, el funcionamiento de

sus módulos, conjunto de instrucciones, etc pinout). Además, incluye herramientas específicas para la

programación de microcontroladores PIC. Por lo tanto, lo primero que tienes que hacer cuando se inicia el

compilador para seleccionar el chip y la frecuencia de funcionamiento de la lista. Este no es el final. Este

es el beginnig. Usted puede finalmente empezar a escribir el programa en Basic.

El proceso de creación y ejecución de un proyecto se puede dividir en varias partes:

1. Creación del proyecto (nombre del proyecto, la configuración del proyecto, las dependencias de archivos);

2. Edición del programa; 3. Compilación del programa y corrección de errores; 4. Depuración (ejecutar el programa paso a paso para asegurarse de que realiza las

operaciones que se pueden esperar); 5. Programación de microcontroladores (cargar el archivo. Hex genertaed por el compilador

en el microcontrolador utilizando el programador PICFlash).

INSTALACIÓN mikroBasic PRO PARA PIC

La instalación de mikroBasic PRO para PIC es similar a la instalación de cualquier otro programa de

Windows y todo el procedimiento se lleva a cabo a través de mago:

Page 74: mikrobasic0

Sólo tienes que seguir las instrucciones y haga clic en Siguiente, Aceptar, Siguiente, Siguiente ... La

misma historia de siempre a excepción de la última opción "¿Desea instalar PICFlash V7.11

programador? '. ¿Te hace la pregunta ¿qué hacer? Como ustedes saben, el compilador traduce un

programa escrito en Basic en un código hexadecimal. El siguiente paso consiste en cargar el código en el

microcontrolador. Es por eso que necesita el programador PICFlash. Instalarlo!

Después de completar la instalación PICFlash, se le pedirá para la instalación de otro programa

similar. Se trata de un software para la programación de un especial de la familia de microcontroladores

PIC que funcionan en el modo de bajo consumo (3,3 V). Salta es ...

El último paso - la instalación del controlador!

Page 75: mikrobasic0

Un controlador es un programa que permite al sistema operativo para comunicarse con un dispositivo

periférico. En nuestro caso, este dispositivo es el programador del hardware de su sistema de

desarrollo. Definitivamente, usted lo necesite. Haga clic en Sí.

Un tipo de controlador que desea instalar depende del sistema operativo en uso. En este caso, el PC se

ejecuta un sistema operativo de 32 bits de Windows XP. Seleccione el Win 2000, XP, 2003 32-bit carpeta

que contiene el controlador apropiado y puesta en marcha de su instalación.

Ahora estás a salvo, sólo sigue haciendo clic en Siguiente, Aceptar, Siguiente, Siguiente ...

Page 76: mikrobasic0

IDE DE mikroBasic PRO PARA PIC

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

Por desgracia, una descripción detallada de todas las opciones disponibles en este IDE tomaría

demasiado tiempo, por lo que no vamos en el mismo. Vamos a describir solamente las características

más importantes de la mikroBasic PRO para PIC compilador, en su lugar.Por supuesto, siempre se puede

obtener más información pulsando el botón de Ayuda [F1]. Una explicación detallada sobre cómo crear un

nuevo proyecto y escribir un programa se da en varios ejemplos prácticos en el capítulo 4 de este libro.

JEFE DE PROYECTO

Page 77: mikrobasic0

Un programa escrito en el PRO mikroBasic para PIC compilador no es un documento

independiente, sino una parte de un proyecto que también incluye el código hexadecimal, el

código ensamblador, y otros archivos. Algunos de ellos son creados durante el funcionamiento

del compilador, mientras que algunos son importados de otros programas. Sin embargo, la

ventana Project Manager le permite manejar todos los archivos del proyecto. Simplemente

haga clic derecho en cualquier carpeta y seleccione la opción que necesita para su proyecto.

Administrador de Biblioteca

Las librerías contienen un gran número de listas para utilizar las funciones y proporcionan una

gran cantidad de instalaciones al escribir programas para microcontroladores PIC. El

compilador debe conocer todas las dependencias de su archivo de origen mikroBasic con el fin

de compilar correctamente. Usted debe abrir la ventana del Administrador de bibliotecas y las

bibliotecas de verificación que desee utilizar en su programa. Cuando una biblioteca está

marcada, se agrega automáticamente al proyecto y vinculadas durante el proceso de

compilación. Por lo tanto, usted no tiene que incluir manualmente en los archivos de código

fuente utilizando la directiva # include. Por ejemplo, si el programa utiliza una pantalla LCD,

entonces no hay necesidad de escribir nuevas funciones, porque mediante la selección de la

Page 78: mikrobasic0

Biblioteca de LCD que será capaz de utilizar listo para utilizar las funciones de LCD en su

programa. Si esta biblioteca no está seleccionado en el Administrador de bibliotecas, cada vez

que intenta utilizar cualquiera de sus funciones, el compilador informará de un error. Una

descripción de cada biblioteca está disponible haciendo clic derecho sobre su nombre y

seleccionando la opción de ayuda. Explorador de código

La ventana de explorador del código que permite localizar fácilmente los objetos (funciones,

constantes, procedimientos, etc) dentro de los programas largos. Por ejemplo, si usted busca

una función que se utiliza en el programa, simplemente haga doble clic en su nombre en esta

ventana, y el cursor se coloca automáticamente en la línea apropiada en el programa. Configuración del proyecto

Page 79: mikrobasic0

Al compilar un proyecto, el compilador genera archivos a cargar en el microcontrolador. Estos

archivos será diferente dependiendo del tipo del microcontrolador y el propósito de la

compilación.Por lo tanto, a fin de que el compilador pueda funcionar correctamente, es

necesario establecer algunos parámetros del proyecto en la ventana Configuración del

proyecto:

Dispositivo: La selección del microcontrolador a utilizar permite que el compilador para

recuperar el archivo de definición de asociada. El archivo de definición de un microcontrolador

contienen información específica sobre sus registros SFR, sus direcciones de memoria y

algunas variables específicas para que el microcontrolador. Es todo obligatoria para la creación

de una compatible. Hexagonal archivo.

Oscilador: Esta opción se utiliza para especificar la velocidad de funcionamiento del

microcontrolador. Por supuesto, este valor depende del oscilador en uso. Se recupera por el

compilador para compilar las rutinas que requieren información en tiempo (Delay_ms function ()

por ejemplo). Posteriormente, esta información también será utilizada por el programador. La

velocidad de funcionamiento se ajusta a fin de permitir oscilador interno del microcontrolador

para funcionar a la frecuencia seleccionada.

Construir / Tipo de depurador: Todo el proceso se llama compilación incluye la construcción y analizar,

compilar, enlazar y la generación de archivos hexagonales. El tipo de construcción le permite configurar el

modo de construcción. Dependiendo de la elección del modo, el archivo generado para ser cargado en el

microcontrolador será diferente.

Tipo de generación - la liberación: El programa que se cargará en el microcontrolador no contendrá

ninguna información complementaria para ser depurado más tarde. Después de completar el proceso de

compilación, el compilador no tiene más influencia en la ejecución del programa.

Tipo de generación - de depuración ICD: Parte de la información se agrega a la hex con el fin de

permitirle llevar a cabo la depuración de hardware.. Cuando el proceso de compilación se ha completado

y el microcontrolador programado está, el compilador permanece conectada al microcontrolador y todavía

puede afectar su funcionamiento. Una herramienta llamada mikroICD (depurador en circuito) permite que

el programa a ser ejecutado paso a paso y proporciona un acceso al contenido actual de todos los

registros del microcontrolador.

A los efectos de la depuración, un simulador de software se puede utilizar en ambos modos de tipo de

generación. Se le permite simular el programa mediante la reproducción de la conducta

microcontrolador. El simulador no utiliza dispositivos reales para su funcionamiento, de modo que algunas

operaciones no pueden ser reproducidas (interrumpir, por ejemplo). Sin embargo, es más rápido para

depurar un programa mediante el uso de simulador y no requiere ningún dispositivo taget.

Tenga en cuenta que alguna de estas opciones pueden ser modificadas en cualquier momento durante la

edición del programa. No te olvides de volver a construir y volver a programar el dispositivo después de

modificar cualquiera de esas opciones.

EDICIÓN y compilar programas Editor de código

Page 80: mikrobasic0

Editor de código es una parte central de la ventana del compilador usado para escribir y editar

programas. Un gran número de opciones que se utilizan para establecer sus funciones y el diseño se

pueden encontrar en las herramientas y el menú Opciones [F12]. Cuando se escribe un programa, no se

olvide de los comentarios. Los comentarios son muy importantes para el programa de depuración y

actualización. Por otra parte, aunque el compilador no tiene restricción de formato, siempre debe seguir

las reglas de edición mismos (como en los ejemplos proporcionados en este libro). Como no hay límite de

longitud de línea, no dude en utilizar los espacios en blanco con el fin de hacer que su código sea más

legible.

Cuando se escribe un programa, recopilar con regularidad a fin de corregir errores de sintaxis que viene

usted. También puede compilar su programa cada vez que la redacción de una nueva función se ha

completado y probar su comportamiento mediante el modo de depuración. De esta manera, es mucho

más fácil de corregir los errores de compilación. De lo contrario, se verá obligado a modificar el programa.

COMPILACIÓN y corrección de errores

Para compilar el código, sólo tienes que hacer clic en la opción Generar en el menú Proyecto. De hecho,

todo el proyecto se compila y, en caso de que la compilación es exitosa, los archivos de salida se generan

(asm,. Hexagonal, etc.) Una compilación es exitosa si no hay error se encontró. La compilación genera

muchos mensajes que se muestran en la ventana de mensajes. Estos mensajes consisten en la

información, advertencias y errores. Cada error encontrado está asociado con su línea de programa y la

descripción. Como un error en su código puede generar muchos otros errores, siempre se debe tratar de

corregir el error por primera vez en la lista y luego volver a compilar el programa. En otras palabras, es

aconsejable para corregir los errores de uno por uno.

Page 81: mikrobasic0

En el ejemplo anterior, el programa informa de un error de sintaxis en la línea 80a. La compilación le

permite corregir su programa mediante la fijación de todos los errores mikroBasic. Cuando todos los

errores son fijos, el programa está listo para ser descargado en el microcontrolador. Sin embargo, su

trabajo no ha terminado todavía, porque todavía no sabe si su programa se comporta como se espera o

no.

Depuración del programa

Como pudimos ver anteriormente, hay dos modos de depuración: un depurador de software que simula

las acciones del microcontrolador (modo predeterminado) y un depurador de hardware (mikroICD), que

lee directamente el contenido de la memoria del microcontrolador. Sea cual sea el modo que elija, el

proceso de depuración es el mismo. En el caso de que usted elija CIE depuración asegúrese de cargar el

programa en el microcontrolador. La depuración es un paso muy importante, ya que le permite probar el

programa después de una compilación exitosa, o para corregir errores descubiertos en un programa en

ejecución.

Para iniciar el depurador, haga clic en la opción de depurador de inicio en el menú Ejecutar. El editor de

código de forma automática será ligeramente modificado y una ventana llamada Valores Mira

aparecerá. El principio de depuración se basa en el funcionamiento de un programa paso a paso y

siguiendo la evolución del contenido de los registros y valores variables. De esta manera, usted será

capaz de verificar el cálculo y para ver si algo inesperado ha ocurrido. Al ejecutar el programa paso a

paso, usted será capaz de localizar fácilmente dónde ocurren los problemas. Como la depuración puede

conducir a la modificación del programa, siempre se debe volver a compilar el programa después de cada

corrección y reiniciar el depurador con el fin de verificar lo que han cambiado.

Software del simulador

Si usted desea ser un programador y dedícate a microcontroladores de programación, entonces usted

tiene que acostumbrarse al hecho de que los programas casi nunca funcionan al primer intento o empezar

a utilizar un simulador. El simulador es una parte integral del compilador usado para simular el

funcionamiento del microcontrolador.

Page 82: mikrobasic0

Antes de la puesta en marcha del simulador, seleccione el modo de funcionamiento en la

ventana Configuración del proyecto (tipo de construcción - la liberación), compilar el programa

y haga clic en la opción Run / Start del depurador.

El compilador se ajusta automáticamente al modo de simulación. Como tal, se vigila el estado

de todos los bits del registro y le permite ejecutar el programa paso a paso mientras se controla

el funcionamiento del microcontrolador en la pantalla.

Unos cuantos iconos, utilizados exclusivamente para el funcionamiento de este simulador,

aparecerá en la barra de herramientas cuando el compilador está configurado en este modo.

Estos iconos tienen los siguientes significados:

Paso a paso: Ejecutar el programa de línea actual, y luego se detiene. Si la línea de programa ejecutado llama a una subrutina, el depurador se mete en la subrutina y se detiene después de ejecutar la primera instrucción dentro de ella.

Paso a paso: Ejecutar el programa de línea actual, y luego se detiene. Si la línea de programa ejecutado llama a una subrutina, el depurador no entrar en ella. El subprograma se ejecutará todo y se detiene el depurador a la primera instrucción después de la llamada. Parece que una línea de programa se omite aunque toda la subrutina se ejecuta.Como resultado, el estado de los registros se cambia. Este comando se utiliza normalmente cuando es necesario para acelerar la ejecución de bucles de programa de largo.

Ejecutar hasta el cursor: Ejecutar todas las líneas del programa hasta la posición del cursor se alcanza.

Al salir: Ejecutar todas las líneas del programa restantes dentro de la rutina. El depurador se detiene inmediatamente después de salir de la subrutina.

Los puntos de interrupción que el proceso de depuración de los programas más eficientes, lo que le

permite detener la ejecución del programa en alguna línea específica. Esto es muy útil ya que será capaz

de ver sólo las partes críticas del programa, no pierden su tiempo poniendo a prueba la línea de todo el

programa por línea. Para agregar o quitar un punto de interrupción sólo tienes que hacer clic en el lado

Page 83: mikrobasic0

izquierdo de su editor de código en la línea correspondiente o presione [F5]. Una pequeña ventana

llamada puntos de interrupción que indica dónde se encuentran los puntos de interrupción. Tenga en

cuenta que las líneas marcadas por los puntos de interrupción se destacan en rojo.

La línea que se está ejecutando actualmente está resaltada en azul. Usted puede leer el contenido de los

registros y las variables que ha seleccionado en Valores ver en cualquier momento. Si desea ir

directamente a los puntos de interrupción, utilice el comando Ejecutar del depurador / Pausa.

Ventana Inspección VALORES

Los depuradores de software y hardware tienen la misma función para controlar el estado de

los registros durante la ejecución del programa. La diferencia es que el depurador software

simula la ejecución del programa en un PC, mientras que el depurador ICD utiliza el

microcontrolador. Cualquier cambio de un estado lógico pin se refleja en el registro

correspondiente (puerto). Como la ventana Inspección Valores le permite supervisar el estado

Page 84: mikrobasic0

de todos los registros, es fácil comprobar si un alfiler se activa o se desactiva. Las últimas

modificaciones aparece en rojo en esta ventana.Esto le permite localizar fácilmente las

modificaciones en el archivo de lista durante la depuración. Seleccione Vista / Windows y haga

clic en la opción Ver valores para activar esta ventana. Usted puede hacer una lista de los

registros y variables del estado de los que desea monitorear.

CRONÓMETRO

Si desea saber el tiempo que tarda el microcontrolador para ejecutar una parte del programa,

seleccione Ejecutar / Ver opción de Cronómetro. Una ventana, como se muestra en la figura a

la derecha, aparecerá. ¿Sabe usted cómo funciona el cronómetro? Bueno, es tan simple como

eso. Los tiempos (momento en que el programa se ha iniciado, el tiempo de la ejecución del

último paso, etc) se mide automáticamente para cada acción de la depuración (paso en, pasar

por encima, ejecute / pausa, etc) y se muestran en la ventana del cronómetro.

Depurador en circuito

Otra forma de comprobar la ejecución de un programa es mediante el uso de mikroICD debugger

(depurador en circuito). El mikroICD es una parte integral del programador PICFlash. Se utiliza para

probar y depurar programas. El proceso de pruebas y la depuración se realiza mediante el seguimiento

del estado de todos los registros dentro del microcontrolador que opera en tiempo real. Con el fin de

habilitar la depuración, es necesario seleccionar las opciones de tipo de generación-ICD de depuración y

depuración-mikroICD antes de que el programa está cargado en el microcontrolador. Tan pronto como el

depurador mikroICD se inicia, una ventana, como se muestra en la figura a continuación, aparece. El

depurador mikroICD se comunica con el PIC a través de sus pines utilizados para la programación. Por lo

tanto, estos pernos no pueden ser utilizados como pines de E / S, mientras que el proceso de depuración

está en curso. Durante la operación depurador mikroICD, programador y el ordenador tiene que estar

conectado mediante un cable USB.

Page 85: mikrobasic0

mikroICD depurador opciones:

Iniciar depurador [F9]

Ejecutar / Pausa depurador [F6]

Detener depuración [Ctrl + F2]

Paso a paso [F7]

Paso a paso [F8]

Step Out [Ctrl + F8]

Alternar punto de interrupción [F5]

Mostrar / Ocultar puntos de interrupción [Shift + F4]

Borrar puntos de interrupción [Ctrl + Shift + F4]

Cada uno de estos comandos se activa a través de atajos de teclado o haciendo clic en el icono apropiado en la ventana

Inspección Valores.

El depurador mikroICD también ofrece opciones tales como ejecutar un programa paso a paso (paso a

paso), haciendo una pausa la ejecución del programa para examinar el estado de los registros

actualmente activos con puntos de interrupción, el seguimiento de los valores de algunas variables, etc El

siguiente ejemplo ilustra un paso a intensificar la ejecución del programa utilizando el comando Paso a

paso.

Page 86: mikrobasic0

Paso 1:

En este ejemplo la línea de programa 31a está resaltada en azul, lo que significa que se

ejecutará a continuación. El estado actual de todos los registros de la microontroller se pueden

ver en el reloj mikroICD ventana de Valores. Paso 2:

Después de que el Paso a paso por el comando [F8] se ejecuta, el microcontrolador se

ejecutará la línea de programa 31. La primera línea la próxima (32 ª) para ser ejecutado se

resalta en azul. El estado de los registros que se cambian durante la ejecución de esta

instrucción puede ser visto ahora en la ventana Inspección Valores.

Carga del programa en el microcontrolador

Si usted ha solucionado todos los errores en el código y cree que el programa está listo para su uso,

entonces usted debe cargar en el microcontrolador. Utilizar el programador PICFlash para este

propósito. PICFlash es una herramienta diseñada para programar todo tipo de microcontroladores PIC. Se

compone de dos partes:

La parte de hardware almacena un archivo hexadecimal (el programa que se carga) y los programas del microcontrolador con niveles específicos de tensión. Durante el proceso de programación, un nuevo programa está escrito en la memoria flash del microcontrolador. El programa anterior se borrarán automáticamente de la memoria flash.

La parte del software es el encargado de enviar el programa (. Hex) para la parte de hardware del programador sobre un cable USB. Se activa pulsando mE_Programmer en el menú Herramientas, o pulsando la tecla [F11]. Como resultado, puede modificar algunos parámetros de programación y también controlar el funcionamiento del hardware del programador (de carga, escribir, verificar ...).

Page 87: mikrobasic0

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

HERRAMIENTAS compilador

Este compilador proporciona herramientas especiales que simplifican considerablemente el proceso de

escritura del programa. Todas estas herramientas están disponibles en el menú Herramientas. Aquí está

una breve descripción de todos ellos.

TERMINAL USART

El terminal USART es un reemplazo para el estándar de Windows Terminal Server Hyper. Se

puede utilizar para comprobar el funcionamiento del microcontrolador que utiliza la

comunicación USART. Estos microcontroladores están integrados en el dispositivo de destino y

se conecta al conector RS-232 de la PC mediante un cable serie. La ventana de terminal

Page 88: mikrobasic0

USART contiene opciones para configurar la comunicación serie y mostrar los datos enviados /

recibidos. EEPROM EDITOR

Al seleccionar la opción Editor de EEPROM desde el menú Herramientas, una ventana, como

se muestra en la figura a continuación, aparecerá.Aquí se puede ver cómo la memoria

EEPROM del microcontrolador parece. Si desea cambiar su contenido después de cargar el

programa en el microcontrolador esta es la forma correcta de hacerlo. Si un nuevo contenido es

un dato de tipo específico (char, int o double), entonces usted debe seleccionar, introduzca el

valor en el campo Valor de edición y haga clic en Editar. A continuación, haga clic en el botón

Guardar para guardarlo como un documento con la extensión. Hexagonal. Si el uso de

EEPROM en la opción Proyecto está activo, los datos se cargarán automáticamente en el

microcontrolador durante el proceso de programación. TABLA ASCII

Si usted necesita la representación numérica de cualquier carácter ASCII, sólo tienes que seleccionar la

opción de tabla ASCII en el menú Herramientas y la mesa, como se muestra en la figura a continuación,

aparecerá.

Page 89: mikrobasic0

Usted probablemente sabe que todas las teclas de su teclado está asociado con un código (ASCII). Los

números tienen equivalentes extraños. Por esta razón, la instrucción de programa para visualizar el

número 7 en un LCD no se muestran, pero el equivalente de la instrucción BEL. Si envía el mismo

número que un personaje, obtendrá el resultado esperado - el número 7. En consecuencia, si desea

mostrar un número sin antes convertirlo en el personaje adecuado, entonces es necesario añadir el

número 48 a cada dígito del número que se muestra se compone de.

SIETE SEGMENTOS DEL EDITOR

Un editor de siete segmentos le permite encontrar fácilmente a qué número hay que fijarse en un puerto

de salida con el fin de mostrar un símbolo que desea. Por supuesto, no hace falta decir que los pines del

puerto debe estar conectado correctamente para mostrar los segmentos. Sólo tienes que colocar el cursor

en cualquier segmento de la pantalla y haga clic en él. El número que usted debe entrar en el programa

aparecerá de inmediato. Eso es todo.

Page 90: mikrobasic0

LCD de caracteres personalizados

Además de los caracteres estándar, la pantalla LCD también puede mostrar los caracteres creados por el

programador. Al seleccionar la herramienta de LCD de caracteres personalizados usted se librará de

tedioso trabajo de la escritura de funciones para el envío de código correspondiente a una pantalla. Basta

con crear un símbolo, haga clic en pequeños cuadrados en la ventana del LCD del carácter

personalizado, seleccione la posición y la fila y haga clic en el botón Generar. El código correspondiente

aparece en otra ventana. No hay clics no son suficientes. Copiar al Portapapeles - Pegar ...

GRÁFICO LCD GENERADOR de mapa de bits

Esta es otra herramienta necesaria en caso de que el microcontrolador que está escribiendo programas

para usos pantalla LCD gráfica (GLCD). Esta herramienta le permite visualizar cualquier mapa de bits con

facilidad. Con el fin de tomar ventaja de ello, seleccione Herramientas / Editor de mapa de bits GLCD y

aparece la ventana correspondiente. Seleccione el tipo de visualización que se utilizará y cargar un mapa

de bits. El mapa de bits debe ser monocromático y en la resolución especificada (128 x 64 píxeles en este

caso).Además procedimiento es el mismo que en el ejemplo anterior. Copiar al portapapeles ...

Cada código generado el uso de herramientas para el control de LCD y GLCD contiene funciones de la

biblioteca Lcd. Si usted los utiliza en el programa, no se olvide de marcar la casilla junto a esta biblioteca

Page 91: mikrobasic0

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

correctamente.

BIBLIOTECAS

Una de las características más útiles de la mikroBasic PRO para PIC compilador es el

Administrador de la Biblioteca y sin duda merece nuestra atención.

Si necesita una función o un procedimiento para realizar determinada tarea, mientras que

escribir un programa, sólo hay que encontrarlo en una de las bibliotecas incluidas en el

compilador y lo utilizan. Una biblioteca es en realidad un archivo llamado cabecera. Contiene

un conjunto de variables y funciones escritas en mikroBasic. Cada biblioteca tiene un propósito

específico. Por ejemplo, si usted necesita un procedimiento para generar una señal de audio en

algunos pines, abra la biblioteca de sonido en la ventana Library Manager y haga doble clic en

el sound_play procedimiento adecuado. Una descripción detallada de este procedimiento

aparece en la pantalla. Copia este archivo en su programa y establecer los parámetros

adecuados. Si esta biblioteca está marcada, sus funciones serán recuperados durante el

proceso de compilación y no será necesario el uso de la directiva include.

El PRO mikroBasic para PIC incluye librerías específicas diversas y hardware. BIBLIOTECAS DIVERSOS

Diversas bibliotecas contienen algunas de las funciones de propósito general:

B I B L I O T E C A D E S C R I P C I Ó N

Botón de la Biblioteca

Función elimina la influencia de botón de contacto parpadeo

Conversiones de Biblioteca

Rutinas de biblioteca para los números a cadenas y BCD / conversiones decimales

Page 92: mikrobasic0

C de la biblioteca Funciones de biblioteca para analizar y mapear caracteres

Cadena de la Biblioteca

Biblioteca, que automatiza las tareas relacionadas con cadena

Biblioteca de tiempo

de

Biblioteca de rutinas de tiempo de uso de cálculos de tiempo en

formato de tiempo UNIX

Trigon Biblioteca Funciones de biblioteca para la manipulación aritmética de punto

flotante

Hardware específicos BIBLIOTECAS

Bibliotecas de hardware específicos incluyen funciones usadas para controlar el funcionamiento de los

módulos de hardware:

B I B L I O T E C A D E S C R I P C I Ó N

ADC Biblioteca Se utiliza para una operación de convertidor A / D

CAN Biblioteca Se utiliza para el funcionamiento con módulo CAN

CANSPI Biblioteca Se utiliza para el funcionamiento con el módulo CAN externo

(MCP2515 o MCP2510)

Compacto Biblioteca de Flash

Se utiliza para la operación con tarjetas Compact Flash de memoria

EEPROM Biblioteca Se utiliza para la operación con una función de memoria

EEPROM

Ethernet PIC18FxxJ60 Biblioteca

Se utiliza para la operación con el incorporado en el módulo Ethernet

Biblioteca de memoria flash

Se utiliza para la operación con una función de memoria Flash

Pantalla gráfica LCD

Biblioteca

Se utiliza para la operación con el gráfico del módulo LCD con

una resolución de 128x64

I ² C Library Se utiliza para la operación con una función de módulo de

comunicación serial I2C

Teclado Biblioteca Se utiliza para la operación con el teclado (botones pulsadores

4x4)

Lcd Biblioteca Se utiliza para la operación con pantalla LCD (2x16 caracteres)

Manchester Code Library Se utiliza para la comunicación mediante el código Manchester

Multi Media Card biblioteca

Se utiliza para la operación con multimedia MMC tarjetas de memoria flash

OneWire Biblioteca Se utiliza para la operación con circuitos utilizando un cable de

comunicación serie

Expansión del puerto de la

Biblioteca Se utiliza para la operación con el expansor de puerto MCP23S17

PS / 2 Biblioteca Se utiliza para la operación con el teclado PS / 2 estándar

PWM Biblioteca Se utiliza para la operación con una función de módulo PWM

RS-485 Biblioteca Se utiliza para el funcionamiento con módulos que utilizan la

comunicación serie RS485

Software I ² C Library Se utiliza para el software de simulación de I2C

Page 93: mikrobasic0

Software SPI Library Se utiliza para la simulación de software de SPI

Software UART Library Se utiliza para el software de simulación UART

Biblioteca de sonidos Se utiliza para la generación de señales de audio

SPI Biblioteca Se utiliza para la operación con una función de módulo SPI

SPI Ethernet Library Se utiliza para la comunicación SPI con el módulo Ethernet

(ENC28J60)

SPI LCD gráfico Biblioteca Se utiliza para 4-bit SPI comunicación con pantalla LCD gráfica

SPI LCD Biblioteca Se utiliza para 4-bit comunicación SPI con pantalla LCD (2x16

caracteres)

SPI LCD8 Biblioteca Se utiliza para 8-bit comunicación SPI con pantalla LCD

SPI T6963C LCD gráfico Biblioteca

Se utiliza para la comunicación SPI con el gráfico de la pantalla LCD

UART Biblioteca Se utiliza para la operación con una función de módulo UART

USB HID biblioteca Se utiliza para la operación con una función de módulo USB

Capítulo 3: PIC16F887 Microcontrolador

El PIC16F887 es un producto de Microchip ®.

Cuenta con todos los módulos que los microcontroladores

modernos normalmente tienen.Por su bajo precio, amplia gama de aplicaciones, de alta calidad y fácil

acceso, es una solución ideal en aplicaciones como el control de diferentes procesos en la industria, la

medición de diferentes valores, etc Una lista a continuación incluye solamente algunos de sus principales

características.

3.1 LAS FUNCIONES BÁSICAS PIC16F887

3.2 SFRS FUNDAMENTALES

3.3 Entrada / Salida

3,4 TIMER0

3,5 TIMER1

3,6 Timer2

3.7 módulos CCP

3.8 MÓDULOS DE COMUNICACIÓN DE SERIE

3.9 Módulos analógicos

3,10 reloj oscilador

3,11 memoria EEPROM

3.12 REINICIAR! NEGRO-OUT, Brown-out o ruidos?

3.1 LAS FUNCIONES BÁSICAS PIC16F887

Arquitectura RISC

o A tan sólo 35 instrucciones para aprender

o Un ciclo en todas las instrucciones de una sola, excepto las ramas

Frecuencia de trabajo 0-20 MHz

Page 94: mikrobasic0

Oscilador interno de precisión

o Calibrado de fábrica

o Software gama de frecuencias seleccionable de 8 MHz a 31kHz

Voltaje de alimentación 2.0-5.5V

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

En ahorro de energía Modo de espera

Brown-out Reset (BOR) con la opción de software de control

35 de entrada / salida de pines

o Fuente de alta corriente / sumidero de accionamiento directo de LED

o software y resistencia de pull-up programable de forma individual

o Interrupción-on-Cambiar el PIN

La memoria ROM de 8K en tecnología flash

o Chip puede ser reprogramado hasta 100.000 veces

In-Circuit Serial Programming Opción

o Chip se puede programar incluso incorporado en el dispositivo de destino

256 bytes de memoria EEPROM

o Los datos se pueden escribir más de 1.000.000 veces

368 bytes de memoria RAM

Convertidor A / D:

o 14 canales

o 10-bits de resolución

3 temporizadores independientes y contadores

Watch-dog temporizador

Módulo comparador analógico con

o Dos comparadores analógicos

o Tensión de referencia fija (0,6 V)

o Programable en el chip de voltaje de referencia

Salida PWM de control de dirección

Mejorado el módulo USART

o Compatible con RS-485, RS-232 y LIN2.0

o Auto-detección de baudios

Maestro en serie síncrona Puerto (MSSP)

o soportes SPI y modo I2C

Page 95: mikrobasic0
Page 96: mikrobasic0

DESCRIPCIÓN Pinout

La mayoría de los pines del microcontrolador PIC16F887 son multi-funcionales. Por ejemplo, el pasador

de la quinta parte del microcontrolador está marcado como RA3/AN3/Vref + / + C1IN lo que indica que

tiene las funciones siguientes:

RA3 del puerto PORTA tercera entrada / salida digital

AN3 tercera entrada analógica

Vref + tensión de referencia positiva

C1IN comparador C1 + entrada positiva

Este principio de la multifuncionalidad se aplica comúnmente en el diseño de los microcontroladores, ya

que permite el paquete microcontrolador a ser mucho más compacta y no afecte al funcionamiento del

microcontrolador. Varias funciones pasador no puede ser utilizado simultáneamente, pero se puede

cambiar en cualquier momento durante el funcionamiento.

En las siguientes tablas se refieren a la DIP40 PIC16F887 microcontrolador.

Page 97: mikrobasic0
Page 98: mikrobasic0
Page 99: mikrobasic0

Unidad de procesamiento central (CPU)

Como cualquier intento de explicar el funcionamiento de la CPU en detalle nos llevaría demasiado lejos,

no vamos a hacerlo en esta etapa. De todos modos, es importante señalar que la CPU se fabrica en la

tecnología RISC como este hecho puede ser crucial cuando se decide que microcontrolador a utilizar.

RISC significa Reduced Instruction Set Computer, que da a los PIC16F877 dos grandes ventajas:

La CPU es capaz de reconocer y ejecutar solamente 35 instrucciones simples. Por cierto, para programar otros microcontroladores en lenguaje ensamblador, es necesario conocer más de 200 instrucciones de memoria.

El tiempo de ejecución es el mismo para casi todas las instrucciones, y dura 4 ciclos de reloj. La frecuencia de reloj es estabilizado por un cristal de cuarzo. Las excepciones a la regla son las instrucciones de salto y sucursales el tiempo de ejecución de los cuales es de 2 ciclos de reloj. Esto significa que si la frecuencia de operación del microcontrolador es 20 MHz, el tiempo de ejecución de cada instrucción será 200ns, es decir, el programa se ejecutará 5 millones de instrucciones por segundo!

Page 100: mikrobasic0

MEMORIA

El PIC16F887 dispone de tres tipos de memoria: ROM, RAM y EEPROM. Cada uno merece ser discutido

por separado aquí, debido a sus funciones específicas, funciones y organización.

ROM

ROM se utiliza para guardar de forma permanente el programa que se ejecuta actualmente. Es por esto

que a menudo se llama una "memoria de programa". El PIC16F887 tiene 8Kb de ROM (8192 localidades

en total). Desde ROM está fabricada con tecnología FLASH, su contenido puede ser cambiado fácilmente,

proporcionando una tensión de programación especial (13V).

No se requieren más explicaciones, como todo el proceso se realiza automáticamente por medio de un

programa especial instalado en el PC y un dispositivo electrónico simple llamada el programador.

EEPROM

Al igual que en la memoria del programa, el contenido de la EEPROM se guardan de forma permanente,

incluso cuando se desconecta la alimentación. Por otro lado, a diferencia de ROM, el contenido de la

Page 101: mikrobasic0

EEPROM se puede cambiar durante la operación de microcontrolador. Esta es la razón de esta memoria

(que contiene 256 lugares) es perfecto como un dispositivo de almacenamiento permanente de algunos

de los resultados creados y utilizados durante la operación.

RAM

Este es el tercer y el tipo más complejo de todos los módulos de memoria del microcontrolador. Se

compone de dos partes: registros de propósito general y funciones especiales (SFR registros). Todos

ellos están divididos en cuatro bancos de memoria que se explica más adelante en este capítulo.

Aunque ambos grupos de registros se borran cuando se va la luz y ambos se fabrican en el mismo y

actuar de una manera similar, no tienen muchas cosas en común cuando se trata de sus funciones.

Registros de propósito general

Registros de propósito general se utilizan para almacenar datos temporales y los resultados creados

durante la operación. Por ejemplo, si el propósito del programa es contar algo (productos de la línea de

montaje, por ejemplo), es necesario contar con un registro que representa lo que en la vida cotidiana se

llama "suma". Dado que el microcontrolador no es creativo en absoluto, es necesario especificar la

dirección exacta de algunas registro de propósito general y asignarle esa función. Asegurarse de que el

Page 102: mikrobasic0

valor de este registro se incrementa en 1 después de cada producto pasa a través de un sensor. Así es

como un simple programa se ha creado.

"En esta sección del programa, la variable de registro

almacenado en suma se incrementa cada

"Tiempo de la RB0 pin de entrada es excitada alta (1)

...

if PORTB.0 = 1 ' Check whether the RB0 pin is driven high

sum = sum + 1 ' If true, the variable value is incremented by

1

end if ' If false, the program exits the if statement

...

El microcontrolador es capaz de ejecutar este programa, ya que sabe cuál es la cantidad que se

incrementa es y dónde se almacena. De manera similar, cada variable de programa debe ser preasignado

algunos de los registros de propósito general.

REGISTROS DE FUNCIONES ESPECIALES (SFRS)

Especial-función registra también ocupan lugares de memoria RAM, pero a diferencia de registros de

propósito general, su función está predeterminada durante el proceso de fabricación y no se puede

cambiar más adelante. Desde sus bits están conectados a unos módulos en el chip, tales como un

convertidor A / D, el módulo de comunicaciones en serie, etc, cualquier cambio de su contenido afectará

directamente a la operación del microcontrolador o al menos algunos de sus módulos. Por ejemplo, el

registro ADCON0 controla el funcionamiento del convertidor A / D. Al cambiar sus bits se determina que

pin del puerto es que se configura como una entrada del convertidor, el tiempo de inicio y la velocidad de

conversión. Además, cada registro SFR tiene su propio nombre (ambos registros y sus bits), lo que

simplifica considerablemente el proceso de escritura del programa. Como lenguajes de alto nivel de

programación contiene una lista de todos los registros SFR con sus direcciones exactas, es suficiente

para especificar el nombre de un registro con el fin de leer o modificar su contenido.

Otra característica de estos lugares de memoria es que tienen sus nombres (ambos registros y sus bits),

lo que simplifica considerablemente el proceso de escribir un programa. Como lenguajes de alto nivel de

programación puede utilizar la lista de todos los registros con sus direcciones exactas, basta con

especificar el nombre de un registro con el fin de leer o modificar su contenido.

"En esta sección del programa, registra TRISC y PORTC se cambian

...

TRISC = 0x00 ' a logic zero (0) is written to register

TRISC (all port

' PORTC pins are configured as outputs)

PORTC = %01100011 ' Logic states on all port PORTC pins are

being changed

...

RAM BANCOS

Page 103: mikrobasic0

La memoria RAM se divide en cuatro bancos. Antes de acceder a cualquier registro durante la escritura

del programa (ya sea para leer o modificar su contenido), es necesario seleccionar el banco que lo

contiene. Dos bits del registro de estado se utilizan para la selección de banco, que se discutirá más

adelante. Para hacer frente a SFR tan simples como sea posible, los registros más utilizados tienen la

misma dirección en todos los bancos y por lo tanto puede ser de fácil acceso.

Puede ser difícil de tratar con los bancos cuando se escribe un programa en lenguaje ensamblador. Por el

contrario, cuando se escribe un programa en lenguajes de programación más altos, tales como Basic, y

los compiladores de uso, tales como mikroBasic PRO para PIC, basta con especificar el nombre de un

Ayer re que usted necesita. Contar con esta información, el compilador es capaz de seleccionar el banco

adecuado, así como para incluir instrucciones apropiadas en el código durante el proceso de

Page 104: mikrobasic0

compilación. Usted ha estado utilizando el lenguaje ensamblador sólo en la medida y esta es la primera

vez que utilice el PRO mikroBasic para PIC compilador, ¿no? Esto debe ser una maravillosa noticia a

continuación.

Page 105: mikrobasic0
Page 106: mikrobasic0

STACK

Una parte de memoria RAM utilizada como pila consta de ocho 13-bits registros. Antes de que el

microcontrolador comienza a ejecutar una subrutina (instrucción GOSUB) o cuando se produce una

interrupción, la dirección de la instrucción a ejecutar siguiente se inserta en la pila, es decir, una de sus

registros. Como resultado, el microcontrolador sabe desde donde continuar la ejecución del programa

regular cuando una subrutina o una interrupción de ejecución es completa. La dirección se borra después

de la vuelta al programa y un nivel de la pila es, pues, automáticamente disponible para su uso posterior.

Nótese que los datos siempre circularmente inserta en la pila. Esto significa que después de que la pila se

ha llevado ocho veces, el empuje noveno sobrescribe el valor que se almacena con el primer impulso. El

impulso décimo sobrescribe el empuje segundo y así sucesivamente. Los datos sobrescritos de esta

manera no es recuperable. Dado que el programador no puede acceder a estos registros para escribir o

leer y no hay ningún bit para indicar desbordamiento de pila o condición de desbordamiento, es necesario

prestar especial atención a que durante la escritura del programa.

Page 107: mikrobasic0

Vamos a hacerlo en mikroBasic ...

"Al entrar en una sección de código en ensamblador inserta en el

programa, el compilador

'Almacena los datos en el banco RAM actualmente activo. Esto

significa que en este programa

"La sección, la selección del banco depende de las SFR en uso.

Después del retorno al programa

'Sección escrita en mikroBasic, los bits de control seleccionar el

banco activo

(RP0 y RP1) debe devolver el estado que tenían antes del código de

la asamblea

saveBank = STATUS and %01100000 ' Save the state of bits RP0

and RP1

' (bits 5 and 6 of the STATUS register)

asm ' Start of assembly sequence

...

... ' Assembly code

...

end asm ' End of assembly sequence

STATUS = STATUS and %10011111 ' Bits RP0 and RP1 return their

original state

STATUS = STATUS or saveBank

...

...

Interrupción del sistema

Lo primero que debe hacerse por el microcontrolador, cuando llega una solicitud de interrupción, es la

ejecución de la instrucción en curso, a continuación, para detener la ejecución del programa regular. La

dirección del programa actual de la memoria automáticamente se inserta en la pila y la dirección por

defecto (predefinidos por el fabricante) se escribe en el contador de programa. El lugar desde donde el

programa continúa con la ejecución se llama un vector de interrupción. Para el microcontrolador

PIC16F887, la dirección es 0004h. Como se ve en la siguiente figura, el vector de interrupción se debe

omitir durante la ejecución del programa regular.

Una parte del programa que se ejecuta cuando una petición de interrupción llega se llama una rutina de

interrupción (que es una subrutina de hecho). La primera instrucción de la rutina de interrupción se

encuentra en el vector de interrupción. ¿Cuánto tiempo se tarda en ejecutar la subrutina y lo que será,

depende de las habilidades del programador, así como en la fuente de interrupción en sí. Algunos

microcontroladores tienen un par de vectores de interrupción (cada solicitud de interrupción tiene su

vector), mientras que esto sólo tiene un microcontrolador. Esta es la razón por la primera parte de cada

rutina de interrupción debe ser la detección de fuente de interrupción.Cuando la fuente de interrupción se

conoce y se ejecuta la rutina de interrupción, el microcontrolador alcanza la RETFIE instrucción, aparece

la dirección de la pila y permite continuar con la ejecución del programa desde donde lo dejó.

Page 108: mikrobasic0

MikroBasic reconoce una rutina de interrupción para ser ejecutado por medio de la palabra de

interrupción. La rutina de interrupción debe ser escrito por el usuario.

sub procedure interrupt ' Interrupt routine

cnt = cnt + 1 ; ' Interrupt causes variable cnt to be

incremented by 1

end sub

Cómo utilizar SFR

Si usted ha comprado el microcontrolador y tiene una gran idea de cómo hacer uso de ella ... Hay una

larga lista de SFR y sus bits. Cada uno de ellos controla un proceso dentro del

microcontrolador. Realmente se parece a una tabla de control grande con un montón de instrumentos e

interruptores. Ahora usted está preocupado acerca de si será capaz de aprender a usar a todos

ellos? Probablemente no, pero no se preocupe porque usted no tiene que hacerlo. Unos dispositivos muy

potentes, tales como microcontroladores son similares a los supermercados: ofrecen muchas cosas a

precios bajos y es hasta que usted pueda elegir lo que usted necesita. Por lo tanto, elegir la zona que más

le interesa y aprender sólo lo que tiene que hacerlo. Cuando usted consigue una plena comprensión del

funcionamiento del hardware, SFR de estudio que están en control de la misma (por lo general hay

algunos de ellos).

El rendimiento de todos los dispositivos se controla mediante un sistema de control apropiado y el

microcontrolador no es una excepción a la regla. Uno tiene que estar familiarizado con dichos sistemas

con el fin de ser capaz de utilizar los dispositivos adecuadamente. Por supuesto, estamos hablando de

SFR en toda la historia acerca de programación se inicia y termina.

3.2 SFR FUNDAMENTALES

El siguiente texto describe los principales SFR del microcontrolador PIC16F887. Sus bits de control de los

diferentes módulos dentro del chip y por lo tanto se describen junto con los procesos que están en control

de.

Page 109: mikrobasic0

STATUS Register

ESTADO Registrarse

El registro STATUS contiene el estado de la aritmética de los datos en el registro W, restablecer los bits

de estado y de selección de banco de la memoria de datos.

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

o 1 - Bancos 0 y 1 están activos (posiciones de memoria 00h-FFh), y

o 0 - Bancos 2 y 3 están activos (posiciones de memoria 100h-1FFh).

RP1, RP0 - Los bits se utilizan para seleccionar el banco en el registro de direccionamiento directo.

R P 1 R P 0 A C T I V O D E L B A N C O

0 0 Bank0

0 1 Bank1

1 0 BANK2

1 1 BANK3

A - Tiempo fuera poco. o 1 - Tras el encendido, la ejecución de la CLRWDT instrucción que restablece el temporizador perro

guardián o de la instrucción SLEEP que establece el microcontrolador en el modo de bajo consumo.

o 0 - Después de que el temporizador perro guardián de tiempo de espera.

PD - al apagar poco. o 1 - Después de encendido o la ejecución de la CLRWDT instrucción que restablece el temporizador

perro guardián.

o 0 - Después de la ejecución de la SLEEP instrucción que establece el microcontrolador en el modo

de bajo consumo.

Z - Zero bits o 1 - El resultado de una operación aritmética o lógica es cero.

o 0 - El resultado de una operación aritmética o lógica es diferente de cero.

DC - Dígito llevar / tomar prestado algo ha cambiado en la suma y resta, si un "desbordamiento" o "tomar prestado" del resultado se produce.

o 1 - A llevar a cabo, desde el cuarto bit de orden inferior del resultado se ha producido.

o 0 - No llevar a cabo, desde el cuarto bit de orden inferior del resultado se ha producido.

C - Carry / Borrow poco ha cambiado en la suma y resta, si un "desbordamiento" o "tomar prestado" del resultado se produce, es decir, si el resultado es mayor que 255 o inferior a 0.

o 1 - Un acarreo de salida desde el bit más significativo (MSB) del resultado se ha producido.

o 0 - n llevar a cabo, desde el bit más significativo (MSB) del resultado se ha producido.

Page 110: mikrobasic0

OPTION_REG Register

Leyenda: R / W - Legible / escritura de bits, (1) Después del reinicio, el bit se establece

El registro contiene varios bits OPTION_REG de control que se utilizan para configurar Timer0/WDT

prescaler, Timer0, la interrupción externa y pull-ups en PORTB.

RBPU - Puerto B Levante Bit de habilitación

o 1 - PORTB pull-ups están desactivados.

o 0 - PORTB pull-ups están habilitadas.

INTEDG - bits Edge Select interrupción

o 1 - Interrupción en flanco ascendente del pin RB0/INT.

o 0 - Interrumpir el flanco descendente del pasador RB0/INT.

Page 111: mikrobasic0

T0CS - TMR0 Clock Source Select bit.

o 1 - Transición en el pin T0CKI.

o 0 - Reloj interno ciclo de instrucción (Fosc / 4).

T0SE - TMR0 poco el borde de selección de fuente selecciona el pulso de

borde (ascendente o descendente) contados por el Timer0 por el pin

RA4/T0CKI.

o 1 - Incremento de alta a baja transición en el pin TOCKI.

o 0 - Incremento de alta a baja transición en el pin TOCKI.

PSA - poco Prescaler asignación asigna el prescaler (sólo uno está

disponible) para el temporizador temporizador o de vigilancia.

o 1 - Prescaler se asigna al WDT.

o 0 - Prescaler se asigna al Timer0.

Page 112: mikrobasic0

PS2, PS1, PS0 precontador Tasa de bits de selección de

Una tasa de pre-escalador se selecciona mediante la combinación de estos bits. Como se muestra en la

siguiente tabla, la tasa de pre-escalador depende de si se le asigna al temporizador Timer0 o reloj perro-

(WDT).

P S 2 P S 1 P S 0 T M R 0 W D T

0 0 0 01:02 01:01

0 0 1 01:04 01:02

0 1 0 01:08 01:04

0 1 1 01:16 01:08

1 0 1 1:64 01:32

1 1 0 1:128 1:64

1 1 1 1:256 1:128

A fin de lograr 01:01 tasa precontador cuando los recuentos de hasta Timer0 impulsos, el pre-escalador

debe ser asignado al WDT.Como resultado, el Timer0 no utiliza el pre-escalador, pero directamente

cuenta impulsos generados por el oscilador, que en realidad era el objetivo.

Let's do it in mikroBasic...

' If the CLRWDT command is not executed, WDT will reset the

microcontroller every 32.768 uS

' (f=4 MHz)

OPTION_REG = %00001111 ' Prescaler is assigned to WDT (1:128)

asm

CLRWDT ' Assembly command to reset WDT

end asm

... ' Time between these two CLRWDT commands must not exceed

32.768 microseconds (128x256)

CLRWDT ' Assembly command to reset WDT

...

... ' Time between these two CLRWDT commands must not exceed

32.768 microseconds (128x256)

CLRWDT ' Assembly command to reset WDT

...

Page 113: mikrobasic0

INTERRUPCIÓN DEL SISTEMA DE REGISTROS

A la recepción de una solicitud de interrupción no significa que automáticamente se producirá, ya que

también debe ser habilitada por el usuario (desde el programa). Por esta razón, hay bits especiales que

se utilizan para habilitar o deshabilitar las interrupciones. Es fácil reconocerlos por las letras IE (las siglas

de habilitación de interrupción) que figuran en sus nombres. Además, cada interrupción se asocia con otro

bit llamado una bandera que indica que una petición de interrupción ha llegado independientemente de si

está activado o no. Del mismo modo, sus nombres son seguidos por IF (bandera de interrupción).

Como puedes ver, todo se basa en un principio simple y eficaz. Cuando llega una solicitud de

interrupción, el bit de bandera se estableció por primera vez. Si el bit es decir, adecuada no se ha

establecido (0), la condición de interrupción será completamente ignorado. De lo contrario, se produce

una interrupción. Si varias fuentes de interrupción están habilitadas, es necesario detectar la una activa

antes de una rutina de interrupción comienza la ejecución. Fuente de detección se realiza mediante la

comprobación bits de la bandera.

Es importante saber que bits de la bandera no se borran automáticamente, pero por software, mientras

que la ejecución de la rutina de interrupción está en marcha. Si descuidamos este detalle, otra

interrupción se producirá inmediatamente después de regresar al programa principal, a pesar de que hay

solicitudes no más para su ejecución. En pocas palabras, la bandera, así como el bit de IE, siendo

establecido.

Todas las fuentes de interrupción típicos del microcontrolador PIC16F887 se muestran en la página

siguiente. Tenga en cuenta varias cosas:

El bit GIE habilita todas las interrupciones no enmascaradas y deshabilita todas las interrupciones de

forma simultánea.

El bit PEIE permite todas las interrupciones periféricas no enmascaradas y deshabilita todas las

interrupciones periféricas. Esto no se refiere al Timer0 y el PORTB fuentes de interrupción.

Para permitir que se produzca una interrupción al cambiar el estado lógico PORTB, es necesario que le

permita para cada bit por separado. En este caso, los bits del acto IOCB registro como bits de control de

IE.

Page 114: mikrobasic0

Registro INTCON

El registro INTCON incluye habilitar varias y trozos de la bandera de desbordamiento del registro TMR0,

cambio de PORTB y las interrupciones externas pin INT.

Leyenda: R / W - Legible / escritura de bits, (0) Después de reiniciar, se restablece, (X) Después del

reinicio, poco se sabe

GIE - Global Interrupt Enable bit - controla todas las fuentes posibles de interrupción al mismo tiempo.

o 1 - Todas las interrupciones no enmascaradas habilitado.

o 0 - Todas las interrupciones deshabilitadas.

PEIE - Interrupción periférico, permiten poco funciona de manera similar al bit GIE, pero controla las interrupciones habilitadas por los módulos periféricos. Por lo tanto, no tiene impacto en las interrupciones provocadas por Timer0 o al cambiar el estado del puerto PORTB o RB0/INT alfiler.

o 1 - Todas las interrupciones periféricas no enmascaradas habilitado.

o 0 - Todas las interrupciones de periféricos inhabilitado.

T0IE - TMR0 Overflow Interrupt Enable controles bits interrupciones provocadas por el desbordamiento de TMR0.

o 1 - TMR0 desbordamiento interrumpir habilitado.

o 0 - TMR0 desbordamiento de interrupción deshabilitado.

INTE - Interrupción RB0/INT externa Activa los controles bit de interrupción causada por cambiar el estado lógico de la patilla de entrada RB0/INT (interrupción externa).

o 1 - interrupción externa INT habilitado.

Page 115: mikrobasic0

o 0 - interrupción externa INT inhabilitado.

RBIE - RB Cambio Puerto habilitación de interrupción bits. Cuando se configura como entradas, los pins PORTB puede provocar una interrupción al cambiar su estado lógico (no importa si es alto-a-bajo transición o viceversa, el hecho de que su estado lógico se cambia únicamente asuntos). El bit RBIE determina si una interrupción es que se produzca o no.

o 1 - cambio de PORTB interrumpir habilitado.

o 0 - interrupción cambio PORTB desactivado.

T0IF - TMR0 interrupción de desbordamiento del bit indicador registra el desbordamiento del Timer0 registro, cuando el conteo comienza en cero.

o 1 - TMR0 se ha desbordado registro (bit debe ser limpiado desde el software).

o 0 - TMR0 registro no se ha desbordado.

INTF - RB0/INT bits externa bandera de interrupción registra el cambio del estado de la lógica RB0/INT pin.

o 1 - interrupción externa INT ha ocurrido (debe ser limpiado desde el software).

o 0 - interrupción externa INT no ha ocurrido.

RBIF - RB Cambio Puerto bits bandera de interrupción registra cualquier cambio del estado lógico de algunos pines de entrada PORTB.

o 1 - Al menos uno de los fines generales PORTB pines I / O ha cambiado su estado lógico. Después de puerto PORTB lectura es completa, el bit RBIF debe ser limpiado desde el software.

o 0 - Ninguno de los efectos PORTB general de pines I / O ha cambiado su estado lógico.

Let's do it in mikroBasic...

' The PORTB.4 pin is configured as an input sensitive to logic

state change

ANSEL, ANSELH = 0 ' All I/O pins are configured as digital

PORTB = 0 ' All PORTB pins are cleared

TRISB = %00010000 ' All PORTB pins except PORTB.4 are

configured as outputs

INTCON.RBIE = 1 ' Interrupts on PORTB change are enabled

IOCB.IOCB4 = 1 ' Interrupt on PORTB pin4 change is enabled

INTCON.GIE = 1 ' Global interrupt is enabled

...

...

'From this point, any change of the PORTB.4 pin logic state

will cause an interrupt

Page 116: mikrobasic0

PIE1 Registro

El registro contiene PIE1 interrupción periférica bits de habilitación.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Después de reiniciar, se

restablece

ADIE - Un convertidor A / D habilitación de interrupción bits. o 1 - interrupción ADC habilitado.

o 0 - ADC interrupción deshabilitada.

RCIE - EUSART Recibe habilitación de interrupción bits. o 1 - Habilita la interrupción de recepción EUSART.

o 0 - Deshabilita la interrupción de recepción EUSART.

TXIE - EUSART interrupción de la transmisión Bit de habilitación. o 1 - EUSART recibir interrumpir habilitado.

o 0 - EUSART interrupción de recepción desactivado.

SSPIE - Maestro del puerto en serie síncrona (MSSP) habilitación de interrupción bits - permite a una solicitud de interrupción que se genera cada vez que una transferencia de datos a través del módulo de comunicación síncrona en serie (SPI o el modo I2C) se ha completado.

o 1 - interrupción del MSSP habilitado.

o 0 - interrupción del MSSP desactivado.

CCP1IE - CCP1 habilitación de interrupción bits permite una petición de interrupción que se genera en CCP1 módulo utilizado para el procesamiento de señal PWM.

o 1 - CCP1 interrupción habilitada.

o 0 - CCP1 interrupción deshabilitada.

TMR2IE - TMR2 a PR2 interrupción del partido Bit de habilitación o 1 - TMR2 a PR2 interrupción partido habilitado.

o 0 - TMR2 a PR2 interrupción partido desactivado.

TMR1IE - TMR1 interrupción de desbordamiento Habilitar bits permite una petición de interrupción que se genera en cada registro de desbordamiento del temporizador TMR1, es decir, cuando el recuento se inicia desde cero.

o 1 - TMR1 desbordamiento interrumpir habilitado.

o 0 - TMR1 desbordamiento de interrupción deshabilitado.

Let's do it in mikroBasic...

'Each Timer1 register (TMR1H and TMR1L) overflow causes an

interrupt to occur. In every

'interrupt rutine, variable cnt will be incremented by 1.

dim unsigned short cnt ' Define variable cnt

sub procedure interrupt

cnt = cnt + 1 ' Interrupt causes cnt to

be incremented by 1

PIR1.TMR1IF = 0 ' Reset bit TMR1IF

TMR1H = 0x80 ' TMR1H and TMR1L timer

registers return

TMR1L = 0x00 ' their initial values

end sub

main:

ANSEL, ANSELH = 0 ' All I/O pins are

configured as digital

T1CON = 1 ' Turn on Timer1

PIR1.TMR1IF = 0 ' Reset the TMR1IF bit

Page 117: mikrobasic0

TMR1H = 0x80 ' Set initial value for

Timer1

TMR1L = 0x00

PIE1.TMR1IE = 1 ' Enable an interrupt on

overflow

cnt = 0 ' Reset variable cnt

INTCON = 0xC0 ' Enable interrupt (bits

GIE and PEIE)

...

PIE2 Registro

El registro PIE2 también contiene varios bits de habilitación de interrupción.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Después de reiniciar, se

restablece

OSFIE - Oscilador Fail Interrupt Enable bit. o 1 - fallo oscilador interrumpir habilitado.

o 0 - fallo del oscilador interrupción deshabilitada.

C2IE - Comparador C2 habilitación de interrupción bits. o 1 - comparador C2 interrupción habilitada.

o 0 - Comparador C2 interrupción deshabilitada.

C1IE - comparador C1 habilitación de interrupción bits. o 1 - comparador C1 interrumpir habilitado.

o 0 - comparador C1 interrupción deshabilitada.

EEIE - escritura de EEPROM interrumpir la operación Habilitar poco. o 1 - EEPROM operación de escritura interrumpir habilitado.

o 0 - EEPROM operación de escritura interrupción deshabilitada.

BCLIE - Interrupción del bus de colisión Bit de habilitación. o 1 - interrupción colisión de bus habilitado.

o 0 - interrupción de colisión de bus desactivado.

ULPWUIE - Ultra Low-Power despertador habilitación de interrupción bits. o 1 - Ultra bajo consumo de energía llamada de interrupción habilitada.

o 0 - Ultra bajo consumo de energía llamada de interrupción deshabilitado.

CCP2IE - CCP2 Interrupt Enable bit. o 1 - CCP2 interrupción habilitada.

o 0 - CCP2 interrupción deshabilitada.

Let's do it in mikroBasic...

' Comparator C2 is configured to use pins RA0 and RA2 as

inputs. Every change on

' the comparator's output will cause the PORTB.1 output pin to

change its logic

' state in interrupt routine.

sub procedure interrupt

PORTB.F1 = not PORTB.F1 ' Interrupt will invert logic state of

the PORTB.1 pin

Page 118: mikrobasic0

PIR2.C2IF = 0 ' Interrupt flag bit C2IF is cleared

end sub

main:

TRISB = 0 ' All PORTB pins are configured as

outputs

PORTB.1 = 1 ' Pin PORTB.1 is set

ANSEL = %00000101 ' RA0/C12IN0- and RA2/C2IN+ pins are

analog inputs

ANSELH = 0 ' All other I/O pins are configured as

digital

CM2CON0.C2CH0 = 0 ' The RA0 pin is selected to be C2

inverting input

CM2CON0.C2CH1 = 0

PIE2.C2IE = 1 ' Enables comparator C2 interrupt

INTCON.GIE = 1 ' Global interrupt is enabled

CM2CON0.C2ON = 1 ' Comparator C2 is enabled

...

...

PIR1 Registrarse

El registro PIR1 contiene los bits de la bandera de interrupción.

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

Después de reiniciar, se restablece

ADIF - convertidor A / D de interrupción bit de bandera. o 1 - la conversión A / D se ha completado (el bit debe ser limpiado desde el software).

o 0 - la conversión A / D no se ha completado o no ha comenzado.

RCIF - EUSART Recibe bits bandera de interrupción. o 1 - EUSART búfer de recepción está lleno. El bit se borra leyendo el registro RCREG.

o 0 - EUSART buffer de recepción no está lleno.

TXIF - EUSART de transmisión poco bandera de interrupción. o 1 - búfer EUSART de transmisión está vacía. El bit se borra en cualquier escritura en el registro

TXREG.

o 0 - EUSART búfer de transmisión está llena.

SSPIF - Master Synchronous Serial Port (MSSP) bit bandera de interrupción. o 1 - Todas las condiciones de interrupción durante el MSSP de datos de transmisión / recepción que

se cumplan. Ellos varían en función del modo de operación MSSP (SPI o I2C). Este bit debe ser limpiado desde el software antes de salir de la rutina de servicio de interrupción.

o 0 - No hay condición de interrupción MSSP se reunió.

CCP1IF - CCP1 bits bandera de interrupción. o 1 - CCP1 condición de interrupción se cumple (CCP1 es una unidad para captar, comparar y

generar una señal PWM). Modo de operación indica si la captura o comparar partido se ha producido. En ambos casos, el bit debe ser limpiado desde el software. Este bit no se utiliza en modo PWM.

o 0 - No hay condición de interrupción CCP1 se reunió.

TMR2IF - Timer2 al PR2 bit bandera de interrupción o 1 - TMR2 (8-bit del registro) a PR2 partido se ha producido. Este bit debe ser limpiado desde el

software antes de salir de la rutina de servicio de interrupción.

o 0 - No a la PR2 TMR2 partido se ha producido.

TMR1IF - Timer1 desbordamiento del bit de bandera de interrupción o 1 - registro TMR1 se ha desbordado. El bit debe ser limpiado desde el software.

o 0 - TMR1 registro no se ha desbordado.

Page 119: mikrobasic0

PIR2 Registrarse

El registro contiene los bits de interrupción PIR2 bandera.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Después de reiniciar, se

restablece

OSFIF - Oscilador Fail bits bandera de interrupción. o 1 - oscilador de cuarzo fallado y entrada de reloj se ha convertido en INTOSC oscilador

interno. Este bit debe ser limpiado desde el software.

o 0 - oscilador de cuarzo funciona con normalidad.

C2IF - Comparador de bits C2 bandera de interrupción. o 1 - salida del comparador C2 ha cambiado (C2OUT bits). Este bit debe ser limpiado desde el

software.

o 0 - comparador la salida C2 no ha cambiado.

C1IF - Comparador de bits C1 bandera de interrupción. o 1 - Salida del comparador C1 ha cambiado (C1OUT bits). Este bit debe ser limpiado desde el

software.

o 0 - Salida del comparador C1 no ha cambiado.

EEIF - EE Escribir bits, bandera de interrupción. o 1 - EEPROM escritura completa. Este bit debe ser limpiado desde el software.

o 0 - EEPROM de escritura no es completa o no ha empezado todavía.

BCLIF - bit de bus de colisión bandera de interrupción. o 1 - Una colisión de autobuses se ha producido en el MSSP cuando se establece para operar en

modo maestro I2C. Este bit debe ser limpiado desde el software.

o 0 - No hay colisión del autobús se ha producido.

ULPWUIF - Ultra bajo consumo bits de interrupción de despertador Bandera. o 1 - Wake-up condición se ha producido. Este bit debe ser limpiado desde el software.

o 0 - Ninguna condición para despertar ha ocurrido.

CCP2IF - CCP2 bits bandera de interrupción. o 1 - CCP2 condición de interrupción se cumple (unidad de captura, comparación y generación de

señal PWM). Modo de operación indica si la captura o comparar partido se ha producido. En ambos casos, el bit debe ser limpiado desde el software. Este bit no se utiliza en modo PWM.

o 0 - No hay condición de interrupción CCP2 se reunió

Let's do it in mikroBasic...

' Module ULPWU activation sequence

main:

PORTA.0 = 1 ' PORTA.0 pin is set

ANSEL,ANSELH = 0 ' All I/O pins are configured as digital

TRISA = 0 ' PORTA pins are configured as outputs

Delay_ms(1) ' Charge capacitor

PIR2.ULPWUIF = 0 ' Clear flag

PCON.ULPWUE = 1 ' Enable ULP Wake-up

TRISA.0 = 1 ' PORTA.0 is configured as an input

PIE2.ULPWUIE = 1 ' Enable interrupt

INTCON.GIE = 1 ' Enable all unmasked interrupts

INTCON.PEIE = 1 ' Enable peripheral interrupt

asm ' Asm instruction

SLEEP ' Go to sleep mode

...

Page 120: mikrobasic0

PCON registro

El registro PCON contiene solamente dos bits de la bandera se utilizan para diferenciar entre el poder-al

momento del reinicio, brown-out reset, restablecimiento del temporizador watchdog y reset externo en el

pin MCLR.

Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (1) - Después del reinicio,

se establece el bit (0) Después de reiniciar, se restablece

ULPWUE - Ultra Low-Power despertador Bit de habilitación o 1 - Ultra bajo consumo de energía llamada de JavaScript.

o 0 - Ultra bajo consumo de energía para despertar desactivado.

SBOREN - Software BOR Bit de habilitación o 1 - Brown-out restablecer habilitado.

o 0 - Brown-out restablecer desactivado.

POR - Power-on poco Restablecer estado o 1 - No hay poder sobre la reposición se ha producido.

o 0 - Power-on reset se ha producido. Este bit se debe establecer desde el software después de un reinicio de encendido se produce.

BOR - Brown-out poco Restablecer estado o 1 - No hay reset brown-out se ha producido.

o 0 - Brown-out reset ocurrido. Este bit se debe establecer desde el software después de un reset brown-out ocurre.

PCL y PCLATH REGISTROS

El tamaño de la memoria de programa PIC16F887 es de 8K y proporciona 8192 lugares para almacenar

el programa. En consecuencia, el contador de programa (PC) debe ser de 13 bits de ancho (213 =

8192). Para el microcontrolador para acceder a algún lugar de memoria de programa durante la

operación, su dirección debe estar disponible a través de SFR. Puesto que todos los SFR son de 8-bits de

ancho, el contador de programa se crea mediante la combinación de dos registros individuales. El byte

bajo (8 bits) del contador de programa ocupa el registro PCL, mientras que el byte alto (5 bits) ocupa el

registro PCLATH. Si la ejecución del programa no afecta el contador de programa, el valor de este

registro (PCL y PCLATH) es automáticamente y se incrementa constantemente +1, +1, +1, uno ...De esta

manera, el programa se ejecuta como es writteninstruction por la instrucción, seguido por incremento de

dirección constante. Si el contador de programa se cambia desde dentro del software, entonces usted

debe tener cuidado de lo siguiente:

Si el contador de programa se cambia desde dentro del software, entonces hay varias cosas que se

deben tener en cuenta a fin de evitar problemas:

Ocho bits inferiores del registro PCL (el byte bajo) son a la vez de lectura y escritura, mientras que los cinco bits superiores del registro PCLATH son de sólo escritura.

El registro PC se borra en cualquier reinicio.

Page 121: mikrobasic0

En lenguaje ensamblador, el valor del contador de programa está marcado como PCL y se refiere a 8 bits inferiores solamente. Tenga cuidado al utilizar la instrucción del 'ADDWF PCL' asamblea. Esta es una instrucción de salto, el destino de los cuales se determina mediante la adición de algunos núm ero a la dirección actual. Es comúnmente usado para saltar en una tabla de búsqueda o de la mesa pro g rama de leerlos. Un problema surge si dicha adición hace que el registro PCLATH que ser modificados. La ejecución de cualquier instrucción sobre el registro simultáneamente PCL ously hace que los bits del contador de programa para ser reemplazada por el contenido de ambas PCLATH y PCL registro. Sin embargo, el registro PCL tiene acceso a 8 bits inferiores de la instrucción resultado solamente de modo que el salto siguiente será incorrecta. El problema se resuelve mediante el establecimiento de tales instrucciones a las direcciones de programa que terminan por xx00h. Esto permite que el programa salte hasta 255 lugares. Si los saltos más largos son ejecutados por esta instrucción, el registro PCLATH debe ser incrementado en 1 por cada desbordamiento de registro PCL.

En una llamada a subrutina o salto de ejecución (instrucciones de

montaje CALL y GOTO ), el microcontrolador es capaz de proporcionar 11-bit de

dirección única. Similar a la RAM, que se divide en 'bancos', la ROM se divide en cuatro 'páginas' de 2K cada uno. Dichas instrucciones se ejecutan correctamente dentro de estos límites. En pocas palabras, ya que las ofertas de procesador con la dirección de 11 bits, es capaz de hacer frente a cualquier lugar dentro de 2 KB.

La figura siguiente ilustra un salto a la subrutina PP1. Pero si el inicio de la dirección de subrutina o salto

no está dentro de la misma página que el destino de la llamada, dos 'desaparecidos' bits superiores

deben ser proporcionados por la realización de la operación de escritura en el registro PCLATH. La figura

siguiente ilustra un salto a la subrutina PP2.

En ambos casos, cuando la subrutina llega a algunas de las instrucciones de la asamblea

siguiente RETURN , RETLW o RETFIE (volver al programa principal), el microcontrolador sólo se

Page 122: mikrobasic0

procederá a la ejecución del programa desde donde lo dejó, porque la dirección de retorno se inserta en

la pila que, como se mencionó antes, se compone de registros 13-bits.

Direccionamiento indirecto

Además de direccionamiento directo, lo cual es lógico y evidente (que va a hacer para especificar la

dirección de un registro para leer su contenido), este microcontrolador es capaz de realizar el

direccionamiento indirecto por medio de la INDF y los registros de ISA. A veces hace que el proceso de

escribir un programa más fácil. Todo el procedimiento se habilita el registro INDF que no es un único y

verdadero (que no existe físicamente). Se utiliza para especificar el registro de la dirección de la que se

almacena en el registro FSR. Como resultado, escribir o leer del registro INDF significa realmente escribir

o leer desde el registro de la dirección de la que se almacena en el registro FSR. En otras palabras, las

direcciones de los registros se almacenan en el registro FSR, mientras que sus contenidos se almacenan

en el registro INDF. La figura siguiente ilustra la diferencia entre el direccionamiento directo e indirecto.

Como puede verse, la emisión de los bits de direccionamiento de los desaparecidos se resuelve mediante

un "tomar prestado" de otro registro. Esta vez, es el séptimo bit, denominado bit PIR, del registro de

estado.

3.3 Entrada / Salida

Una de las ventajas más importantes del microcontrolador es un número de entrada / salida en los pins

que le permiten ser conectados a los módulos periféricos. Hay un total de 35 de propósito general pines I /

O previstas en el PIC16F887, que es más que suficiente para la mayoría de las aplicaciones.

Page 123: mikrobasic0

Con el fin de sincronizar el funcionamiento de puertos E / S con el interior de 8-bits organización del

microcontrolador, son, de forma similar a los registros, agrupados en cinco puertos denotados por letras

A, B, C, D y E. Todo E / S puertos tienen varias características en común:

Para ahorrar más espacio en el tablero, todos los pines de E / S son multifuncionales. Sin embargo, sólo se puede asignar una función al mismo tiempo.

Cada puerto está acompañado por el correspondiente registro TRIS: TRISA, TRISB, etc TRISC que determina el rendimiento, pero no el contenido de los bits del puerto. En la limpieza de cualquier bit del registro TRIS (bit = 0), el pasador correspondiente puerto está configurado como una salida. De manera similar, mediante el establecimiento de cualquier bit del registro TRIS (bit = 1), el pasador correspondiente puerto está configurado como una entrada. Esta regla es fácil de recordar 0 = Salida, 1 = Entrada.

PORTA y registro TRISA

PORTA es un puerto de 8 bits de ancho, puerto bidireccional. Los bits del registro TRISA controlar los

pins PORTA, es decir, si van a actuar como entradas o salidas digitales:

Page 124: mikrobasic0

Al igual que los bits del registro TRISA que determinan cuál de los pines se configuran como entradas y

cuáles como salidas, los bits correspondientes del registro ANSEL determinar si los pines PORTA se

configuran como entradas analógicas o entradas y salidas digitales.

RA0 = AN0 (determinado por el bit ANS0 del registro ANSEL)

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

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

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

RA5 = AN4 (determinado por el bit ANS4 del registro ANSEL)

Cada bit de este puerto se le asigna una función adicional relacionada con algunos de los módulos

integrados en la periferia. Este capítulo cubre sólo la función adicional del pasador RA0, que está

relacionado con la unidad PORTA y ULPWU, mientras que la función adicional de otros pines se

describirá en capítulos posteriores.

Vamos a hacerlo en mikroBasic ...

' The PORTA.2 pin is configured as a digital input. All other

PORTA pins are digital ... outputs

ANSEL = ANSELH = 0 ' All I/O pins are configured as digital

PORTA = 0 ' All PORTA pins are cleared

TRISA = %00000100 ' All PORTA pins except PORTA.2 are

configured as outputs

...

ULPWU UNIDAD

El microcontrolador se utiliza comúnmente en dispositivos independientes accionados batería que operan

de forma periódica. Ejemplos típicos son termómetros, sensores de detección de incendios y similares. El

consumo de energía mínima es una de las prioridades aquí. Como una reducción de la frecuencia de reloj

hace que el consumo de energía se reduce, una de las soluciones más convenientes para este problema

es reducir la velocidad del reloj, es decir, utilizar cristal de cuarzo 32 KHz en lugar de 20MHz.

Page 125: mikrobasic0

Configuración del microcontrolador en modo de suspensión es un paso más en la misma

dirección.Aquí llegamos a otro tema - como para despertar el microcontrolador y la puso a

modo normal?Obviamente, es necesario proporcionar algún modo una señal externa para

cambiar el estado lógico de algunos pasador. La única manera de hacerlo es por medio de

dispositivos electrónicos adicionales, que por otra parte hace que aumente el consumo de

energía de todo el dispositivo ...

La solución ideal sería que el microcontrolador puede despertarse periódicamente por sí

mismo. El circuito que hace posible que se muestra en la figura a la izquierda.

Así es como funciona este circuito:

Un pasador se configura como una salida y un uno lógico (1) es llevado a la misma. Esto hace que el

condensador se cargará.Inmediatamente después de esto, el mismo pin está configurado como una

entrada. El cambio de estado lógico causará una interrupción y el microcontrolador entrará en el modo de

suspensión. Todo lo que queda ahora es esperar a que el condensador que se descarga por la corriente

de fuga que fluye a través de la clavija de entrada. Después de que una interrupción se lleva a cabo y el

producto del microcontrolador con la ejecución del programa en el modo normal. Todo el procedimiento se

repite periódicamente.

Teóricamente, esta es una solución perfecta. El problema es que todos los pasadores capaces

de provocar una interrupción de esta manera son digitales y tienen corriente de fuga

relativamente alto cuando su tensión no está cerca de los límites de Vdd (1) o Vss (0). En este

caso, el condensador se descarga por un corto período de tiempo dado que las cantidades

actuales a varios cientos de microamperios. Esta es la razón por un bajo consumo de ULPWU

circuito, capaz de registrar caídas lentas de tensión, se ha diseñado.Su salida genera una

interrupción, mientras que su entrada está conectada a la patilla RA0 en el

microcontrolador. Refiérase a la figura de la izquierda, R = 200 ohms, C = 1 nF, el tiempo de

descarga es aproximadamente 30mS, mientras que un consumo total de energía del

microcontrolador es 1000 veces menor (varios cientos de nanoamperios).

Page 126: mikrobasic0

PORTB y TRISB registra

Puerto PORTB es un niño de 8 bits de ancho, el puerto bidireccional. Los bits del registro TRISB

determinar la función de sus patas.

Al igual que en el puerto PORTA, un uno lógico (1) en el bit TRISB registro configura el puerto apropiado

pines PORTB como entrada y viceversa. Seis terminales de este puerto puede actuar como entradas

analógicas (AN). Los bits del registro ANSELH determinar si estos pines se configuran como entradas

analógicas o entradas y salidas digitales:

RB0 = AN12 (determinado por el bit del registro ANS12 ANSELH)

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

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

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

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

RB5 = AN13 (determinado por el bit del registro ANS13 ANSELH)

Cada pin del puerto PORTB se le asigna una función adicional relacionada con algunos de los

incorporados en los módulos periféricos, que se explicarán más adelante.

Las siguientes características hacen de este diffierent puerto desde otros puertos, por lo tanto, sus patas

son de uso general:

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

Page 127: mikrobasic0

Tener una alta resistencia (varias decenas de kiloohmios), estas resistencias 'virtuales' no afectan pines

configurados como salidas, pero sirven como un complemento útil cuando actúan como insumos. De lo

contrario, sin estas resistencias unidos los pines de entrada actuaría como coma flotante debido a su alta

resistencia de entrada.

* Aparte de los bits del registro WPUB, hay otro poco afecta a la instalación de todas las resistencias de

pull-up. Es el bit del registro RBPU OPTION_REG.

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

Page 128: mikrobasic0

Debido a estas características, los pines del puerto PORTB se utilizan comúnmente para el control de

botones en el teclado, ya que son capaces de registrar infaliblemente ningún tipo de presión botón. No

hay necesidad de 'escanear' estas entradas todo el tiempo, por lo tanto. Cuando los ejes X, Y y Z en los

pins están configurados como salidas fijados a uno lógico (1), sólo es necesario esperar a una petición de

interrupción para llegar después de presionar un botón. Mediante la combinación de ceros y unos de

estos resultados se comprueba que se presiona el pulsador. Refiérase a la figura a continuación:

Vamos a hacerlo en mikroBasic ...

'The PORTB.1 pin is configured as a digital input. Any change

of its logic state will cause

'an interrupt. It also has a pull-up resistor. All other PORTB

pins are digital ... outputs.

ANSEL, ANSELH = 0 ' All I/O pins are configured as digital

PORTB = 0 ' All PORTB pins are cleared

TRISB = %00000010 ' All PORTB pins except PORTB.1 are

configured as outputs

Page 129: mikrobasic0

OPTION_REG.RBPU = 0 ' Pull-up resistors are enabled

WPUB.1 = 1 ' Pull-up resistor is connected to the

PORTB.1 pin

IOCB.1 = 1 ' The PORTB.1 pin may cause an interrupt on

logic state change

INTCON.RBIE = 1 ' Interrupt on PORTB change is enabled

INTCON.GIE = 1 ' All unmasked interrupts are enabled

...

PIN RB0/INT

El pasador RB0/INT es la única "verdadera" fuente de interrupción externa. Puede ser configurado para

responder a la señal borde elevar (cero a uno de transición) o el borde de la señal descendente (de uno a

cero de transición). El bit del registro INTEDG OPTION_REG se utiliza como un selector de señal.

RB6 y RB7 PINS

El PIC16F887 no está provisto de pasadores especiales para la programación. En su lugar, esta función

está asignada a pines I / O.Como una cuestión de hecho, los pines del puerto PORTB se utilizan para el

reloj (RB6) y la transferencia de datos (RB7) durante la programación. Además, es necesario para

proporcionar la tensión de alimentación Vdd (5V), así como la adecuada tensión Vpp (12-14V) para la

programación de la memoria FLASH. El pin MCLR se utiliza para este propósito. Usted no tiene que

pensar en todos estos detalles, ni que una de estas tensiones es que se aplicó por primera vez ya que el

programador se encarga de eso. Se permite que el programa para ser cargado en el microcontrolador

incluso cuando se suelda en el dispositivo de destino. El programa cargado normalmente se pueden

modificar de la misma manera. Este proceso se denomina ICSP (programación In-Circuit Serial). A fin de

que las ventajas de esta opción, es necesario planificar con anticipación.

Esto significa que es necesario para instalar una miniatura 5-pin en el dispositivo de destino a fin de

permitir el microcontrolador que se proporcionan con voltajes de programación necesarios. Con el fin de

evitar estos voltajes de interferir con el funcionamiento de otros módulos conectados a los pines del

microcontrolador, es necesario para aislarlos de la placa durante el proceso de programación utilizando

resistencias o puentes.

Page 130: mikrobasic0

Como se puede ver, los voltajes aplicados a los pasadores en el zócalo del programador son los mismos

que los utilizados durante la programación ICSP

PORTC y registro TRISC

Puerto PORTC es un niño de 8 bits de ancho, el puerto bidireccional. Los bits del registro TRISC

determinar la función de sus patas. Al igual que en otros puertos, un uno lógico (1) aplicada al registro

TRISC configura el puerto correspondiente pin PORTC como entrada.

Page 131: mikrobasic0

Todas las funciones adicionales de los bits del puerto PORTC se describirá más adelante.

PORTD y registro TRISD

Puerto PORTD es un niño de 8 bits de ancho, el puerto bidireccional. Los bits del registro TRISD

determinar la función de sus patas. Un uno lógico (1) aplicada al registro TRISD configura el pin del puerto

PORTD apropiado como una entrada.

PORTE y registro TRISE

Puerto PORTE es un puerto de 4 bits de ancho, bidireccional.

Los bits del registro TRISE de determinar la función de sus patas. Similar a otros puertos, un uno lógico

(1) aplicada al registro TRISE configura el pin del puerto PORTE apropiado como una entrada.

La excepción es el pin RE3 que siempre se configura como una entrada.

Page 132: mikrobasic0

Al igual que en los puertos PORTA y PORTB, tres pines pueden ser configurados como entradas

analógicas, en este caso. Los bits de Ansel registro de determinar si un alfiler actuará como una entrada

analógica (AN) o una entrada / salida digital:

RE0 = AN5 (determinado por el bit ANS5 del registro ANSEL);

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

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

Let's do it in mikroBasic...

' The PORTE.0 pin is configured as an analog input while

another three pins of the same

' p.o.r.t are configured as digital.

ANSEL = %00100000 ' The PORTE.0 pin is configured as analog

ANSELH = 0 ' All other I/O pins are configured as

digital

TRISE = %00000001 ' All PORTE pins except PORTE.0 are

configured as outputs

PORTE = 0 ' All PORTE pins are cleared

...

Y el registro ANSEL ANSELH

Los registros de Ansel y ANSELH se utilizan para configurar el modo de entrada de un pin de E / S como

analógico o digital.

Page 133: mikrobasic0

La regla a seguir dice lo siguiente:

Para configurar un pin como una entrada analógica, el bit apropiado de los registros o Ansel ANSELH se

debe establecer (1). Para configurar un pin como una entrada / salida digital, el bit apropiado debe ser

cero (0).

El estado de los bits de Ansel registro no afecta a las funciones de salida digital. El resultado de cualquier

intento de leer un pin del puerto se configura como una entrada analógica será 0.

En Corto

Es probable que nunca escribir un programa que no utiliza los puertos, por lo que el esfuerzo que hacen

para aprender todo acerca de ellos sin duda valdrá la pena. También, que parecen ser los más simples

módulos dentro del microcontrolador. Esta es la forma en que se utilizan:

Al diseñar un dispositivo, seleccionar un puerto para ser utilizado por el microcontrolador para la comunicación con los módulos periféricos. Si se utilizan sólo las entradas y salidas digitales, seleccione cualquier puerto que desee. Si va a utilizar

Page 134: mikrobasic0

algunas de las entradas analógicas, seleccione los puertos apropiados de apoyo de configuración de este tipo (AN0-AN13).

Cada pin del puerto puede configurarse como una entrada o una salida. Los bits del TRISA, TRISB, TRISC, TRISD y registros TRISE determinar cómo los terminales de los siguientes puertos PORTA, PORTB, PORTC, PORTD y PORTE va a actuar. Tan simple como eso.

Si utiliza alguna de las entradas analógicas, en primer lugar es necesario establecer los bits correspondientes de la ANSEL y registros ANSELH al comienzo del programa.

Si utiliza conmutadores y los botones como fuente de entrada de la señal, se recomienda conectarse a dispositivos a los pines del puerto PORTB porque tienen resistencias pull-up conectadas. El uso de estas resistencias está habilitado por el bit del registro RBPU OPTION_REG, mientras que las resistencias individuales están habilitadas por los bits del registro WPUB.

Generalmente es necesario para responder tan pronto como los pines de entrada cambia su estado lógico. Esto no significa que usted tiene que escribir un programa para comprobar el estado de los pins de la lógica de todo el tiempo.Sólo tienes que conectar a los pines PORTB y permitir que se produzca una interrupción en cada cambio de voltaje.Los bits de los registros y IOCB INTCON están a cargo de eso.

3,4 TIMER0

El microcontrolador PIC16F887 dispone de tres temporizadores completamente independientes y

contadores marcados como TMR0, TMR1 y TMR2. Lea atentamente el capítulo siguiente para aprender

más sobre ellos.

Timer0 tiene una amplia gama de aplicación en la práctica. No hay casi ningún programa sin él, ya que le

permite escribir fácilmente un código que es para generar pulsos de duración arbitraria, la medición del

tiempo o cómputo de impulsos externos (eventos) casi sin limitaciones.

Timer0 es un temporizador de 8-bits / contador con las siguientes características:

8-bit del temporizador / contador;

8-bits prescaler (compartido con el temporizador de vigilancia);

Programable de reloj interno o externo de origen;

Interrupción por desbordamiento, y

Programable reloj externo para seleccionar bordes.

La siguiente figura ilustra el esquema Timer0 con todos los bits que controlan su funcionamiento. Estos

bits se almacena en el registro OPTION_REG.

Page 135: mikrobasic0

OPTION_REG Registrarse

RBPU - PORTB pull-up bit de habilitación

o 0 - PORTB resistencias pull-up desactivado.

o 1 - pins PORTB se puede conectar a tirar hacia arriba resistencias.

INTEDG - bits Edge Select interrupción o 0 - Interrumpir el flanco ascendente del pasador INT (0-1).

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

T0CS - TMR0 reloj de bits Select o 0 - Los pulsos son llevados a la entrada Timer0/counter a través del pin RA4.

o 1 - Timer0 utiliza ciclo de reloj interna (Fosc / 4).

T0SE - TMR0 poco el borde de selección de fuente o 0 - Incremento de alta a baja transición en el pin TMR0.

o 1 - Incremento de bajo a alto de transición en el pin TMR0.

PSA - Asignación de bits Prescaler o 0 - Prescaler se asigna al WDT.

o 1 - Prescaler se asigna a la Timer0/counter.

PS2, PS1, PS0 - Tasa de bits Seleccione Prescaler o Prescaler tasa se establece mediante la combinación de estos bits. Como se observa en la tabla, la

misma combinación de bits ofrece diferentes tipo de prescaler para el Timer0/counter y el temporizador perro guardián, respectivamente.

Page 136: mikrobasic0

P S 2 P S 1 P S 0 T M R 0 W D T

0 0 0 01:02 01:01

0 0 1 01:04 01:02

0 1 0 01:08 01:04

0 1 1 01:16 01:08

1 0 0 01:32 01:16

1 0 1 1:64 01:32

1 1 0 1:128 1:64

1 1 1 1:256 1:128

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

la siguiente figura:

Page 137: mikrobasic0

Vamos a hacerlo en mikroBasic ...

' In this example, Timer0 is configured as a timer and

prescaler is assigned to it.

unsigned cnt ' Define variable cnt

sub procedure interrupt ' Interrupt routine

cnt = cnt + 1 ' Interrupt causes cnt to be

incremented by 1

TMR0 = 155 ' Timer0 (or counter) returns its

initial value

INTCON = 0x20 ' Bit T0IE is set, bit T0IF is cleared

end sub

main:

OPTION_REG = 0x04 ' Prescaler (1:32) is assigned to

Timer0

TMR0 = 155 ' Timer0 counts from 155 to 255

INTCON = 0xA0 ' Enable interrupt on TMR0 overflow

...

...

' In the following example, Timer0 is configured as counter and

prescaler is assigned to it

OPTION_REG = 0x20 ' Prescaler (1:2) is assigned to the

Timer0

TMR0 = 155 ' Timer0 counts from 155 to 255

INTCON = 0xA0 ' Enable interrupt on TMR0 overflow

...

Cuando el bit PSA está establecido, el prescaler se asigna al temporizador perro guardián, como se

muestra en la siguiente figura:

Vamos a hacerlo en mikroBasic ...

Page 138: mikrobasic0

' In this example, prescaler (1:64) is assigned to watch-dog

timer.

main:

OPTION_REG = 0x0E ' Prescaler is assigned to WDT (1:64)

asm

CLRWDT ' Assembly command to reset WDT

end asm

...

...

asm

CLRWDT ' Assembly command to reset WDT

end asm

...

Esta es también digno de mención:

Cuando el pre-escalador se le asigna al temporizador / contador, cualquier escritura en el registro TMR0 se desactive la pre-escalador.

Cuando el pre-escalador se le asigna al temporizador de reloj de perro, la instrucción CLRWDT borrará ambos.

Escribir en el registro TMR0, utilizada como un contador de tiempo, no hará que el contaje de impulsos para iniciar de inmediato, pero con dos ciclos de instrucción de retraso. En consecuencia, es ne cesarios para ajustar el valor escrito en el registro TMR0.

Cuando el microcontrolador se establece en modo de reposo, el oscilador de reloj está apagado. No desbordamiento puede ocurrir ya que no hay pulsos para contar y por lo tanto la interrupción de desbordamiento de TMR0 no puede despertar al microcontrolador del modo de suspensión.

Cuando se utiliza como un contador de reloj externa, sin pre-escalador, una longitud de impulso mínima o un retardo entre dos impulsos debe ser 2 Tosc + 20 nS (Tosc representa el período de una señal de reloj generada por el oscilador).

Cuando se utiliza como un contador de reloj externo con pre-escalador, una longitud de impulso mínima o el intervalo entre dos impulsos es sólo 10ns.

La 8-bits precontador registro no está disponible para el usuario, lo que significa que no pueden ser directamente leído o escrito.

Cuando se cambia la asignación del prescaler Timer0 al temporizador perro guardián, la siguiente secuencia de instrucciones escritas en lenguaje ensamblador debe ser ejecutado con el fin de evitar que el microcontrolador se reinicie:

BANKSEL TMR0

CLRWDT ;CLEAR WDT

CLRF TMR0 ;CLEAR TMR0 AND PRESCALER

BANKSEL OPTION_REG

BSF OPTION_REG,PSA ;PRESCALER IS ASSIGNED TO WDT

CLRWDT ;CLEAR WDT

MOVLW b’11111000’ ;SELECT BITS PS2,PS1,PS0 AND CLEAR

ANDWF OPTION_REG,W ;THEM USING ‘LOGIC AND’ INSTRUCTION

IORLW b’00000101’ ;BITS PS2, PS1, AND PS0 SET

MOVWF OPTION_REG ;PRESCALER RATE TO 1:32

Page 139: mikrobasic0

Del mismo modo, cuando se cambia la asignación de prescaler del WDT al Timer0, la siguiente secuencia de instrucciones, también escrito en lenguaje ensamblador, se debe ejecutar:

BANKSEL TMR0

CLRWDT ;CLEAR WDT AND PRESCALER

BANKSEL OPTION_REG

MOVLW b’11110000’ ;SELECT ONLY BITS PSA,PS2,PS1,PS0

ANDWF OPTION_REG,W ;CLEAR THEM USNG ‘LOGIC AND’ INSTRUCTION

IORLW b’00000011’ ;PRESCALER RATE IS 1:16

MOVWF OPTION_REG

En Corto

Con el fin de utilizar Timer0 correctamente, es necesario:

Paso 1: Para seleccionar el modo:

Modo de temporizador se selecciona por el bit del registro T0CS OPTION_REG, (T0CS: 0 = temporizador, 1 contador =).

Cuando se utiliza, el pre-escalador debe ser asignado al temporizador / contador borrando el bit PSA del registro OPTION_REG. La tasa de pre-escalador se establece mediante los bits PS2-PS0 del mismo registro.

Cuando una interrupción se utiliza, los GIE y TMR0IE bits del registro INTCON deben establecerse.

Paso 2: Para medir y contar

Medida del tiempo:

Restablecer el registro TMR0 o escribir un valor conocido a ella.

El tiempo transcurrido (en microsegundos, si de cristal de cuarzo de 4 MHz se utiliza) se mide mediante la lectura del registro TMR0.

El TMR0IF bit de bandera del registro INTCON se ajusta automáticamente cada vez que el TMR0 desborda registro. Si está activado, se produce una interrupción.

Contar:

La polaridad de los impulsos para ser contados en el pin RA4 es seleccionado por el bit TOSE del registro OPTION_REG (T0SE: 0 = positivo, 1 = impulsos negativos).

Número de impulsos puede ser leída desde el registro TMR0. La pre-escalador y de interrupción se utilizan en la misma manera que en el modo de temporizador.

3,5 TIMER1

Módulo Timer1 es un contador de 16-bit de temporización /, lo que significa que se compone de dos

registros (TMR1L y TMR1H). Es capaz de contar hasta 65.535 pulsos en un solo ciclo, es decir, antes de

que el recuento se inicia desde cero.

Al igual que en Timer0, estos registros pueden ser leídos o escritos que en cualquier momento. En caso

de que se produce un desbordamiento, una interrupción se genera automáticamente, siempre y cuando

se activa.

El Timer1 puede ser configurado para operar en uno de dos modos, ya sea como un temporizador o un

contador. A diferencia del Timer0, ambos de estos modos de dar possibilitis adicional.

Page 140: mikrobasic0

El Timer1 tiene las siguientes características:

16-bit del temporizador / contador de un par de registros;

Programable de reloj interno o externo de origen;

3-bit pre-escalador;

Opcional de baja potencia (LP) del oscilador;

Funcionamiento síncrono o asíncrono;

Timer1 puerta de control (cuenta activada) a través de comparación o el pasador T1G;

Interrupción por desbordamiento;

Wake-up en caso de desbordamiento (reloj externo), y

Fuente de reloj para la Captura / Comparación del módulo.

Un esquema simplificado del Timer1

TEMPORIZADOR TMR1 RELOJ DE SELECCIÓN DE FUENTE

El bit TMR1CS del registro T1CON se utiliza para seleccionar la fuente de reloj para el Timer1:

F U E N T E D E R E L O J T M R 1 C S

Fosc / 4 0

T1CKI pin 1

Cuando la fuente de reloj interno está seleccionado, el par de registros TMR1H-TMR1L se incrementará

en múltiplos de pulsos Fosc según lo determinado por el pre-escalador.

Cuando la fuente de reloj externa está seleccionada, el temporizador puede operar ya sea como un

temporizador o un contador. Los pulsos de reloj en el modo de contador puede ser sincronizado con el

reloj del microcontrolador interno o ejecutar de forma asincrónica.

TIMER1 de Prescaler

Timer1 está provisto de un pre-escalador completamente independiente que permite la división 1, 2, 4 u 8

de la frecuencia de entrada de reloj. El prescaler no es directamente leer o escribir. Sin embargo, el

contador de prescaler se borra automáticamente después de escribir en el registro o TMR1H TMR1L.

OSCILADOR TIMER1 de

Page 141: mikrobasic0

Los pasadores RC0/T1OSO y RC1/T1OSI son, sobre todo, utilizado para registrar los impulsos

procedentes de los módulos periféricos, pero también tienen una función adicional. Como puede verse en

la figura, que al mismo tiempo actúan como entrada (pin RC1) y salida (pin RC0) del oscilador de cuarzo

LP adicional (baja potencia). Este circuito está diseñado principalmente para el funcionamiento a bajas

frecuencias (hasta 200 KHz) y utiliza cristal de 32.768 KHz de cuarzo. Tal cristal es conveniente para los

relojes de cuarzo debido a que es fácil de obtener un segundo de duración pulsos dividiendo esta

frecuencia. Dado que la operación de este oscilador no depende del reloj interno, que es capaz de

funcionar incluso en modo de suspensión, que se habilita estableciendo el bit de control del registro

T1OSCEN T1CON. En este caso, es necesario proporcionar un retardo de tiempo corto (unos pocos

milisegundos) desde el software en aras de la estabilidad del oscilador de reloj.

Tabla siguiente contiene los valores recomendados de los condensadores que son, además de

cristal de cuarzo, integrado en el oscilador. Estos valores no son críticos y se aplica la siguiente

regla: cuanto mayor es la capacidad, mayor será la estabilidad, la cual, al mismo tiempo,

prolonga el tiempo necesario para la estabilidad del oscilador de reloj.

O S C I L A D O R F R E C U E N C I A C 1 C 2

LP

32 kHz 33 pF 33 pF

100 kHz 15 pF 15 pF

200 kHz 15 pF 15 pF

El consumo de energía del microcontrolador se minimiza en el modo de espera como el consumidor de

energía principal, el oscilador, no funciona. El microcontrolador se establece en este modo de ejecutar la

instrucción SLEEP. El problema es cómo despertar el microcontrolador, es decir, cómo generar una

interrupción que hace que suceda. Como el microcontrolador "duerme", una interrupción debe ser

activado por los módulos periféricos. Se hace aún más complicado si es necesario despertar al

microcontrolador a intervalos regulares de tiempo ...

Page 142: mikrobasic0

El problema se resuelve mediante la incorporación de un oscilador de baja potencia totalmente

independiente de cuarzo capaz de operar en modo de suspensión en el microcontrolador PIC16F887. En

pocas palabras, el módulo que solía ser periférica, está ahora integrada en el microcontrolador y asignado

a la Timer1. El oscilador se activa fijando el bit T1OSCEN del registro T1CON. El bit TMR1CS se utiliza

entonces para permitir que el Timer1 utilizar impulsos generados por dicho oscilador.

Una señal generada por el oscilador de cuarzo está sincronizado con el reloj del

microcontrolador en la limpieza de la broca T1SYNC. En este caso, el temporizador no puede funcionar en modo de reposo porque el circuito de sincronización utiliza el reloj del microcontrolador.

El registro TMR1 interrupción de desbordamiento se puede habilitar. Si el bit T1SYNC se establece, tales interrupciones también se producirá en modo de reposo.

PUERTA DEL TIMER1

La fuente de la puerta Timer1 es configurable por software para usar el pin T1G o la salida del

comparador C2. Esta puerta permite que el temporizador a las señales externas directamente de tiempo

utilizando el pasador T1G o señales analógicas utilizando la salida del comparador C2. Refiérase a la

figura en la página anterior. Con el fin de medir una duración de la señal, es suficiente para permitir esta

puerta y contar los impulsos en el registro TMR1.

TIMER1 en modo contador

Timer1 empieza a funcionar como un contador configurando el bit de TMR1CS. Cuenta impulsos

suministrados al pasador PC0/T1CKI y se incrementa en el borde ascendente en el pulso T1CKI reloj de

entrada externa. Si el bit de control T1SYNC del registro T1CON está desactivada, las entradas de reloj

externas se sincronizará antes de llegar al par de registros TMR1. En otras palabras, el Timer1 se

sincroniza con el reloj del microcontrolador, convirtiéndose en un contador síncrono.

Si el microcontrolador está en modo de suspensión, mientras que el Timer1 funciona como un contador,

los registros del temporizador TMR1H y TMR1L no será modificado a pesar de que los pines de entrada

se alimentan con pulsos. Dado que el reloj del microcontrolador no se ejecuta en modo de reposo, no hay

entradas de reloj que se utilizará para la sincronización. Sin embargo, el pre-escalador se mantendrá en el

funcionamiento de la medida de lo que hay pulsos de reloj en los pines, ya que es un divisor de frecuencia

simple.

Page 143: mikrobasic0

Este contador registra un uno lógico (1) en los pines de entrada. Lo que pasa es que al menos un flanco

de bajada debe estar registrado antes de iniciar el conteo de pulsos. Refiérase a la figura de la

izquierda. Las flechas indican los incrementos del contador.

TIMER1 En el modo TIMER

Con el fin de establecer el modo de temporizador Timer1, es necesario borrar el bit TMR1CS. Después de

eso, cada pulso generado por el oscilador interno hará que el registro del temporizador de 16-bit para ser

incrementado. Si el cristal de cuarzo 4MHz está en uso, este registro se incrementa cada microsegundo.

En este modo, el bit T1SYNC no afecta el temporizador ya que cuenta impulsos de reloj internas

utilizadas por el microcontrolador y otros módulos internos. Por lo tanto no hay necesidad de

sincronización.

Page 144: mikrobasic0

El reloj del microcontrolador no funciona en modo de reposo para que el exceso del temporizador registro

no puede causar una interrupción en este modo.

' In this example, Timer1 is configured as a timer with the

prescaler rate 1:8. Every time

' TMR1H and TMR1L registers overflow occurs, an interrupt will

be requested.

main:

...

PIR1.TMR1IF = 0 ' Reset the TMR1IF flag bit

TMR1H = 0x22 ' Set initial value for the Timer1

TMR1L = 0x00

T1CON.TMR1CS = 0 ' Timer1 counts pulses from internal

oscillator

T1CON.T1CKPS0 = 1 ' Assigned prescaler rate is 1:8

T1CON.T1CKPS1 = 1

PIE1.TMR1IE = 1 ' Enable interrupt on overflow

INTCON = 0xC0 ' Enable interrupt (bits GIE and PEIE)

T1CON.TMR1ON = 1 ' Turn the Timer1 on

...

T1CON Registrarse

Los bits del registro T1CON está en control de la operación Timer1.

Page 145: mikrobasic0

T1GINV - Timer1 Puerta Invertir actos de bits como un inversor de estado lógico en la puerta pasador

T1G o la salida del comparador C2 (C2OUT) puerta. Permite que el temporizador para contar los pulsos

mientras la puerta está alta o baja.

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

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

TMR1GE - Timer1 Puerta de bit de habilitación determina si el pin T1G o el comparador C2 com salida

(C2OUT) la puerta se activa o no.Este bit se activa sólo cuando el Timer1 está encendido (TMR1ON bit =

1). De lo contrario, se ignora.

1 - Timer1 se activa sólo cuando la puerta Timer1 no está activo.

0 - Puerta de no afectar el funcionamiento del Timer1.

T1CKPS1, T1CKPS0 - determinar la tasa de la pre-escalador asignado al Timer1.

T 1 C K P S 1 T 1 C K P S 0 P R E S C A L E R T A R I F A

0 0 01:01

0 1 01:02

1 0 01:04

1 1 01:08

T1OSCEN - Oscilador LP Bit de habilitación de control

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

0 - Oscilador LP está desactivado.

T1SYNC - Timer1 entrada externa de reloj de sincronización de bits de control permite la entrada del

oscilador LP o el pin de entrada T1CKI para sincronizarse con el reloj del controlador interno de micro. El

bit es ignorado mientras impulsos suministrados desde la fuente de reloj se cuentan microcontrolador

(TMR1CS bits = 0).

1 - Entrada de sincronización no se sincronizarán ..

0 - entrada de reloj externo se sincronizarán ..

- Temporizador TMR1 TMR1CS Fuente del Reloj Seleccione bits

1 - Contar pulsos en el pin T1CKI (en el flanco ascendente 0-1).

0 - Recuento de impulsos generados por el reloj del microcontrolador.

TMR1ON - Timer1 En poco

1 - Timer1 habilitado.

0 - Timer1 personas con discapacidad.

En Corto

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

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

Page 146: mikrobasic0

Seleccione el modo apropiado con la broca de la TMR1CS T1CON registro. (TMR1CS: 0 = la fuente de reloj es oscilador interno de cuarzo, 1 = el reloj se suministra externamente).

Al establecer el bit T1OSCEN del mismo registro, el oscilador se activa y los registros TMR1H y TMR1L se incrementan en cada pulso de reloj. Contar las paradas en la limpieza de este bit.

El prescaler se borra en la limpieza o escribiendo a los registros del contador.

Cuando los dos registros del temporizador están llenas de seres y un occures de desbordamiento, la bandera TMR1IF se establece y comienza el conteo desde cero.

3,6 Timer2

Timer2 es un temporizador de 8-bits que opera en una manera específica.

Impulsos generados por el oscilador de cuarzo pase primero a través del divisor de la tasa de los cuales

se puede cambiar con los T2CKPS1 y T2CKPS0 bits. La salida del precontador se utiliza entonces para

incrementar el registro TMR2 a partir de las 00h. Los valores de TMR2 y PR2 registros se comparan todo

el tiempo y el TMR2 se incrementa constantemente hasta que coincida con el valor almacenado en

PR2. Cuando el partido se produce, el registro TMR2 se borra automáticamente. El postscaler Timer2 se

incrementa en cada partido y su producción se utiliza para generar una interrupción si está habilitada.

Los registros TMR2 y PR2 son de lectura y escritura. Contando puede ser detenido en la limpieza de la

broca TMR2ON, lo que reduce el consumo de energía.

El momento de la reposición Timer2 también puede utilizarse como una señal de comunicación de reloj de

serie.

El funcionamiento del Timer2 está bajo el control de varios bits de la T2CON registro.

Page 147: mikrobasic0

T2CON Registrarse

TOUTPS3 - TOUTPS0 - Timer2 salida Postcaler bits de selección se utilizan para determinar la tasa de

postscaler de acuerdo con la siguiente tabla:

T O U T P S 3 T O U T P S 2 T O U T P S 1 T O U T P S 0 P O S T S C A L E R T A R I F A

0 0 0 0 01:01

0 0 0 1 01:02

0 0 1 0 01:03

0 0 1 1 01:04

0 1 0 0 01:05

0 1 0 1 01:06

0 1 1 0 01:07

0 1 1 1 01:08

1 0 0 0 01:09

1 0 0 1 01:10

1 0 1 0 01:11

1 0 1 1 01:12

1 1 0 0 01:13

1 1 0 1 01:14

1 1 1 0 01:15

1 1 1 1 01:16

TMR2ON - Timer2 En poco convierte el Timer2 sucesivamente.

1 - Timer2 está encendido.

0 - Timer2 está apagado.

T2CKPS1, T2CKPS0 - Timer2 Clock bits de preescala determinar la tasa de prescaler:

T 2 C K P S 1 T 2 C K P S 0 P R E S C A L E R T A R I F A

0 0 01:01

0 1 01:04

1 x 01:16

En Corto

Page 148: mikrobasic0

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

En el momento del encendido, el registro PR2 contiene el valor FFh.

Tanto el pre-escalador y postscaler han sido aprobados por escrito al registro TMR2.

Tanto el pre-escalador y postscaler han sido aprobados por escrito al registro T2CON.

En cualquier reajuste - que supongo que, tanto pre-escalador y postscaler se borran.

3.7 módulos CCP

Módulos CCP se puede configurar para operar en varios modos diferentes, lo que hace a los periféricos

más complicado de manejar.Simplemente tratar de analizar su funcionamiento utilizando los cuadros que

describen las funciones de bit y usted entenderá lo que estamos hablando. Por lo tanto, cuando se utiliza

uno de los módulos CCP, primero seleccione el modo que usted necesita, analizar la figura apropiada, a

continuación, cambiar los bits de los registros. O si no ...

El módulo CCP (Captura / Comparación / PWM) es un periférico que permite al usuario el tiempo y el

control de diferentes eventos. Como su nombre lo indica, se puede configurar para funcionar en tres

modos diferentes:

Modo de captura proporciona un acceso al estado actual de un registro que cambia constantemente su

valor. En este caso, es el temporizador de registro TMR1.

Modo de comparación compara constantemente los valores de dos registros. Uno de ellos es el

temporizador de registro TMR1.

PWM (Pulse Width Modulation) puede generar señales de diferente frecuencia y ciclo de trabajo en uno o

más pines de salida.

Hay dos módulos CCP integrados en el microcontrolador PIC16F887 - CCP1 y CCP2. Ellos son casi

idénticos en funcionamiento con la diferencia de características mejoradas de PWM disponibles en el

módulo CCP1 solamente. En este capítulo se ofrece una descripción detallada de este módulo. Como

para el módulo CCP2, sólo las características que lo distinguen de CCP1 será cubierto.

MÓDULO CCP1

El corazón del módulo CCP1 es una CCPR1 16-bit del registro que se compone de dos registros CCPR1L

y CCPR1H. Se utiliza para la captura de números binarios desde el temporizador registro TMR1 (TMR1H

y TMR1L) o la comparación de números binarios almacenados en los registros CCPR1 y TMR1.

Si está habilitado por el software, el temporizador TMR1 registro de reposición puede ocurrir en cualquier

partido en el modo de comparación. Además, el módulo CCP1 es capaz de generar señales PWM de

frecuencia variable y ciclo de trabajo.

Los bits del registro CCP1CON están en el control del módulo CCP1.

CCP1 en modo de captura

Page 149: mikrobasic0

En este modo, el registro CCP1 (que consiste en la CCPR1H y un par CCPR1L registro) captura un valor

de 16-bit del temporizador TMR1 registro (que consiste en la TMR1H y un par TMR1L registro) cuando

uno de los siguientes eventos en el RC2/CCP1 pin:

Cada flanco de bajada (1 -> 0);

Cada flanco ascendente (0 -> 1);

Cada arista cuarta ascendente (0 -> 1), y

Cada arista 16a ascendente (0 -> 1).

¿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:

Page 150: mikrobasic0

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.

Page 151: mikrobasic0

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:

Page 152: mikrobasic0

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

Page 153: mikrobasic0

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

F R E C U E N C I A [ K H Z ] 1 , 2 2 4 , 8 8 1 9 , 5 3 7 8 , 1 2 1 5 6 , 3 2 0 8 , 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):

F R E C U E NC I A P W M

1 . 2 2 KH Z

4 . 8 8 KH Z

1 9 . 5 3 KH Z

7 8 . 1 2 KH Z

1 5 6 . 3 KH Z

2 0 8 . 3 KH Z

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):

F R E C U E NC I A P W M

1 . 2 2 KH Z

4 . 9 0 KH Z

1 9 . 6 1 KH Z

7 6 . 9 2 KH Z

1 5 3 . 8 5 KH Z

2 0 0 . 0 KH Z

Temporizador de pre-escala

16 4 1 1 1 1

Page 154: mikrobasic0

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.

P 1 M 1 P 1 M 0 M O D O

0 0

PWM con salida única

Pin P1A emite la señal modulada. Pines P1B, P1C y P1D son puerto de entrada de D / salida

0 1 Full Bridge - Configuración Adelante

Page 155: mikrobasic0

Pin P1D emite la señal modulada

Pin P1A está activo Pines P1B y P1C están inactivos

1 0

La mitad de configuración de puente

Pasadores P1A y P1B señal de salida modulada PinsP1C y P1D son entradas de los puertos D y salidas

1 1

Full Bridge - configuración inversa

Pin P1B emite la señal modulada Pin P1C está activo

Pines P1A y P1D están inactivos

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.

C C P 1 M 3 C C P 1 M 2 C C P 1 M 1 C C P 1 M 0 M O D O

0 0 0 0 El módulo está desactivada (reset)

0 0 0 1 No usado

0 0 1 0 Comparar el modo de

CCP1IF bits se encuentra en juego

0 0 1 1 No usado

0 1 0 0

Modo de captura

Cada flanco descendente en el pin CCP1

0 1 0 1

Modo de captura

Cada flanco ascendente en el pin CCP1

0 1 1 0

Modo de captura

Cada borde de cuarto creciente en el pin CCP1

0 1 1 1

Modo de captura

Cada arista 16a aumento en el pin CCP1

1 0 0 0

Comparar el modo de

De salida y el bit CCP1IF se

establecen en el partido del

1 0 0 1

Comparar el modo de

La salida se borra y poco CCP1IF se establece en el partido del

1 0 1 0 Comparar el modo de

Page 156: mikrobasic0

Solicitud de interrupción llega y

CCP1IF bit se establece en el partido

1 0 1 1

Comparar el modo de

CCP1IF bit está establecido, y

contadores de tiempo de 1 o 2 registros se borran

1 1 0 0

Modo PWM

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

1 1 0 1

Modo PWM

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

1 1 1 0

Modo PWM

Pines P1A y P1C están activos bajo

Pines P1B y P1D están activos de alta

1 1 1 1

Modo PWM

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.

Page 157: mikrobasic0

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.

C C P 2 M 3 C C P 2 M 2 C C P 2 M 1 C C P 2 M 0 M O D O

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

0 1 0 0

Modo de captura

Cada flanco descendente en el pin CCP2

0 1 0 1

Modo de captura

Cada borde de sensibilización sobre la pin CCP2

0 1 1 0

Modo de captura

Cada borde de cuarto creciente en el pin CCP2

0 1 1 1

Modo de captura

Cada arista 16a aumento en el pin

CCP2

1 0 0 0

Comparar el modo de

De salida y el bit CCP2IF se

establecen en el partido del

1 0 0 1

Comparar el modo de

La salida se borra y poco CCP2IF se establece en el partido del

Page 158: mikrobasic0

1 0 1 0

Comparar el modo de

La interrupción se genera poco CCP2IF se establece y el pin CCP2 no

se ve afectado el partido

1 0 1 1

Comparar el modo de

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.

1 1 x x 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 Desactive la bandera de interrupción TMR2IF del registro PIR1.

o Establecer el valor Timer2 preescala utilizando los bits T2CKPS1 y T2CKPS0 del registro T2CON.

o 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: o Espere a que el desbordamiento del Timer2 (el bit de la TMR2IF PIR1register está establecido).

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

Page 159: mikrobasic0

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.

Page 160: mikrobasic0

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.

Page 161: mikrobasic0

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

Page 162: mikrobasic0

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.

Page 163: mikrobasic0

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.

Page 164: mikrobasic0

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:

E C C P A S 2 E C C P A S 1 E C C P A S 0 S H U T H O W N E S T A D O D E L A F U E N T E

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.

P S S A C 1 P S S A C 0 P I N E S E S T A D O L Ó G I C O

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.

P S S B D 1 P S S B D 0 P I N E S E S T A D O L Ó G I C O

0 0 0

0 1 1

1 X De alta impedancia (Tri-State)

3.8 MÓDULOS DE COMUNICACIÓN DE SERIE

Page 165: mikrobasic0

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:

Page 166: mikrobasic0

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

Page 167: mikrobasic0

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

Page 168: mikrobasic0

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

Page 169: mikrobasic0

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

Page 170: mikrobasic0

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.

Page 171: mikrobasic0

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.

Page 172: mikrobasic0

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.

Page 173: mikrobasic0

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.

Page 174: mikrobasic0

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.

Page 175: mikrobasic0

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:

Page 176: mikrobasic0
Page 177: mikrobasic0

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.

Page 178: mikrobasic0

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 ' Configure AN pins as digital

CM1CON0.C1ON = 0 ' Disable comparators

CM2CON0.C2ON = 0

UART1_Init(9600) ' Initialize UART module at 9600

bps

Delay_ms(100) ' Wait for UART module to become

stable

UART1_Write_Text("Start")

while 1 ' Endless loop

if (UART1_Data_Ready() ' If data is received,

uart_rd = UART1_Read() ' read it,

end if

UART1_Write(uart_rd) ' and send it back via UART

wend

...

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:

Page 179: mikrobasic0

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

I 2 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:

Page 180: mikrobasic0

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)

Page 181: mikrobasic0

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

Page 182: mikrobasic0

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

Page 183: mikrobasic0

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.

Page 184: mikrobasic0

Paso 5.

Finalmente, los datos almacenados en el registro SSPBUF está listo para usar y debe ser

movido a un registro deseado.

I 2 MODO C

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

Page 185: mikrobasic0

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.

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

Page 186: mikrobasic0

El módulo MSSP utiliza seis registros para la operación de I

2 C. Algunos de ellos se muestran en la figura

anterior:

SSPCON

SSPCON2

SSPSTAT

SSPBUF

SSPSR

SSPADD

Page 187: mikrobasic0

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

D / A - Datos / bits de la dirección se utiliza en el modo I 2 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.

R / W - Leer bits escritura se utiliza en el modo I 2 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.

Page 188: mikrobasic0

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:

Page 189: mikrobasic0

S S P M 3 S S P M 2 S S P M 1 S S P M 0 M O D O

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.

Page 190: mikrobasic0

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

1 - Permite la recepción de datos en el modo I 2 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:

Page 191: mikrobasic0

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.

Page 192: mikrobasic0

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!

Page 193: mikrobasic0

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.

Page 194: mikrobasic0

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()

Page 195: mikrobasic0

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.

Page 196: mikrobasic0

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

Page 197: mikrobasic0

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;

Page 198: mikrobasic0

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.

Page 199: mikrobasic0

A D C F U E N T E D E R E L O J

A D C S 1 A D C S 0

A P A R A T O D E A L T A F R E C U E N C I A ( F O S C )

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 (2

10 = 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í.

Page 200: mikrobasic0

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.

A D C S 1 A D C S 2 R E L O J

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:

Page 201: mikrobasic0

C H S 3 C H S 2 C H S 1 C H S 0 C A N A L P I N

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 ' Configure AN2 as an analog pin

TRISA = 0xFF ' PORTA is configured as an input

ANSELH = 0 ' Configure all other AN pins as digital

I/O

TRISC = 0x3F ' Pins RC7 and RC6 are configured as

outputs

TRISB = 0 ' PORTB is configured as an output

Page 202: mikrobasic0

while 1

temp_res = ADC_Read(2) ' Get a 10-bit result of AD conversion

PORTB = temp_res ' Send lower 8 bits to PORTB

PORTC = temp_res >> 2 ' Send 2 most significant bits to RC7

and RC6

wend ' Remain in the loop

end.

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):

Page 203: mikrobasic0

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;

Page 204: mikrobasic0

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.

Page 205: mikrobasic0

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.

Page 206: mikrobasic0

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

C 1 C H 1 C 1 C H 0 C O M P A R A D O R C 1 V I N E N T R A D A

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

Page 207: mikrobasic0

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.

Page 208: mikrobasic0

* 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

C 2 C H 1 C 2 C H 0 C O M P A R A D O R C 2 V I N E N T R A D A

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.

Page 209: mikrobasic0

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 +

Page 210: mikrobasic0

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.

Page 211: mikrobasic0

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.

I R C F 2 I R C F 1 I R C F 0 F R E C U E N C I A O S C .

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.

Page 212: mikrobasic0

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

Page 213: mikrobasic0

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

Page 214: mikrobasic0

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:

Page 215: mikrobasic0

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.

Page 216: mikrobasic0

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.

Page 217: mikrobasic0

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.

Page 218: mikrobasic0

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

Page 219: mikrobasic0

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.

Page 220: mikrobasic0

T U N 4 T U N 3 T U N 2 T U N 1 T U N 0 F R E C U E N C I A

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 Calibrado

1 1 1 1 1

1 0 0 1 0

1 0 0 0 1

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

Page 221: mikrobasic0

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 ; Access bank 2

MOVF ADDRESS,W ; Move address to the W register

MOVWF EEADR ; Write address

BSF STATUS,RP0 ; Access bank 3

BCF EECON1,EEPGD ; Select EEPROM memory block

BSF EECON1,RD ; Read data

BCF STATUS,RP0 ; Access bank 2

MOVF EEDATA,W ; 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)

Page 222: mikrobasic0

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 ; Wait for the previous write to complete

GOTO $-1 ;

BCF STATUS,RP0 ; Bank 2

MOVF ADDRESS,W ; Move address to W

MOVWF EEADR ; Write address

MOVF DATA,W ; Move data to W

MOVWF EEDATA ; Write data

BSF STATUS,RP0 ; Bank 3

BCF EECON1,EEPGD ; Select EEPROM memory block

BSF EECON1,WREN ; Write to EEPROM enabled

BCF INCON,GIE ; All interrupts disabled

BSF INTCON,GIE ; Interrupts enabled

BCF EECON1,WREN ; Write to EEPROM disabled

MOVLW 55h

MOVWF EECON2

MOVLW AAh

MOVWF EECON2

BSF EECON1,WR

La secuencia de un mismo programa escrito en un lenguaje básico es como sigue:

W = EEPROM_Write(ADDRESS, W)

Page 223: mikrobasic0

¿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) ' Write data (number 0xAA) to EEPROM

address 2

EEPROM_Write(0x50,0x55) ' Write data (number 0x55) to EEPROM

address 0x50

Delay_ms(1000) ' Blink PORTB and PORTC diodes

PORTB = 0xFF ' to indicate start of reading

PORTC = 0xFF

Delay_ms(1000)

PORTB = 0x00

PORTC = 0x00

Delay_ms(1000)

PORTB = EEPROM_Read(0x02) ' Read data from EEPROM address 2 and

display it on PORTB

PORTC = EEPROM_Read(0x50) ' Read data from EEPROM address 0x50

and display it on PORTC

Delay_ms(1000)

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.

Page 224: mikrobasic0

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

Page 225: mikrobasic0

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

Page 226: mikrobasic0

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.

Page 227: mikrobasic0

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.

Page 228: mikrobasic0

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

Page 229: mikrobasic0

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

Page 230: mikrobasic0

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.

Page 231: mikrobasic0

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.

Page 232: mikrobasic0

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.

Page 233: mikrobasic0

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.

Page 234: mikrobasic0

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!

Page 235: mikrobasic0

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.

Page 236: mikrobasic0

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.

Page 237: mikrobasic0

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.

Page 238: mikrobasic0

D Í G I T O S

P A R A M O S T R A R

M O S T R A R S E G M E N T O S

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

Page 239: mikrobasic0

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

Page 240: mikrobasic0

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

F U N C I Ó N N Ú M E R O D E P I N

N O M B R E S T A T E L O G I C

D E S C R I P C I Ó N

Suelo 1 Vss - 0V

Fuente de alimentación

2 Vdd - +5 V

Contraste 3 Vee - 0 - Vdd

El control de funcionamiento

4 RS 0

1

D0 - D7 considerado como comandos

D0 - D7 considerarse como datos

5 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

Los datos o

comandos

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

Pantalla LCD

Page 241: mikrobasic0

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

Page 242: mikrobasic0

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:

Page 243: mikrobasic0
Page 244: mikrobasic0

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

Page 245: mikrobasic0

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

Page 246: mikrobasic0

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:

C O M A ND O

RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

T I E M P O D E

E J E C U C IÓ 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 CGRAM dirección 40US

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

Page 247: mikrobasic0

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

Page 248: mikrobasic0

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

Page 249: mikrobasic0

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:

Page 250: mikrobasic0

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

...

Page 251: mikrobasic0

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.

Page 252: mikrobasic0

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.

Page 253: mikrobasic0

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.

Page 254: mikrobasic0

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.

Page 255: mikrobasic0

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

Page 256: mikrobasic0

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 ' Invert PORTB logic state

Delay_ms(100) ' 100mS delay

k = k+1 ' Increment k by 1

loop until k=20 ' Remain in loop while k<20

k=0 ' Reset variable k

saveBank = STATUS and %01100000 ' Save the state of bits RP0

and RP1

' (bits 5 and 6 of the STATUS register)

asm ' Start of assembly sequence

bsf STATUS,RP0 ' Select memory bank containing

bcf STATUS,RP1 ' the OSCCON register

bcf OSCCON,6 ' Select internal oscillator LFINTOSC

bcf OSCCON,5 ' with a frequency of 31KHz

bcf OSCCON,4

bsf OSCCON,0 ' Microcontroller uses internal oscillator

end asm ' End of assembly sequence

STATUS = STATUS and %10011111 ' Bits RP0 and RP1 return their

original state

STATUS = STATUS or saveBank

do

PORTB = not PORTB ' Invert PORTB logic state

Delay_ms(10) ' 10 mS delay

k = k+1 ' Increment k by 1

loop until k=20 ' Remain in loop while k<20

stay_here: goto stay_here ' Endless loop

Page 257: mikrobasic0

end.

Usted ha notado que la fuente de señal de reloj se cambia sobre la marcha. Si desea asegurarse de que,

quite cristal de cuarzo antes de encender el microcontrolador. El microcontrolador no empezará a

funcionar debido a la Palabra de configuración cargado con el programa requiere que el cristal de cuarzo

que se preste. Si se quita este cristal más tarde, durante una operación, no pasará nada, es decir que no

afectará al funcionamiento del microcontrolador en absoluto.

4,5 Ejemplo 3 TMR0 como contador, declarar nuevas variables, símbolos de uso, utilice un relé ...

En los dos ejemplos anteriores el microcontrolador ejecuta el programa sin verse afectada por su

entorno. Prácticamente, basados en microcontroladores los dispositivos que funcionan de esta manera

son muy raras (por ejemplo, un controlador de neón simple señal).Clavijas de entrada también se utilizan

en este ejemplo. El esquema que se da en la figura de abajo, mientras que el programa está en la página

siguiente. Todavía es muy simple. Temporizador TMR0 se utiliza como un contador. La entrada del

contador está conectado a un pulsador de tal manera que cualquier presión botón hace que el

temporizador TMR0 para contar un pulso. Cuando el número de impulsos coincide con el número

almacenado en el registro de prueba, un uno lógico (5V) aparecerá en el pasador PORTD.3. Esta tensión

se utiliza para activar un relé electromecánico, y esto un poco por eso se llama 'relay' en el programa.

Aquí, la prueba de registro de número de tiendas 5. Por supuesto, puede ser cualquier número que se

obtiene ya sea por la computación o define como una constante. Además, el microcontrolador puede

ejecutar algún otro dispositivo en lugar de relé, mientras que un sensor puede ser usado en lugar del

botón pulsador. Este ejemplo ilustra una de las aplicaciones más comunes del microcontrolador en la

industria, cuando algo se lleva a cabo tantas veces como sea necesario, entonces algo más debe estar

encendido o apagado ....

Page 258: mikrobasic0

' Header******************************************************

program example_3 ' Program name

symbol RELAY = PORTD.3 ' Pin PORTD.3 is named RELAY

dim TEST as byte ' Variable TEST is of byte type

main: ' Start of program

TEST = 5 ' Constant TEST = 5

ANSEL = 0 ' All I/O pins are configured as digital

ANSELH = 0

PORTA = 0 ' Reset PORTA

TRISA = 0xFF ' All portA pins are configured as

inputs

PORTD = 0 ' Reset PORTD

TRISD = %11110111 ' Pin RD3 is configured as an output,

while other pins are

' configured as inputs

OPTION_REG.5 = 1 ' Counter TMR0 receives pulses through

the RA4 pin

OPTION_REG.3 = 1 ' Prescaler rate is 1:1

TMR0 = 0 ' Reset timer/counter TMR0

while 1

if TMR0 = TEST then ' Does the number in timer match

constant TEST?

RELAY = 1 ' Numbers match. Set the RD3 bit (output

RELAY)

end if

wend ' Remain in endless loop

end. ' End of program

Sólo un símbolo (Relay) se utiliza aquí. Se le asigna el tercer pin del PORTD en la declaración.

Page 259: mikrobasic0

symbol RELAY = PORTD.3 ' Symbol RELAY = PORTD.3

Si varios pines del puerto D se conectan a los relés, la expresión anterior se puede escribir de esta

manera, así:

4,6 Ejemplo 4 Utilice Timer0, Timer1 y Timer2. Utilice las interrupciones, declarar el nuevo procedimiento ...

Si usted ha leído los ejemplos anteriores, es probable que haya notado una desventaja del uso de las

demoras. En todos estos casos, el microcontrolador es "cautivo" y no hace nada. Simplemente espera a

que un cierto tiempo para pasar. Tales residuos de tiempo a menudo es un lujo inaceptable y algún otro

método debe ser empleado aquí.

¿Te acuerdas de la historia de los temporizadores? Las interrupciones? En este ejemplo se hace la

conexión entre ellos de una manera práctica. El esquema sigue siendo el mismo y el desafío también. Es

necesario proporcionar un retardo de tiempo suficientemente largo para observar cambios en un

puerto. Temporizador TMR0 con pre-escalador asignado se utiliza para este propósito. Se genera una

interrupción en cada registro de desbordamiento del temporizador y cada incrementos de rutina de

interrupción de la variable cnt por 1.Cuando llegue a 50, el PORTB se incrementa en 1. Todo el

procedimiento se lleva a cabo "entre bastidores", que permite al microcontrolador para hacer otra cosa.

Page 260: mikrobasic0

' Header******************************************************

program example_4a ' Start of program

dim cnt as byte ' Define variable cnt as byte

sub procedure interrupt ' This subprocedure determines what

should

' be done when an interrupt is

generated

cnt = cnt + 1 ' Interrupt causes cnt to be

incremented by 1

TMR0 = 96 ' Timer TMR0 is returned its initial

value

INTCON = 0x20 ' Bit T0IE is set, bit T0IF is cleared

end sub ' End of interrupt routine

main: ' Start of program

OPTION_REG = 0x84 ' Prescaler is assigned to timer TMR0

ANSEL = 0 ' All I/O pins are configured as

digital

ANSELH = 0

TRISB = 0 ' All PORTB pins are configured as

outputs

PORTB = 0x0 ' Reset PORTB

TMR0 = 96 ' Timer T0 counts from 96 to 255

INTCON = 0xA0 ' Enable interrupt TMR0

cnt = 0 ' Variable cnt is assigned a 0

while 1 ' Endless loop

if cnt = 50 then ' Increment PORTB after 50 interrupts

PORTB = PORTB + 1 ' Increment number on PORTB by 1

cnt = 0 ' Reset variable cnt

end if

wend

end. ' End of program

Se genera una interrupción en cada temporizador registro TMR0 desbordamiento.

'Header******************************************************

program example_4b ' Program name

dim cnt as byte ' Define variable cnt

sub procedure interrupt ' Define interrupt subprocedure

cnt = cnt+1 ' Interrupt causes cnt to be

incremented by 1

PIR1.TMR1IF = 0 ' Reset bit TMR1IF

TMR1H = 0x80 ' TMR1H and TMR1L timer registers are

returned

TMR1L = 0x00 ' their initial values

Page 261: mikrobasic0

end sub ' End of interrupt routine

main: ' Start of program

ANSEL = 0 ' All I/O pins are configured as

digital

ANSELH = 0

PORTB = 0xF0 ' Initial value of PORTB bits

TRISB = 0 ' PORTB pins are configured as outputs

T1CON = 1 ' Set timer TMR1

PIR1.TMR1IF = 0 ' Reset bit TMR1IF

TMR1H = 0x80 ' Set initial value for timer TMR1

TMR1L = 0x00

PIE1.TMR1IE = 1 ' Enable interrupt on overflow

cnt = 0 ' Reset variable cnt

INTCON = 0xC0 ' Enable interrupt (bits GIE and PEIE)

while 1 ' Endless loop

if cnt = 76 then ' Change PORTB state after 76

interrupts

PORTB = not PORTB ' Number in PORTB is inverted

cnt = 0 ' Reset variable cnt

end if

wend

end. ' End of program

En este caso, una interrupción se habilita después de que el temporizador registro TMR1

(TMR1H y TMR1L) de desbordamiento. La combinación de bits cambiantes en PORTB es

diferente de la que en el ejemplo anterior.

'Header******************************************************

program example_4c ' Program name

dim cnt as byte ' Define variable cnt as byte

sub procedure Replace ' Define procedure Replace

PORTB = not PORTB ' Define new procedure ‘Replace’

end sub ' Procedure inverts port state

sub procedure interrupt ' Define interrupt subprocedure

if PIR1.TMR2IF then ' If bit TMR2IF = 1,

cnt = cnt +1 ' Increment variable cnt by 1

PIR1.TMR2IF = 0 ' Reset bit and

TMR2 = 0 ' reset register TMR2

end if

end sub ' End of interrupt routine

Page 262: mikrobasic0

main: ' Start of program

cnt = 0 ' Reset variable cnt

ANSEL = 0 ' All I/O pins are configured as

digital

ANSELH = 0

PORTB = %10101010 ' Logic state on PORTB pins

TRISB = 0 ' All PORTB pins are configured as

outputs

T2CON = 0xFF ' Set timer T2

TMR2 = 0 ' Initial value of timer register TMR2

PIE1.TMR2IE = 1 ' Enable interrupt

INTCON = 0xC0 ' Set bits GIE and PEIE

while 1 ' Endless loop

if cnt > 30 then ' Change PORTB after more than 30

interrupts

Replace ' Function Replace inverts the PORTB

state

cnt = 0 ' Reset variable cnt

end if

wend

end. ' End of program

Esta vez, se genera una interrupción después de temporizador registro de desbordamiento

TMR2 se produce. El procedimiento Reemplazar, que normalmente no pertenece a mikroBasic,

se utiliza en este ejemplo para invertir puerto estado pasadores.

4,7 Ejemplo 5 Utilice el temporizador perro guardián

Este ejemplo ilustra cómo el temporizador de reloj perro no debe ser utilizado. Un comando que se utiliza

para reiniciar el contador se ha dejado intencionadamente en el bucle principal del programa, lo que le

permitió ganar la batalla del tiempo y hacer que el microcontrolador que se restablezca. Como resultado,

el microcontrolador se restablece cada vez, que es indicado por los LEDs PORTB parpadear.

Page 263: mikrobasic0

'Header******************************************************

program example_5 ' Program name

main: ' Start of program

OPTION_REG = 0x0E ' Prescaler is assigned to timer WDT (1:64)

asm CLRWDT ' Assembly command to reset WDT timer

end asm

PORTB = 0x0F ' Initial value of the PORTB register

TRISB = 0 ' All PORTB pins are configured as outputs

Delay_ms(300) ' 30mS delay

PORTB = 0xF0 ' Port PORTB value different from initial

while 1 ' Endless loop. Program remains here until

WDT

wend ' timer resets the microcontroller

end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesaria para que el temporizador

de vigilancia mediante la selección deltemporizador Watchdog - opción Activado en mí

programador.

Page 264: mikrobasic0

4.8 Ejemplo 6 Módulo CCP1 como un generador de señal PWM

Este ejemplo ilustra el uso de CCP1 módulo en modo PWM. Para hacerlo más interesante, la anchura de

impulsos de salida P1A (PORTC, 2) se puede cambiar con los pulsadores simbólicamente marcado como

"oscura" y "brillante", mientras que la anchura conjunto es visible como una combinación binaria en

PORTB. El funcionamiento de este módulo está bajo el control de los procedimientos pertenecientes a la

Biblioteca especializada PWM. Tres de ellos se utilizan aquí:

1. PWM1_init tiene el prototipo: sub procedure PWM1_Init( const freq as

longint )

Parámetro de frecuencia fija la frecuencia de la señal PWM expresada en Herz. En este ejemplo es 5 KHz.

2. PWM1_Start tiene el prototipo: sub procedure PWM1_Start()

3. PWM1_Set_Duty tiene el prototipo: sub

procedure PWM1_Set_Duty( dim duty_ratio as byte )

Duty_ratio parámetro establece la duración del pulso en una secuencia de pulsos.

La biblioteca de PWM también contiene el procedimiento PWM_Stop utiliza para desactivar este

modo. Su prototipo es: sub procedurePWM1_Stop()

' Header ******************************************************

program example_6 ' Program name

dim current_duty, old_duty, oldstate as byte ' Define variables

current_duty

' old_duty and

oldstate

main: ' Start of program

ANSEL = 0 ' All I/O pins are configured as digital

ANSELH = 0

PORTA = 255 ' PORTA initial state

TRISA = 255 ' All PORTA pins are configured as inputs

PORTB = 0 ' Initial state of PORTB

TRISB = 0 ' All PORTB pins are configured as outputs

Page 265: mikrobasic0

PORTC = 0 ' PORTC initial state

TRISC = 0 ' All PORTC pins are configured as outputs

PWM1_Init(5000) ' PWM module initialization (5 KHz)

current_duty = 16 ' Initial value of variable current_duty

old_duty = 0 ' Reset variable old_duty

PWM1_Start() ' Start PWM1 module

while 1 ' Endless loop

if oldstate and Button(PORTA, 0,1,1) then ' If the button

connected to RA0 is pressed

current_duty = current_duty + 1 ' increment

variable current_duty

if Button(PORTA, 0, 1, 1) then

oldstate = 255

end if

end if

if oldstate and Button(PORTA, 1,1,1) then ' If the button

connected to RA1 is pressed

current_duty = current_duty - 1 ' decrement value

current_duty

if Button(PORTA, 1, 1, 1) then

oldstate = 255

end if

end if

if old_duty <> current_duty then ' If current_duty

and old_duty are not

PWM1_Set_Duty(current_duty) ' equal set PWM to

a new value,

old_duty = current_duty ' save the new

value

PORTB = old_duty ' and show it on

PORTB

end if

Delay_ms(200) ' 200mS delay

wend

end.

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes librerías en

el Library Manager antes de compilar:

PWM

Botón

Page 266: mikrobasic0

4,9 Ejemplo 7 Use un convertidor A / D

Un convertidor A / D, previsto en el PIC16F887 se utiliza en este ejemplo. ¿Es necesario decir que todo

es sencillo? Una señal analógica variable se aplica a la patilla AN2, mientras que el 10 - resultado poco de

conversión se muestra en los puertos PORTB y PORD (8 bits menos significativos en PORTD y 2 MSB en

PORTB). GND se utiliza como una tensión de referencia Vref negativo, mientras que el VCC se utiliza

como una referencia de tensión positiva.

Si utiliza una tensión varriable como Vref + (refiérase a la parte discontinua del esquema) que será capaz

de "estirar y encoger" el rango de medición de tensión.

En otras palabras, el convertidor A / D siempre genera un número binario de 10-bits, lo que significa que

detecta 1024 niveles de voltaje (210 = 1.024) en total. La diferencia entre dos niveles de tensión no es

siempre la misma. Cuanto menor es la diferencia entre Vref + y Vref-, menor es la diferencia entre dos

niveles de 1024. Como se puede ver, el convertidor A / D es capaz de detectar ligeros cambios en el

voltaje.

'Header******************************************************

program example_7 ' Program name

dim temp_res as word ' Variable temp_res is of word type

main: ' Start of program

ANSEL = 0x0C ' Pin AN2 is configured as analog

TRISA = 0xFF ' All PORTA pins are configured as inputs

Page 267: mikrobasic0

ANSELH = 0 ' Other pins are configured as digital

TRISB = 0x3F ' PORTB pins RB7 and RB6 are configured as

' outputs

TRISD = 0 ' All PORTD pins are configured as outputs

ADCON1.B4 = 0 ' Positive voltage reference is VCC.

while 1 ' Endless loop

temp_res = ADC_Read(2) ' Result of A/D conversion is copied

to temp_res

PORTD = temp_res ' 8 LSBs are moved to PORTD

PORTB = temp_res >> 2 ' 2 MSBs are moved to bits RB6 and RB7

wend

end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca de ADC en

el Library Manager antes de compilar:

ADC

4,10 Ejemplo 8 El uso de memoria EEPROM

Este ejemplo ilustra escribir y leer desde incorporada en la memoria EEPROM. El programa funciona

como sigue. El ciclo principal se lee la 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.

Page 268: mikrobasic0

'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

Page 269: mikrobasic0

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.

Page 270: mikrobasic0

'Header******************************************************

program example_9 ' Program name

dim shifter, portd_index as byte ' Variables shifter and

portd_index are of byte type

digit, number as word ' Variables digit and number

are of word type

portd_array as word[4] ' Array portd_array has 4

members of word type

sub function mask (dim num as Word) as Word ' Subroutine for

masking

select case num ' used to convert binary

case 0 result = $3F ' numbers into appropriate

case 1 result = $06 ' combination of bits to be

case 2 result = $5B ' displayed on LED display

case 3 result = $4F

case 4 result = $66

case 5 result = $6D

case 6 result = $7D

case 7 result = $07

case 8 result = $7F

case 9 result = $6F

end select ' Case end

end sub ' End of subroutine

sub procedure interrupt ' Start of interrupt routine

PORTA = 0 ' Turn off all 7-segment displays

PORTD = portd_array [portd_index] ' Send appropriate value to

PORTD

PORTA = shifter ' Turn on appropriate 7-segment

display

shifter = shifter << 1 ' Move shifter to the next digit

Page 271: mikrobasic0

if (shifter > 8) then

shifter = 1

end if

Inc(portd_index) ' Increment portd_index

if (portd_index > 3) then

portd_index = 0 ' Turn on 1st, turn off 4th 7segment

display

end if

TMR0 = 0 ' Reset TIMER0 value

T0IF_bit = 0 ' Clear Timer0 interrupt flag

end sub ' End of interrupt routine

main: ' Start of program

ANSEL = 0 ' Configure analog pins as digital I/O

ANSELH = 0

OPTION_REG = $80 ' Timer0 settings (Timer0 work as timer with

prescaler)

digit = 0 ' Initial value of variable digit

portd_index = 0 ' Turn on 1st LED display

shifter = 1 ' Initial value of variable shifter

TMR0 = 0 ' Clear Timer0

INTCON = $A0 ' Enable interrupt with GIE and T0IE bits

PORTA = 0 ' Clear PORTA

TRISA = 0 ' Set PORTA as output

PORTD = 0 ' Clear PORTD

TRISD = 0 ' Set PORTD as output

number = 6789 ' Some initial value on LED display

while TRUE ' Endless loop

digit = number / 1000 ' Extract thousands

portd_array[3] = mask(digit) ' and store it to PORTD array

digit = (number / 100) mod 10 ' Extract hundreds

portd_array[2] = mask(digit) ' and store it to PORTD array

digit = (number / 10) mod 10 ' Extract tens

portd_array[1] = mask(digit) ' and store it to PORTD array

digit = number mod 10 ' Extract ones

portd_array[0] = mask(digit) ' and store it to PORTD array

Delay_ms(1000) ' One second delay

Inc(number) ' Increment number

if (number > 9999) then ' Start to count from zero

number = 0

end if

wend

end. ' End of program

Page 272: mikrobasic0

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

Page 273: mikrobasic0

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

dim text as string [16] ' Variable text is of string

type

dim ch, adc_rd as word ' Variables ch and adc_rd are of

word type

dim tlong as longword ' Variable tlong is of longword

type

main: ' Start of program

TRISB = 0 ' All port PORTB pins are

configured as outputs

PORTB = 0xFF

INTCON = 0 ' All interrupts disabled

ANSEL = 0x04 ' Pin RA2 is configured as an

analog input

TRISA = 0x04

ANSELH = 0 ' Rest of pins is configured as

digital

Lcd_Init() ' LCD display initialization

Lcd_Cmd(_LCD_CURSOR_OFF) ' LCD command (cursor off)

Lcd_Cmd(_LCD_CLEAR) ' LCD command (clear LCD)

text = "mikroElektronika" ' Define the first message

Lcd_Out(1,1,text) ' Write the first message in the

first line

text = "LCD example" ' Define the second message

Lcd_Out(2,1,text) ' Write the second message in

the second line

ADCON1 = 0x80 ' A/D voltage reference is VCC

TRISA = 0xFF ' All PORTA pins are configured

as inputs

Delay_ms(2000)

text = "Voltage=" ' Define the third message

while 1 ' Endless loop

adc_rd = ADC_Read(2) ' A/D conversion. Pin RA2 is an

input.

Lcd_Out(2,1,text) ' Write result in the second

line

tlong = adc_rd * 5000 ' Convert the result in

millivolts

tlong = tlong / 1023 ' 0..1023 -> 0-5000mV

ch = (tlong / 1000) mod 10 ' Extract volts (thousands of

millivolts)

' 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

Page 274: mikrobasic0

Lcd_Chr_CP(48+ch) ' Write result in ASCII format

ch = (tlong / 10) mod 10 ' Extract tens of millivolts

Lcd_Chr_CP(48+ch) ' Write result in ASCII format

ch = tlong mod 10 ' Extract digits for

millivolts

Lcd_Chr_CP(48+ch) ' Write result in ASCII format

Lcd_Chr_CP("V") ' Write a mark for voltage "V"

Delay_ms(1) ' 1mS delay

wend

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.

Page 275: mikrobasic0

' 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 loop

if UART1_Data_Ready() then ' If data has been received

i = UART1_Read() ' read it

UART1_Write(i) ' and send it back

end if

wend

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

Page 276: mikrobasic0

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

Page 277: mikrobasic0

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 ' Extract

tens

text[2] = temp_whole mod 10 + 48 ' Extract

ones

temp_fraction = word(temp2write << (4-RES_SHIFT)) ' Extract

temp_fraction

temp_fraction = temp_fraction and 0x000F ' and

convert it to

temp_fraction = temp_fraction * 625 ' unsigned

int

text[4] = word(temp_fraction div 1000) + 48 ' Extract

thousands

text[5] = word((temp_fraction div 100) mod 10 + 48) ' Extract

hundreds

text[6] = word((temp_fraction div 10) mod 10 + 48) ' Extract

tens

Page 278: mikrobasic0

text[7] = word(temp_fraction mod 10) + 48 ' Extract

ones

Lcd_Out(2, 5, text) ' Print

temperature on Lcd

end sub

main: ' Start of program

ANSEL = 0 ' Configure analog pins as digital I/O

ANSELH = 0

text = "000.0000"

Lcd_Init() ' Initialize Lcd

Lcd_Cmd(_LCD_CLEAR) ' Clear Lcd

Lcd_Cmd(_LCD_CURSOR_OFF) ' Turn off cursor

Lcd_Out(1, 1, " Temperature: ")

Lcd_Chr(2,13,178) ' Print degree character, "C" for Centigrades

' Different LCD displays have different char code for degree

Lcd_Chr(2,14,"C") ' If you see greek letter ‘alpha’ type 178

instead of 223

while 1 ' Temperature is read in the main loop

Ow_Reset(PORTE, 2) ' Onewire reset signal

Ow_Write(PORTE, 2, 0xCC) ' Issue command SKIP_ROM

Ow_Write(PORTE, 2, 0x44) ' Issue command CONVERT_T

Delay_us(120)

Ow_Reset(PORTE, 2)

Ow_Write(PORTE, 2, 0xCC) ' Issue command SKIP_ROM

Ow_Write(PORTE, 2, 0xBE) ' Issue command READ_SCRATCHPAD

temp = Ow_Read(PORTE, 2)

temp = (Ow_Read(PORTE, 2) << 8) + temp

Display_Temperature(temp) ' Format and display result on Lcd

Delay_ms(520) ' 520 mS delay

wend

end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes librerías en

el Library Manager antes de compilar:

One_Wire

LCD

Page 279: mikrobasic0

4,15 Ejemplo 13 La generación de sonido, librería de sonidos ...

Las señales de audio a menudo se utiliza cuando es necesario llamar la atención del usuario para hacer

algo, para confirmar que uno de los botones es presionado, para advertir que los valores mínimos y

máximos se alcanzan, etc Puede ser sólo un "beep" como señal de así como melodías más largos o más

cortos. Este ejemplo muestra cómo generar un sonido con las funciones que pertenecen a la biblioteca de

sonido.

Adicionalmente a estas funciones, la función del botón también se utiliza para probar los pulsadores.

'Header******************************************************

program example_13 ' Program name

sub procedure Tone1()

Sound_Play(659, 250) ' Frequency = 659Hz, duration = 250ms

end sub

sub procedure Tone2()

Sound_Play(698, 250) ' Frequency = 698Hz, duration = 250ms

end sub

sub procedure Tone3()

Sound_Play(784, 250) ' Frequency = 784Hz, duration = 250ms

end sub

Page 280: mikrobasic0

sub procedure Melody() ' Play the melody "Yellow house"

Tone1() Tone2() Tone3() Tone3()

Tone1() Tone2() Tone3() Tone3()

Tone1() Tone2() Tone3()

Tone1() Tone2() Tone3() Tone3()

Tone1() Tone2() Tone3()

Tone3() Tone3() Tone2() Tone2() Tone1()

end sub

sub procedure ToneA() ' Tones used in Melody2 function

Sound_Play( 880, 50)

end sub

sub procedure ToneC()

Sound_Play(1046, 50)

end sub

sub procedure ToneE()

Sound_Play(1318, 50)

end sub

sub procedure Melody2() ' Play Melody2

dim counter as byte

for counter = 9 to 1 step -1

ToneA()

ToneC()

ToneE()

next counter

end sub

main: ' Start of program

ANSEL = 0 ' Configure analog pins as digital I/O

ANSELH = 0

C1ON_bit = 0 ' Disable comparators

C2ON_bit = 0

TRISB = 0xF0 ' Configure RB7..RB4 as inputs and RB3 as output

Sound_Init(PORTD, 3)

Sound_Play(880, 5000)

while TRUE ' Endless loop

if (Button(PORTB,7,1,1)) then ' If PORTB.7 is pressed play

Tone1

Tone1()

while (RB7_bit <> 0)

nop ' Wait for the button to be released

wend

end if

if (Button(PORTB,6,1,1)) then ' If PORTB.6 is pressed play

Tone1

Tone2()

Page 281: mikrobasic0

while (RB6_bit <> 0)

nop ' Wait for the button to be released

wend

end if

if (Button(PORTB,5,1,1)) then ' If PORTB.5 is pressed play

Tone1

Melody2()

while (RB5_bit <> 0)

nop ' Wait for the button to be released

wend

end if

if (Button(PORTB,4,1,1)) then ' If PORTB.4 is pressed play

Tone1

Melody()

while (RB4_bit <> 0)

nop ' Wait for the button to be released

wend

end if

wend

end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes librerías en

el Library Manager antes de compilar:

Botón

Sonido

Page 282: mikrobasic0

4,16 Ejemplo 14 Use pantalla LCD gráfica

Una pantalla gráfica LCD (GLCD) proporciona un método avanzado para la visualización de los mensajes

visuales. Mientras que la pantalla LCD de carácter sólo puede mostrar caracteres alfanuméricos, el GLCD

también puede mostrar los mensajes en forma de dibujos y mapas de bits. Los más comúnmente

utilizados gráfica LCD tiene una resolución de pantalla de 128x64 píxeles. El contraste GLCD se puede

ajustar por medio de potenciómetro P1.

Aquí, el GLCD muestra un camión del mapa de bits de los cuales se almacena en

la truck_bmp.mbas archivo.

'Header******************************************************

program example_14 ' Program name

dim GLCD_DataPORT as byte at PORTD

dim GLCD_CS1 as sbit at RB0_bit ' Glcd module connections

GLCD_CS2 as sbit at RB1_bit

GLCD_RS as sbit at RB2_bit

GLCD_RW as sbit at RB3_bit

GLCD_EN as sbit at RB4_bit

GLCD_RST as sbit at RB5_bit

dim GLCD_CS1_Direction as sbit at TRISB0_bit

GLCD_CS2_Direction as sbit at TRISB1_bit

GLCD_RS_Direction as sbit at TRISB2_bit

GLCD_RW_Direction as sbit at TRISB3_bit

GLCD_EN_Direction as sbit at TRISB4_bit

GLCD_RST_Direction as sbit at TRISB5_bit ' End Glcd module

Page 283: mikrobasic0

connections

dim counter as byte

someText as char[18]

sub procedure Delay2S() ' 2 seconds delay sub function

Delay_ms(2000)

end sub

main: ' Start of program

ANSEL = 0 ' Configure analog pins as digital I/O

ANSELH = 0

Glcd_Init() ' Initialize Glcd

Glcd_Fill(0x00) ' Clear Glcd

while TRUE ' Endless loop

Glcd_Image(@truck_bmp) ' Draw image

Delay2S() delay2S()

Glcd_Fill(0x00) ' Clear Glcd

Glcd_Box(62,40,124,63,1) ' Draw box

Glcd_Rectangle(5,5,84,35,1) ' Draw rectangle

Glcd_Line(0, 0, 127, 63, 1) ' Draw line

Delay2S()

counter = 5

while (counter <= 59) ' Draw horizontal and vertical

lines

Delay_ms(250)

Glcd_V_Line(2, 54, counter, 1)

Glcd_H_Line(2, 120, counter, 1)

Counter = counter + 5

wend

Delay2S()

Glcd_Fill(0x00) ' Clear Glcd

Glcd_Set_Font(@Character8x7, 8, 7, 32) ' Choose font

"Character8x7"

Glcd_Write_Text("mikroE", 1, 7, 2) ' Write string

for counter = 1 to 10 ' Draw circles

Glcd_Circle(63,32, 3*counter, 1)

next counter

Delay2S()

Glcd_Box(10,20, 70,63, 2) ' Draw box

Delay2S()

Glcd_Fill(0xFF) ' Fill Glcd

Glcd_Set_Font(@Character8x7, 8, 7, 32) ' Change font

someText = "8x7 Font"

Page 284: mikrobasic0

Glcd_Write_Text(someText, 5, 0, 2) ' Write string

delay2S()

Glcd_Set_Font(@System3x5, 3, 5, 32) ' Change font

someText = "3X5 CAPITALS ONLY"

Glcd_Write_Text(someText, 60, 2, 2) ' Write string

delay2S()

Glcd_Set_Font(@font5x7, 5, 7, 32) ' Change font

someText = "5x7 Font"

Glcd_Write_Text(someText, 5, 4, 2) ' Write string

delay2S()

Glcd_Set_Font(@FontSystem5x7_v2, 5, 7, 32) ' Change font

someText = "5x7 Font (v2)"

Glcd_Write_Text(someText, 5, 6, 2) ' Write string

delay2S()

wend

end. ' End of program

truck_bmp.mbas file:

module bitmap ' Module with bitmap code

const truck_bmp as byte[1024] =

(0,0,0,0,0,248,8,8,8,8,8,8,12,12,12,12,12,10,10,10,10,10,10,9,9

,9,9,9,9,9,9,9,9,

9,9,9,9,9,9,9,9,9,137,137,137,137,137,137,137,137,137,137,137,1

37,137,9,9,9,9,9,

9,9,9,9,9,9,13,253,13,195,6,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

,0,0,0,0,0,255,0,

0,0,0,0,0,0,0,0,0,240,240,240,240,240,224,224,240,240,240,240,2

40,224,192,192,22

4,240,240,240,240,240,224,192,0,0,0,255,255,255,255,255,195,195

,195,195,195,195,

195,3,0,0,0,0,0,0,0,0,0,0,0,0,255,240,79,224,255,96,96,96,32,32

,32,32,32,32,32,3

2,32,32,32,32,32,64,64,64,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0

,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,255,25

5,255,255,255,0,0

,0,0,255,255,255,255,255,0,0,0,0,255,255,255,255,255,0,0,0,255,

255,255,255,255,1

29,129,129,129,129,129,129,128,0,0,0,0,0,0,0,0,0,0,0,0,255,1,24

8,8,8,8,8,8,8,8,8

,8,8,8,8,8,8,16,224,24,36,196,70,130,130,133,217,102,112,160,19

2,96,96,32,32,160

,160,224,224,192,64,64,128,128,192,64,128,0,0,0,0,0,0,0,0,0,0,0

,0,0,0,0,0,0,0,0,

63,96,96,96,224,96,96,96,96,96,96,99,99,99,99,99,96,96,96,96,99

,99,99,99,99,96,9

6,96,96,99,99,99,99,99,96,96,96,99,99,99,99,99,99,99,99,99,99,9

9,99,99,96,96,96,

Page 285: mikrobasic0

96,96,96,96,64,64,64,224,224,255,246,1,14,6,6,2,2,2,2,2,2,2,2,2

,2,2,130,67,114,6

2,35,16,16,0,7,3,3,2,4,4,4,4,4,4,4,28,16,16,16,17,17,9,9,41,112

,32,67,5,240,126,

174,128,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,12

7,127,127,127,255

,255,247,251,123,191,95,93,125,189,189,63,93,89,177,115,243,229

,207,27,63,119,25

5,207,191,255,255,255,255,255,255,255,255,127,127,127,127,127,1

27,127,127,255,25

5,255,127,127,125,120,120,120,120,120,248,120,120,120,120,120,1

20,248,248,232,14

3,0,0,0,0,0,0,0,0,128,240,248,120,188,220,92,252,28,28,60,92,92

,60,120,248,248,9

6,192,143,168,216,136,49,68,72,50,160,96,0,0,0,0,0,0,0,0,0,128,

192,248,248,248,2

48,252,254,254,254,254,254,254,254,254,254,254,254,255,255,255,

255,255,246,239,2

08,246,174,173,169,128,209,208,224,247,249,255,255,252,220,240,

127,255,223,255,2

55,255,255,255,255,254,254,255,255,255,255,255,255,255,254,255,

255,255,255,255,2

55,255,254,254,254,254,254,254,254,254,254,254,254,254,254,254,

255,255,255,255,2

55,255,254,255,190,255,255,253,240,239,221,223,254,168,136,170,

196,208,228,230,2

48,127,126,156,223,226,242,242,242,242,242,177,32,0,0,0,0,0,0,0

,0,0,0,1,1,1,1,3,

3,3,7,7,7,7,7,15,15,15,7,15,15,15,7,7,15,14,15,13,15,47,43,43,4

3,43,43,47,111,23

9,255,253,253,255,254,255,255,255,255,255,191,191,239,239,239,1

91,255,191,255,25

5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2

55,255,255,255,25

5,255,255,255,255,255,255,127,127,127,127,255,255,191,191,191,1

91,255,254,255,25

3,255,255,255,251,255,255,255,127,125,63,31,31,31,31,31,31,63,1

5,15,7,7,3,3,3,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1

,1,3,3,3,11,11,11

,11,7,3,14,6,6,6,2,18,19,19,3,23,21,21,17,1,19,19,3,6,6,14,15,1

5,7,15,15,15,11,2

,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

implements

end. ' End of module

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca

GLCD en el Administrador de la Biblioteca antes de la compilación. Además, es necesario

incluir el Bitmap.mbas documento en el proyecto.

Page 286: mikrobasic0

4,17 Ejemplo 15 El uso de un panel táctil

Un panel táctil es un fino, autoadhesivo panel transparente colocado sobre la pantalla de un LCD

gráfico. Es muy sensible a la presión de modo que incluso un toque suave hace que algunos cambios en

la señal de salida. Hay unos pocos tipos de panel táctil. La más simple es un panel táctil resistivo.

Se compone de dos láminas transparentes rígidas, formando un "sandwich" estructura, que tienen capas

resistivas en sus lados interiores. La resistencia de estas capas generalmente no excede de 1K. Los lados

opuestos de estas láminas tienen contactos disponibles para su uso a través de un cable plano.

El proceso de determinación de las coordenadas del punto en el que se pulsa el panel táctil se puede

dividir en dos etapas. El primero es la determinación de la coordenada X y la segunda es la determinación

de la coordenada Y del punto.

Con el fin de determinar la coordenada X, es necesario conectar el contacto izquierdo en la superficie del

suelo a una y el contacto adecuado para la fuente de alimentación. Esto permite un divisor de tensión que

se forman prensando el panel táctil. El valor del divisor se lee en el contacto con el fondo de la tensión

superficial B. puede ir dentro del rango de 0 V a la fuente de alimentación (5V) y depende de la

coordenada X. Si el punto está más cerca del contacto izquierdo de la superficie A, la tensión será más

cercano a 0V.

Page 287: mikrobasic0

Con el fin de determinar la coordenada Y, es necesario conectar el contacto con el fondo en la superficie

B a tierra, y el contacto superior a la fuente de alimentación. En este caso, el voltaje se lee en el contacto

izquierdo de la superficie A.

Con el fin de conectar un panel táctil al microcontrolador es necesario proporcionar un circuito de control

del panel táctil. Por medio de este circuito, el microcontrolador conecta los contactos adecuados del panel

táctil al suelo y la fuente de alimentación (como se describió anteriormente) a fin de determinar las

coordenadas X e Y. El contacto inferior de la superficie B y el contacto izquierdo de la superficie A están

conectados al microcontrolador es un convertidor A / D. Las coordenadas X e Y se determina midiendo la

tensión en estos contactos, respectivamente. El programa relacionado describe un menú en la pantalla

gráfica LCD, vuelve el circuito de control del panel táctil de encendido / apagado (panel sensible al tacto

de conducción) y lee los resultados de la conversión A / D, que en realidad representan las coordenadas

X e Y del punto.

Sobre la base de estas coordenadas es posible decidir lo que quiere el microcontrolador que hacer. En

este ejemplo, el microcontrolador se activa / desactiva dos pines digitales conectados a los LEDs A y B.

Funciones pertenecientes a la GLCD, librares Glcd_Fonts y ADC se utilizan en este ejemplo.

Como la superficie del panel táctil es ligeramente más grande que la superficie de la pantalla LCD gráfico,

es necesario realizar la calibración del software del panel de toque con el fin de proporcionar una mayor

precisión al determinar las coordenadas

'Header******************************************************

program example_15 ' Name of program

dim GLCD_DataPORT as byte at PORTD ' GLCD module connections

dim GLCD_CS1 as sbit at RB0_bit

GLCD_CS2 as sbit at RB1_bit

GLCD_RS as sbit at RB2_bit

GLCD_RW as sbit at RB3_bit

GLCD_EN as sbit at RB4_bit

GLCD_RST as sbit at RB5_bit

dim GLCD_CS1_Direction as sbit at TRISB0_bit

GLCD_CS2_Direction as sbit at TRISB1_bit

GLCD_RS_Direction as sbit at TRISB2_bit

GLCD_RW_Direction as sbit at TRISB3_bit

Page 288: mikrobasic0

GLCD_EN_Direction as sbit at TRISB4_bit

GLCD_RST_Direction as sbit at TRISB5_bit ' End Glcd module

connections

dim x_coord, y_coord,

x_coord128, y_coord64 as longint ' Scaled x-y position

sub function GetX() as word ' Reading X

PORTC.0 = 1 ' DRIVEA = 1 (LEFT drive on, RIGHT

drive on, TOP drive off)

PORTC.1 = 0 ' DRIVEB = 0 (BOTTOM drive off)

Delay_ms(5)

result = ADC_Read(0) ' READ-X (BOTTOM)

end sub

sub function GetY() as word ' Reading Y

PORTC.0 = 0 ' DRIVEA = 0 (LEFT drive off, RIGHT

drive off, TOP drive on)

PORTC.1 = 1 ' DRIVEB = 1 (BOTTOM drive on)

Delay_ms(5)

result = ADC_Read(1) ' READ-X (LEFT)

end sub

main: ' Start of program

PORTA = 0x00

TRISA = 0x03 ' RA0 i RA1 are analog inputs

ANSEL = 0x03

ANSELH = 0 ' Configure other analog pins as digital I/O

PORTC = 0

TRISC = 0 ' PORTC pins are configured as outputs

Glcd_Init() ' Glcd_Init_EP5

Glcd_Set_Font(@font5x7, 5, 7, 32) ' Choose font size 5x7

Glcd_Fill(0) ' Clear GLCD

Glcd_Write_Text("TOUCHPANEL EXAMPLE",10,0,1)

Glcd_Write_Text("MIKROELEKTRONIKA",17,7,1)

Glcd_Rectangle(8,16,60,48,1) ' Outline two ‘buttons’ on GLCD:

Glcd_Rectangle(68,16,120,48,1)

Glcd_Box(10,18,58,46,1)

Glcd_Box(70,18,118,46,1)

Glcd_Write_Text("BUTTON1",14,3,0)

Glcd_Write_Text("RC6 OFF",14,4,0)

Glcd_Write_Text("BUTTON2",74,3,0)

Glcd_Write_Text("RC7 OFF",74,4,0)

while TRUE ' Read X-Y and convert it to 128x64 space

x_coord = GetX()

y_coord = GetY()

x_coord128 = (x_coord * 128) / 1024

y_coord64 = 64 -((y_coord *64) / 1024)

Page 289: mikrobasic0

' If BUTTON1 is selected:

if ((x_coord128 >= 10) and (x_coord128 <= 58) and (y_coord64 >=

18) and (y_coord64 <= 46)) then

if(PORTC.6 = 0) then

PORTC.6 = 1

Glcd_Write_Text("RC6 ON ",14,4,0)

else

PORTC.6 = 0

Glcd_Write_Text("RC6 OFF",14,4,0)

end if

end if

' If BUTTON2 is selected:

if ((x_coord128 >= 70) and (x_coord128 <= 118) and (y_coord64

>= 18) and (y_coord64 <= 46)) then

if(PORTC.7 = 0) then

PORTC.7 = 1

Glcd_Write_Text("RC7 ON ",74,4,0)

else

PORTC.7 = 0

Glcd_Write_Text("RC7 OFF",74,4,0)

end if

end if

Delay_ms(100)

wend ' While true

end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes librerías en el Library Manager antes de compilar:GLCD

ADC

C_Stdlib

4.18 Ejemplo 16 Utilice un teclado 4x4

Un teclado es sólo un conjunto de pulsadores conectados de tal manera para formar los filas 'y' columnas

', reduciendo así un número de pines I / O necesarias para su conexión. Un teclado con 16 pulsadores

dispuestos en 4 filas y 4 columnas se utiliza en este ejemplo. El teclado 4x4 biblioteca contiene todas las

funciones necesarias para la lectura de este teclado, así como para inicializar el puerto que está

conectado. A fin de demostrar el funcionamiento del teclado 4x4, el mensaje se muestra en una pantalla

LCD.

Page 290: mikrobasic0

'Header******************************************************

program example_16 ' Program name

dim kp, curX, curY as byte

dim keypadPORT as byte at PORTD ' This variable must be defined

in all projects using Keypad Lib.

' It define the port used for

keypad connection

dim LCD_RS as sbit at RB4_bit ' Lcd module connections

LCD_EN as sbit at RB5_bit

LCD_D4 as sbit at RB0_bit

LCD_D5 as sbit at RB1_bit

LCD_D6 as sbit at RB2_bit

LCD_D7 as sbit at RB3_bit

LCD_RS_Direction as sbit at TRISB4_bit

Page 291: mikrobasic0

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

main: ' Start of program

curX=1 ' For keeping a record of the 2x16 LCD

cursor position

curY=1

ANSEL = 0 ' Configure analog pins as digital I/O

ANSELH = 0

TRISB = 0

PORTB = 0xFF

Keypad_Init() ' Initialize keypad on PORTC

Lcd_Init() ' Initialize LCD on PORTB,

Lcd_Cmd(_LCD_CLEAR) ' Clear display

while true ' Wait for some key to be pressed and

released

kp = 0

while kp = 0

kp = Keypad_Key_Click()

Delay_ms(10)

wend

select case kp ' Prepare value for output

case 1 kp = "1"

case 2 kp = "2"

case 3 kp = "3"

case 4 kp = "A"

case 5 kp = "4"

case 6 kp = "5"

case 7 kp = "6"

case 8 kp = "B"

case 9 kp = "7"

case 10 kp = "8"

case 11 kp = "9"

case 12 kp = "C"

case 13 kp = "*"

case 14 kp = "0"

case 15 kp = "#"

case 16 kp = "D"

end select

if (curY > 16) then ' Change cursor position

if (curX = 1) then

Lcd_Cmd(_LCD_SECOND_ROW)

curX = 2

curY = 1

else

Lcd_Cmd(_LCD_FIRST_ROW)

curX = 1

curY = 1

Page 292: mikrobasic0

end if

end if

Lcd_Chr_CP(kp) ' Display on LCD

Inc(curY)

wend

end. ' End of program

Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes librerías en el Library Manager antes de compilar:

Keypad4x4

LCD