Documente Academic
Documente Profesional
Documente Cultură
La situacin nos encontramos hoy en el campo de los microcontroladores tiene sus inicios en el desarrollo de la tecnologa de circuitos integrados. Esto nos permiti almacenar cientos de miles de transistores en un chip, que era una condicin previa para la fabricacin de microprocesadores. Las primeras computadoras se hicieron mediante la adicin de perifricos, tales como las lneas de memoria, entrada / salida, temporizadores y otros circuitos, a la misma. Mayor incremento en la densidad de paquete result en el diseo de un circuito integrado que contena tanto el procesador y los perifricos. As es como el primer chip con una microcomputadora integrada, ms tarde conocido como el microcontrolador, se ha desarrollado.
1.1 Introduccin 1.2 NMEROS, NMEROS, NMEROS ... 1.3 debe conocer los detalles 1.4 Microcontroladores PIC
1.1 INTRODUCCIN
Novicios en electrnica piensa generalmente que el microcontrolador es el mismo que el microprocesador. Eso no es cierto. Se diferencian unas de otras muchas maneras. La diferencia primera y ms importante a favor del microcontrolador es su funcionalidad. A fin de que el microprocesador para ser utilizado, otros componentes, en primer lugar la memoria, se debe aadir a la misma. Aunque se considera una mquina de computacin potente, no es capaz de establecer una comunicacin directa con los perifricos. En su lugar, los circuitos especializados debe ser utilizado para este propsito. Esto es lo que era en el principio y sigue siendo la misma hoy en da.
Por otro lado, el microcontrolador est diseado para ser todo ello en una. No hay otros componentes perifricos especializados son necesarios para su funcionamiento como todos los circuitos necesarios, que de otra forma pertenecen a los perifricos, ya se han construido en l. Se ahorra tiempo y del espacio necesario en el diseo de un dispositivo.
funcionamiento debe ser probado por simulacin. Si todo funciona bien, la construccin del microcontrolador en el dispositivo. Si alguna vez tiene que cambiar, mejorar o actualizar el programa, simplemente lo hacemos. Hasta cundo? Hasta que usted se sienta satisfecho. Eso es todo.
Saba usted que todas las personas se pueden clasificar en uno de los 10 grupos-aquellos que estn familiarizados con el sistema numrico binario y los que no estn familiarizados con ella. T no lo
entiendes? A continuacin, siguen perteneciendo a este ltimo grupo. Si desea cambiar su estado de leer el siguiente texto que describe brevemente algunos de los conceptos bsicos que se utilizan ms en este libro (slo para estar seguros de que estamos en la misma pgina).
10 y 10
2?
es porque se utiliza diez dgitos diferentes (0, 1, 2, ... 8, 9). En otras palabras, se utiliza el sistema de base 10 el nmero, es decir, numrico decimal.
Es claramente el mismo nmero representado en dos sistemas numricos diferentes. La nica diferencia entre estos dos formatos es el nmero de dgitos que los componen. Un dgito (2) se utiliza para escribir el nmero 2 en sistema decimal, mientras que dos dgitos (1 y 0) se utilizan para su escritura en sistema binario. Actualmente, de acuerdo en que hay 10 grupos de personas? Bienvenido al mundo de la aritmtica binaria! Tiene usted alguna idea de dnde se utiliza? Excepto en condiciones de laboratorio estrictamente controladas, incluso los circuitos electrnicos ms complejos no puede determinar con precisin la diferencia entre dos tamaos (dos valores de tensin, por ejemplo) si son demasiado pequeos (inferiores a varios voltios). La razn para ello radica en el ruido y algo que se conoce como un "entorno de trabajo real" (los cambios impredecibles de la tensin de alimentacin, cambios de temperatura, la tolerancia a los valores de los componentes integrados, etc.) Imagine una computadora que opera en los nmeros decimales mediante la interpretacin de la siguiente manera: 0 = 0V, 1 = 5V, 2 = 10 V, 3 = 15V, 20V = 4 ... 9 = 45V. Alguien dijo bateras? Una solucin mucho ms simple es la lgica binaria en la que 0 indica que no hay tensin y 1 indica que hay una tensin. Es ms fcil escribir 0 o 1 en lugar de oraciones completas "no hay tensin" o "hay una tensin ', respectivamente. Se trata de un cero lgico (0) y un uno lgico (1) que hace frente a la electrnica perfectamente, y fcilmente lleva a cabo todas las operaciones matemticas infinitamente complejas. Obviamente, la electrnica estamos hablando de matemticas aplicadas en la que todos los nmeros estn representados por dos dgitos solamente y donde slo es importante saber si hay una tensin o no. Por supuesto, estamos hablando de la electrnica digital.
SISTEMA hexadecimales
En el comienzo del desarrollo de la computadora haba muchos problemas cuando se trabaja con nmeros binarios. Por esta razn, un nuevo sistema numrico, el uso de 16 smbolos diferentes y se estableci un llamado sistema numrico hexadecimal. Se compone de diez dgitos que se usan para (0, 1, 2, 3, ... 9) y seis letras del alfabeto A, B, C, D, E y F. Usted probablemente se preguntar cul es el
propsito de este aparente extraa combinacin? Basta con mirar lo bien que encaja la historia de los nmeros binarios y lo comprenders.
El mayor nmero que puede ser representado por 4 dgitos binarios es el nmero 1111. Se corresponde con el nmero 15 en un sistema decimal, mientras que se representa por la letra F en sistema hexadecimal. Es el mayor nmero de 1 dgito en el sistema hexadecimal.Ves cmo con habilidad se utiliza? El mayor nmero escrito con ocho dgitos binarios es al mismo tiempo el ms grande 2-dgitos hexadecimales. Recuerde que utilizan los ordenadores de 8 dgitos binarios. Coincidencia?
Cdigo BCD
Un cdigo BCD es un cdigo binario de los nmeros decimales (slo previa ponga B-C Oded ecimal D). Se compone de nmeros binarios cuatro dgitos que representan los diez primeros dgitos (0, 1, 2, 3 ... 8, 9). A pesar de que cuatro bits pueden dar 16 combinaciones posibles en total, el cdigo BCD hace ventaja de los primeros diez solamente.
1, 2
Para que los nmeros decimales de 0 a 3 para ser representados, lo que necesita slo dos dgitos binarios. Para un mayor nmero, los dgitos binarios adicionales deben ser utilizados. As, a fin de que los nmeros decimales de 0 a 7 para ser representados, tres dgitos binarios son necesarios, de los nmeros del 0 al 15, cuatro dgitos etc En pocas palabras, el mayor nmero binario que consta de n dgitos se obtiene cuando la base 2 se provoca por ny el resultado respectivo se resta por 1. Por ejemplo, si n = 4: Febrero
4a
1 = 16 - 1 = 15
En consecuencia, 4 dgitos binarios le permiten representar nmeros decimales de 0 a 15, lo que equivale a 16 valores diferentes en total.
Un cuadro comparativo de la izquierda muestra los valores de los nmeros 0-255 representados en tres diferentes sistemas numricos.Esta es probablemente la forma ms fcil de entender la lgica comn aplicado a todos los sistemas numricos.
BIT
En teora, un bit es la unidad bsica de informacin ... Vamos a olvidar esto por un momento y echar un vistazo a lo que es en la prctica.La respuesta es: nada especial, un poco es slo un dgito binario. Al igual que en el sistema de numeracin decimal, donde los mismos dgitos de un nmero no tiene el mismo valor (por ejemplo, los dgitos en el nmero decimal 444), la 'importancia' de bits depende de su posicin en el nmero binario. A diferencia del sistema numrico decimal, dgitos binarios que no se les conoce como las unidades, decenas, etc, pero el bit cero (poco ms a la derecha), primer bit (segundo desde la derecha), etc Dado que el sistema binario utiliza slo dos dgitos diferentes (0 y 1) , el valor de un bit puede ser 0 o 1. No se confunda si te encuentras con un poco tener un valor de 4, 16 o 64. Esto significa que su valor se representa en el sistema decimal. Simplemente estamos tan acostumbrados a la utilizacin de nmeros decimales que tales expresiones son muy comunes.Sera correcto decir por ejemplo, "el valor del bit sexto de cualquier nmero binario es equivalente a 64 nmero decimal". Pero somos humanos y los hbitos viejos son duros de matar ... Adems, cmo sonara 'nmero uno-uno-cero-uno-cero ...'?
BYTE
Un byte se compone de ocho bits se agrupan. Si un bit es un dgito, entonces bytes representan nmeros. Todas las operaciones matemticas se puede realizar sobre ellos, al igual que al comn de nmeros decimales. Al igual que los dgitos de cualquier nmero, los dgitos de bytes no tiene el mismo significado que sea. El mayor valor tiene el bit de la izquierda llamado el bit ms significativo (MSB).El bit de la derecha tiene el menor valor y por eso se llama el bit menos significativo (LSB). Desde ocho ceros y unos de un byte puede ser combinado en 256 formas diferentes, el nmero ms grande decimal que puede ser representado por un byte es 255 (una combinacin representa un cero). Un mordisco se conoce como medio de un byte. En funcin de la media del registro que estamos hablando (a la izquierda oa la derecha), hay "alto" y "bajo" mordiscos, respectivamente.
Te has preguntado lo que la electrnica dentro de circuitos integrados digitales, microcontroladores o procesadores parece? Qu circuitos de realizar complicadas operaciones matemticas y la toma de decisiones parece? Sabe usted que sus esquemas aparentemente complicadas comprenden slo unos pocos componentes diferentes llamados circuitos lgicos o compuertas lgicas?
conoce como AND, OR y NOT circuitos lgicos. El principio de la operacin se conoce como lgebra de Boole.
CIRCUITOS DE LGICA
Algunas de las instrucciones del programa dan los mismos resultados que las puertas lgicas. El principio de su funcionamiento se discutir ms adelante.
Y la puerta
La puerta lgica "Y" tiene dos o ms entradas y una salida. Vamos a suponer que la puerta utilizado en este ejemplo slo tiene dos entradas. Un uno lgico (1) aparecer en su salida solamente si ambas entradas (A y B) son impulsados alto (1). Tabla de la derecha muestra la dependencia mutua entre los insumos y de la puerta y de salida.
El principio de funcionamiento es el mismo, incluso cuando la puerta tiene ms de dos entradas: una lgica de un (1) aparecer en su salida solamente cuando todas las entradas son impulsados alto (1).Cualquier otra combinacin de tensiones de entrada dar como resultado un cero lgico (0) en su salida.Cuando se utiliza en el programa, la lgica y es realizado por una instruccin de programa que se discutirn ms adelante. Slo recuerde que la lgica y en el programa se refiere a los bits correspondientes de dos registros. O PUERTA
Del mismo modo, las puertas OR tambin tienen dos o ms entradas y una salida. Si la puerta tiene slo dos entradas se aplica lo siguiente. Un uno lgico (1) aparecer en la salida si cualquiera de las entradas (A o B) es excitada alta (1). Si la puerta O tiene ms de dos
entradas a continuacin, se aplica lo siguiente. Un uno lgico (1) aparece en su salida si al menos una entrada es excitada alta (1). Si todas las entradas estn a cero lgico (0), la salida ser a cero lgico (0) tambin.
El NO lgica de funcionamiento en el programa se lleva a cabo en un byte. El resultado es un byte con los bits invertidos. Si los bits de bytes se consideran un nmero, el valor invertido es en realidad un complemento de los mismos. El complemento de un nmero es un valor que aade a ese nmero lo hace llegar al mayor nmero de 8 dgitos binarios. En otras palabras, la suma de un nmero de 8 dgitos y su complemento es siempre 255.
EXCLUSIVA O PUERTA
La puerta OR EXCLUSIVA (XOR) es un poco complicado en comparacin con otras puertas. Es una especie de combinacin de todos ellos. Un uno lgico (1) aparece en su salida slo cuando sus entradas tienen diferentes estados lgicos.
En el programa, la instruccin apropiada se utiliza comnmente para comparar dos bytes. La resta tiene el mismo propsito (si el resultado es 0, los bytes son iguales), pero la ventaja de la operacin lgica OR EXCLUSIVA es que nunca da resultados negativos.
REGISTRO
En resumen, un registro o una clula de memoria es un circuito electrnico que puede memorizar el estado de un byte.
SFR REGISTROS
Adems de los registros que no tienen ninguna funcin especial y predefinida, cada microcontrolador tambin tiene un nmero de registros especiales de funcin (SFR) la funcin de los cuales est predefinida por el fabricante. Sus bits estn conectados (literalmente) a los circuitos integrados dentro del microcontrolador tales como temporizadores, convertidores A / D, osciladores etc Esto significa que son directamente al mando de la operacin de estos circuitos, es decir, el microcontrolador. Imagnese ocho interruptores que controlan el funcionamiento de un pequeo circuito dentro del microcontrolador Registros de funciones especiales hacer exactamente eso.
En otras palabras, el estado de los bits de registro se cambia desde dentro del programa, registros ejecutar pequeos circuitos integrados dentro del microcontrolador, estos circuitos son a travs de pines del microcontrolador conectados a los perifricos que se utilizan para ... Bueno, le toca a usted decidir para qu.
Una de las caractersticas importantes de los pines de entrada / salida (I / O) es una corriente mxima que pueden manejar. Para la mayora de los microcontroladores, la corriente suministrada desde un pasador es suficiente para activar un LED o algn otro dispositivo de bajo consumo (10-20 mA). Otra caracterstica importante es un pasador de resistencia ascendente puede ser proporcionado. La resistencia de actuacin conecta el pin apropiado a la tensin de alimentacin positiva. Tambin se puede utilizar cuando el pasador est configurado como una entrada conectada a un interruptor o un botn pulsador. Las versiones posteriores de microcontroladores disponen de resistencias pull-up configurables por software. Cada puerto de E / S es generalmente bajo el control de un SFR, lo que significa que cada bit de registro que determina el estado del pin microcontrolador correspondiente. Por ejemplo, escribiendo un uno lgico (1) a algunos de los bits de registro, el pin del microcontrolador apropiado es automticamente configurado como una entrada. La tensin suministrada al pasador que es visible en su puerto como 0 o 1. De lo contrario, por escrito un cero lgico a la SFR, el pasador de puerto correspondiente est configurado como una salida. Tensin proporcionada en tales una patilla de salida (0V o 5V) refleja el estado del bit de registro apropiado (lgica 0 o 1, respectivamente).
Unidad de memoria
El mdulo de memoria es una parte del microcontrolador utilizado para el almacenamiento de datos. La forma ms sencilla de explicarlo es mediante la comparacin con un armario con muchos cajones. Supongamos, los cajones estn claramente marcados para permitir que sus contenidos pueden ser fcilmente disponibles mediante la lectura de las etiquetas en la parte frontal de los cajones. De la misma manera, cada direccin de memoria corresponde a una posicin de memoria. El contenido de cualquier lugar se puede acceder y leer por su direccin. Memoria puede ser escrito o leer.
Hay varios tipos de memoria dentro del microcontrolador: Memoria de slo lectura (ROM)
Memoria de slo lectura (ROM) se utiliza para guardar de forma permanente el programa a ejecutar por el microcontrolador. El tamao de un programa se escriba depende del tamao de esta memoria. Microcontroladores actuales utilizan comnmente de 16 bits de direccionamiento, lo que significa que son capaces de hacer frente a un mximo de 64 Kb de memoria, es decir, 65.535 lugares. Si usted es un principiante, el programa apenas se superan los cientos de instrucciones. Existen varios tipos de ROM.
Tanto el proceso de fabricacin y caractersticas de la radiacin UV memoria EPROM son totalmente idnticos a OTP ROM. Sin embargo, el paquete del microcontrolador con esta memoria tiene una reconocible "ventana" en su lado superior. Se permite que los datos se borrarn bajo luz ultravioleta fuerte. Despus de unos minutos de tal 'tomar el sol' es posible cargar un nuevo programa en l. La instalacin de esta ventana es complicado, que normalmente afecta el precio. En nuestra opinin, por desgracia, negativo ... Memoria Flash
La memoria flash, conocida como la sucesora de la EPROM UV, se hizo en los aos 80 en los laboratorios de Intel. Dado que la memoria se puede escribir como un nmero prcticamente ilimitado de veces, los microcontroladores con memoria Flash ROM son ideales para el aprendizaje, la experimentacin y la produccin en pequea escala. Debido a su gran popularidad, la mayora de los microcontroladores se fabrican en la actualidad la tecnologa flash. Por lo tanto, si usted va a comprar un microcontrolador, el tipo que buscar es definitivamente Flash!
INTERRUMPIR
La mayora de los programas utilizan interrupciones en su ejecucin normal. El propsito del microcontrolador es principalmente para responder a los cambios en su entorno. En otras palabras, cuando una accin se lleva a cabo, el microcontrolador hace algo ... Por ejemplo, cuando se presiona un botn en un control remoto de televisin, el microcontrolador que registrarlo y responder al cambiar de un canal, subir el volumen o hacia abajo, etc Por lo tanto, el microcontrolador se pasan la mayor parte de su tiempo sin fin comprobar un par de botones durante horas o das, lo cual no es prctico en absoluto. Por ello, el microcontrolador se ha aprendido un truco durante su evolucin. En lugar de constante control de cada pin o bit, los delegados de microcontroladores de la "cuestin de espera" a un "especialista" que responda slo cuando la atencin pasa algo digno. Una seal que informa a la unidad central de proceso sobre dicha accin se llama una interrupcin.
BUS
Un bus se compone de 8, 16 o ms cables. Hay dos tipos de autobuses: el bus de direcciones y el bus de datos. El bus de direccin consiste en tantas lneas como sea necesario para el direccionamiento de memoria. Se utiliza para tranfer una direccin desde la CPU a la memoria. El bus de datos es tan ancha como datos, en este caso es de 8 bits o alambres de ancho. Se utiliza para conectar todos los circuitos dentro del microcontrolador.
Instrucciones de instrucciones del programa Decoder decodifica y ejecuta otros circuitos sobre la base de que; Unidad aritmtico lgica (ALU) realiza todas las operaciones matemticas y lgicas en los datos. El 'conjunto de instrucciones' que es diferente para cada familia microcontrolador muestra las capacidades de este circuito, y Acumulador es una SFR estrechamente relacionado con la operacin de la ALU. Es una especie de mesa de trabajo se utiliza para almacenar todos los datos en los que alguna operacin se va a realizar (suma, cambio / movimiento, etc.) Tambin almacena los resultados para ser utilizados en el procesamiento adicional. Uno de los SFR, llamado unregistro de estado (PSW), est estrechamente relacionada con el acumulador. Se muestra, en cualquier momento dado, el "estado" de un nmero almacenado en el acumulador (nmero es mayor o menor que cero, etc.) El acumulador es tambin llamado el registro de trabajo y que se conoce como registro W o por lo tanto slo W.
COMUNICACIN DE SERIE
Una conexin en paralelo entre el microcontrolador y los perifricos establecida a travs de puertos de entrada / salida es una solucin ideal cuando la distancia entre ellos es de varios metros. De lo contrario, cuando es necesario para establecer la comunicacin en distancias ms largas la conexin en paralelo est fuera de cuestin. Comunicacin serial se utiliza en su lugar. Hoy en da, la mayora de los microcontroladores disponen de varios mdulos diferentes para la comunicacin serie integrados en ellos como equipo estndar. Cul de estos mdulos se utilizar depende de muchos factores de los cuales los ms importantes son:
Cuntos dispositivos el microcontrolador tiene que intercambiar datos con? Con qu rapidez el intercambio de datos tienen que ser? Cul es la distancia entre los dispositivos? Es necesario para enviar y recibir datos al mismo tiempo?
Una de las cosas ms importantes sobre la comunicacin de serie es el protocolo que debe ser estrictamente observados. Se trata de un conjunto de reglas que permite a los dispositivos para interpretar correctamente los datos que intercambian. Afortunadamente, el propio microcontrolador se encarga de esto, de modo que el trabajo de los furnculos programador / usuario hasta la escritura simple (que se enven datos) y la lectura (los datos recibidos).
TRANSFERENCIA DE DATOS
La velocidad de datos se utiliza el trmino para designar el nmero de bits transferidos por segundo [bps]. Tenga en cuenta que se refiere a los bits, no bytes. De acuerdo con el protocolo, cada byte es transferido, junto con varios bits de control. Esto significa que un byte en la corriente de datos en serie puede constar de 11 bits. Por ejemplo, si la velocidad de datos es de 300 bps entonces mximo de bytes 37 y mnimo 27 puede ser transferida por segundo. Los mdulos ms utilizados de comunicacin en serie son los siguientes:
Un circuito inter-integrado es un mdulo para el intercambio de datos serie entre microcontroladores y circuitos integrados especializados de una nueva generacin. Se utiliza cuando la distancia entre estos dispositivos es corto (receptor y el transmisor estn generalmente en la misma placa impresa). La conexin se establece a travs de dos conductores. Uno se utiliza para transferencia de datos, mientras que el otro se utiliza para la sincronizacin (seal de reloj). Como puede verse en la figura a continuacin, un dispositivo siempre es un dispositivo maestro. Realiza el direccionamiento de un dispositivo esclavo antes de la comunicacin se inicia y controla el proceso de transferencia de datos. De esta manera un microcontrolador puede comunicarse con 112 dispositivos diferentes utilizando I2C. La velocidad de datos suele ser de 100 Kb / s (modo estndar) o 10 Kb / s (modo de cmara lenta velocidad de datos). Los
dispositivos con una velocidad de 3,4 Mb / s han aparecido recientemente. La distancia entre los dispositivos que se comunican a travs de un bus I2C se limita a varios metros.
OSCILADOR
Incluso impulsos generados por el oscilador habilitar una operacin armnica y sincrnica de todos los circuitos dentro del microcontrolador. El oscilador est configurada para utilizar un cristal de cuarzo o resonador cermico para la estabilizacin de la frecuencia, sino que tambin puede funcionar como un circuito independiente (como oscilador RC). Es importante decir que las instrucciones no se ejecutan a la velocidad impuesta por el propio oscilador, pero ms lenta varias veces. Esto sucede porque cada instruccin se ejecuta en varios pasos. En algunos microcontroladores, el mismo nmero de ciclos se requiere para ejecutar todas las instrucciones, mientras que en otros, el nmero de ciclos es diferente para diferentes instrucciones. Por consiguiente, si el microcontrolador utiliza cristal de cuarzo con una frecuencia de 20 Mhz, el tiempo de ejecucin de una instruccin no es 50ns, pero 200, 400 o 800 nS, dependiendo del tipo de microcontrolador.
Circuito de alimentacin
Hay dos cosas que vale la pena la atencin cuando se habla del circuito microcontrolador fuente de alimentacin:
Brown a cabo es una condicin potencialmente peligrosa que se produce en el momento en el microcontrolador est apagado o cuando la tensin de alimentacin se reduce a su valor mnimo debido al ruido. Como el microcontrolador se compone de varios circuitos con diferentes niveles de voltaje de funcionamiento, tal condicin puede causar su fuera de control de rendimiento. Con el fin de evitar que, el microcontrolador tiene generalmente un circuito integrado en reinicio que causa la condicin de reposicin que se produzca tan pronto como el microcontrolador entra en un estado de emergencia a cabo marrn. Pin de reset se refiere generalmente como MCLR (Master Reset En abierto). Se utiliza para causar una reposicin externa del microcontrolador mediante la aplicacin de un cero lgico (0) o un uno lgico (1) a la misma, la cual depende del tipo del microcontrolador. En caso de que el circuito fuera marrn no est integrado en el microcontrolador, un circuito simple externo para restablecer marrn puede ser conectado a la patilla MCLR.
TIEMPOS / contadores
El oscilador del microcontrolador utiliza cristal de cuarzo para su funcionamiento. Aunque no es la mejor solucin, todava hay muchas razones para utilizarlo. La frecuencia del oscilador como se define con
precisin y muy estable, de modo que los impulsos que genera son siempre la misma anchura, lo que les hace ideales para la medicin del tiempo. Tales osciladores se utilizan tambin en los relojes de cuarzo. Si es necesario medir el tiempo entre dos eventos, es suficiente para contar hasta impulsos generados por este oscilador.Esto es exactamente lo que hace que el temporizador.
La mayora de los programas usan estos en miniatura de los cronmetros electrnicos. Su corazn hace 8 - o 16 - bit, SFR los contenidos de los cuales se incrementa automticamente por cada pulso que viene. Una vez que un registro est totalmente cargado, una interrupcin puede ser generada. Si el temporizador utiliza un oscilador de cuarzo interno para su funcionamiento, entonces se puede utilizar para medir el tiempo entre dos eventos (si el valor almacenado en el registro del temporizador T1 es en el momento de la medicin se inicia, y T2 en el momento en que termina, entonces el tiempo transcurrido es igual al resultado de la resta T2-T1). Si los pulsos registros de uso suministrado desde una fuente externa a continuacin, tal temporizador se convierte en un mostrador. Esto es slo una explicacin sencilla del funcionamiento del temporizador / contador. Como usted ya sabe, es ms complicado en la prctica.
el temporizador de registro. Al incorporar un cristal de cuarzo con una frecuencia de 4 MHz se aplica lo siguiente: si una instruccin (un ciclo de mquina) tiene una duracin de cuatro perodos de oscilador de cuarzo a continuacin, mediante la incorporacin de un cristal de cuarzo con una frecuencia de 4 MHz este nmero se incrementa un milln de veces por segundo ( cada microsegundo).
Es fcil de medir los intervalos de tiempo cortos, de hasta 256 microsegundos, en la forma descrita anteriormente, ya que es el nmero ms grande que un registro puede almacenar. Esta restriccin puede ser fcilmente integrado por utilizar un oscilador ms lento, se registra con ms bits, prescaler o interrupciones. Las dos primeras soluciones tienen algunos inconvenientes por lo que es ms conveniente utilizar prescalers o interrumpe.
segundo escrutinio, minutos o das se puede cambiar en una rutina de interrupcin. Todo el proceso (a excepcin de la rutina de interrupcin) se realiza automticamente detrs de las escenas, lo que permite que los circuitos principales del microcontrolador para funcionar normalmente.
La figura anterior ilustra el uso de una interrupcin en el funcionamiento del temporizador. Los retrasos de duracin arbitraria, que tiene casi ninguna influencia en la ejecucin del programa principal, se puede obtener fcilmente mediante la asignacin de un pre-escalador al temporizador.
CONTADORES
Si el temporizador se suministra con los pulsos de la patilla de entrada del microcontrolador, entonces se convierte en un mostrador. Es evidente que el circuito electrnico mismo es capaz de funcionar en dos modos diferentes. La nica diferencia es que en este caso pulsos a ser contados llegan a travs de la patilla de entrada del microcontrolador y su duracin (anchura) es generalmente indefinido.Esta es la razn por que no se puede utilizar para medir el tiempo, pero puede ser utilizado para otros fines tales como contar los productos en una lnea de montaje, el nmero de eje de rotacin, etc pasajeros (dependiendo del sensor en uso).
Watchdog Timer
Un temporizador de vigilancia es un temporizador conectado a un oscilador RC independiente dentro del microcontrolador. Si el temporizador de vigilancia est habilitado, cada vez que se cuenta hasta el valor mximo, el restablecimiento microcontrolador se produce y la ejecucin del programa se inicia desde la primera instruccin. El objetivo es evitar que esto ocurra mediante el uso de un comando especfico. De todos modos, la idea se basa en el hecho de que cada programa se ejecuta en varios bucles ms largos o ms cortos. Si las instrucciones para el restablecimiento del temporizador de vigilancia se establecen en los lugares apropiados del programa, adems de comandos que se ejecutan con regularidad, entonces el funcionamiento del temporizador de vigilancia no afectar a la ejecucin del programa. Si por cualquier razn, por lo general debido al ruido de fabricacin, el contador de programa "se atasca" en algn lugar de memoria de la que no hay vuelta atrs, el temporizador de vigilancia no se
borrar, por lo que el valor del registro de estar constantemente incrementa alcanzar el mximo et voila ! El rel se desexcita y el programa se ejecutar desde el principio. .
Convertidor A / D
Las seales externas suelen ser fundamentalmente diferentes de los del microcontrolador reconoce (0V y 5V solamente) y por lo tanto tienen que ser convertidos en valores reconocibles. Un convertidor analgico a digital es un circuito electrnico que convierte las seales continuas a discretas nmeros digitales. En otras palabras, este circuito convierte un valor analgico en un nmero binario y la enva a la CPU para su procesamiento posterior. Este mdulo se utiliza as para la tensin de entrada de PIN (valor analgico) de medicin.
El resultado de la medicin es un nmero (valor digital) utilizados y transformados luego en el programa.
Arquitectura interna
Todos los microcontroladores actualizados implementar uno de los dos modelos bsicos de diseo y arquitectura de la Universidad de Harvard llamado Von-Neumann. Ellos representan dos formas diferentes de intercambio de datos entre la CPU y la memoria.
Von-Neumann ARQUITECTURA
Microcontroladores utilizando la arquitectura de von Neumann-slo tiene un bloque de memoria y un bus de 8 bits de datos. Como todos los datos se intercambian a travs de estas 8 lneas, el autobs se sobrecarga y la comunicacin es lenta e ineficiente. La CPU puede leer una instruccin o leer / escribir datos desde / hacia la memoria. Ambos procesos no puede realizarse al mismo tiempo desde las instrucciones y datos utilizan el mismo bus. Por ejemplo, si una lnea de programa que lee una memoria RAM registro llamado "suma" debe ser incrementado en uno (instruccin: incf SUM ), el microcontrolador har lo siguiente: 1. Lea la parte de la instruccin de programa que especifique Qu debe hacerse (en este caso el ' incf"instruccin para el incremento se va a realizar). 2. Lea la otra parte de la misma instruccin que especifica en qu datos se deben realizar (en este caso es la "suma" de registro). 3. Despus de haber sido incrementado, el contenido de este registro debe ser escrito en el registro de la que se ley (la direccin de la "suma" de registro).
El bus de datos se utiliza el mismo para todas estas operaciones intermedias cuando se intercambian datos entre la CPU y la memoria.
La arquitectura de Harvard
Microcontroladores que implementan la arquitectura Harvard dispone de dos buses de datos diferentes. Uno es de 8 bits de ancho y se conecta a la CPU a la RAM. El otro consiste en 12, 14 o 16 lneas y se conecta a la CPU a ROM. En consecuencia, la CPU puede leer una instruccin y memoria de acceso de datos al mismo tiempo. Puesto que todos los registros de memoria RAM son 8 bits de ancho, todos los datos se intercambian es de la misma anchura. Durante el proceso de escritura, slo de 8 bits de datos se incluye. En otras palabras, todo lo que puede cambiar desde el programa y todo lo que puede hacer frente es de 8 bits de ancho. Todos los programas escritos para estos microcontroladores se almacena en la ROM interna microcontrolador despus de ser compilado en cdigo mquina.Sin embargo, las ubicaciones de memoria ROM no son 8, pero 12 de ancho, 14 o 16 bits. El resto de los bits 4, 6 u 8, respectivamente, representa la instruccin solo se especifique para la CPU qu hacer con los datos de 8-bits.
Las ventajas de esta arquitectura son los siguientes:
Todos los datos en el programa es de un byte (8 bits) de ancho. A medida que el bus de datos utilizado para la lectura programa tiene 12, 14 o 16 lneas, tanto la instruccin y los datos se pueden leer simultneamente el uso de estos bits de reserva. Por esta razn, todas las instrucciones son de un solo ciclo de instrucciones, excepto en la instruccin de salto que es de dos tiempos. Debido al hecho de que el programa (ROM) y los datos temporales (RAM) utilizar buses separados, la CPU puede ejecutar dos instrucciones al mismo tiempo. En otras palabras, mientras que la RAM de lectura o escritura est en curso (el extremo de una instruccin), la instruccin siguiente programa es ledo a travs del bus otra. Con microcontroladores con la arquitectura de von Neumann, uno nunca sabe la cantidad de memoria para ser ocupado por el programa. Bsicamente, la mayora de las instrucciones del programa ocupan dos posiciones de memoria (uno contiene informacin sobre lo que debe hacer, mientras que la otra contiene informacin sobre la cual los datos se debe hacer). Sin embargo, no es una regla dura y rpida, pero el caso ms comn. En la arquitectura de Harvard el bus programa es ms ancho que un byte, que permite a cada palabra programa que consiste de instruccin y de datos, es decir, una posicin de memoria - una instruccin de programa.
INSTRUCCIONES DE JUEGO
Todas las instrucciones reconocibles por el microcontrolador se colectivelly llamado el conjunto de instrucciones. Cuando se escribe un programa en lenguaje ensamblador, en realidad se especifican las instrucciones en el orden que deben ser ejecutados. La restriccin principal es el nmero de instrucciones disponibles. Los fabricantes suelen emplear una de las dos soluciones opuestas y microcontroladores de diseo que implementan el nmero ms pequeo o ms grande posible de instrucciones. En otras palabras - que escoger entre RISC y CISC conjuntos de instrucciones, respectivamente. RISC (ORDENADOR conjunto reducido de instrucciones)
En este caso, el microcontrolador reconoce y ejecuta las operaciones bsicas solamente (suma, resta, copiado, etc.) Otras operaciones, ms complicadas se realizan mediante la combinacin de ellos. Por ejemplo, la multiplicacin en el programa debe ser realizado como una adicin sucesiva. Es lo mismo que si usted trata de explicar a alguien, utilizando slo unas pocas palabras diferentes, la forma de llegar al aeropuerto en una gran ciudad. Sin embargo, no es tan negro como lo ha pintado. Como cuestin de hecho, no es tan difcil de explicar donde est el aeropuerto si usted usa las palabras correctas, como izquierda, derecha, kilmetros, etc
hacer que varios de estos dispositivos? Varios cientos de? Un milln? De todos modos, usted consigue el punto. Si usted piensa en todas estas cosas por primera vez, entonces todo parece un poco complicado. Que sea simple e ir paso a paso. En primer lugar, seleccione el fabricante, es decir, la familia de microcontroladores usted puede conseguir fcilmente. Estudio de un modelo en particular. Aprenda todo lo que necesita, no entrar en detalles. Resolver un problema especfico y algo increble va a suceder, usted ser capaz de manejar cualquier modelo perteneciente a la familia de microcontroladores. Recuerde que aprender a andar en bicicleta. Despus de varias contusiones que recibi cuando empez, que fueron capaces de mantener el equilibrio y entonces fcilmente montar cualquier otra bicicleta. Y, por supuesto, que nunca olvidar la programacin de la misma manera que nunca se olvidar en bicicleta!
Famil ia
RO M [Kb ytes ]
RA M [by tes ]
Pi ne s
Entr ada sA /D
Co mp ardor es
Co m m de ser ie.
Sal ida s PW M
Otr os
Base-Lnea 8 - bits, 12 bits de longitud de palabra de instrucciones PIC10 FXXX PIC12 FXXX PIC16 FXXX PIC16 HVXX X 0,37 5a 0,75 0,75 a 1,5 0,75 a3 16 a 24 25 a 38 25 a 134 25 6 a 8 8 14 a 44 18 a 20 4a8 0a 2 0a 3 0a 3 8 0a 1 0a 1 0a 2 1x8 EEP RO M EEP RO M Vdd = 15V
4a8
1x8
20
1x8
1.5
20
1x8
Mid-Range 8 - arquitectura de bits, 14 bits de instrucciones Largo del Mundo PIC12 FXXX PIC12 HVXX X PIC16 FXXX 1,75 a 3,5 1,75 64 a 128 64 8 20 0a 4 0a 4 10 1 1a2x 8 1 x 16 1a2x 8 1 x 16 0a 1 0a 1 EEP RO M -
20
10
1,75 a 14
64 a 368 64 a 128
14 a 64 14 a 20
20
0a 13
8o 10
0a 2
1a2x 8 1 x 16
0a 3
PIC16 HVXX X
1,75 a 3,5
20
0a 12
10
2x81 x 16
High-End 8 - la arquitectura bits, 16 bits de longitud de palabra de instrucciones 2.0 CA N2. 0 US ART I2C SPI US B 2.0 Eth ern et US ART I2C SPI US ART I2C SPI
PIC18 FXXX
4a 128
256 393 6
18 a 80
32 a 48
4a 16
10 o 12
0a 3
0a 5
PIC18 FXXJX X
8a 128
102 4393 6
28 a 10 0
40 a 48
10 a 16
10
2a 5
PIC18 FXXKX X
8a 64
768 393 6
28 a 44
64
10 a 13
10
1x83 x 16
Todos los microcontroladores PIC uso arquitectura Harvard, lo que significa que su memoria de programa se conecta a la CPU durante ms de 8 lneas. Dependiendo del ancho de bus, hay 12 -, 14 - y los microcontroladores de 16 bits. Tabla de arriba muestra las principales caractersticas de estas tres categoras. Como se puede observar en la tabla de la pgina anterior, si hacemos caso omiso de '16-bit monsters'PIC 24FXXX y 24HXXX PIC por un momento, todos los microcontroladores PIC de 8 bits arquitectura de la Universidad de Harvard y pertenecen a una de cada tres grandes grupos. En consecuencia, dependiendo del tamao de la palabra programa hay la categora microcontrolador primera, segunda y tercera, es decir, 12 -, 14 - o microcontroladores de 16-bit. Tener similares de 8-bit del ncleo, todos ellos utilizan el mismo conjunto de instrucciones y el esqueleto del hardware bsico conectado a unidades ms o menos perifrica. Microcontroladores PIC con las palabras del programa de 14 bits son los ms probable es que la mejor opcin para los principiantes. He aqu por qu ...
INSTRUCCIONES DE JUEGO
El conjunto de instrucciones para la 16F8XX incluye 35 instrucciones en total. La razn de un nmero tan pequeo de instrucciones reside en la arquitectura RISC. Las instrucciones estn bien optimizados desde el punto de velocidad de funcionamiento, la sencillez en la arquitectura y la compacidad del cdigo. El inconveniente de la arquitectura RISC es que el usuario se espera para hacer frente a estas instrucciones. Por supuesto, esto slo es relevante si se utiliza el lenguaje ensamblador para la programacin. Este libro trata de la programacin en un lenguaje de programacin de alto nivel denominado bsico, lo que significa que la mayora del trabajo ha sido ya realizada por otra persona. Slo tienes que usar las instrucciones relativamente simples.
Tiempo de ejecucin de
Todas las instrucciones de los microcontroladores PIC son de un solo ciclo de instrucciones. La nica excepcin son las instrucciones condicionales rama (si se cumple este requisito) y las instrucciones llevados a cabo en el contador de programa. En ambos casos, dos ciclos son necesarios para la ejecucin de la instruccin, mientras que el segundo ciclo se ejecuta como un NOP (no operacin). De ciclo simple las instrucciones consisten en cuatro ciclos de reloj. Esto significa que si un oscilador 4MHz se utiliza, se tardar 1S para una instruccin a ejecutar. El tiempo de ejecucin de la instruccin de instrucciones de salto es 2S. Instruccin del programa conjunto de palabras de 14 bits microcontroladores PIC: INSTRUCCIN DESCRIPCIN OPERACIN BANDERA CLK *
Instrucciones de transferencia de datos MOVLW k MOVWF f MOVF f, d CLRW Mueva constante a W Mover W a f Mover f para d Clear W k -> w W -> f f -> d 0 -> W Z Z 1 1 1 1 1, 2
CLRF f SWAPF f, d
1 1
2 1, 2
Lgica y aritmtica-Instrucciones ADDLW k ADDWF f, d SUBLW k SUBWF f, d Andlw k ANDWF f, d IORLW k IORWF f, d XORWF f, d XORLW k INCF f, d DECF f, d RLF f, d RRF f, d COMF f, d Aadir W y constante Aadir W y F Resta W de la constante Restar W de f Y lgico con W con una constante Y lgico con W con f OR lgico con W con una constante OR lgico con W con f Lgico OR exclusivo con W con constante Lgico OR exclusivo con W con f Incrementa f en 1 Disminuir f por una Gire f izquierdo a travs de bit de acarreo Gire f derecha a travs de bit de acarreo Complementar f f -> d W + K -> W W + f -> d kW -> W FW -> d W y K -> W W y F -> d W o K -> W W o f -> d W XOR k -> W W XOR f -> d f 1 -> f F-1 -> f C, DC, Z C, DC, Z C, DC, Z C, DC, Z Z Z Z Z Z Z Z Z C C Z 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2
Orientados a bits Instrucciones BCF f, b BSF f, b B poco clara en la f B poco clara en la f 0 -> f (b) 1 -> f (b) 1 1 1, 2 1, 2
Instrucciones de control del programa BTFSC f, b Prueba bit b de f. Salta la siguiente instruccin, si claro. Prueba bit b de f. Salta la siguiente instruccin Salta si f (b) = 0 Salta si f (b) = 1 1 (2) 3
BTFSS F, B
1 (2)
si se establece. DECFSZ f, d Disminuir f. Salta la siguiente instruccin, si claro. Incrementar f. Salta la siguiente instruccin si se establece. Ir a direccin Llame a subrutina Retorno de la subrutina Volver con la constante en la W Retorno de interrupcin F-1 -> d salto si Z=1 f 1 -> d salto si Z=0 k -> PC PC -> TOS, k > PC Archivo -> PC k -> W, Archivo -> PC Archivo -> PC, 1 -> GIE 1 (2) 1, 2, 3 1, 2, 3
1 (2) 2 2 2 2 2
Otras instrucciones NOP CLRWDT DORMIR No hay operacin Borrar temporizador de vigilancia Entra en el modo de suspensin Archivo -> PC, 1 -> GIE 0 -> WDT, 1 -> A, 1 -> EP 0 -> WDT, 1 -> A, 0 -> EP A, PD A, PD 1 1 1
* 1 Cuando un registro de E / S se modifica, el valor utilizado ser el valor actual de los mismos pines. * 2 Si se ejecuta la instruccin en el registro TMR y si d = 1, el pre-escalador se borrar. * 3 Si el PC se modifica o resultado de la prueba es un uno lgico (1), la instruccin requiere dos ciclos. El segundo ciclo se ejecuta como un NOP.
La arquitectura de los microcontroladores PIC de 8 bits. Which of these modules are to be built into the microcontroller depends on the type thereof.
2.1 LENGUAJES DE PROGRAMACIN 2.2 LAS BASES DEL lenguaje de programacin BASIC 2.3 COMPILADOR mikroBasic PRO PARA PIC
El microcontrolador ejecuta el programa cargado en la memoria Flash.Es un cdigo ejecutable llamado que consta de una secuencia aparentemente extraa de ceros y unos. Dependiendo de la arquitectura del microcontrolador, este cdigo binario est organizado en 12 -, 14 - o 16bit de las palabras de ancho. Cada palabra es considerada por la CPU como una instruccin a ejecutar durante el funcionamiento del microcontrolador. Como es mucho ms fcil para nosotros tratar con el sistema numrico hexadecimal, el cdigo ejecutable suele ser representado como una secuencia de nmeros hexadecimales denominada cdigo hexadecimal que, hace mucho tiempo, sola ser escrito por el programador. Todas las instrucciones que el microcontrolador puede reconocer y ejecutar se conocen colectivamente como el conjunto de instrucciones. Para los microcontroladores PIC de 14 bits con palabras de programa de ancho, el conjunto de instrucciones incluye 35 instrucciones diferentes.
Como la escritura de cdigo ejecutable fue infinitamente cansado, el primer lenguaje de alto nivel de programacin llamado lenguaje ensamblador fue creado. Esto hizo que el proceso de programacin de un poco ms complicado, pero por otro lado el proceso de escribir el programa dej de ser una pesadilla. Instrucciones de montaje consisten en abreviaturas significativas que se compilan en el cdigo ejecutable por medio de un programa especial instalado en un PC llamado ensamblador. Se compila la instruccin por instruccin sin optimizacin. Las principales ventajas del lenguaje ensamblador son su simplicidad y el hecho de que cada instruccin del programa coincide con una sola posicin de memoria. En otras palabras, el lenguaje ensamblador permite un control completo de todos los procesos que son en curso dentro del microcontrolador, que todava hace que sea popular hoy en da.
Por otro lado, los programas se ejecutan siempre a altas velocidades y en la mayora de los casos no es necesario conocer en detalle lo que est pasando dentro del microcontrolador. A pesar de todos los buenos atributos del lenguaje ensamblador, los programadores siempre han necesitado un lenguaje de programacin similar al lenguaje que utilizan en el habla cotidiana. Por ltimo, de alto nivel, incluyendo lenguajes de programacin Basic, se han creado. La principal ventaja de estos idiomas es una simplicidad de la escritura del programa. Varias instrucciones de montaje se sustituyen ahora por una declaracin en la base. El programador no tiene que estar familiarizado con el conjunto de instrucciones del microcontrolador en desuso. Ya no es posible saber cmo cada instruccin se ejecuta, pero no importa de todos modos. En caso afirmativo, el problema se resuelve mediante la adicin de una secuencia escrito en lenguaje ensamblador para el programa.
Al igual que en lenguaje ensamblador, un programa especializado instalado en el PC es el encargado de compilar el programa en cdigo mquina. A diferencia de ensamblador, compiladores para lenguajes de programacin de alto nivel crear un cdigo ejecutable que no siempre es el ms corto posible.
La figura anterior muestra un ejemplo aproximado de lo que est sucediendo durante el proceso de compilar un programa escrito en Basic en un cdigo hexadecimal. Aqu es un ejemplo de un sencillo programa escrito en Basic:
permite realizar operaciones complejas se haca dividido en una serie de ideas simples. En consecuencia, la multiplicacin puede ser fcilmente sustituido por adicin sucesiva (axb = a + a + un + ... + a). Y aqu estamos, justo en el comienzo de una historia muy larga ... Todava no hay ninguna razn para preocuparse por lo que usted utilice uno de los lenguajes de programacin de alto nivel, como Basic, como el compilador de forma automtica encontrar una solucin a estas cuestiones y otras similares. Slo tienes que escribir a * b.
El lenguaje de programacin Basic es un lenguaje de programacin sencillo y fcil de entender. Para usarlo correctamente, es suficiente para conocer algunos de los elementos bsicos que cada programa se compone de. Estos son:
Identificadores Comentarios Operadores Expresiones Instrucciones Constantes Variables Smbolos Directivas Etiquetas Los procedimientos y funciones Mdulos
Aqu est un ejemplo de cmo no se debe escribir un programa.No hay comentarios estn incluidos, los nombres de las etiquetas de los no tienen sentido, las secciones de cdigo no se agrupan ... Este programa va a funcionar correctamente, pero su propsito y la forma de ejecucin ser slo conocido por el programador que lo ha escrito (al menos por un da o dos).
La siguiente figura ilustra la estructura de un programa simple escrito en Basic, sealando las partes que la componen. Este es un ejemplo de cmo se debe escribir un programa. Las diferencias son ms que obvias ...
automticamente varios documentos en adicin a la misma. El propsito de estos documentos no es importante en este punto. Por supuesto, debe haber algo que conecte a todos. Te das cuenta - estamos hablando de un proyecto. El programa se escribe es slo una parte de ella.
Slo para estar seguros de que estamos en la misma pgina ... A partir de ahora el mdulo de la palabra refiere a un documento con la extensin. MBA. El texto que contiene se refiere como un programa. Cada proyecto escrito en el PRO mikroBasic para PIC compilador tiene la extensin. Mbppi (m ICRO B ASIC P royecto para PI C) y se compone de al menos un mdulo (mdulo principal). Cada proyecto en mikroBasic PRO para PIC requiere un mdulo principal nico. Se identifica por el programa y la palabra clave indica al compilador desde donde iniciar el proceso de compilacin. Al crear con xito un proyecto vaco en el asistente de proyectos, el mdulo principal se mostrarn automticamente en la ventana Editor de cdigo:
MyProject ' The main module is called MyProject here main: ' Main procedure ... '* ... '* Write program code here ... '* end.
Nada puede preceder a la palabra clave del programa, a excepcin de los comentarios. Como se mencion anteriormente, el proyecto tambin puede incluir otros mdulos que, a diferencia de la principal, comienzan con la palabra clave mdulo.
module MyModule ' Auxiliary module is called MyModule ... '* ... '* Implements ... '* end.
Para hacer que el compilador de familiarizarse con todos los mdulos que forman parte de un proyecto, es necesario especificar en el mdulo principal utilizando la palabra clave incluyen seguido de un nombre de mdulo citado. La extensin de estos archivos no deben ser incluidos. Slo un mdulo por la clusula de inclusin est permitida. El nmero de incluir clusulas no es limitado, pero todos ellos deben ser especificados inmediatamente despus del nombre del programa (mdulo principal). He aqu un ejemplo:
principal program MyProgram ' Start of program (main module named MyProgram) ' Other modules included are: include "utils" ' Module "utils" include "strings" ' Module "strings" include "MyUnit" ' Module "MyUnit" ... ORGANIZACIN DEL MDULO PRINCIPAL
Bsicamente, el mdulo principal se puede dividir en dos secciones: declaraciones y el cuerpo del programa. Qu es una declaracin en la programacin? Una declaracin es un proceso de definicin de las propiedades de los identificadores para ser utilizados en el programa. Como la mayora de otros lenguajes de programacin, bsico tambin requiere que todos los identificadores que se declar antes de ser utilizado en el programa. De lo contrario, el compilador puede no ser capaz de interpretar correctamente. As es como una declaracin de una distancia variable llamada se ve as:
Como puede verse, es una variable de punto flotante, es decir, un nmero con decimales opcionales. Otras dos variables se declaran y el nombre de velocidad y el tiempo. Ahora, pueden ser utilizados en el programa de la siguiente manera: Este es un ejemplo de cmo escribir el mdulo principal correctamente:
IDENTIFICADORES
Los identificadores son nombres arbitrarios asignados a los objetos de lenguaje bsicas, tales como constantes, variables, funciones, procedimientos, etc Alguien acaba de llegar a una idea de usar el identificador de la palabra en lugar del nombre. Tan simple como eso.Aqu hay algunas reglas que deben observarse en la utilizacin de identificadores:
Los identificadores pueden contener todas las letras del alfabeto (maysculas y minsculas), nmeros (0-9) y el carcter guin bajo (_). El primer carcter de un identificador no debe ser un dgito. Ningn identificador puede contener caracteres especiales como! [{# $% &, Etc Basic no distingue entre maysculas y minsculas, lo que significa que primero, primer y la primera se consideran idnticos. La ^ (acento circunflejo) smbolo se utiliza para referirse a un operador de exponenciacin, el * (asterisco) smbolo se utiliza para denotar la multiplicacin, mientras que los otros smbolos tienen sus significados habituales. Palabras clave est ya utilizados por el compilador no debe utilizarse como identificadores de las palabras clave mikroBasic enumerados en la siguiente tabla: Resumen
Abstract And Array As At Asm Assembler Automated Bdata Begin Bit Case Cdecl Class Code Compact Const Constructor Contains Data Default Deprecated Destructor Dispid Dispinterface Div Do Downto Dynamic Else End Except Export Exports External Far File Finalization Finally For Forward Function Goto Idata If Ilevel Implementation In Index Inherited Initialization Inline Interface Io Is Label Large
Library Message Mod Name Near Nil Not Object Of On Or Org Out Overload Override Package Packed Pascal Pdata Platform Private Procedure Program Property Protected Public Published Raise Read Readonly Record Register Reintroduce Repeat Requires Resourcestring Rx Safecall Sbit Set Sfr Shl Shr Small Stdcall Stored String Stringresource Then Threadvar To Try Type Unit Until Uses Var
COMENTARIOS
Los comentarios son partes del programa que sirve para proporcionar ms informacin sobre el programa y que quede claro para el usuario. En Basic, cualquier texto que sigue a una comilla simple (') se considera un comentario. Los comentarios no se compila en cdigo ejecutable. El compilador es capaz de reconocer los caracteres especiales utilizados para marcar el lugar donde comienzan los comentarios e ignora por completo el texto siguiente durante la compilacin. A pesar de que los comentarios no pueden afectar a la ejecucin del programa, que son tan importantes como cualquier otra parte del programa, porque casi todos los programas hay que mejorar, modificar, actualizar o simplificado en algn momento. Sin comentarios, es casi imposible de entender, incluso los programas ms simples.
ETIQUETAS
Las etiquetas proporcionan la manera ms fcil de controlar el flujo del programa. Se utilizan para marcar las lneas particulares en el programa de instruccin de salto y en su caso son subrutina que se jecutar. Todas las etiquetas deben ser denunciado por ':' para que el compilador puede reconocer.
CONSTANTES
Una constante es un nmero o un carcter cuyo valor no se puede cambiar durante la ejecucin del programa. A diferencia de las variables, las constantes se almacenan en la memoria ROM del microcontrolador con el fin de ahorrar espacio de memoria como mucho de RAM como sea posible. El compilador reconoce constantes por sus nombres y const prefijo. Cada constante se declara bajo un nombre nico que debe ser un identificador vlido. Las constantes estn disponibles en formatos decimal, hexadecimal y binario. El compilador distingue entre ellos de acuerdo con sus prefijos. Si una constante no tiene prefijo, se considera decimal por defecto. FORMATO Decimal Hexadecimal Binario 0x o $ De punto flotante PREFIJO EJEMPLO const MAX = 100 const MAX = 0xFF const MAX =% 11011101
Las constantes se declaran en la parte de declaracin del programa o rutina. La sintaxis de las constantes es la siguiente:
Los nombres de constantes se suelen escribir en maysculas. El tipo de una constante es automticamente reconocido por su tamao.En el ejemplo siguiente, el mnimo constante se considera un entero con signo y se almacena dentro de dos bytes de memoria flash (16 bits):
Tipo de constante se especifica opcionalmente. En ausencia de tipo, el compilador asume que el "pequeo" tipo que se puede acomodar el valor constante.
const MAX as longint = 10000 const MIN = 1000 ' Compiler will assume word type const SWITCH = "n" ' Compiler will assume char type
En el siguiente ejemplo, un T_MAX constante llamada se declara a fin de tener un valor fraccionario 32,60. Ahora, el programa se puede comparar la temperatura medida a la constante con un nombre significativo en su lugar el nmero 32.60.
const T_MAX = 32.60 ' Declare temperature T_MAX const T_MAX = 3.260E1 ' Another way of declaring constant T_MAX
Una constante de cadena se compone de una secuencia de caracteres. Ellos estn encerrados entre comillas dobles. Un espacio en blanco puede ser incluido tambin en la constante de cadena como un carcter. Las constantes de cadena se utilizan para representar cantidades no numricos, tales como nombres, direcciones, mensajes, etc
const Message_1 = "Press the START button" ' Message 1 for LCD const Message_2 = "Press the RIGHT button" ' Message 2 for LCD const Message_3 = "Press the LEFT button" ' Message 3 for LCD
En este ejemplo, el envo de la constante Message_1 a un LCD har que 'presione el botn START' el mensaje que se mostrar.
VARIABLES
Una variable es un objeto con nombre capaz de contener un conjunto de datos que pueden ser modificados durante la ejecucin del programa. Cada variable se declara con un nombre nico que debe ser un identificador vlido. Por ejemplo, para sumar dos nmeros(numero1 + numero2) en el programa, es necesario tener una variable para representar lo que en la vida cotidiana llame a la suma. En este nmero1 caso, el nmero y la suma son variables. La sintaxis de una declaracin nica variable es la siguiente:
Las variables en Basic se escriben, lo que significa que es necesario especificar el tipo de datos es una variable a recibir. Las variables se almacenan en la memoria RAM y el espacio de memoria ocupado (en bytes) depende de su tipo. Adems de las declaraciones individuales, las variables del mismo tipo puede ser declarada como una lista. En este caso, identifier_list es una lista separada por comas de identificadores vlidos, mientras que el tipo puede ser cualquier tipo de datos.
dim i, j, k as byte 'Define variables i, j, k dim counter, temp as word 'Define variables counter and temp SMBOLOS
Los smbolos en Basic permiten crear macros simples sin parmetros. Esto significa que cualquier lnea de cdigo puede ser reemplazado con un identificador nico. Los smbolos, cuando se utiliza correctamente, puede aumentar la legibilidad del cdigo y la reutilizacin. Los smbolos se declar al principio del mdulo, justo despus del nombre del mdulo y opcionales incluyen directiva. El alcance de un smbolo es siempre limitado al mdulo en el que ha sido declarada.
En este caso, symbol_name debe ser un identificador vlido para ser utilizado en todo el cdigo. El especificador de cdigo puede ser cualquier lnea de cdigo (literales, tareas, llamadas a funciones, etc.)
symbol MAXALLOWED = 216 value symbol OUT = PORTA symbol MYDELAY = Delay_ms(762) call dim cnt as byte main: if cnt > MAXALLOWED then 216 cnt = 0 ' OUT.1 = 0 ' MYDELAY ' end if ...
' Symbol MAXALLOWED for numeric ' Symbol OUT for SFR ' Symbol MYDELAY for procedure ' Variable cnt ' Program checks whether cnt > If yes, the following three commands are to be executed ' If not, program continues here
No hay espacio en la memoria RAM se utiliza para el almacenamiento de smbolos que se utilizan en el programa. El compilador simplemente reemplazar todos los smbolos con lneas de cdigo correspondientes a ellas cuando se declaran.
TIPO DE DATOS poco sbit byte, char corto palabra entero LongWord Entero
DESCRIPCIN Un bit Un bit Carcter Entero con signo de corto Entero sin signo Entero con signo Palabra de 32 bits Palabra de 32 bits firmado De punto flotante
RANGO DE VALORES 0o1 0o1 0 ... 255 -127 ... 128 0 ... 65535 -32768 ... 32767 0 ... 4294967295 -2147483648 ... 2147483647 1.17549435082 * 10 ... 6.80564774407 * 10 38
flotar
32
38
si una instruccin requiere una expresin de tipo particular, pero la expresin de tipo diferente se utiliza; si un operador requiere un operando de tipo particular, pero operando de diferente tipo se utiliza; si una funcin requiere un parmetro formal de tipo particular, pero se le asigna un objeto de tipo diferente, y si el resultado de la funcin no coincide con el retorno declarado funcin del tipo de datos. PROMOCIN
Cuando operandos son de tipos diferentes, conversin implcita promueve un complejo menos a un tipo ms complejo como sigue:
bit byte short, byte/char integer, word, longint, longword integer, word longint, longword short, byte/char, integer, word, longint, longword float
DATOS DE RECORTES
En instrucciones de asignacin y estados que requieren una expresin de tipo particular, el valor correcto se almacena en destino slo si el resultado de la expresin no exceda el rango de destino. De lo contrario, si la expresin se evala como un tipo ms complejo de lo esperado, los datos de exceso simplemente se recorta, es decir, los bytes ms altos se perder.
dim i as byte ' Variable i occupies one byte of RAM dim j as word ' Variable j occupies two bytes of RAM ... j = $FF0F i = j ' i becomes $0F, higher byte $FF is lost
a = word(b) ' Explicit conversion of expression b word(b) = a ' Compiler will report an error
Un caso especial de la conversin es una conversin explcita entre tipos de datos y sin signo, ya que no afecta a la representacin binaria de los datos.
dim a as byte dim b as short '... b = -1 a = byte(b) ' a is 255, not -1 ' Data doesnt change its binary representation %11111111 ' it is just interpreted differently by the compiler OPERADORES
Un operador es un smbolo que se utiliza para denotar aritmtica en particular, la lgica o alguna otra operacin. Cada operacin se lleva a cabo en una o ms operandos (variables o constantes) en una expresin. Adems, cada operador cuenta con la ejecucin de la prioridad y la asociatividad. Si una expresin contiene ms de un operando, el orden de su ejecucin se determina por el nivel de prioridad. Hay cuatro categoras prioritarias en Basic. Los operadores que pertenecen a la misma categora tienen la misma prioridad. Si dos o ms operadores tienen el mismo nivel de prioridad, las operaciones se realizan de izquierda a derecha. Parntesis se puede utilizar para definir la prioridad de la operacin dentro de una expresin. Cada categora tiene asignado ya sea de izquierda a derecha o izquierda Derechapara regla de la asociatividad. Consulte la tabla a continuacin. PRIORIDAD Alto OPERADORES @ No + * / Div mod y >> << + - O XOR Bajo = <> <> <=> = ASOCIATIVIDAD de derecha a izquierda de izquierda a derecha de izquierda a derecha de izquierda a derecha
Operadores aritmticos
Los operadores aritmticos se utilizan para realizar operaciones aritmticas. Estas operaciones se realizan sobre los operandos numricos y siempre devuelven resultados numricos. Las operaciones binarias se realizan sobre dos operandos, mientras que las operaciones se llevan a cabo en unarios un operando. Todos los operadores aritmticos se asocian de izquierda a derecha.
OPERACIN Adicin Sustraccin Multiplicacin Divisin - de punto flotante Divisin - redondear hacia abajo Recordatorio
OPERADORES RELACIONALES
Los operadores relacionales se utilizan para comparar dos variables y determinar la validez de su relacin. En mikroBasic, todos los operadores relacionales volver 255 si la expresin es verdadera, o cero (0) si es falso. Lo mismo se aplica en expresiones tales como "si la expresin es verdadera, entonces ..." OPERADOR > >= < <= = <> SENTIDO es mayor que es mayor que o igual a es menor que es menor o igual a es igual a no es igual a EJEMPLO b> a un> = 5 a <b a <= b un 6 = A <> B VERDAD CONDICIONES si b es mayor que un Si uno es mayor que o igual a 5 si a es menor que b si a es menor o igual a b si A es igual a 6 si uno no es igual a b
C=AyB
OR bit a bit
C=AoB
B= 11001100 no NOT bit a bit A = B que no B= 11001100 A= 11100011 B= 11001100 A= 00110011 C= 00101111
xor
C = A xor B
Los operadores bit a bit y, OR y XOR realizar operaciones lgicas sobre los pares apropiados de bits de los operandos. El operador nocomplementa cada bit de un operando solo.
$1234 and $5678 ' result is $1230 because: ' $1234 : 0001 0010 0011 0100 ' $5678 : 0101 0110 0111 1000 ' ---------------------------' and : 0001 0010 0011 0000 ... that is, $1230 $1234 or $5678 ' equals $567C $1234 xor $5678 ' equals $444C not $1234 ' equals $EDCB
Bit a bit Operadores de desplazamiento
Hay dos operadores de desplazamiento en mikroBasic. Estos son el operador << que se mueve bits a la izquierda y el operador >> que se mueve bits a la derecha. Ambos operadores tienen dos operandos cada uno. El operando de la izquierda es un objeto de mover, mientras que el operando de la derecha es un nmero de posiciones para mover el objeto. Ambos operandos deben ser del tipo integral.El operando de la derecha debe ser un valor positivo. Al cambiar un operando izquierdo (<<), los bits de la izquierda se descartan, mientras que los 'nuevos' bits a la derecha se asignan ceros.Cambiando operando sin signo a la izquierda por n posiciones es equivalente a multiplicar con 2
n.
dim num as word ' declare variable num as word num = 1 ' asign it decimal value 1 (00000000 00000001 bin.) num << 5 ' equals 32 (00000000 00100000 bin.)
Al cambiar operando de la derecha (>>), los bits de la derecha se descartan, mientras que los 'nuevos' bits a la izquierda son ceros asignados (en caso de firmar operando) o el bit de signo (en el caso de la firma operando). El cambio operando a la derecha por n posiciones es equivalente a dividindolo por 2
n.
dim num as integer ' declare variable num as signed integer num = 0xFF56 ' asign it hex value FF56 (11111111 01010110 bin.) num >> 4 ' equals 0xFFF5 (11111111 11110101 bin.)
Sentencias condicionales
Las condiciones son ingredientes comunes de un programa. Permiten que uno o una serie de sentencias que se ejecutarn en funcin de la validez de una expresin. En otras palabras: 'Si se cumple la condicin (...), hacer (...). De lo contrario, hacer (...) ". Una sentencia condicional se puede seguir, ya sea por una sola declaracin o por un bloque de instrucciones a ejecutar.
Declaracin condicional IF
La sintaxis de una forma simple de la sentencia if es la siguiente:
Si el resultado de la expresin es verdadera (no 0), las operaciones se llevan a cabo, a continuacin, el programa contina con la ejecucin. Si el resultado de la expresin es falsa (0), las operaciones no se llevan a cabo y el programa contina inmediatamente con la ejecucin. El operador si tambin se puede utilizar en combinacin con los operadores else:
Si el resultado de la expresin es verdadero (no 0), operaciones1 se llevan a cabo, de lo contrario operaciones2 se realizan. El programa contina con la ejecucin despus de estas operaciones se llevan a cabo.
IF anidadas
SI anidada necesitan atencin adicional. Una sentencia if anidada es una frase que se utiliza dentro de la otra sentencia if. Como regla general, que se analizan a partir de la ifstatement ms anidada, mientras que cada sentencia else se une a la ms cercana disponible si a su izquierda:
La instruccin Select Case es una sentencia condicional con mltiples ramificaciones. Se compone de un selector de expresin (condicin) y una lista de valores posibles de la expresin. La sintaxis de la instruccin Select Case es: El especificador selector es una expresin que debe evaluar como un valor integral. Especificadores valor_1 ... value_n representan valores posibles selectores y puede ser literales, constantes o expresiones constantes.Los especificadores statements_1 ... statements_n puede ser ninguna de las declaraciones. La clusula ms caso es opcional. En primer lugar, la expresin del selector se evala. A continuacin, se compara con todos los valores disponibles. Si el partido se encuentra, las declaraciones despus de la evaluacin de partido y termina la instruccin Select Case. Si hay varias coincidencias, tras las declaraciones del primer partido ser ejecutado. Si ninguno de los valores coincide con el selector, luego default_statements en la clusula else caso (si lo hay) se ejecutan. Aqu est un ejemplo de la instruccin Select Case:
select case decimal_digit ' Decimal-digit value is being checked case 0 mask = %01111110 ' Display "0" case 1 mask = %00110000 ' Display "1" case 2 mask = %01101101 case 3 mask = %01111001 case 4 mask = %00110011 case 5 mask = %01011011 case 6 mask = %01011111 case 7 mask = %01110000 case 8 mask = %01111111 case 9 mask = %01111011 end select
Esta rutina de programa convierte los dgitos decimales en combinacin binaria adecuada en el puerto con el fin de mostrar en una pantalla de LED.
Bucles de programa
Algunas instrucciones (operaciones) se tienen que ejecutar ms de una vez en el programa. Un conjunto de comandos que se repiten hace un bucle de programa. Cuntas veces se ejecutar, es decir, la duracin del programa se mantendr dentro de un bucle, depende de las condiciones para salir del bucle.
Bucle WHILE
El bucle mientras se lleva a cabo cuando el nmero de iteraciones no se especifica. Es necesario comprobar la condicin de iteracin antes de la ejecucin de un bucle. En pocas palabras, el bucle while se ejecuta mientras que todas las condiciones necesarias para su ejecucin se cumplen ... La sintaxis del bucle while es el siguiente:
Las declaraciones especificador representa un grupo de instrucciones que se ejecutan repetidamente siempre que el valor del especificador de expresin que representa una expresin es verdadera. En otras palabras, el programa permanece en el bucle hasta que la expresin se convierte en falsa. El valor de expresin se comprueba antes de la siguiente iteracin se ejecuta. En consecuencia, si es falsa antes de entrar en el bucle, no ejecuta iteraciones, es decir, los estados nunca ser ejecutado. El programa
proceder a la ejecucin desde el final del bucle, mientras que (a partir de las instrucciones siguientes de la instruccin Wend). Un tipo especial del bucle de programa es un bucle sin fin. Se crea si la condicin para salir de bucle se mantiene sin cambios dentro del bucle. En este caso, la ejecucin es simple como el resultado entre parntesis es siempre cierto (1 se Allways ser diferente de 0), lo que significa que el programa permanece en el bucle.
while 1 ' true can be written instead of 1 ... ' Expressions will be unceasingly executed (endless loop) ... wend
DE LOOP
El bucle se ejecuta cuando el nmero de iteraciones se especifica. La sintaxis del bucle for es el siguiente:
En este caso, con cada iteracin del bucle, la variable contador se incrementa en step_value. El parmetro step_value es un valor opcional entero, considerado uno si se omite. Antes de la primera iteracin, el contador (contador) se ajusta a su valor inicial (initial_value) y se incrementar hasta que se alcanza o supera el valor final (final_value). Las declaraciones se realizarn con cada iteracin. Iinitial_value y final_value deben ser compatibles con las expresiones del mostrador, mientras que el especificador de declaraciones puede ser cualquier sentencia que no cambia el valor del contador. Tenga en cuenta que el parmetro step_value puede ser negativo, lo que permite una cuenta regresiva.
for k=1 to 5 ' Increase variable k five times (from 1 to 5) and operation ' keep on executing "operation" every time ... next k
Un conjunto de instrucciones (funcionamiento) se ejecutar cinco veces. Despus de eso, se determin que la k <5 es falsa (despus de 5 iteraciones k = 5) y el programa saldr del bucle for.
Do Loop
El bucle do se lleva a cabo cuando el nmero de iteraciones no se especifica. El bucle se ejecuta repetidamente hasta que la expresin se evala como verdadera. La sintaxis del bucle do es la siguiente:
En este caso, el especificador de estados representa un grupo de instrucciones que se ejecutan siempre que la expresin (expresin) es verdadera. Las condiciones de bucle se comprueban al final del bucle, por lo que el bucle se ejecuta al menos una vez, independientemente de si la condicin es verdadera o falsa. En el ejemplo siguiente, el programa permanece en el bucle do hasta una variable alcanza 1E06 (un milln de iteraciones).
a = 0 ' Set initial value do a = a+1 ' Operation in progress loop until a <= 1E06 ' Check condition
A veces un programa en Basic requiere que partes del cdigo que se escriben en lenguaje ensamblador. De este modo algunas partes del programa puede ser ejecutado en una forma definida con precisin por el perodo exacto de tiempo. Por ejemplo, cuando es necesario para proporcionar impulsos muy cortos (de unos pocos microsegundos) para aparecer peridicamente en un pin del microcontrolador, la mejor solucin es escribir un cdigo de montaje para el control de duracin del impulso. El comando ASM se utiliza para introducir una o ms instrucciones de montaje para el programa escrito en Basic:
Instrucciones de montaje puede utilizar objetos (constantes, variables, rutinas, etc) que deben ser previamente declaradas en el lenguaje Basic. No hace falta decir que estos objetos se declaran de acuerdo con las reglas del lenguaje Visual Basic. Consulte el siguiente ejemplo:
ARRAYS
Una matriz es una lista finita y dispuesto de las variables del mismo tipo, llamados elementos. Este tipo se llama el tipo base. Cada elemento se le asigna un ndice nico modo que los elementos diferentes pueden tener el mismo valor. Un arreglo se declara especificando el tipo de sus elementos (llamado tipo de matriz), su nombre y el nmero de sus elementos encerrados entre corchetes:
ELEMENTS OF ARRAY shelf[0] shelf[1] shelf[2] shelf[3] shelf[4] shelf[5] shelf[6] ... ... shelf [99]
Para ilustrarlo, una matriz puede ser considerado como una lista ms corta o ms larga de las variables del mismo tipo, donde cada una de ellas se le asigna un nmero ordinal siempre a partir de cero. Esta matriz se llama un vector. Tabla de la derecha muestra una matriz denominada plataforma que consta de 100 elementos.
En este caso, el contenido de una variable (elemento) representa una serie de productos de la plataforma contiene. Los elementos se accede por la indexacin, es decir, mediante la especificacin de sus ndices entre corchetes:
dim shelf as byte [100] ' Declare the array "shelf" with 100 elements shelf [4] = 12 ' 12 items are placed on shelf [4] temp = shelf [1] ' Variable shelf [1] is copied to ' variable temp
En las matrices constantes, los elementos pueden ser asignados a sus contenidos durante la declaracin de matriz. En el siguiente ejemplo, un calendario constante de matriz se ha declarado el nombre y cada elemento se le asigna un nmero especfico de das:
GoTo
La sentencia goto le permite hacer un salto absoluto a otro punto en el programa. Tenga cuidado al usar esta declaracin ya que su ejecucin provoca un salto incondicional haciendo caso omiso de cualquier tipo de limitaciones de anidacin. El punto de destino es identificado por una etiqueta, que se utiliza como un argumento para la instruccin goto. Una etiqueta consiste en un identificador vlido seguido por dos puntos (:) La sintaxis de la sentencia goto es.:
goto: label_name
Esta sentencia se ejecuta un salto al especificador LABEL_NAME lo que representa una etiqueta. La sentencia goto puede preceder o seguir a la etiqueta. Por lo tanto, no es posible saltar dentro o fuera de un procedimiento o funcin. La sentencia goto se puede utilizar para salir de cualquier nivel de las estructuras anidadas. No es recomendable para ir en un bucle u otra sentencia estructurada, ya que puede dar resultados inesperados.
GOSUB DECLARACIN
Una subrutina es una porcin de cdigo dentro de un programa ms amplio ejecutado sobre la demanda. Se realiza una tarea especfica y es relativamente independiente del resto del cdigo. El intrprete saltar a la subrutina, ejecutarlo, y volver al programa principal.Palabras clave GOSUB y el retorno se utilizan en el lenguaje Basic para indicar comienzo y final de la subrutina.
En lugar de un nombre poco, una variable, llamada constante, la funcin o una expresin encerrada entre parntesis se pueden utilizar para denotar la posicin de bit en un registro. Adems, para el acceso a bit individual no son constantes globales predefinidas B0, B1, ..., B7, o 0, 1, ... 7, donde 7 se considera el bit ms significativo.
INTCON.B0 = 0 ' Clear bit 0 of the INTCON register ADCON0.5 = 1 ' Set bit 5 of the ADCON0 register i = 5 STATUS.(i+1) = 1 ' Set bit 6 of the STATUS register
Por ltimo, un poco deseada se puede acceder mediante su nombre de alias. En este caso es el GIE_bit:
SBIT TIPO
El PRO mikroBasic para PIC compilador tiene el tipo de datos sbit. Este es el menor tipo de datos se refiere a un solo bit. Si sbit tipo se asigna a una variable, el bit apropiado de algn registro ser cambiado por cambiar esa variable sin specyfing el nombre del registro y la ubicacin. La variable sbit se comportar como un puntero. Con el fin de declarar la variable sbit, basta con escribir:
dim Bit_name as sbit at Register_name.Bit_position program MyProgram ' Main module ... dim Output1 as sbit at PORTB.0 ' Variable Output1 is of sbit type ... Output1 = 1 ' Pin PORTB.0 is set (5V)
BIT TIPO
El PRO mikroBasic para PIC compilador proporciona el tipo de datos de bits que pueden ser utilizados para las declaraciones de variables.
dim bf as bit
A diferencia de las variables de tipo sbit, slo el nombre de bit se declar aqu, mientras que el compilador almacena bits variable en algunos de los registros libres de RAM. Como puede verse, no es necesario especificar un poco de algn registro especfico. La ubicacin exacta de la variable de tipo bit es desconocido para el usuario. Tipos de bit y sbit llevan a cabo con las siguientes limitaciones:
No se puede utilizar las listas de argumentos y como valores de retorno de la funcin No se puede utilizar como un miembro de las estructuras No se puede utilizar como elementos de matriz No se puede inicializar No se puede ser sealado Sus direcciones no puede ser de color rojo, por lo tanto, el operador unitario @ no se puede utilizar con variable de este tipo
dim ptr as ^bit ' invalid dim arr as array[5] of bit ' invalid
PROCEDIMIENTOS Y FUNCIONES
Las funciones y procedimientos, que se conocen como rutinas, son subprogramas (bloques portavlvulas declaracin) que realizan una tarea determinada sobre la base de una serie de parmetros de entrada. Las funciones devuelven un valor despus de la ejecucin, mientras que los procedimientos no lo hacen.
PROCEDIMIENTOS
Un procedimiento es un bloque con nombre de cdigo, es decir, una subrutina con algunas caractersticas adicionales. Por ejemplo, se puede aceptar parmetros. Los procedimientos se declaran de la siguiente manera:
Los procedimientos son llamados por su nombre seguido de los parmetros reales colocados en el mismo orden que los parmetros formales a juego. Tras una llamada a procedimiento, todos los parmetros formales se crean como objetos locales inicializadas por valores de los argumentos reales.
'Add two numbers sub procedure add (dim byref sum as word, dim x, y as byte) sum = x + y ' add numbers x and y and store result into sum variable end sub ' end of subprocedure
Ahora, podemos llamar al procedimiento complemento para calcular el peso total de una carga, por ejemplo:
sub function function_name(parameter_list) as return_type [ local declarations ] function body end sub
Nombre de la funcin es un identificador por el cual ser posible llamar a una funcin (function_name en el ejemplo). Tipo de resultado (valor devuelto) es el tipo de datos de los datos devueltos (return_type en el ejemplo).
Declaracin de los parmetros: cada parmetro consiste en una variable, un puntero constante, o una matriz precedido por su especificador de tipo de datos similar a cualquier declaracin peridica variable (lista_de_parametros en el ejemplo). Se utilizan para transmitir informacin a la funcin cuando se le llama. Declaraciones locales son declaraciones opcionales de variables y constantes que slo se refieren a la funcin dada. Cuerpo de la funcin es una secuencia de sentencias que se ejecutarn despus de llamar a la funcin.
'function which calculates xn based on input parameters x and n (n > 0) sub function power(dim x, n as byte) as longint ' x and n are bytes, result is longint dim i as byte ' i is a byte result = 1 ' result = 1 if n = 0 if n > 0 then for i = 1 to n result = result*x next i end if end sub
Ahora, podemos llamar a la funcin de potencia para el clculo de 3
12,
por ejemplo:
Helo Hola Mayor La ms alta Inc Diciembre Chr. Ord SETBIT ClearBit TestBit Delay_us
Delay_ms Vdelay_Advanded_ms Vdelay_ms Delay_Cyc Clock_KHz Clock_MHz Reajustar CLRWDT DisableContextSaving SetFuncCall SetOrg GetDateTime GetVersion
Los delay_us y rutinas Delay_ms se generan en el lugar de llamada. Los Vdelay_ms, Delay_Cyc y Get_Fosc_kHz son reales rutinas bsicas. Sus fuentes se pueden encontrar en el archivo Delays.mbas encuentra en la carpeta usos del compilador.
PREPROCESSOR
Un preprocesador es una parte integral de cada compilador. Su funcin es reconocer y ejecutar las instrucciones del preprocesador.Cules son las instrucciones del preprocesador? Estas son las instrucciones especiales que no pertenecen al lenguaje Basic, pero se integran en el compilador. Antes de la compilacin, el compilador activa el preprocesador que pasa por el programa en la bsqueda de estas instrucciones. Si alguno encuentra, el preprocesador simplemente reemplazarlos por otro texto que, dependiendo del tipo de comando, puede ser un archivo (comando incluyen) o simplemente una corta secuencia de caracteres (comando definir). Entonces, el proceso de recopilacin se inicia. Las instrucciones del preprocesador pueden estar en cualquier lugar en el programa de origen y se refieren nicamente a la parte del programa despus de su aparicin hasta el final del programa.
Compilacin condicional
Directivas de compilacin condicional se utilizan normalmente para hacer que los programas de cdigo fcil de modificar y compilar para microcontroladores diferentes. mikroBasic PRO para PIC compatible con la compilacin condicional. Todas las directivas de compilacin condicional debe ser completado dentro del mdulo en el que han comenzado.
#if constant_expression_1 not zero, <section_1> [#elif constant_expression_2 not zero, <section_2>] ... [#elif constant_expression_n not zero, <section_n>] [#else are compiled <final_section>] compiled #endif
'If constant_expression_1 is 'section_1 will be compiled 'If constant_expression_2 is 'section_2 will be compiled 'If constant_expression_n is 'section_n will be compiled 'If none of previous sections 'final_section will be
Cada directiva # if en un archivo de origen debe ir acompaada de un cierre directiva # endif. Cualquier nmero de directivas # elif pueden aparecer entre las directivas # if y # endif, pero slo una directiva # else est permitido. La directiva # else, si existe, debe ser la ltima directiva antes de # endif. Seccin puede ser cualquier cdigo de programa que puede ser reconocido por el compilador o preprocesador. El preprocesador selecciona una sola seccin, mediante la evaluacin despus de cada constant_expression # si o directiva # elif hasta que encuentra un verdadero (no cero) constant_expression. Si todas las expresiones constantes de evaluar a falso o sin directivas # elif aparecen, el preprocesador selecciona el final_section despus de la clusula # else. Si la clusula # else se omite y todas las instancias de constant_expression en el bloque # if se evale como falsa, ninguna seccin sern seleccionados para su posterior procesamiento.
Finalmente, el resultado es que slo una seccin de cdigo, incluso el vaco una, ser compilado.
PUNTEROS
Como usted sabe, todos los objetos en el programa (variable, procedimiento, subrutina, etc) se le asigna una direccin de memoria especfica. Cuando se declara una variable en el programa, el compilador automticamente le asigna un lugar libre de memoria RAM.Durante la programacin, estas direcciones se mantienen ocultos a los programadores. En otras palabras - Las direcciones son "secreto" usado ... La posibilidad de acceder a diferentes objetos por sus nombres (identificadores) en lugar de direcciones es una de las principales ventajas de los lenguajes de programacin de alto nivel. Como una cuestin de hecho es mucho ms fcil tratar con palabras (nombres) que con nmeros. Adems, el compilador se encarga de asociar los objetos y sus adresses. Direccionamiento de los objetos mediante la especificacin de sus nombres se llama direccionamiento directo.
Sin embargo, a veces tienes que lidiar con las direcciones de las localizaciones de memoria. A continuacin, se utilizan los punteros - las variables que sostienen la direccin de memoria de un objeto. En este caso, es posible acceder a los objetos que utilizan punteros slo.Esta manera de abordar por eso se llama direccionamiento indirecto. Antes de utilizar un puntero, es necesario para declarar su tipo de datos. Simplemente, aadir un prefijo intercalacin (^) antes de que el tipo.
Si se requiere para almacenar una variable en algn lugar especfico de memoria RAM, entonces la directiva absoluta debe ser utilizado en el programa de la siguiente manera:
dim variable_a as word absolute 12 ' variable_a will occupy 1 word ' (16 bits) at address 12
Ahora bien, si desea acceder a los datos de ubicacin de la memoria del puntero, es necesario agregar un smbolo de intercalacin despus del nombre del puntero. Por ejemplo, vamos a declarar el puntero del pointer_p mencionado que apunta a una palabra (en este caso, se ha definido previamente variable_a almacenado en la direccin 12 en la memoria RAM). El variable_a puntas se le asignar el valor 26:
dim pointer_p as ^word 'Pointer_p points to data of word type ... ... pointer_p = 12 'Pointer_p points to memory adress 12 ... pointer_p^ = 26 'Variable a at memory address 12 has value 26 'Similar to the absolute directive that is used for variables, the org 'directive specifies the starting address of a routine in ROM. It is 'appended to the routine declaration. For example: sub procedure proc(dim par as word) org 0x200 ' Procedure will start at ... ' the address 0x200 end sub
En este caso, el puntero pointer_p se asigna el valor 12 (pointer_p = 12), lo que significa que la direccin de memoria 12 se especifica por la presente.
Si desea cambiar el valor de una variable en punta, es suficiente para cambiar el valor del puntero y aadir un smbolo de intercalacin (^) como un sufijo a la misma. Refirase a la figura en el variable_a derecha, variable en la direccin 12 se asigna el valor 26 por medio del puntero pointer_p. Los punteros pueden apuntar a los datos almacenados en cualquier espacio de memoria disponible y puede residir en cualquier espacio de memoria disponible, salvo en el espacio de memoria de programa (ROM).
@ OPERADOR
El operador @ devuelve la direccin de un objeto, es decir, crea un puntero a su operando. Las siguientes reglas se aplican aqu:
Si X es una variable, @ X devuelve la direccin de X. Si F es una rutina (funcin o procedimiento), @ F crea un puntero a F.
dim temp as word ptr_b as ^byte ptr_arr as ^byte[10] arr as byte[10] main: ptr_b = @arr ' @ operator will return ^byte temp = @arr ' @ operator will return ^byte ptr_arr = @arr ' @ operator will return ^byte[10] end.
Si la variable X es de tipo de matriz, el operador @ volver puntero a su elemento de base primera, excepto cuando el lado izquierdo de la instruccin en la que X se utiliza es un puntero de matriz. En este caso, el operador @ volver puntero a la matriz, no para el elemento de base primera.
1. Cada programa comienza normalmente con un comentario que proporciona informacin sobre el propsito del programa, la fecha de la escritura del programa, programador, la versin, los cambios realizados en relacin con la versin previa, etc estos comentarios (cabecera) no son obligatorias, pero es una buena costumbre escribirlos y tenerlos en el programa. 2. El cdigo de cada programa se inicia con una directiva del programa seguido por el nombre del programa. 3. Si el programa, aparte del mdulo principal, contiene otros mdulos, as, sus nombres deben ser especificados usando la directiva include (un include por cada mdulo). En consecuencia, si el compilador, al compilar el mdulo principal, llega a un objeto no declarado (funcin, variable, etc), primero tratar de encontrar su declaracin dentro de los mdulos declarados. Si no hay ninguna declaracin al respecto se encuentra, el compilador informar de un error. 4. La directiva include (si hay alguna) es seguido por una porcin de cdigo de la intencin de declarar las variables, constantes, procedimientos, subprogramas, funciones y otros objetos para ser usados ms tarde en el programa.Estas declaraciones se utilizan para reservar memoria RAM para almacenar datos registra as como para indicar al compilador la forma de ejecutar alguna funcin o procedimiento. Por ejemplo, un dato de tipo byte, ocupa slo un registro, mientras que una de datos de tipo flotador ocupa cuatro registros. 5. El programa principal se inicia con la principal: la Directiva (siempre seguido de dos puntos). Tambin se le llama un "cuerpo del programa. 6. Cada programa termina con el final. Directiva (siempre seguido de un perodo).
1. Creacin del proyecto (nombre del proyecto, la configuracin del proyecto, las dependencias de archivos); 2. Edicin del programa; 3. Compilacin del programa y correccin de errores; 4. Depuracin (ejecutar el programa paso a paso para asegurarse de que realiza las operaciones que se pueden esperar); 5. Programacin de microcontroladores (cargar el archivo. Hex genertaed por el compilador en el microcontrolador utilizando el programador PICFlash).
Slo tienes que seguir las instrucciones y haga clic en Siguiente, Aceptar, Siguiente, Siguiente ... La misma historia de siempre a excepcin de la ltima opcin "Desea instalar PICFlash V7.11 programador? '. Te hace la pregunta qu hacer? Como ustedes saben, el compilador traduce un programa escrito en Basic en un cdigo hexadecimal. El siguiente paso consiste en cargar el cdigo en el microcontrolador. Es por eso que necesita el programador PICFlash. Instalarlo!
Despus de completar la instalacin PICFlash, se le pedir para la instalacin de otro programa similar. Se trata de un software para la programacin de un especial de la familia de microcontroladores PIC que funcionan en el modo de bajo consumo (3,3 V). Salta es ... El ltimo paso - la instalacin del controlador!
Un controlador es un programa que permite al sistema operativo para comunicarse con un dispositivo perifrico. En nuestro caso, este dispositivo es el programador del hardware de su sistema de desarrollo. Definitivamente, usted lo necesite. Haga clic en S.
Un tipo de controlador que desea instalar depende del sistema operativo en uso. En este caso, el PC se ejecuta un sistema operativo de 32 bits de Windows XP. Seleccione el Win 2000, XP, 2003 32-bit carpeta que contiene el controlador apropiado y puesta en marcha de su instalacin. Ahora ests a salvo, slo sigue haciendo clic en Siguiente, Aceptar, Siguiente, Siguiente ...
Por desgracia, una descripcin detallada de todas las opciones disponibles en este IDE tomara demasiado tiempo, por lo que no vamos en el mismo. Vamos a describir solamente las caractersticas ms importantes de la mikroBasic PRO para PIC compilador, en su lugar.Por supuesto, siempre se puede obtener ms informacin pulsando el botn de Ayuda [F1]. Una explicacin detallada sobre cmo crear un nuevo proyecto y escribir un programa se da en varios ejemplos prcticos en el captulo 4 de este libro.
JEFE DE PROYECTO
Un programa escrito en el PRO mikroBasic para PIC compilador no es un documento independiente, sino una parte de un proyecto que tambin incluye el cdigo hexadecimal, el cdigo ensamblador, y otros archivos. Algunos de ellos son creados durante el funcionamiento del compilador, mientras que algunos son importados de otros programas. Sin embargo, la ventana Project Manager le permite manejar todos los archivos del proyecto. Simplemente haga clic derecho en cualquier carpeta y seleccione la opcin que necesita para su proyecto.
Administrador de Biblioteca
Las libreras contienen un gran nmero de listas para utilizar las funciones y proporcionan una gran cantidad de instalaciones al escribir programas para microcontroladores PIC. El compilador debe conocer todas las dependencias de su archivo de origen mikroBasic con el fin de compilar correctamente. Usted debe abrir la ventana del Administrador de bibliotecas y las bibliotecas de verificacin que desee utilizar en su programa. Cuando una biblioteca est marcada, se agrega automticamente al proyecto y vinculadas durante el proceso de compilacin. Por lo tanto, usted no tiene que incluir manualmente en los archivos de cdigo fuente utilizando la directiva # include. Por ejemplo, si el programa utiliza una pantalla LCD, entonces no hay necesidad de escribir nuevas funciones, porque mediante la seleccin de la
Biblioteca de LCD que ser capaz de utilizar listo para utilizar las funciones de LCD en su programa. Si esta biblioteca no est seleccionado en el Administrador de bibliotecas, cada vez que intenta utilizar cualquiera de sus funciones, el compilador informar de un error. Una descripcin de cada biblioteca est disponible haciendo clic derecho sobre su nombre y seleccionando la opcin de ayuda. Explorador de cdigo
La ventana de explorador del cdigo que permite localizar fcilmente los objetos (funciones, constantes, procedimientos, etc) dentro de los programas largos. Por ejemplo, si usted busca una funcin que se utiliza en el programa, simplemente haga doble clic en su nombre en esta ventana, y el cursor se coloca automticamente en la lnea apropiada en el programa. Configuracin del proyecto
Al compilar un proyecto, el compilador genera archivos a cargar en el microcontrolador. Estos archivos ser diferente dependiendo del tipo del microcontrolador y el propsito de la compilacin.Por lo tanto, a fin de que el compilador pueda funcionar correctamente, es necesario establecer algunos parmetros del proyecto en la ventana Configuracin del proyecto: Dispositivo: La seleccin del microcontrolador a utilizar permite que el compilador para recuperar el archivo de definicin de asociada. El archivo de definicin de un microcontrolador contienen informacin especfica sobre sus registros SFR, sus direcciones de memoria y algunas variables especficas para que el microcontrolador. Es todo obligatoria para la creacin de una compatible. Hexagonal archivo. Oscilador: Esta opcin se utiliza para especificar la velocidad de funcionamiento del microcontrolador. Por supuesto, este valor depende del oscilador en uso. Se recupera por el compilador para compilar las rutinas que requieren informacin en tiempo (Delay_ms function () por ejemplo). Posteriormente, esta informacin tambin ser utilizada por el programador. La velocidad de funcionamiento se ajusta a fin de permitir oscilador interno del microcontrolador para funcionar a la frecuencia seleccionada.
Construir / Tipo de depurador: Todo el proceso se llama compilacin incluye la construccin y analizar, compilar, enlazar y la generacin de archivos hexagonales. El tipo de construccin le permite configurar el modo de construccin. Dependiendo de la eleccin del modo, el archivo generado para ser cargado en el microcontrolador ser diferente. Tipo de generacin - la liberacin: El programa que se cargar en el microcontrolador no contendr ninguna informacin complementaria para ser depurado ms tarde. Despus de completar el proceso de compilacin, el compilador no tiene ms influencia en la ejecucin del programa. Tipo de generacin - de depuracin ICD: Parte de la informacin se agrega a la hex con el fin de permitirle llevar a cabo la depuracin de hardware.. Cuando el proceso de compilacin se ha completado y el microcontrolador programado est, el compilador permanece conectada al microcontrolador y todava puede afectar su funcionamiento. Una herramienta llamada mikroICD (depurador en circuito) permite que el programa a ser ejecutado paso a paso y proporciona un acceso al contenido actual de todos los registros del microcontrolador. A los efectos de la depuracin, un simulador de software se puede utilizar en ambos modos de tipo de generacin. Se le permite simular el programa mediante la reproduccin de la conducta microcontrolador. El simulador no utiliza dispositivos reales para su funcionamiento, de modo que algunas operaciones no pueden ser reproducidas (interrumpir, por ejemplo). Sin embargo, es ms rpido para depurar un programa mediante el uso de simulador y no requiere ningn dispositivo taget. Tenga en cuenta que alguna de estas opciones pueden ser modificadas en cualquier momento durante la edicin del programa. No te olvides de volver a construir y volver a programar el dispositivo despus de modificar cualquiera de esas opciones.
Editor de cdigo es una parte central de la ventana del compilador usado para escribir y editar programas. Un gran nmero de opciones que se utilizan para establecer sus funciones y el diseo se pueden encontrar en las herramientas y el men Opciones [F12]. Cuando se escribe un programa, no se olvide de los comentarios. Los comentarios son muy importantes para el programa de depuracin y actualizacin. Por otra parte, aunque el compilador no tiene restriccin de formato, siempre debe seguir las reglas de edicin mismos (como en los ejemplos proporcionados en este libro). Como no hay lmite de longitud de lnea, no dude en utilizar los espacios en blanco con el fin de hacer que su cdigo sea ms legible.
Cuando se escribe un programa, recopilar con regularidad a fin de corregir errores de sintaxis que viene usted. Tambin puede compilar su programa cada vez que la redaccin de una nueva funcin se ha completado y probar su comportamiento mediante el modo de depuracin. De esta manera, es mucho ms fcil de corregir los errores de compilacin. De lo contrario, se ver obligado a modificar el programa.
En el ejemplo anterior, el programa informa de un error de sintaxis en la lnea 80a. La compilacin le permite corregir su programa mediante la fijacin de todos los errores mikroBasic. Cuando todos los errores son fijos, el programa est listo para ser descargado en el microcontrolador. Sin embargo, su trabajo no ha terminado todava, porque todava no sabe si su programa se comporta como se espera o no.
Antes de la puesta en marcha del simulador, seleccione el modo de funcionamiento en la ventana Configuracin del proyecto (tipo de construccin - la liberacin), compilar el programa y haga clic en la opcin Run / Start del depurador. El compilador se ajusta automticamente al modo de simulacin. Como tal, se vigila el estado de todos los bits del registro y le permite ejecutar el programa paso a paso mientras se controla el funcionamiento del microcontrolador en la pantalla. Unos cuantos iconos, utilizados exclusivamente para el funcionamiento de este simulador, aparecer en la barra de herramientas cuando el compilador est configurado en este modo.
Paso a paso: Ejecutar el programa de lnea actual, y luego se detiene. Si la lnea de programa ejecutado llama a una subrutina, el depurador se mete en la subrutina y se detiene despus de ejecutar la primera instruccin dentro de ella. Paso a paso: Ejecutar el programa de lnea actual, y luego se detiene. Si la lnea de programa ejecutado llama a una subrutina, el depurador no entrar en ella. El subprograma se ejecutar todo y se detiene el depurador a la primera instruccin despus de la llamada. Parece que una lnea de programa se omite aunque toda la subrutina se ejecuta.Como resultado, el estado de los registros se cambia. Este comando se utiliza normalmente cuando es necesario para acelerar la ejecucin de bucles de programa de largo. Ejecutar hasta el cursor: Ejecutar todas las lneas del programa hasta la posicin del cursor se alcanza. Al salir: Ejecutar todas las lneas del programa restantes dentro de la rutina. El depurador se detiene inmediatamente despus de salir de la subrutina.
Los puntos de interrupcin que el proceso de depuracin de los programas ms eficientes, lo que le permite detener la ejecucin del programa en alguna lnea especfica. Esto es muy til ya que ser capaz de ver slo las partes crticas del programa, no pierden su tiempo poniendo a prueba la lnea de todo el programa por lnea. Para agregar o quitar un punto de interrupcin slo tienes que hacer clic en el lado
izquierdo de su editor de cdigo en la lnea correspondiente o presione [F5]. Una pequea ventana llamada puntos de interrupcin que indica dnde se encuentran los puntos de interrupcin. Tenga en cuenta que las lneas marcadas por los puntos de interrupcin se destacan en rojo.
La lnea que se est ejecutando actualmente est resaltada en azul. Usted puede leer el contenido de los registros y las variables que ha seleccionado en Valores ver en cualquier momento. Si desea ir directamente a los puntos de interrupcin, utilice el comando Ejecutar del depurador / Pausa.
Los depuradores de software y hardware tienen la misma funcin para controlar el estado de los registros durante la ejecucin del programa. La diferencia es que el depurador software simula la ejecucin del programa en un PC, mientras que el depurador ICD utiliza el microcontrolador. Cualquier cambio de un estado lgico pin se refleja en el registro correspondiente (puerto). Como la ventana Inspeccin Valores le permite supervisar el estado
de todos los registros, es fcil comprobar si un alfiler se activa o se desactiva. Las ltimas modificaciones aparece en rojo en esta ventana.Esto le permite localizar fcilmente las modificaciones en el archivo de lista durante la depuracin. Seleccione Vista / Windows y haga clic en la opcin Ver valores para activar esta ventana. Usted puede hacer una lista de los registros y variables del estado de los que desea monitorear.
CRONMETRO
Si desea saber el tiempo que tarda el microcontrolador para ejecutar una parte del programa, seleccione Ejecutar / Ver opcin de Cronmetro. Una ventana, como se muestra en la figura a la derecha, aparecer. Sabe usted cmo funciona el cronmetro? Bueno, es tan simple como eso. Los tiempos (momento en que el programa se ha iniciado, el tiempo de la ejecucin del ltimo paso, etc) se mide automticamente para cada accin de la depuracin (paso en, pasar por encima, ejecute / pausa, etc) y se muestran en la ventana del cronmetro.
Depurador en circuito
Otra forma de comprobar la ejecucin de un programa es mediante el uso de mikroICD debugger (depurador en circuito). El mikroICD es una parte integral del programador PICFlash. Se utiliza para probar y depurar programas. El proceso de pruebas y la depuracin se realiza mediante el seguimiento del estado de todos los registros dentro del microcontrolador que opera en tiempo real. Con el fin de habilitar la depuracin, es necesario seleccionar las opciones de tipo de generacin-ICD de depuracin y depuracin-mikroICD antes de que el programa est cargado en el microcontrolador. Tan pronto como el depurador mikroICD se inicia, una ventana, como se muestra en la figura a continuacin, aparece. El depurador mikroICD se comunica con el PIC a travs de sus pines utilizados para la programacin. Por lo tanto, estos pernos no pueden ser utilizados como pines de E / S, mientras que el proceso de depuracin est en curso. Durante la operacin depurador mikroICD, programador y el ordenador tiene que estar conectado mediante un cable USB.
Iniciar depurador [F9] Ejecutar / Pausa depurador [F6] Detener depuracin [Ctrl + F2] Paso a paso [F7] Paso a paso [F8] Step Out [Ctrl + F8] Alternar punto de interrupcin [F5] Mostrar / Ocultar puntos de interrupcin [Shift + F4] Borrar puntos de interrupcin [Ctrl + Shift + F4]
Cada uno de estos comandos se activa a travs de atajos de teclado o haciendo clic en el icono apropiado en la ventana Inspeccin Valores.
El depurador mikroICD tambin ofrece opciones tales como ejecutar un programa paso a paso (paso a paso), haciendo una pausa la ejecucin del programa para examinar el estado de los registros actualmente activos con puntos de interrupcin, el seguimiento de los valores de algunas variables, etc El siguiente ejemplo ilustra un paso a intensificar la ejecucin del programa utilizando el comando Paso a paso.
Paso 1:
En este ejemplo la lnea de programa 31a est resaltada en azul, lo que significa que se ejecutar a continuacin. El estado actual de todos los registros de la microontroller se pueden ver en el reloj mikroICD ventana de Valores. Paso 2:
Despus de que el Paso a paso por el comando [F8] se ejecuta, el microcontrolador se ejecutar la lnea de programa 31. La primera lnea la prxima (32 ) para ser ejecutado se resalta en azul. El estado de los registros que se cambian durante la ejecucin de esta instruccin puede ser visto ahora en la ventana Inspeccin Valores.
La parte de hardware almacena un archivo hexadecimal (el programa que se carga) y los programas del microcontrolador con niveles especficos de tensin. Durante el proceso de programacin, un nuevo programa est escrito en la memoria flash del microcontrolador. El programa anterior se borrarn automticamente de la memoria flash. La parte del software es el encargado de enviar el programa (. Hex) para la parte de hardware del programador sobre un cable USB. Se activa pulsando mE_Programmer en el men Herramientas, o pulsando la tecla [F11]. Como resultado, puede modificar algunos parmetros de programacin y tambin controlar el funcionamiento del hardware del programador (de carga, escribir, verificar ...).
Tenga en cuenta que puede volver a programar el microcontrolador tantas veces como desee.
HERRAMIENTAS compilador
Este compilador proporciona herramientas especiales que simplifican considerablemente el proceso de escritura del programa. Todas estas herramientas estn disponibles en el men Herramientas. Aqu est una breve descripcin de todos ellos.
TERMINAL USART
El terminal USART es un reemplazo para el estndar de Windows Terminal Server Hyper. Se puede utilizar para comprobar el funcionamiento del microcontrolador que utiliza la comunicacin USART. Estos microcontroladores estn integrados en el dispositivo de destino y se conecta al conector RS-232 de la PC mediante un cable serie. La ventana de terminal
USART contiene opciones para configurar la comunicacin serie y mostrar los datos enviados / recibidos. EEPROM EDITOR
Al seleccionar la opcin Editor de EEPROM desde el men Herramientas, una ventana, como se muestra en la figura a continuacin, aparecer.Aqu se puede ver cmo la memoria EEPROM del microcontrolador parece. Si desea cambiar su contenido despus de cargar el programa en el microcontrolador esta es la forma correcta de hacerlo. Si un nuevo contenido es un dato de tipo especfico (char, int o double), entonces usted debe seleccionar, introduzca el valor en el campo Valor de edicin y haga clic en Editar. A continuacin, haga clic en el botn Guardar para guardarlo como un documento con la extensin. Hexagonal. Si el uso de EEPROM en la opcin Proyecto est activo, los datos se cargarn automticamente en el microcontrolador durante el proceso de programacin. TABLA ASCII
Si usted necesita la representacin numrica de cualquier carcter ASCII, slo tienes que seleccionar la opcin de tabla ASCII en el men Herramientas y la mesa, como se muestra en la figura a continuacin, aparecer.
Usted probablemente sabe que todas las teclas de su teclado est asociado con un cdigo (ASCII). Los nmeros tienen equivalentes extraos. Por esta razn, la instruccin de programa para visualizar el nmero 7 en un LCD no se muestran, pero el equivalente de la instruccin BEL. Si enva el mismo nmero que un personaje, obtendr el resultado esperado - el nmero 7. En consecuencia, si desea mostrar un nmero sin antes convertirlo en el personaje adecuado, entonces es necesario aadir el nmero 48 a cada dgito del nmero que se muestra se compone de.
Cada cdigo generado el uso de herramientas para el control de LCD y GLCD contiene funciones de la biblioteca Lcd. Si usted los utiliza en el programa, no se olvide de marcar la casilla junto a esta biblioteca
en la ventana del Administrador de la Biblioteca a fin de que el compilador para reconocer estas funciones correctamente.
BIBLIOTECAS
Una de las caractersticas ms tiles de la mikroBasic PRO para PIC compilador es el Administrador de la Biblioteca y sin duda merece nuestra atencin. Si necesita una funcin o un procedimiento para realizar determinada tarea, mientras que escribir un programa, slo hay que encontrarlo en una de las bibliotecas incluidas en el compilador y lo utilizan. Una biblioteca es en realidad un archivo llamado cabecera. Contiene un conjunto de variables y funciones escritas en mikroBasic. Cada biblioteca tiene un propsito especfico. Por ejemplo, si usted necesita un procedimiento para generar una seal de audio en algunos pines, abra la biblioteca de sonido en la ventana Library Manager y haga doble clic en el sound_play procedimiento adecuado. Una descripcin detallada de este procedimiento aparece en la pantalla. Copia este archivo en su programa y establecer los parmetros adecuados. Si esta biblioteca est marcada, sus funciones sern recuperados durante el proceso de compilacin y no ser necesario el uso de la directiva include. El PRO mikroBasic para PIC incluye libreras especficas diversas y hardware. BIBLIOTECAS DIVERSOS
Diversas bibliotecas contienen algunas de las funciones de propsito general: BIBLIOTECA Botn de la Biblioteca Conversiones de Biblioteca DESCRIPCIN Funcin elimina la influencia de botn de contacto parpadeo Rutinas de biblioteca para los nmeros a cadenas y BCD / conversiones decimales
Funciones de biblioteca para analizar y mapear caracteres Biblioteca, que automatiza las tareas relacionadas con cadena Biblioteca de rutinas de tiempo de uso de clculos de tiempo en formato de tiempo UNIX Funciones de biblioteca para la manipulacin aritmtica de punto flotante
Software SPI Library Software UART Library Biblioteca de sonidos SPI Biblioteca SPI Ethernet Library SPI LCD grfico Biblioteca SPI LCD Biblioteca SPI LCD8 Biblioteca SPI T6963C LCD grfico Biblioteca UART Biblioteca USB HID biblioteca
Se utiliza para la simulacin de software de SPI Se utiliza para el software de simulacin UART Se utiliza para la generacin de seales de audio Se utiliza para la operacin con una funcin de mdulo SPI Se utiliza para la comunicacin SPI con el mdulo Ethernet (ENC28J60) Se utiliza para 4-bit SPI comunicacin con pantalla LCD grfica Se utiliza para 4-bit comunicacin SPI con pantalla LCD (2x16 caracteres) Se utiliza para 8-bit comunicacin SPI con pantalla LCD Se utiliza para la comunicacin SPI con el grfico de la pantalla LCD Se utiliza para la operacin con una funcin de mdulo UART Se utiliza para la operacin con una funcin de mdulo USB
modernos normalmente tienen.Por su bajo precio, amplia gama de aplicaciones, de alta calidad y fcil acceso, es una solucin ideal en aplicaciones como el control de diferentes procesos en la industria, la medicin de diferentes valores, etc Una lista a continuacin incluye solamente algunos de sus principales caractersticas.
3.1 LAS FUNCIONES BSICAS PIC16F887 3.2 SFRS FUNDAMENTALES 3.3 Entrada / Salida 3,4 TIMER0 3,5 TIMER1 3,6 Timer2 3.7 mdulos CCP 3.8 MDULOS DE COMUNICACIN DE SERIE 3.9 Mdulos analgicos 3,10 reloj oscilador 3,11 memoria EEPROM 3.12 REINICIAR! NEGRO-OUT, Brown-out o ruidos?
Arquitectura RISC
A tan slo 35 instrucciones para aprender Un ciclo en todas las instrucciones de una sola, excepto las ramas
o o o o o o o o o o o o o o o o o
En ahorro de energa Modo de espera Brown-out Reset (BOR) con la opcin de software de control 35 de entrada / salida de pines
Fuente de alta corriente / sumidero de accionamiento directo de LED software y resistencia de pull-up programable de forma individual Interrupcin-on-Cambiar el PIN
DESCRIPCIN Pinout
La mayora de los pines del microcontrolador PIC16F887 son multi-funcionales. Por ejemplo, el pasador de la quinta parte del microcontrolador est marcado como RA3/AN3/Vref + / + C1IN lo que indica que tiene las funciones siguientes:
RA3 del puerto PORTA tercera entrada / salida digital AN3 tercera entrada analgica Vref + tensin de referencia positiva C1IN comparador C1 + entrada positiva
Este principio de la multifuncionalidad se aplica comnmente en el diseo de los microcontroladores, ya que permite el paquete microcontrolador a ser mucho ms compacta y no afecte al funcionamiento del microcontrolador. Varias funciones pasador no puede ser utilizado simultneamente, pero se puede cambiar en cualquier momento durante el funcionamiento. En las siguientes tablas se refieren a la DIP40 PIC16F887 microcontrolador.
La CPU es capaz de reconocer y ejecutar solamente 35 instrucciones simples. Por cierto, para programar otros microcontroladores en lenguaje ensamblador, es necesario conocer ms de 200 instrucciones de memoria. El tiempo de ejecucin es el mismo para casi todas las instrucciones, y dura 4 ciclos de reloj. La frecuencia de reloj es estabilizado por un cristal de cuarzo. Las excepciones a la regla son las instrucciones de salto y sucursales el tiempo de ejecucin de los cuales es de 2 ciclos de reloj. Esto significa que si la frecuencia de operacin del microcontrolador es 20 MHz, el tiempo de ejecucin de cada instruccin ser 200ns, es decir, el programa se ejecutar 5 millones de instrucciones por segundo!
MEMORIA
El PIC16F887 dispone de tres tipos de memoria: ROM, RAM y EEPROM. Cada uno merece ser discutido por separado aqu, debido a sus funciones especficas, funciones y organizacin.
ROM
ROM se utiliza para guardar de forma permanente el programa que se ejecuta actualmente. Es por esto que a menudo se llama una "memoria de programa". El PIC16F887 tiene 8Kb de ROM (8192 localidades en total). Desde ROM est fabricada con tecnologa FLASH, su contenido puede ser cambiado fcilmente, proporcionando una tensin de programacin especial (13V).
No se requieren ms explicaciones, como todo el proceso se realiza automticamente por medio de un programa especial instalado en el PC y un dispositivo electrnico simple llamada el programador.
EEPROM
Al igual que en la memoria del programa, el contenido de la EEPROM se guardan de forma permanente, incluso cuando se desconecta la alimentacin. Por otro lado, a diferencia de ROM, el contenido de la
EEPROM se puede cambiar durante la operacin de microcontrolador. Esta es la razn de esta memoria (que contiene 256 lugares) es perfecto como un dispositivo de almacenamiento permanente de algunos de los resultados creados y utilizados durante la operacin.
RAM
Este es el tercer y el tipo ms complejo de todos los mdulos de memoria del microcontrolador. Se compone de dos partes: registros de propsito general y funciones especiales (SFR registros). Todos ellos estn divididos en cuatro bancos de memoria que se explica ms adelante en este captulo. Aunque ambos grupos de registros se borran cuando se va la luz y ambos se fabrican en el mismo y actuar de una manera similar, no tienen muchas cosas en comn cuando se trata de sus funciones.
valor de este registro se incrementa en 1 despus de cada producto pasa a travs de un sensor. As es como un simple programa se ha creado.
"En esta seccin del programa, la variable de registro almacenado en suma se incrementa cada "Tiempo de la RB0 pin de entrada es excitada alta (1) ... if PORTB.0 = 1 ' Check whether the RB0 pin is driven high sum = sum + 1 ' If true, the variable value is incremented by 1 end if ' If false, the program exits the if statement ...
El microcontrolador es capaz de ejecutar este programa, ya que sabe cul es la cantidad que se incrementa es y dnde se almacena. De manera similar, cada variable de programa debe ser preasignado algunos de los registros de propsito general.
' PORTC pins are configured as outputs) PORTC = %01100011 ' Logic states on all port PORTC pins are being changed ...
RAM BANCOS
La memoria RAM se divide en cuatro bancos. Antes de acceder a cualquier registro durante la escritura del programa (ya sea para leer o modificar su contenido), es necesario seleccionar el banco que lo contiene. Dos bits del registro de estado se utilizan para la seleccin de banco, que se discutir ms adelante. Para hacer frente a SFR tan simples como sea posible, los registros ms utilizados tienen la misma direccin en todos los bancos y por lo tanto puede ser de fcil acceso.
Puede ser difcil de tratar con los bancos cuando se escribe un programa en lenguaje ensamblador. Por el contrario, cuando se escribe un programa en lenguajes de programacin ms altos, tales como Basic, y los compiladores de uso, tales como mikroBasic PRO para PIC, basta con especificar el nombre de un Ayer re que usted necesita. Contar con esta informacin, el compilador es capaz de seleccionar el banco adecuado, as como para incluir instrucciones apropiadas en el cdigo durante el proceso de
compilacin. Usted ha estado utilizando el lenguaje ensamblador slo en la medida y esta es la primera vez que utilice el PRO mikroBasic para PIC compilador, no? Esto debe ser una maravillosa noticia a continuacin.
STACK
Una parte de memoria RAM utilizada como pila consta de ocho 13-bits registros. Antes de que el microcontrolador comienza a ejecutar una subrutina (instruccin GOSUB) o cuando se produce una interrupcin, la direccin de la instruccin a ejecutar siguiente se inserta en la pila, es decir, una de sus registros. Como resultado, el microcontrolador sabe desde donde continuar la ejecucin del programa regular cuando una subrutina o una interrupcin de ejecucin es completa. La direccin se borra despus de la vuelta al programa y un nivel de la pila es, pues, automticamente disponible para su uso posterior. Ntese que los datos siempre circularmente inserta en la pila. Esto significa que despus de que la pila se ha llevado ocho veces, el empuje noveno sobrescribe el valor que se almacena con el primer impulso. El impulso dcimo sobrescribe el empuje segundo y as sucesivamente. Los datos sobrescritos de esta manera no es recuperable. Dado que el programador no puede acceder a estos registros para escribir o leer y no hay ningn bit para indicar desbordamiento de pila o condicin de desbordamiento, es necesario prestar especial atencin a que durante la escritura del programa.
"Al entrar en una seccin de cdigo programa, el compilador 'Almacena los datos en el banco RAM significa que en este programa "La seccin, la seleccin del banco Despus del retorno al programa 'Seccin escrita en mikroBasic, los banco activo (RP0 y RP1) debe devolver el estado la asamblea
depende de las SFR en uso. bits de control seleccionar el que tenan antes del cdigo de
saveBank = STATUS and %01100000 ' Save the state of bits RP0 and RP1 ' (bits 5 and 6 of the STATUS register) asm ' Start of assembly sequence ... ... ' Assembly code ... end asm ' End of assembly sequence STATUS = STATUS and %10011111 ' Bits RP0 and RP1 return their original state STATUS = STATUS or saveBank ... ... Interrupcin del sistema
Lo primero que debe hacerse por el microcontrolador, cuando llega una solicitud de interrupcin, es la ejecucin de la instruccin en curso, a continuacin, para detener la ejecucin del programa regular. La direccin del programa actual de la memoria automticamente se inserta en la pila y la direccin por defecto (predefinidos por el fabricante) se escribe en el contador de programa. El lugar desde donde el programa contina con la ejecucin se llama un vector de interrupcin. Para el microcontrolador PIC16F887, la direccin es 0004h. Como se ve en la siguiente figura, el vector de interrupcin se debe omitir durante la ejecucin del programa regular. Una parte del programa que se ejecuta cuando una peticin de interrupcin llega se llama una rutina de interrupcin (que es una subrutina de hecho). La primera instruccin de la rutina de interrupcin se encuentra en el vector de interrupcin. Cunto tiempo se tarda en ejecutar la subrutina y lo que ser, depende de las habilidades del programador, as como en la fuente de interrupcin en s. Algunos microcontroladores tienen un par de vectores de interrupcin (cada solicitud de interrupcin tiene su vector), mientras que esto slo tiene un microcontrolador. Esta es la razn por la primera parte de cada rutina de interrupcin debe ser la deteccin de fuente de interrupcin.Cuando la fuente de interrupcin se conoce y se ejecuta la rutina de interrupcin, el microcontrolador alcanza la RETFIE instruccin, aparece la direccin de la pila y permite continuar con la ejecucin del programa desde donde lo dej.
MikroBasic reconoce una rutina de interrupcin para ser ejecutado por medio de la palabra de interrupcin. La rutina de interrupcin debe ser escrito por el usuario.
sub procedure interrupt ' Interrupt routine cnt = cnt + 1 ; ' Interrupt causes variable cnt to be incremented by 1 end sub Cmo utilizar SFR
Si usted ha comprado el microcontrolador y tiene una gran idea de cmo hacer uso de ella ... Hay una larga lista de SFR y sus bits. Cada uno de ellos controla un proceso dentro del microcontrolador. Realmente se parece a una tabla de control grande con un montn de instrumentos e interruptores. Ahora usted est preocupado acerca de si ser capaz de aprender a usar a todos ellos? Probablemente no, pero no se preocupe porque usted no tiene que hacerlo. Unos dispositivos muy potentes, tales como microcontroladores son similares a los supermercados: ofrecen muchas cosas a precios bajos y es hasta que usted pueda elegir lo que usted necesita. Por lo tanto, elegir la zona que ms le interesa y aprender slo lo que tiene que hacerlo. Cuando usted consigue una plena comprensin del funcionamiento del hardware, SFR de estudio que estn en control de la misma (por lo general hay algunos de ellos). El rendimiento de todos los dispositivos se controla mediante un sistema de control apropiado y el microcontrolador no es una excepcin a la regla. Uno tiene que estar familiarizado con dichos sistemas con el fin de ser capaz de utilizar los dispositivos adecuadamente. Por supuesto, estamos hablando de SFR en toda la historia acerca de programacin se inicia y termina.
El registro STATUS contiene el estado de la aritmtica de los datos en el registro W, restablecer los bits de estado y de seleccin de banco de la memoria de datos.
o o
RP1, RP0 - Los bits se utilizan para seleccionar el banco en el registro de direccionamiento directo.
RP0 0 1 0 1 ACTIVO DEL BANCO Bank0 Bank1 BANK2 BANK3
RP1 0 0 1 1
o o o o o o o o
PD - al apagar poco.
1 - Despus de encendido o la ejecucin de la CLRWDT instruccin que restablece el temporizador perro guardin. 0 - Despus de la ejecucin de la SLEEP instruccin que establece el microcontrolador en el modo de bajo consumo.
Z - Zero bits
1 - El resultado de una operacin aritmtica o lgica es cero. 0 - El resultado de una operacin aritmtica o lgica es diferente de cero.
DC - Dgito llevar / tomar prestado algo ha cambiado en la suma y resta, si un "desbordamiento" o "tomar prestado" del resultado se produce.
1 - A llevar a cabo, desde el cuarto bit de orden inferior del resultado se ha producido. 0 - No llevar a cabo, desde el cuarto bit de orden inferior del resultado se ha producido.
C - Carry / Borrow poco ha cambiado en la suma y resta, si un "desbordamiento" o "tomar prestado" del resultado se produce, es decir, si el resultado es mayor que 255 o inferior a 0. o o
1 - Un acarreo de salida desde el bit ms significativo (MSB) del resultado se ha producido. 0 - n llevar a cabo, desde el bit ms significativo (MSB) del resultado se ha producido.
OPTION_REG Register
Leyenda: R / W - Legible / escritura de bits, (1) Despus del reinicio, el bit se establece El registro contiene varios bits OPTION_REG de control que se utilizan para configurar Timer0/WDT prescaler, Timer0, la interrupcin externa y pull-ups en PORTB.
o o
o o
o o
T0SE - TMR0 poco el borde de seleccin de fuente selecciona el pulso de borde (ascendente o descendente) contados por el Timer0 por el pin RA4/T0CKI.
o o
1 - Incremento de alta a baja transicin en el pin TOCKI. 0 - Incremento de alta a baja transicin en el pin TOCKI.
PSA - poco Prescaler asignacin asigna el prescaler (slo uno est disponible) para el temporizador temporizador o de vigilancia.
o o
1 - Prescaler se asigna al WDT. 0 - Prescaler se asigna al Timer0.
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 ...
Como puedes ver, todo se basa en un principio simple y eficaz. Cuando llega una solicitud de interrupcin, el bit de bandera se estableci por primera vez. Si el bit es decir, adecuada no se ha establecido (0), la condicin de interrupcin ser completamente ignorado. De lo contrario, se produce una interrupcin. Si varias fuentes de interrupcin estn habilitadas, es necesario detectar la una activa antes de una rutina de interrupcin comienza la ejecucin. Fuente de deteccin se realiza mediante la comprobacin bits de la bandera. Es importante saber que bits de la bandera no se borran automticamente, pero por software, mientras que la ejecucin de la rutina de interrupcin est en marcha. Si descuidamos este detalle, otra interrupcin se producir inmediatamente despus de regresar al programa principal, a pesar de que hay solicitudes no ms para su ejecucin. En pocas palabras, la bandera, as como el bit de IE, siendo establecido. Todas las fuentes de interrupcin tpicos del microcontrolador PIC16F887 se muestran en la pgina siguiente. Tenga en cuenta varias cosas: El bit GIE habilita todas las interrupciones no enmascaradas y deshabilita todas las interrupciones de forma simultnea. El bit PEIE permite todas las interrupciones perifricas no enmascaradas y deshabilita todas las interrupciones perifricas. Esto no se refiere al Timer0 y el PORTB fuentes de interrupcin. Para permitir que se produzca una interrupcin al cambiar el estado lgico PORTB, es necesario que le permita para cada bit por separado. En este caso, los bits del acto IOCB registro como bits de control de IE.
Registro INTCON
El registro INTCON incluye habilitar varias y trozos de la bandera de desbordamiento del registro TMR0, cambio de PORTB y las interrupciones externas pin INT.
Leyenda: R / W - Legible / escritura de bits, (0) Despus de reiniciar, se restablece, (X) Despus del reinicio, poco se sabe
o o
GIE - Global Interrupt Enable bit - controla todas las fuentes posibles de interrupcin al mismo tiempo.
1 - Todas las interrupciones no enmascaradas habilitado. 0 - Todas las interrupciones deshabilitadas.
PEIE - Interrupcin perifrico, permiten poco funciona de manera similar al bit GIE, pero controla las interrupciones habilitadas por los mdulos perifricos. Por lo tanto, no tiene impacto en las interrupciones provocadas por Timer0 o al cambiar el estado del puerto PORTB o RB0/INT alfiler. o o o o o
1 - Todas las interrupciones perifricas no enmascaradas habilitado. 0 - Todas las interrupciones de perifricos inhabilitado.
T0IE - TMR0 Overflow Interrupt Enable controles bits interrupciones provocadas por el desbordamiento de TMR0.
1 - TMR0 desbordamiento interrumpir habilitado. 0 - TMR0 desbordamiento de interrupcin deshabilitado.
INTE - Interrupcin RB0/INT externa Activa los controles bit de interrupcin causada por cambiar el estado lgico de la patilla de entrada RB0/INT (interrupcin externa).
1 - interrupcin externa INT habilitado.
RBIE - RB Cambio Puerto habilitacin de interrupcin bits. Cuando se configura como entradas, los pins PORTB puede provocar una interrupcin al cambiar su estado lgico (no importa si es alto-a-bajo transicin o viceversa, el hecho de que su estado lgico se cambia nicamente asuntos). El bit RBIE determina si una interrupcin es que se produzca o no. o o o o o o o o
1 - cambio de PORTB interrumpir habilitado. 0 - interrupcin cambio PORTB desactivado.
T0IF - TMR0 interrupcin de desbordamiento del bit indicador registra el desbordamiento del Timer0 registro, cuando el conteo comienza en cero.
1 - TMR0 se ha desbordado registro (bit debe ser limpiado desde el software). 0 - TMR0 registro no se ha desbordado.
INTF - RB0/INT bits externa bandera de interrupcin registra el cambio del estado de la lgica RB0/INT pin.
1 - interrupcin externa INT ha ocurrido (debe ser limpiado desde el software). 0 - interrupcin externa INT no ha ocurrido.
RBIF - RB Cambio Puerto bits bandera de interrupcin registra cualquier cambio del estado lgico de algunos pines de entrada PORTB.
1 - Al menos uno de los fines generales PORTB pines I / O ha cambiado su estado lgico. Despus de puerto PORTB lectura es completa, el bit RBIF debe ser limpiado desde el software. 0 - Ninguno de los efectos PORTB general de pines I / O ha cambiado su estado lgico.
Let's do it in mikroBasic...
' The PORTB.4 pin is configured as an input sensitive to logic state change ANSEL, ANSELH = 0 ' All I/O pins are configured as digital PORTB = 0 ' All PORTB pins are cleared TRISB = %00010000 ' All PORTB pins except PORTB.4 are configured as outputs INTCON.RBIE = 1 ' Interrupts on PORTB change are enabled IOCB.IOCB4 = 1 ' Interrupt on PORTB pin4 change is enabled INTCON.GIE = 1 ' Global interrupt is enabled ... ... 'From this point, any change of the PORTB.4 pin logic state will cause an interrupt
PIE1 Registro
El registro contiene PIE1 interrupcin perifrica bits de habilitacin.
Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Despus de reiniciar, se restablece
o o o o o o
SSPIE - Maestro del puerto en serie sncrona (MSSP) habilitacin de interrupcin bits - permite a una solicitud de interrupcin que se genera cada vez que una transferencia de datos a travs del mdulo de comunicacin sncrona en serie (SPI o el modo I2C) se ha completado. o o o o o o
1 - interrupcin del MSSP habilitado. 0 - interrupcin del MSSP desactivado.
CCP1IE - CCP1 habilitacin de interrupcin bits permite una peticin de interrupcin que se genera en CCP1 mdulo utilizado para el procesamiento de seal PWM.
1 - CCP1 interrupcin habilitada. 0 - CCP1 interrupcin deshabilitada.
TMR1IE - TMR1 interrupcin de desbordamiento Habilitar bits permite una peticin de interrupcin que se genera en cada registro de desbordamiento del temporizador TMR1, es decir, cuando el recuento se inicia desde cero. o o
1 - TMR1 desbordamiento interrumpir habilitado. 0 - TMR1 desbordamiento de interrupcin deshabilitado.
Let's do it in mikroBasic...
'Each Timer1 register (TMR1H and TMR1L) overflow causes an interrupt to occur. In every 'interrupt rutine, variable cnt will be incremented by 1. dim unsigned short cnt ' Define variable cnt sub procedure interrupt cnt = cnt + 1 ' Interrupt causes cnt to be incremented by 1 PIR1.TMR1IF = 0 ' Reset bit TMR1IF TMR1H = 0x80 ' TMR1H and TMR1L timer registers return TMR1L = 0x00 ' their initial values end sub main: ANSEL, ANSELH = 0 ' All I/O pins are configured as digital T1CON = 1 ' Turn on Timer1 PIR1.TMR1IF = 0 ' Reset the TMR1IF bit
TMR1H = 0x80 Timer1 TMR1L = 0x00 PIE1.TMR1IE = 1 overflow cnt = 0 INTCON = 0xC0 GIE and PEIE) ...
' Set initial value for ' Enable an interrupt on ' Reset variable cnt ' Enable interrupt (bits
PIE2 Registro
El registro PIE2 tambin contiene varios bits de habilitacin de interrupcin.
Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Despus de reiniciar, se restablece
Let's do it in mikroBasic...
' Comparator C2 is configured to use pins RA0 and RA2 as inputs. Every change on ' the comparator's output will cause the PORTB.1 output pin to change its logic ' state in interrupt routine. sub procedure interrupt PORTB.F1 = not PORTB.F1 ' Interrupt will invert logic state of the PORTB.1 pin
PIR2.C2IF = 0 end sub main: TRISB = 0 outputs PORTB.1 = 1 ANSEL = %00000101 analog inputs ANSELH = 0 digital CM2CON0.C2CH0 = 0 inverting input CM2CON0.C2CH1 = 0 PIE2.C2IE = 1 INTCON.GIE = 1 CM2CON0.C2ON = 1 ... ... PIR1 Registrarse
' Interrupt flag bit C2IF is cleared ' All PORTB pins are configured as ' Pin PORTB.1 is set ' RA0/C12IN0- and RA2/C2IN+ pins are ' All other I/O pins are configured as ' The RA0 pin is selected to be C2 ' Enables comparator C2 interrupt ' Global interrupt is enabled ' Comparator C2 is enabled
Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (R) - Poco legible, (0) Despus de reiniciar, se restablece
o o o o o o o o o
o o
PIR2 Registrarse
El registro contiene los bits de interrupcin PIR2 bandera.
Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (0) Despus de reiniciar, se restablece
o o o o o o o o o o o o o o
Let's do it in mikroBasic...
' Module ULPWU activation sequence main: PORTA.0 = 1 ' PORTA.0 pin is set ANSEL,ANSELH = 0 ' All I/O pins are configured as digital TRISA = 0 ' PORTA pins are configured as outputs Delay_ms(1) ' Charge capacitor PIR2.ULPWUIF = 0 ' Clear flag PCON.ULPWUE = 1 ' Enable ULP Wake-up TRISA.0 = 1 ' PORTA.0 is configured as an input PIE2.ULPWUIE = 1 ' Enable interrupt INTCON.GIE = 1 ' Enable all unmasked interrupts INTCON.PEIE = 1 ' Enable peripheral interrupt asm ' Asm instruction SLEEP ' Go to sleep mode ...
PCON registro
El registro PCON contiene solamente dos bits de la bandera se utilizan para diferenciar entre el poder-al momento del reinicio, brown-out reset, restablecimiento del temporizador watchdog y reset externo en el pin MCLR.
Leyenda: (-) poco no implementada, (R / W) - Legible / escritura de bits, (1) - Despus del reinicio, se establece el bit (0) Despus de reiniciar, se restablece
o o o o o o o o
Si el contador de programa se cambia desde dentro del software, entonces hay varias cosas que se deben tener en cuenta a fin de evitar problemas:
Ocho bits inferiores del registro PCL (el byte bajo) son a la vez de lectura y escritura, mientras que los cinco bits superiores del registro PCLATH son de slo escritura. El registro PC se borra en cualquier reinicio.
En lenguaje ensamblador, el valor del contador de programa est marcado como PCL y se refiere a 8 bits inferiores solamente. Tenga cuidado al utilizar la instruccin del 'ADDWF PCL' asamblea. Esta es una instruccin de salto, el destino de los cuales se determina mediante la adicin de algunos nm ero a la direccin actual. Es comnmente usado para saltar en una tabla de bsqueda o de la mesa pro g rama de leerlos. Un problema surge si dicha adicin hace que el registro PCLATH que ser modificados. La ejecucin de cualquier instruccin sobre el registro simultneamente PCL ously hace que los bits del contador de programa para ser reemplazada por el contenido de ambas PCLATH y PCL registro. Sin embargo, el registro PCL tiene acceso a 8 bits inferiores de la instruccin resultado solamente de modo que el salto siguiente ser incorrecta. El problema se resuelve mediante el establecimiento de tales instrucciones a las direcciones de programa que terminan por xx00h. Esto permite que el programa salte hasta 255 lugares. Si los saltos ms largos son ejecutados por esta instruccin, el registro PCLATH debe ser incrementado en 1 por cada desbordamiento de registro PCL. En una llamada a subrutina o salto de ejecucin (instrucciones de montaje CALL y GOTO ), el microcontrolador es capaz de proporcionar 11-bit de direccin nica. Similar a la RAM, que se divide en 'bancos', la ROM se divide en cuatro 'pginas' de 2K cada uno. Dichas instrucciones se ejecutan correctamente dentro de estos lmites. En pocas palabras, ya que las ofertas de procesador con la direccin de 11 bits, es capaz de hacer frente a cualquier lugar dentro de 2 KB.
La figura siguiente ilustra un salto a la subrutina PP1. Pero si el inicio de la direccin de subrutina o salto no est dentro de la misma pgina que el destino de la llamada, dos 'desaparecidos' bits superiores deben ser proporcionados por la realizacin de la operacin de escritura en el registro PCLATH. La figura siguiente ilustra un salto a la subrutina PP2.
En ambos casos, cuando la subrutina llega a algunas de las instrucciones de la asamblea siguiente RETURN , RETLW o RETFIE (volver al programa principal), el microcontrolador slo se
proceder a la ejecucin del programa desde donde lo dej, porque la direccin de retorno se inserta en la pila que, como se mencion antes, se compone de registros 13-bits.
Direccionamiento indirecto
Adems de direccionamiento directo, lo cual es lgico y evidente (que va a hacer para especificar la direccin de un registro para leer su contenido), este microcontrolador es capaz de realizar el direccionamiento indirecto por medio de la INDF y los registros de ISA. A veces hace que el proceso de escribir un programa ms fcil. Todo el procedimiento se habilita el registro INDF que no es un nico y verdadero (que no existe fsicamente). Se utiliza para especificar el registro de la direccin de la que se almacena en el registro FSR. Como resultado, escribir o leer del registro INDF significa realmente escribir o leer desde el registro de la direccin de la que se almacena en el registro FSR. En otras palabras, las direcciones de los registros se almacenan en el registro FSR, mientras que sus contenidos se almacenan en el registro INDF. La figura siguiente ilustra la diferencia entre el direccionamiento directo e indirecto.
Como puede verse, la emisin de los bits de direccionamiento de los desaparecidos se resuelve mediante un "tomar prestado" de otro registro. Esta vez, es el sptimo bit, denominado bit PIR, del registro de estado.
Con el fin de sincronizar el funcionamiento de puertos E / S con el interior de 8-bits organizacin del microcontrolador, son, de forma similar a los registros, agrupados en cinco puertos denotados por letras A, B, C, D y E. Todo E / S puertos tienen varias caractersticas en comn:
Para ahorrar ms espacio en el tablero, todos los pines de E / S son multifuncionales. Sin embargo, slo se puede asignar una funcin al mismo tiempo. Cada puerto est acompaado por el correspondiente registro TRIS: TRISA, TRISB, etc TRISC que determina el rendimiento, pero no el contenido de los bits del puerto. En la limpieza de cualquier bit del registro TRIS (bit = 0), el pasador correspondiente puerto est configurado como una salida. De manera similar, mediante el establecimiento de cualquier bit del registro TRIS (bit = 1), el pasador correspondiente puerto est configurado como una entrada. Esta regla es fcil de recordar 0 = Salida, 1 = Entrada.
Al igual que los bits del registro TRISA que determinan cul de los pines se configuran como entradas y cules como salidas, los bits correspondientes del registro ANSEL determinar si los pines PORTA se configuran como entradas analgicas o entradas y salidas digitales. RA0 = AN0 (determinado por el bit ANS0 del registro ANSEL)
RA5 = AN4 (determinado por el bit ANS4 del registro ANSEL) Cada bit de este puerto se le asigna una funcin adicional relacionada con algunos de los mdulos integrados en la periferia. Este captulo cubre slo la funcin adicional del pasador RA0, que est relacionado con la unidad PORTA y ULPWU, mientras que la funcin adicional de otros pines se describir en captulos posteriores. Vamos a hacerlo en mikroBasic ...
' The PORTA.2 pin is configured as a digital input. All other PORTA pins are digital ... outputs ANSEL = ANSELH = 0 ' All I/O pins are configured as digital PORTA = 0 ' All PORTA pins are cleared TRISA = %00000100 ' All PORTA pins except PORTA.2 are configured as outputs ...
ULPWU UNIDAD
El microcontrolador se utiliza comnmente en dispositivos independientes accionados batera que operan de forma peridica. Ejemplos tpicos son termmetros, sensores de deteccin de incendios y similares. El consumo de energa mnima es una de las prioridades aqu. Como una reduccin de la frecuencia de reloj hace que el consumo de energa se reduce, una de las soluciones ms convenientes para este problema es reducir la velocidad del reloj, es decir, utilizar cristal de cuarzo 32 KHz en lugar de 20MHz.
Configuracin del microcontrolador en modo de suspensin es un paso ms en la misma direccin.Aqu llegamos a otro tema - como para despertar el microcontrolador y la puso a modo normal?Obviamente, es necesario proporcionar algn modo una seal externa para cambiar el estado lgico de algunos pasador. La nica manera de hacerlo es por medio de dispositivos electrnicos adicionales, que por otra parte hace que aumente el consumo de energa de todo el dispositivo ... La solucin ideal sera que el microcontrolador puede despertarse peridicamente por s mismo. El circuito que hace posible que se muestra en la figura a la izquierda.
As es como funciona este circuito: Un pasador se configura como una salida y un uno lgico (1) es llevado a la misma. Esto hace que el condensador se cargar.Inmediatamente despus de esto, el mismo pin est configurado como una entrada. El cambio de estado lgico causar una interrupcin y el microcontrolador entrar en el modo de suspensin. Todo lo que queda ahora es esperar a que el condensador que se descarga por la corriente de fuga que fluye a travs de la clavija de entrada. Despus de que una interrupcin se lleva a cabo y el producto del microcontrolador con la ejecucin del programa en el modo normal. Todo el procedimiento se repite peridicamente.
Tericamente, esta es una solucin perfecta. El problema es que todos los pasadores capaces de provocar una interrupcin de esta manera son digitales y tienen corriente de fuga relativamente alto cuando su tensin no est cerca de los lmites de Vdd (1) o Vss (0). En este caso, el condensador se descarga por un corto perodo de tiempo dado que las cantidades actuales a varios cientos de microamperios. Esta es la razn por un bajo consumo de ULPWU circuito, capaz de registrar cadas lentas de tensin, se ha diseado.Su salida genera una interrupcin, mientras que su entrada est conectada a la patilla RA0 en el microcontrolador. Refirase a la figura de la izquierda, R = 200 ohms, C = 1 nF, el tiempo de descarga es aproximadamente 30mS, mientras que un consumo total de energa del microcontrolador es 1000 veces menor (varios cientos de nanoamperios).
Al igual que en el puerto PORTA, un uno lgico (1) en el bit TRISB registro configura el puerto apropiado pines PORTB como entrada y viceversa. Seis terminales de este puerto puede actuar como entradas analgicas (AN). Los bits del registro ANSELH determinar si estos pines se configuran como entradas analgicas o entradas y salidas digitales: RB0 = AN12 (determinado por el bit del registro ANS12 ANSELH)
RB5 = AN13 (determinado por el bit del registro ANS13 ANSELH) Cada pin del puerto PORTB se le asigna una funcin adicional relacionada con algunos de los incorporados en los mdulos perifricos, que se explicarn ms adelante. Las siguientes caractersticas hacen de este diffierent puerto desde otros puertos, por lo tanto, sus patas son de uso general:
Todos los pines del puerto PORTB se han construido en resistencias pull-up, que los hace ideales para conectar con los botones (teclado), interruptores u optoacopladores. Con el fin de conectar estas resistencias a los pines PORTB, el bit apropiado del registro WPUB debe ser fijado. *
Tener una alta resistencia (varias decenas de kiloohmios), estas resistencias 'virtuales' no afectan pines configurados como salidas, pero sirven como un complemento til cuando actan como insumos. De lo contrario, sin estas resistencias unidos los pines de entrada actuara como coma flotante debido a su alta resistencia de entrada.
* Aparte de los bits del registro WPUB, hay otro poco afecta a la instalacin de todas las resistencias de pull-up. Es el bit del registro RBPU OPTION_REG.
Puerto PORTB se puede utilizar como una fuente de interrupcin. Si est activado, cada bit del puerto PORTB configura como una entrada puede causar una interrupcin al cambiar su estado lgico. A fin de que los pins para provocar una interrupcin, el bit apropiado del registro IOCB debe ser fijado.
Debido a estas caractersticas, los pines del puerto PORTB se utilizan comnmente para el control de botones en el teclado, ya que son capaces de registrar infaliblemente ningn tipo de presin botn. No hay necesidad de 'escanear' estas entradas todo el tiempo, por lo tanto. Cuando los ejes X, Y y Z en los pins estn configurados como salidas fijados a uno lgico (1), slo es necesario esperar a una peticin de interrupcin para llegar despus de presionar un botn. Mediante la combinacin de ceros y unos de estos resultados se comprueba que se presiona el pulsador. Refirase a la figura a continuacin:
'The PORTB.1 pin is configured as a digital input. Any change of its logic state will cause 'an interrupt. It also has a pull-up resistor. All other PORTB pins are digital ... outputs. ANSEL, ANSELH = 0 ' All I/O pins are configured as digital PORTB = 0 ' All PORTB pins are cleared TRISB = %00000010 ' All PORTB pins except PORTB.1 are configured as outputs
OPTION_REG.RBPU = 0 WPUB.1 = 1 PORTB.1 pin IOCB.1 = 1 logic state change INTCON.RBIE = 1 INTCON.GIE = 1 ... PIN RB0/INT
' Pull-up resistors are enabled ' Pull-up resistor is connected to the ' The PORTB.1 pin may cause an interrupt on ' Interrupt on PORTB change is enabled ' All unmasked interrupts are enabled
El pasador RB0/INT es la nica "verdadera" fuente de interrupcin externa. Puede ser configurado para responder a la seal borde elevar (cero a uno de transicin) o el borde de la seal descendente (de uno a cero de transicin). El bit del registro INTEDG OPTION_REG se utiliza como un selector de seal.
Como se puede ver, los voltajes aplicados a los pasadores en el zcalo del programador son los mismos que los utilizados durante la programacin ICSP
Todas las funciones adicionales de los bits del puerto PORTC se describir ms adelante.
Al igual que en los puertos PORTA y PORTB, tres pines pueden ser configurados como entradas analgicas, en este caso. Los bits de Ansel registro de determinar si un alfiler actuar como una entrada analgica (AN) o una entrada / salida digital: RE0 = AN5 (determinado por el bit ANS5 del registro ANSEL);
Let's do it in mikroBasic...
' The PORTE.0 pin is configured as an analog input while another three pins of the same ' p.o.r.t are configured as digital. ANSEL = %00100000 ' The PORTE.0 pin is configured as analog ANSELH = 0 ' All other I/O pins are configured as digital TRISE = %00000001 ' All PORTE pins except PORTE.0 are configured as outputs PORTE = 0 ' All PORTE pins are cleared ... Y el registro ANSEL ANSELH
Los registros de Ansel y ANSELH se utilizan para configurar el modo de entrada de un pin de E / S como analgico o digital.
La regla a seguir dice lo siguiente: Para configurar un pin como una entrada analgica, el bit apropiado de los registros o Ansel ANSELH se debe establecer (1). Para configurar un pin como una entrada / salida digital, el bit apropiado debe ser cero (0). El estado de los bits de Ansel registro no afecta a las funciones de salida digital. El resultado de cualquier intento de leer un pin del puerto se configura como una entrada analgica ser 0.
En Corto
Es probable que nunca escribir un programa que no utiliza los puertos, por lo que el esfuerzo que hacen para aprender todo acerca de ellos sin duda valdr la pena. Tambin, que parecen ser los ms simples mdulos dentro del microcontrolador. Esta es la forma en que se utilizan:
Al disear un dispositivo, seleccionar un puerto para ser utilizado por el microcontrolador para la comunicacin con los mdulos perifricos. Si se utilizan slo las entradas y salidas digitales, seleccione cualquier puerto que desee. Si va a utilizar
algunas de las entradas analgicas, seleccione los puertos apropiados de apoyo de configuracin de este tipo (AN0-AN13). Cada pin del puerto puede configurarse como una entrada o una salida. Los bits del TRISA, TRISB, TRISC, TRISD y registros TRISE determinar cmo los terminales de los siguientes puertos PORTA, PORTB, PORTC, PORTD y PORTE va a actuar. Tan simple como eso. Si utiliza alguna de las entradas analgicas, en primer lugar es necesario establecer los bits correspondientes de la ANSEL y registros ANSELH al comienzo del programa. Si utiliza conmutadores y los botones como fuente de entrada de la seal, se recomienda conectarse a dispositivos a los pines del puerto PORTB porque tienen resistencias pull-up conectadas. El uso de estas resistencias est habilitado por el bit del registro RBPU OPTION_REG, mientras que las resistencias individuales estn habilitadas por los bits del registro WPUB. Generalmente es necesario para responder tan pronto como los pines de entrada cambia su estado lgico. Esto no significa que usted tiene que escribir un programa para comprobar el estado de los pins de la lgica de todo el tiempo.Slo tienes que conectar a los pines PORTB y permitir que se produzca una interrupcin en cada cambio de voltaje.Los bits de los registros y IOCB INTCON estn a cargo de eso.
3,4 TIMER0
El microcontrolador PIC16F887 dispone de tres temporizadores completamente independientes y contadores marcados como TMR0, TMR1 y TMR2. Lea atentamente el captulo siguiente para aprender ms sobre ellos. Timer0 tiene una amplia gama de aplicacin en la prctica. No hay casi ningn programa sin l, ya que le permite escribir fcilmente un cdigo que es para generar pulsos de duracin arbitraria, la medicin del tiempo o cmputo de impulsos externos (eventos) casi sin limitaciones. Timer0 es un temporizador de 8-bits / contador con las siguientes caractersticas:
8-bit del temporizador / contador; 8-bits prescaler (compartido con el temporizador de vigilancia); Programable de reloj interno o externo de origen; Interrupcin por desbordamiento, y Programable reloj externo para seleccionar bordes.
La siguiente figura ilustra el esquema Timer0 con todos los bits que controlan su funcionamiento. Estos bits se almacena en el registro OPTION_REG.
OPTION_REG Registrarse
o o o o o o o o o o o
PS2 0 0 0 0 1 1 1 1
PS1 0 0 1 1 0 0 1 1
PS0 0 1 0 1 0 1 0 1
Cuando el bit PSA est desactivada, el prescaler est asignado a la Timer0/counter como se muestra en la siguiente figura:
' In this example, Timer0 is configured as a timer and prescaler is assigned to it. unsigned cnt ' Define variable cnt sub procedure interrupt ' Interrupt routine cnt = cnt + 1 ' Interrupt causes cnt to be incremented by 1 TMR0 = 155 ' Timer0 (or counter) returns its initial value INTCON = 0x20 ' Bit T0IE is set, bit T0IF is cleared end sub main: OPTION_REG = 0x04 ' Prescaler (1:32) is assigned to Timer0 TMR0 = 155 ' Timer0 counts from 155 to 255 INTCON = 0xA0 ' Enable interrupt on TMR0 overflow ... ... ' In the following example, Timer0 is configured as counter and prescaler is assigned to it OPTION_REG = 0x20 ' Prescaler (1:2) is assigned to the Timer0 TMR0 = 155 ' Timer0 counts from 155 to 255 INTCON = 0xA0 ' Enable interrupt on TMR0 overflow ...
Cuando el bit PSA est establecido, el prescaler se asigna al temporizador perro guardin, como se muestra en la siguiente figura:
' In this example, prescaler (1:64) is assigned to watch-dog timer. main: OPTION_REG = 0x0E ' Prescaler is assigned to WDT (1:64) asm CLRWDT ' Assembly command to reset WDT end asm ... ... asm CLRWDT ' Assembly command to reset WDT end asm ...
Esta es tambin digno de mencin:
Cuando el pre-escalador se le asigna al temporizador / contador, cualquier escritura en el registro TMR0 se desactive la pre-escalador. Cuando el pre-escalador se le asigna al temporizador de reloj de perro, la instruccin CLRWDT borrar ambos. Escribir en el registro TMR0, utilizada como un contador de tiempo, no har que el contaje de impulsos para iniciar de inmediato, pero con dos ciclos de instruccin de retraso. En consecuencia, es ne cesarios para ajustar el valor escrito en el registro TMR0. Cuando el microcontrolador se establece en modo de reposo, el oscilador de reloj est apagado. No desbordamiento puede ocurrir ya que no hay pulsos para contar y por lo tanto la interrupcin de desbordamiento de TMR0 no puede despertar al microcontrolador del modo de suspensin. Cuando se utiliza como un contador de reloj externa, sin pre-escalador, una longitud de impulso mnima o un retardo entre dos impulsos debe ser 2 Tosc + 20 nS (Tosc representa el perodo de una seal de reloj generada por el oscilador). Cuando se utiliza como un contador de reloj externo con pre-escalador, una longitud de impulso mnima o el intervalo entre dos impulsos es slo 10ns. La 8-bits precontador registro no est disponible para el usuario, lo que significa que no pueden ser directamente ledo o escrito. Cuando se cambia la asignacin del prescaler Timer0 al temporizador perro guardin, la siguiente secuencia de instrucciones escritas en lenguaje ensamblador debe ser ejecutado con el fin de evitar que el microcontrolador se reinicie:
BANKSEL TMR0 CLRWDT CLRF TMR0 BANKSEL OPTION_REG BSF OPTION_REG,PSA CLRWDT MOVLW b11111000 ANDWF OPTION_REG,W IORLW b00000101 MOVWF OPTION_REG
;CLEAR WDT ;CLEAR TMR0 AND PRESCALER ;PRESCALER IS ASSIGNED TO WDT ;CLEAR WDT ;SELECT BITS PS2,PS1,PS0 AND CLEAR ;THEM USING LOGIC AND INSTRUCTION ;BITS PS2, PS1, AND PS0 SET ;PRESCALER RATE TO 1:32
Del mismo modo, cuando se cambia la asignacin de prescaler del WDT al Timer0, la siguiente secuencia de instrucciones, tambin escrito en lenguaje ensamblador, se debe ejecutar: ;CLEAR WDT AND PRESCALER ;SELECT ONLY BITS PSA,PS2,PS1,PS0 ;CLEAR THEM USNG LOGIC AND INSTRUCTION ;PRESCALER RATE IS 1:16
BANKSEL TMR0 CLRWDT BANKSEL OPTION_REG MOVLW b11110000 ANDWF OPTION_REG,W IORLW b00000011 MOVWF OPTION_REG En Corto
Con el fin de utilizar Timer0 correctamente, es necesario: Paso 1: Para seleccionar el modo:
Modo de temporizador se selecciona por el bit del registro T0CS OPTION_REG, (T0CS: 0 = temporizador, 1 contador =). Cuando se utiliza, el pre-escalador debe ser asignado al temporizador / contador borrando el bit PSA del registro OPTION_REG. La tasa de pre-escalador se establece mediante los bits PS2-PS0 del mismo registro. Cuando una interrupcin se utiliza, los GIE y TMR0IE bits del registro INTCON deben establecerse.
Contar:
Restablecer el registro TMR0 o escribir un valor conocido a ella. El tiempo transcurrido (en microsegundos, si de cristal de cuarzo de 4 MHz se utiliza) se mide mediante la lectura del registro TMR0. El TMR0IF bit de bandera del registro INTCON se ajusta automticamente cada vez que el TMR0 desborda registro. Si est activado, se produce una interrupcin. La polaridad de los impulsos para ser contados en el pin RA4 es seleccionado por el bit TOSE del registro OPTION_REG (T0SE: 0 = positivo, 1 = impulsos negativos). Nmero de impulsos puede ser leda desde el registro TMR0. La pre-escalador y de interrupcin se utilizan en la misma manera que en el modo de temporizador.
3,5 TIMER1
Mdulo Timer1 es un contador de 16-bit de temporizacin /, lo que significa que se compone de dos registros (TMR1L y TMR1H). Es capaz de contar hasta 65.535 pulsos en un solo ciclo, es decir, antes de que el recuento se inicia desde cero.
Al igual que en Timer0, estos registros pueden ser ledos o escritos que en cualquier momento. En caso de que se produce un desbordamiento, una interrupcin se genera automticamente, siempre y cuando se activa. El Timer1 puede ser configurado para operar en uno de dos modos, ya sea como un temporizador o un contador. A diferencia del Timer0, ambos de estos modos de dar possibilitis adicional.
16-bit del temporizador / contador de un par de registros; Programable de reloj interno o externo de origen; 3-bit pre-escalador; Opcional de baja potencia (LP) del oscilador; Funcionamiento sncrono o asncrono; Timer1 puerta de control (cuenta activada) a travs de comparacin o el pasador T1G; Interrupcin por desbordamiento; Wake-up en caso de desbordamiento (reloj externo), y Fuente de reloj para la Captura / Comparacin del mdulo.
Cuando la fuente de reloj interno est seleccionado, el par de registros TMR1H-TMR1L se incrementar en mltiplos de pulsos Fosc segn lo determinado por el pre-escalador. Cuando la fuente de reloj externa est seleccionada, el temporizador puede operar ya sea como un temporizador o un contador. Los pulsos de reloj en el modo de contador puede ser sincronizado con el reloj del microcontrolador interno o ejecutar de forma asincrnica.
TIMER1 de Prescaler
Timer1 est provisto de un pre-escalador completamente independiente que permite la divisin 1, 2, 4 u 8 de la frecuencia de entrada de reloj. El prescaler no es directamente leer o escribir. Sin embargo, el contador de prescaler se borra automticamente despus de escribir en el registro o TMR1H TMR1L.
OSCILADOR TIMER1 de
Los pasadores RC0/T1OSO y RC1/T1OSI son, sobre todo, utilizado para registrar los impulsos procedentes de los mdulos perifricos, pero tambin tienen una funcin adicional. Como puede verse en la figura, que al mismo tiempo actan como entrada (pin RC1) y salida (pin RC0) del oscilador de cuarzo LP adicional (baja potencia). Este circuito est diseado principalmente para el funcionamiento a bajas frecuencias (hasta 200 KHz) y utiliza cristal de 32.768 KHz de cuarzo. Tal cristal es conveniente para los relojes de cuarzo debido a que es fcil de obtener un segundo de duracin pulsos dividiendo esta frecuencia. Dado que la operacin de este oscilador no depende del reloj interno, que es capaz de funcionar incluso en modo de suspensin, que se habilita estableciendo el bit de control del registro T1OSCEN T1CON. En este caso, es necesario proporcionar un retardo de tiempo corto (unos pocos milisegundos) desde el software en aras de la estabilidad del oscilador de reloj.
Tabla siguiente contiene los valores recomendados de los condensadores que son, adems de cristal de cuarzo, integrado en el oscilador. Estos valores no son crticos y se aplica la siguiente regla: cuanto mayor es la capacidad, mayor ser la estabilidad, la cual, al mismo tiempo, prolonga el tiempo necesario para la estabilidad del oscilador de reloj.
OSCILADOR FRECUENCIA 32 kHz LP 100 kHz 200 kHz C1 33 pF 15 pF 15 pF C2 33 pF 15 pF 15 pF
El consumo de energa del microcontrolador se minimiza en el modo de espera como el consumidor de energa principal, el oscilador, no funciona. El microcontrolador se establece en este modo de ejecutar la instruccin SLEEP. El problema es cmo despertar el microcontrolador, es decir, cmo generar una interrupcin que hace que suceda. Como el microcontrolador "duerme", una interrupcin debe ser activado por los mdulos perifricos. Se hace an ms complicado si es necesario despertar al microcontrolador a intervalos regulares de tiempo ...
El problema se resuelve mediante la incorporacin de un oscilador de baja potencia totalmente independiente de cuarzo capaz de operar en modo de suspensin en el microcontrolador PIC16F887. En pocas palabras, el mdulo que sola ser perifrica, est ahora integrada en el microcontrolador y asignado a la Timer1. El oscilador se activa fijando el bit T1OSCEN del registro T1CON. El bit TMR1CS se utiliza entonces para permitir que el Timer1 utilizar impulsos generados por dicho oscilador.
Una seal generada por el oscilador de cuarzo est sincronizado con el reloj del microcontrolador en la limpieza de la broca T1SYNC. En este caso, el temporizador no puede funcionar en modo de reposo porque el circuito de sincronizacin utiliza el reloj del microcontrolador. El registro TMR1 interrupcin de desbordamiento se puede habilitar. Si el bit T1SYNC se establece, tales interrupciones tambin se producir en modo de reposo.
Este contador registra un uno lgico (1) en los pines de entrada. Lo que pasa es que al menos un flanco de bajada debe estar registrado antes de iniciar el conteo de pulsos. Refirase a la figura de la izquierda. Las flechas indican los incrementos del contador.
El reloj del microcontrolador no funciona en modo de reposo para que el exceso del temporizador registro no puede causar una interrupcin en este modo.
' In this example, Timer1 is configured as a timer with the prescaler rate 1:8. Every time ' TMR1H and TMR1L registers overflow occurs, an interrupt will be requested. main: ... PIR1.TMR1IF = 0 TMR1H = 0x22 TMR1L = 0x00 T1CON.TMR1CS = 0 oscillator T1CON.T1CKPS0 = 1 T1CON.T1CKPS1 = 1 PIE1.TMR1IE = 1 INTCON = 0xC0 T1CON.TMR1ON = 1 ... T1CON Registrarse
Los bits del registro T1CON est en control de la operacin Timer1.
' Reset the TMR1IF flag bit ' Set initial value for the Timer1 ' Timer1 counts pulses from internal ' Assigned prescaler rate is 1:8 ' Enable interrupt on overflow ' Enable interrupt (bits GIE and PEIE) ' Turn the Timer1 on
T1GINV - Timer1 Puerta Invertir actos de bits como un inversor de estado lgico en la puerta pasador T1G o la salida del comparador C2 (C2OUT) puerta. Permite que el temporizador para contar los pulsos mientras la puerta est alta o baja.
1 - Temporizador 1 cuenta cuando el pasador T1G o puerta C2OUT bits es alta (1). 0 - Temporizador 1 cuenta cuando el pasador T1G o puerta C2OUT bits es baja (0).
TMR1GE - Timer1 Puerta de bit de habilitacin determina si el pin T1G o el comparador C2 com salida (C2OUT) la puerta se activa o no.Este bit se activa slo cuando el Timer1 est encendido (TMR1ON bit = 1). De lo contrario, se ignora.
1 - Timer1 se activa slo cuando la puerta Timer1 no est activo. 0 - Puerta de no afectar el funcionamiento del Timer1.
T1CKPS1, T1CKPS0 - determinar la tasa de la pre-escalador asignado al Timer1. T1CKPS1 0 0 1 1 T1CKPS0 0 1 0 1 PRESCALER TARIFA 01:01 01:02 01:04 01:08
1 - Oscilador LP est habilitado para el reloj de Timer1 (oscilador de baja potencia con una frecuencia de 32,768 kHz). 0 - Oscilador LP est desactivado.
T1SYNC - Timer1 entrada externa de reloj de sincronizacin de bits de control permite la entrada del oscilador LP o el pin de entrada T1CKI para sincronizarse con el reloj del controlador interno de micro. El bit es ignorado mientras impulsos suministrados desde la fuente de reloj se cuentan microcontrolador (TMR1CS bits = 0).
1 - Entrada de sincronizacin no se sincronizarn .. 0 - entrada de reloj externo se sincronizarn .. 1 - Contar pulsos en el pin T1CKI (en el flanco ascendente 0-1). 0 - Recuento de impulsos generados por el reloj del microcontrolador. 1 - Timer1 habilitado. 0 - Timer1 personas con discapacidad.
En Corto
Con el fin de utilizar el Timer1 correctamente, es necesario hacer lo siguiente:
Dado que no es posible apagar el pre-escalador, su tasa debe ser ajustado mediante el uso de los bits T1CKPS1 y T1CKPS0 de la T1CON registro (Consulte la tabla anterior).
Seleccione el modo apropiado con la broca de la TMR1CS T1CON registro. (TMR1CS: 0 = la fuente de reloj es oscilador interno de cuarzo, 1 = el reloj se suministra externamente). Al establecer el bit T1OSCEN del mismo registro, el oscilador se activa y los registros TMR1H y TMR1L se incrementan en cada pulso de reloj. Contar las paradas en la limpieza de este bit. El prescaler se borra en la limpieza o escribiendo a los registros del contador. Cuando los dos registros del temporizador estn llenas de seres y un occures de desbordamiento, la bandera TMR1IF se establece y comienza el conteo desde cero.
3,6 Timer2
Timer2 es un temporizador de 8-bits que opera en una manera especfica.
Impulsos generados por el oscilador de cuarzo pase primero a travs del divisor de la tasa de los cuales se puede cambiar con los T2CKPS1 y T2CKPS0 bits. La salida del precontador se utiliza entonces para incrementar el registro TMR2 a partir de las 00h. Los valores de TMR2 y PR2 registros se comparan todo el tiempo y el TMR2 se incrementa constantemente hasta que coincida con el valor almacenado en PR2. Cuando el partido se produce, el registro TMR2 se borra automticamente. El postscaler Timer2 se incrementa en cada partido y su produccin se utiliza para generar una interrupcin si est habilitada. Los registros TMR2 y PR2 son de lectura y escritura. Contando puede ser detenido en la limpieza de la broca TMR2ON, lo que reduce el consumo de energa. El momento de la reposicin Timer2 tambin puede utilizarse como una seal de comunicacin de reloj de serie. El funcionamiento del Timer2 est bajo el control de varios bits de la T2CON registro.
T2CON Registrarse
TOUTPS3 - TOUTPS0 - Timer2 salida Postcaler bits de seleccin se utilizan para determinar la tasa de postscaler de acuerdo con la siguiente tabla: TOUTPS3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 TOUTPS2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 TOUTPS1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 TOUTPS0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 POSTSCALER TARIFA 01:01 01:02 01:03 01:04 01:05 01:06 01:07 01:08 01:09 01:10 01:11 01:12 01:13 01:14 01:15 01:16
T2CKPS1, T2CKPS0 - Timer2 Clock bits de preescala determinar la tasa de prescaler: T2CKPS1 0 0 1 T2CKPS0 0 1 x PRESCALER TARIFA 01:01 01:04 01:16
En Corto
Cuando se utiliza el Timer2, tenga en cuenta los siguientes datos relacionados con sus registros:
En el momento del encendido, el registro PR2 contiene el valor FFh. Tanto el pre-escalador y postscaler han sido aprobados por escrito al registro TMR2. Tanto el pre-escalador y postscaler han sido aprobados por escrito al registro T2CON. En cualquier reajuste - que supongo que, tanto pre-escalador y postscaler se borran.
MDULO CCP1
El corazn del mdulo CCP1 es una CCPR1 16-bit del registro que se compone de dos registros CCPR1L y CCPR1H. Se utiliza para la captura de nmeros binarios desde el temporizador registro TMR1 (TMR1H y TMR1L) o la comparacin de nmeros binarios almacenados en los registros CCPR1 y TMR1.
Si est habilitado por el software, el temporizador TMR1 registro de reposicin puede ocurrir en cualquier partido en el modo de comparacin. Adems, el mdulo CCP1 es capaz de generar seales PWM de frecuencia variable y ciclo de trabajo. Los bits del registro CCP1CON estn en el control del mdulo CCP1.
En este modo, el registro CCP1 (que consiste en la CCPR1H y un par CCPR1L registro) captura un valor de 16-bit del temporizador TMR1 registro (que consiste en la TMR1H y un par TMR1L registro) cuando uno de los siguientes eventos en el RC2/CCP1 pin:
Cada flanco de bajada (1 -> 0); Cada flanco ascendente (0 -> 1); Cada arista cuarta ascendente (0 -> 1), y Cada arista 16a ascendente (0 -> 1).
Cul de estos eventos hacen que un conjunto de datos de 16 bits para ser capturados depende de la combinacin de cuatro bits (CCP1M3, CCP1M2, CCP1M1 y CCP1M0) del registro de control. Adems, las siguientes condiciones deben cumplirse:
El pasador RC2/CCP1 debe ser configurado como entrada, y El mdulo Timer1 debe funcionar como un temporizador o un contador sncrono.
El bit de bandera CCP1IF se establece cuando la captura se hace. Si el bit del registro CCP1IE PIE1 se establece cuando ocurre, se produce una interrupcin. Cuando las salidas del mdulo CCP1 el modo de captura, una interrupcin no deseada de captura se puede generar. Con el fin de evitar esto, tanto el bit de permitir la interrupcin CCP1IE y el bit de bandera CCP1IF debe ser limpiado antes de realizar cualquier cambio en el registro de control CCP1CON. Una interrupcin no deseada tambin se puede generar cuando se cambia de una tasa de pre-escalador a otro. Para evitar esto, el mdulo CCP1 debe ser temporalmente apagado antes de cambiar la tasa de pre-escalador. Es recomendable utilizar la siguiente secuencia de programa escrito en lenguaje ensamblador:
BANKESEL CCP1CON CLRF CCP1CON 'CONTROL REGISTER IS CLEARED 'CCP1 MODULE IS OFF MOVLW XX 'NEW PRESCALER MODE IS SELECTED MOVWF CCP1CON 'NEW VALUE IS LOADED INTO THE CONTROL REGISTER 'CCP1 MODULE IS SIMULTANEOUSLY SWITCHED ON
Let's do it in mikroBasic...
... asm BANKESEL CCP1CON CLRF CCP1CON ' CONTROL REGISTER IS CLEARED ' CCP1 MODULE IS OFF MOVLW XX ' NEW PRESCALER MODE IS SELECTED MOVWF CCP1CON ' NEW VALUE IS LOADED INTO THE CONTROL REGISTER ' CCP1 MODULE IS SIMULTANEOUSLY SWITCHED ON end asm ...
Para configurar el mdulo CCP1 para funcionar en el modo de comparacin, dos condiciones deben cumplirse:
El pasador RC2/CCP1 se debe configurar como una salida, y Timer1 debe estar sincronizado con el reloj interno.
Otro ejemplo, tambin es comn en la prctica, es el uso de seales PWM en seal de unidades generadoras para producir seales de formas de onda arbitrarias, como forma de onda sinusoidal. Vea la siguiente figura:
Los dispositivos que operan con seales PWM se utilizan comnmente en la prctica como controladores de frecuencia ajustable para controlar el funcionamiento de los motores elctricos (velocidad, aceleracin, deceleracin, etc.)
La figura anterior muestra un diagrama de bloques del conjunto mdulo CCP1 a modo PWM. Con el fin de generar un pulso de ciclo de trabajo arbitrario en su pin de salida, es necesario establecer perodo de pulso (frecuencia) y duracin del impulso del primero.
PWM PERODO
La salida PWM perodo de impulso (T) depende del valor almacenado en el registro PR2 del Timer2. Se calcula por medio de la siguiente ecuacin: Perodo PWM = (PR2 +1) * 4Tosc * TMR2 pre-escala de valor Si el perodo de PWM (T) es conocido, es fcil calcular la frecuencia de la seal (F) ya que estos dos valores estn relacionadas por la ecuacin F = 1 / T.
El pin de salida ser constantemente establecer si la anchura de impulso es por negligencia dispuesto a ser ms grande que perodo de PWM. En este caso, el postscaler Timer2 no puede ser utilizado para la generacin de largos perodos de PWM.
Las frecuencias de las seales PWM y resoluciones (Fosc = 8MHz): FRECUEN CIA PWM Temporizador de pre-escala 1.22K HZ 16 4.90K HZ 4 19.61K HZ 1 76.92K HZ 1 153.85K HZ 1 200.0K HZ 1
65h 8
65h 8
65h 8
19h 6
0Ch 5
09h 5
' In this example, PWM module is initialized and set to give a pulse train of 50% duty' cycle. Functions PWM1_Init(), PWM1_Start() and PWM1_Set_Duty() are used for this ' purpose. All of them are already contained in the mikroBasic PRO for PIC PWM library ' and just need to be copied to the program. dim duty_c as byte ' Define variable duty_c ... sub procedure InitMain() ANSEL,ANSELH = 0 ' All I/O pins are configured as digital PORTC,TRISC = 0 ' Initial state of port C output pins PWM1_Init(5000) ' PWM module initialization (5KHz) end sub main: InitMain() duty_c = 127 ' Initial value of duty-cycle PWM1_Start ' Start PWM1 module PWM1_Set_Duty(duty_c) ' Set PWM duty-cycle to 50% ... ...
CCP1CON Registrarse
P1M1, P1M0 - PWM bits de configuracin de salida - El pin P1A siempre se configura como una entrada en la captura / modo de comparacin. Pines P1B, P1C y actuar como puerto PORTD P1D entrada / salida de pines. P1M1 P1M0 MODO PWM con salida nica 0 0 Pin P1A emite la seal modulada. Pines P1B, P1C y P1D son puerto de entrada de D / salida Full Bridge - Configuracin Adelante
Pin P1D emite la seal modulada Pin P1A est activo Pines P1B y P1C estn inactivos La mitad de configuracin de puente 1 0 Pasadores P1A y P1B seal de salida modulada PinsP1C y P1D son entradas de los puertos D y salidas Full Bridge - configuracin inversa 1 1 Pin P1B emite la seal modulada Pin P1C est activo Pines P1A y P1D estn inactivos
DC1B1, DC1B0 - PWM fragmentos de ciclos de trabajo menos importantes - slo se utilizan en el modo PWM en el que se representan dos bits menos significativos de un nmero de 10 bits. Este nmero se utiliza para determinar el ciclo de trabajo de una seal PWM. El resto de bits (8 en total) se almacenan en el registro CCPR1L. CCP1M3 - CCP1M0 bits - se utilizan para seleccionar el modo de funcionamiento del Mdulo CCP1. CCP1M3 0 0 0 0 CCP1M2 0 0 0 0 CCP1M1 0 0 1 1 CCP1M0 0 1 0 1 MODO El mdulo est desactivada (reset) No usado Comparar el modo de CCP1IF bits se encuentra en juego No usado Modo de captura 0 1 0 0 Cada flanco descendente en el pin CCP1 Modo de captura 0 1 0 1 Cada flanco ascendente en el pin CCP1 Modo de captura 0 1 1 0 Cada borde de cuarto creciente en el pin CCP1 Modo de captura 0 1 1 1 Cada arista 16a aumento en el pin CCP1 Comparar el modo de 1 0 0 0 De salida y el bit CCP1IF se establecen en el partido del Comparar el modo de 1 0 0 1 La salida se borra y poco CCP1IF se establece en el partido del Comparar el modo de
Solicitud de interrupcin llega y CCP1IF bit se establece en el partido Comparar el modo de 1 0 1 1 CCP1IF bit est establecido, y contadores de tiempo de 1 o 2 registros se borran Modo PWM 1 1 0 0 Pines P1A y P1C estn activos de alta Pines P1B y P1D estn activos de alta Modo PWM 1 1 0 1 Pines P1A y P1C estn activos de alta Pines P1B y P1D estn activos bajo Modo PWM 1 1 1 0 Pines P1A y P1C estn activos bajo Pines P1B y P1D estn activos de alta Modo PWM 1 1 1 1 Pines P1A y P1C estn activos bajo Pines P1B y P1D estn activos bajo
MDULO CCP2
Independientemente de los nombres de diferentes registros y bits en los mdulos CCP1 y CCP2, el mdulo CCP2 representa una copia fiel del mdulo CCP1 configurado para funcionar en modo normal (capturar y comparar). Slo hay una cosa que hace que el CCP2 diferente cuando se opera en el modo de comparacin. Es la seal de reposicin Timer1. Es decir, si el convertidor A / D est habilitada, en el momento en que los valores de los registros TMR1 y CCPR2 partido, la seal de reinicio del temporizador Timer1 se iniciar automticamente el proceso de conversin A / D.
El mdulo CCP2 est tambin bajo el control de los bits de control del registro. Esta vez, es el registro CCP2CON.
CCP2CON Registrarse
DC2B1, DC2B0 - PWM fragmentos de ciclos de trabajo menos importantes - slo se utilizan en el modo PWM en el que se representan dos bits menos significativos de un nmero de 10 bits. Este nmero se utiliza para determinar el ciclo de trabajo de una seal PWM. El resto de bits (8 en total) se almacenan en el registro CCPR2L. CCP2M3 - CCP2M0 bits - se utilizan para seleccionar el modo de funcionamiento del mdulo CCP2. CCP2M3 0 0 0 0 CCP2M2 0 0 0 0 CCP2M1 0 0 1 1 CCP2M0 0 1 0 1 MODO El mdulo est desactivada (reset) No usado No usado No usado Modo de captura 0 1 0 0 Cada flanco descendente en el pin CCP2 Modo de captura 0 1 0 1 Cada borde de sensibilizacin sobre la pin CCP2 Modo de captura 0 1 1 0 Cada borde de cuarto creciente en el pin CCP2 Modo de captura 0 1 1 1 Cada arista 16a aumento en el pin CCP2 Comparar el modo de 1 0 0 0 De salida y el bit CCP2IF se establecen en el partido del Comparar el modo de 1 0 0 1 La salida se borra y poco CCP2IF se establece en el partido del
Comparar el modo de 1 0 1 0 La interrupcin se genera poco CCP2IF se establece y el pin CCP2 no se ve afectado el partido Comparar el modo de 1 0 1 1 En Mach, poco CCP2IF se establece, Timer 1 registros se borran y la conversin A / D se inicia si el convertidor A / D est habilitada. Modo PWM
En Corto
Configuracin CCP1 mdulo a modo PWM
Con el fin de establecer el mdulo CCP1 para funcionar en el modo PWM, los siguientes pasos se deben tomar:
o o o o o
Deshabilitar el pin de salida CCP1 (configurarlo como un insumo). Establecer el perodo de PWM escribiendo un valor en el registro PR2. Establecer el mdulo CCP1 para operar en el modo PWM mediante la combinacin de bits del registro CCP1CON. Ajuste el ciclo de trabajo de la seal PWM escribiendo un valor en el registro y el uso de los bits CCPR1L DC1B1 y DC1B0 del registro CCP1CON. Configurar e iniciar Timer2:
Desactive la bandera de interrupcin TMR2IF del registro PIR1. Establecer el valor Timer2 preescala utilizando los bits T2CKPS1 y T2CKPS0 del registro T2CON. Ejecute el Timer2 al establecer el bit TMR2ON del registro T2CON.
No encienda dos transistores MOSFET simultneamente como la corriente de cortocircuito que puede ser causada por lo tanto va a ser fatal. Con el fin de evitar esto, es necesario esperar un tiempo de conmutacin entre los conductores de encendido y apagado. Este retardo de tiempo, marcado como 'td' en la siguiente figura, se proporciona por medio de bits PDC0-PDC6 del registro PWM1CON.
Como puede verse en la figura a continuacin, el modo de medio puente tambin puede ser utilizado para conducir los transistores MOSFET en la configuracin de puente completo:
FULL-BRIDGE MODE
Todos los cuatro pasadores se configuran como salidas en el modo de puente completo. En la prctica, este modo de funcionamiento se utiliza comnmente para el funcionamiento de los motores, ya que proporciona un control sencillo y lleno de velocidad y direccin de rotacin. Hay dos configuraciones de este modo: Full Bridge-Forward y Full Bridge-Reverse.
Una lgica de un (1) aparece en el pin P1A (pin est activo-alto); Secuencia de impulsos aparece en el pin P1D; y Una lgica cero (0) aparece en los pines P1B y P1C (pines estn activos-bajo).
La siguiente figura muestra el estado de los pines P1A-P1D durante un ciclo completo de PWM.
Una lgica de un (1) aparece en el pin P1C (pin est activo-alto); Secuencia de impulsos aparece en el pin P1B, y Una lgica cero (0) aparece en la P1A y P1D pines (pines estn activos-bajo).
PWM1CON Registrarse
1 - Una vez apagado automtico, el mdulo PWM se reinicia automticamente, mientras que el bit del registro ECCPASE ECCPAS se borra. 0 - Con el fin de reiniciar el mdulo PWM al auto-apagado, el bit ECCPASE debe ser limpiado desde el software.
PDC6 - PDC0 PWM bits de recuento de retraso - Un nmero binario 7-dgitos determina el nmero de ciclos de instruccin (4 * Tosc) usado como un retardo de tiempo durante la activacin de pines de salida PWM.
PSTRCON Registrarse
1 - Redirigir se produce despus de modificar el registro PSTRCON, pero no hasta la forma de onda PWM es completa. 0 - Redirigir se produce despus de modificar el registro PSTRCON. La seal PWM en el pin de salida se cambi inmediatamente sin tener en cuenta si el ciclo anterior se ha completado o no. Tal reorientacin se utiliza cuando una seal PWM tiene que ser eliminado de la immediatley pasador. 1 - El pin P1D se alimenta con una seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTD / salida. 1 - El pin P1C se alimenta con una seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTD / salida. 1 - El pin P1B se alimenta con la seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTD / salida. 1 - El pin P1A se alimenta con la seal PWM la polaridad de la cual es controlada por los CCP1M0 y CCP1M1 bits. 0 - Pin est configurado como un puerto de entrada general, PORTC / salida.
ECCPAS Registrarse
ECCPASE - Auto-apagado PECC bit de estado indica si el evento estado de cierre del mdulo CCP se ha producido:
1 - mdulo CCP est en el estado de cierre. 0 - mdulo CCP opera con normalidad.
ECCPAS2 - ECCPAS0 - PECC Auto Shutdown-bits de origen Select se utilizan para seleccionar el auto apagado Estado de la fuente: ECCPAS2 0 0 0 0 1 1 1 1 ECCPAS1 0 0 1 1 0 0 1 1 ECCPAS0 0 1 0 1 0 1 0 1 SHUTHOWN ESTADO DE LA FUENTE Estado de cierre desactivada Comparador C1 cambio en la salida Comparador C2 cambio de salida El comparador C1 o C2 cambio de salida La lgica cero (0) en el pin INT La lgica cero (0) en el pin INT o cambio comparador C1 de salida La lgica cero (0) en el pin INT o cambio comparador la salida C2 La lgica cero (0) en el pin INT o cambio comparador la salida C1 o C2
PSSAC1, PSSAC0 - Pins P1A, P1C de cierre de los bits de control del Estado definir el estado lgico de la salida de pines P1A y P1C cuando el mdulo CCP est en el estado de apagado. PSSAC1 0 0 1 PSSAC0 0 1 X PINES ESTADO LGICO 0 1 De alta impedancia (Tri-State)
PSSBD1, PSSBD0 - P1B Pins, P1D de cierre de los bits de control del Estado definir el estado lgico de la salida de pines P1B y P1D cuando el mdulo CCP est en el estado de apagado. PSSBD1 0 0 1 PSSBD0 0 1 X PINES ESTADO LGICO 0 1 De alta impedancia (Tri-State)
El microcontrolador PIC16F887 tiene varios mdulos independientes de comunicacin en serie y cada uno de ellos puede ser configurado para operar en varios modos diferentes, que las hacen insustituible en muchas situaciones. Recuerde lo que le aconseja acerca de los mdulos CCP que el mismo se aplica aqu. No te cargues con detalles sobre el funcionamiento de todos ellos, slo tienes que seleccionar uno y aprender slo lo que realmente necesita. La USART es uno de los sistemas ms antiguos de comunicacin en serie. Las versiones modernas de este sistema se actualizan y pidi un poco diferente - EUSART.
EUSART
El Mayor Conjunto de Receptor Universal Synchronous Asynchronous transmisor (EUSART) es un mdulo de E / S serie la unidad de comunicacin perifrica. Tambin se conoce como interfaz de comunicaciones en serie (SCI).Contiene todos los generadores de reloj, registros de desplazamiento y los datos de buffers necesarios para realizar una transferencia de datos en serie de forma independiente de la ejecucin del programa principal. Como su nombre indica, aparte de usar el reloj para la sincronizacin, este mdulo tambin puede establecer conexin asncrona, que le hace nico para algunas de las aplicaciones. Por ejemplo, en caso de que es difcil o imposible para proporcionar canales especiales para la transferencia de reloj y de datos (por ejemplo, la radio o el control remoto de infrarrojos), el mdulo EUSART es definitivamente la mejor solucin posible.
El sistema EUSART integrado en el microcontrolador PIC16F887 tiene las siguientes caractersticas:
Full-duplex asncrono de transmisin y recepcin; Programable 8 - o caracteres anchos 9-bit; De deteccin de direcciones en el modo de 9-bit; Desbordamiento de bfer de entrada de la deteccin de errores, y Half-duplex de comunicacin en modo sncrono. EUSART en modo asncrono
El EUSART transmite y recibe datos utilizando un estndar de no retorno a cero (NRZ) en formato. Como puede verse en la figura a continuacin, este modo no utiliza la seal de reloj, mientras que el formato de datos que estn siendo transferidos es muy sencillo:
En estado de reposo, la lnea de datos tiene un nivel lgico alto (1); Cada transmisin de datos se inicia con el bit de inicio que siempre es un cero (0); Cada dato es de 8 - o 9-bits de ancho (el bit LSB se transfiere primero), y Cada transmisin de datos termina con el bit de parada, que es siempre un uno (1).
La figura siguiente muestra una forma comn de conectar un microcontrolador PIC con el mdulo EUSART. El circuito RS-232 se utiliza como un convertidor de nivel de tensin.
A fin de permitir la transmisin de datos a travs del mdulo EUSART, es necesario configurar este mdulo para funcionar como un transmisor. En otras palabras, es necesario definir el estado de los bits siguientes:
TXEN = 1 - transmisor EUSART se habilita estableciendo el bit TXEN del registro TXSTA. SYNC = 0 - EUSART est configurado para funcionar en modo asncrono limpiando el bit SYNC del registro TXSTA. SPEN = 1 - Al establecer el bit SPEN del registro RCSTA, EUSART est habilitado y el pin TX / CK se configura automticamente como una salida. Si este bit se utiliza simultneamente para alguna funcin analgica, debe ser desactivado por despejar el bit correspondiente del registro ANSEL.
La parte central del transmisor EUSART es el TSR registro de desplazamiento que no es directamente accesible por el usuario. Con el fin de iniciar la transferencia de datos, el transmisor EUSART debe ser habilitada por la configuracin del bit TXEN del registro TXSTA. Los datos que se enven deben ser escrito en el registro TXREG, haciendo as que la siguiente secuencia de eventos que se produzca:
Byte ser inmediatamente transferido al registro de desplazamiento TSR; El registro TXREG queda vaco, lo cual se indica mediante el establecimiento de la TXIF bit de bandera del registro PIR1. Si el bit del registro TXIE PIE1 se establece, entre otras una Rupt se generar. Sin embargo, el indicador se establece con independencia de que uno entre Rupt est habilitada o no y que no se puede borrar por software, pero al escribir nuevos datos en el registro TXREG. La electrnica de control "empuja" los datos hacia el pin TX en sincronizacin con el reloj interno: bit de START (0) ...los datos ... Bit de parada (1). Cuando la ltima abandona el registro TSR, el bit del registro TRMT TXSTA se ajusta automticamente. Si el registro TXREG ha recibido un dato nuevo carcter en el entretanto, todo el procedimiento se repiti inmediatamente despus del bit de parada del carcter anterior se ha transmitido.
La transferencia de datos de 9-bit se habilita estableciendo el bit TX9 del registro TXSTA. El bit TX9D del registro TXSTA es el noveno bit de datos y la ms significativa. Cuando la transferencia de 9 - bits de datos, el bit de datos TX9D debe estar escrito antes de escribir los 8 bits menos significativos en el
registro TXREG. Los nueve bits de datos se transfieren al desplazamiento TSR registrar inmediatamente despus de la escritura TXREG es completa.
Similar a la activacin del transmisor EUSART, con el fin de permitir que el receptor es necesario para configurar los bits siguientes:
CREN = 1 - receptor EUSART se habilita estableciendo el bit CREN del registro RCSTA; SYNC = 0 - EUSART est configurado para funcionar en modo asncrono limpiando el bit SYNC almacenado en el registro TXSTA, y SPEN = 1 - Al establecer el bit SPEN del registro RCSTA, EUSART est habilitado y el pin RX / DT se configura automticamente como una entrada. Si este bit se utiliza simultneamente para alguna funcin analgica, debe ser desactivado por despejar el bit correspondiente del registro ANSEL.
Cuando este primer paso y necesario se lleva a cabo y el bit de inicio se detecta, los datos se transfieren al registro de desplazamiento RSR a travs del pasador RX. Cuando el bit de parada se ha recibido, ocurre lo siguiente:
Los datos se envan automticamente al registro RCREG (si est vaco); El RCIF bit de bandera est establecida y una interrupcin, si est habilitada por el bit RCIE del registro PIE1 ocurre,.Al igual que en el transmisor, el bit de flag se borra automticamente al leer el registro RCREG. Tenga en cuenta que se trata de un registro de dos caracteres FIFO (primero en entrar, primero en salir) que permite una recepcin simultnea de dos bytes de datos; SiInm el registro RCREG est ocupado (contiene dos bytes) y el registro de desplazamiento detecta poco nueva parada, el OERR bit de desbordamiento se establecer. En este caso, unos nuevos datos procedentes se pierde, y el bit OEER debe ser limpiado por el software. Se lleva a cabo en la limpieza y reposicin del bit CREN; Nota: no es posible recibir nuevos datos en la medida que el bit OERR se establece. Si el bit de parada es accionado bajo (0), el bit FERR del registro RCSTA detectar recibir el error se establecer, y
Para permitir la recepcin de 9-bit de datos, es necesario para establecer el bit RX9 del registro RCSTA. RECIBIR LA DETECCIN DE ERRORES
Hay dos tipos de errores que el microcontrolador puede detectar automticamente. El primero se llama error de trama y se produce cuando el receptor no detecta el bit de parada en el momento esperado. Tal error se indica mediante el bit FERR del registro RCSTA. Si este bit est establecido, los ltimos datos recibidos pueden ser incorrectos. Aqu hay varias cosas importantes a saber:
Un error de trama no genera una interrupcin por s mismo; Si este bit est establecido, los ltimos datos recibidos tiene un error; Un error de trama (bit) no impide la recepcin de nuevos datos; El bit FERR se elimina mediante la lectura de los datos recibidos, lo que significa que el registro debe hacerse antes de la lectura de datos, y El bit FERR no se puede borrar por software. Si es necesario, se puede borrar en la limpieza de la broca SPEN del registro RCSTA. Es al mismo tiempo har que el sistema EUSART entero a poner a cero.
Hay dos tipos de errores que el microcontrolador puede detectar automticamente. El primero se llama error de trama y se produce cuando el receptor no detecta el bit de parada en el momento esperado. Tal error se indica mediante el bit FERR del registro RCSTA. Si este bit est establecido, los ltimos datos recibidos pueden ser incorrectos. Aqu hay varias cosas importantes a saber:
Un error de trama no genera una interrupcin por s mismo; Si el bit FERR se establece, los ltimos datos recibidos tiene un error; Un error de trama (bit) no impide que los nuevos datos de que se reciba; El bit FERR se elimina mediante la lectura de los datos recibidos, lo que significa que el registro debe hacerse antes de la lectura de datos, y El bit FERR no se puede borrar por software. Si es necesario, se puede borrar en la limpieza de la broca SPEN del registro RCSTA. Es al mismo tiempo har que el sistema EUSART entero a poner a cero.
Otro tipo de error se llama error de desbordamiento. Como se mencion anteriormente, la memoria FIFO puede recibir dos bytes. Un error de desbordamiento se generar en el intento de recibir el tercer personaje. En pocas palabras, no hay espacio para otro byte una y un error es inevitable. Cuando esto sucede, el bit OERR del registro RCSTA se establece. Las consecuencias son las siguientes:
Los datos ya almacenados en los registros FIFO (dos bytes) puede ser normalmente leer; No hay datos adicionales se recibirn hasta el bit OERR se borra, y Este bit no se accede directamente. Para limpiarlo, es necesario borrar el bit CREN del registro de RCSTA o restablecer el sistema EUSART en la limpieza de toda el bit SPEN del registro RCSTA. 9-BIT de recepcin de datos
Adems de recibir estndar de 8-bits de datos, el sistema EUSART soporta 9-bits de recepcin de datos. En el lado de transmisin, el noveno bit es "adjunto" en el byte original directamente antes de que el bit de STOP. En el lado de recepcin, cuando el bit RX9 del registro RCSTA se establece, el noveno bit de datos se escriben automticamente en el bit RX9D del mismo registro. Despus de recibir este byte, es necesario tener cuidado de cmo leer los bits de los bits de datos RX9D deben leerse antes de la lectura de 8 bits menos significativos del registro RCREG. De lo contrario, el bit de datos novena se borrar.
De deteccin de direcciones
Cuando el bit Adden del registro RCSTA est establecido, el mdulo EUSART es capaz de recibir datos slo 9-bits, mientras que todos los datos de 8-bits ser ignorada. Aunque parece una restriccin, estos modos permiten la comunicacin en serie entre varios microcontroladores. El principio de funcionamiento es simple. Dispositivo maestro enva una base de datos de 9 bits que representan la direccin del microcontrolador esclavo. Sin embargo, todos ellos deben tener el conjunto de bits Adden ya que permite la deteccin de direccin. Todos los microcontroladores esclavos, compartiendo la misma lnea de transmisin, recibir estos datos (direccin) y comprobar automticamente si coincide con su propia direccin. El dispositivo esclavo en el que el partido de direccin se produce, debe desactivar la deteccin de la direccin en la limpieza de su granito de arena Addendum.
El dispositivo maestro sigue enviando 8-bits de datos. Todos los datos que pasan a travs de la lnea de transmisin ser recibido por el mdulo EUSART dirigida nicamente. Cuando el ltimo byte se ha recibido, el dispositivo esclavo debe establecer el bit Adden con el fin de activar la deteccin de la nueva direccin.
TXSTA Registrarse
CSRC - bits Reloj de seleccin de fuente - se utiliza para la seleccin de la fuente de reloj. Se utiliza slo en modo sncrono.
1 - el modo maestro. Reloj se genera internamente a partir de generador de Baud Rate. 0 - el modo esclavo. Reloj se genera a partir de una fuente externa. 1 a 9 bits de transmisin de datos a travs del sistema EUSART. 0 a 8 bits de transmisin de datos a travs del sistema EUSART. 1 - Transmisin activada. 0 - Transmisin desactivada. 1 - EUSART funciona en modo sncrono. 0 - EUSART funciona en modo asncrono.
SENDB - Enviar poco vacaciones de caracteres slo se utiliza en modo asncrono y cuando sea necesario para observar el estndar de bus LIN.
BRGH - Tasa de bits de alta seleccin de baudios determina la velocidad de transmisin en modo asincrnico. No afecta a EUSART en modo sncrono.
1 - EUSART funciona a alta velocidad. 0 - EUSART funciona a baja velocidad. 1 - TSR registro est vaco. 0 - TSR registro est lleno.
TX9D - noveno bit de datos de transmisin se puede utilizar como direccin o bit de paridad.
RCSTA Registrarse
1 - Puerto serie habilitado. RX / DT y los pines TX / CK se configuran automticamente como entrada y salida, respectivamente. 0 - Puerto serie desactivado. 1 - Recepcin de datos 9-bits a travs del sistema EUSART. 0 - Recepcin de 8-bits de datos a travs del sistema EUSART.
SREN - poco ReceiveEnable solo se utiliza slo en modo sncrono cuando el microcontrolador funciona como un maestro.
CREN - recepcin continua Bit de habilitacin acta de forma diferente dependiendo del modo de EUSART. Modo asncrono:
1 - El receptor activado. 0 - Receptor desactivado. 1 - Habilita la recepcin continua hasta que el bit CREN se borra. 0 - Deshabilita recepcin continua. 1 - Permite la deteccin de direccin de 9-bit de datos reciben.
El modo sncrono:
Addendum - Direccin Detectar Bit de habilitacin slo se utiliza en modo de deteccin de la direccin.
0 - Desactiva la deteccin de la direccin. El noveno bit se puede utilizar como un bit de paridad. 1 - error de trama se detecta en recibir. 0 - No hay error de trama. 1 - Al recibir, error de desbordamiento se detecta. 0 - No hay error de desbordamiento.
RX9D - noveno bit de datos recibidos se pueden utilizar como direccin o bit de paridad. El siguiente diagrama muestra tres palabras que aparecen en la entrada RX. El bfer de recepcin se lee despus de la tercera palabra, que la broca OEER (bit error de desbordamiento) se establezca.
Un nmero escrito a estos dos registros determina la tasa de baudios. Adems, tanto el bit BRGH del registro TXSTA y el bit de la BRGH16 BAUDCTL registro afectar frecuencia de reloj. Tablas en las pginas siguientes contienen los valores que deben ser escritos a la SPBRG Registro de 16 bits y se asignan a las funciones SYNC, BRGH y BRGH16 bits en el fin de obtener algunas de las velocidades de transmisin estndar. Utilice la siguiente frmula para determinar la velocidad de transmisin.
Ejemplo
Para que un dispositivo en modo asncrono con una frecuencia de reloj de 16 MHz y velocidad de transmisin deseada de 9600, el generador de 8-bit Velocidad en baudios (BRG) se calcula como sigue:
BAUDCTL Registrarse
ABDOVF - Auto-deteccin de baudios bits de desbordamiento slo se utiliza en modo asncrono durante la deteccin de la velocidad de transmisin.
1 - Auto-temporizador de transmisin se ha desbordado. 0 - Auto-temporizador de transmisin no se ha desbordado. 1 - El receptor est inactivo. 0 - bit de START se ha recibido y recibe los datos est en curso.
SCKP - bits sncrono polaridad del reloj de seleccin. El estado lgico de este bit vara en funcin del modo EUSART est activo. Modo asncrono:
1 - Transmisin de datos invertidos al pin RC6/TX/CK. 0 - Transmisin de datos no invertidas en la clavija de RC6/TX/CK. 1 - Sincronizacin en el borde de subida del reloj. 0 - Sincronizacin del reloj en el borde que cae.
El modo sncrono:
BRG16 de 16-bit poco generador de velocidad en baudios - determina si el registro SPBRGH ser utilizada, es decir, si el temporizador BRG tendr 8 o 16 bits.
1 a 16 bits generador de velocidad en baudios se utiliza. 0 a 8 bits generador de velocidad en baudios se utiliza. 1 - El receptor espera un flanco descendente en el pin RC7/RX/DT para despertar al microcontrolador del modo de suspensin. 0 - El receptor funciona normalmente. 1 - Auto-baudios modo de deteccin est activado. El bit se borra automticamente en la deteccin de la velocidad de transmisin. 0 - Auto-modo de deteccin de baudios est desactivado.
' In this example, internal EUSART module is initialized and set to send back the ' message immediately after receiving it. Baud rate is set to 9600 bps. The pro 'gram uses UART library routines UART1_init(), UART1_Write_Text(), UART1_Data_Ready(), 'UART1_Write() and UART1_Read(). dim uart_rd as byte main: ANSEL,ANSELH = 0 CM1CON0.C1ON = 0 CM2CON0.C2ON = 0 UART1_Init(9600) bps Delay_ms(100) stable UART1_Write_Text("Start") while 1 if (UART1_Data_Ready() uart_rd = UART1_Read() end if UART1_Write(uart_rd) wend ... En Corto
La transmisin de datos a travs de la comunicacin asncrona EUSART:
' Configure AN pins as digital ' Disable comparators ' Initialize UART module at 9600 ' Wait for UART module to become ' Endless loop ' If data is received, ' read it, ' and send it back via UART
1. La velocidad de transmisin deseada debe establecerse mediante el uso de los bits BRGH (TXSTA registro) y BRG16 (BAUDCTL registro) y registra SPBRGH y SPBRG. 2. El bit SYNC (TXSTA registro) debe ser limpiado y el bit SPEN debe ser ajustada (RCSTA registro) a fin de habilitar el puerto en serie. 3. El bit TX9 del registro TXSTA se deben establecer en la transmisin de datos de 9 bits. 4. La transmisin de datos se habilita estableciendo el bit TXEN del registro TXSTA. El bit TXIF del registro PIR1 se ajusta automticamente. 5. Tanto poco TXIE del registro PIE1 y los bits GIE y PEIE del registro INTCON deben establecerse para que la broca TXEN para causar una interrupcin. 6. Valor del noveno bit debe ser escrito en el bit del registro TX9D TXSTA en la transmisin de datos de 9 bits. 7. La transmisin se inicia escribiendo 8-bits de datos al registro TXREG. Recepcin de datos a travs de la comunicacin asncrona EUSART:
1. Velocidad de transmisin se debe establecer mediante el uso de los bits BRGH (TXSTA registro) y BRG16 (BAUDCTL registro) y registra SPBRGH y SPBRG. 2. El bit SYNC (TXSTA registro) debe ser limpiado y el bit SPEN debe ser ajustada (RCSTA registro) a fin de habilitar el puerto en serie. 3. Tanto el bit del registro RCIE PIE1 y los bits GIE y PEIE del registro INTCON se debe establecer cuando es necesario para permitir la recepcin de datos para provocar una interrupcin. 4. El bit RX9 del registro RCSTA se debe establecer el 9 de bits de datos reciben. 5. La recepcin de datos se habilita estableciendo el bit CREN del registro RCSTA. 6. El registro RCSTA debe ser ledo con el fin de comprobar si se han producido algunos errores durante la recepcin. El noveno bit ser almacenado en este registro en la recepcin de datos de 9-bit. 7. La recibida de 8-bits de datos almacenados en el registro RCREG debe ser ledo. Ajuste del modo de deteccin de direcciones: 1. Velocidad de transmisin se debe establecer mediante el uso de los bits BRGH (TXSTA registro) y BRG16 (BAUDCTL registro) y registra SPBRGH y SPBRG. 2. El bit SYNC (TXSTA registro) debe ser limpiado y el bit SPEN debe ser ajustada (RCSTA registro) a fin de habilitar el puerto en serie. 3. El bit del bit RCIE PIE1 as como los bits GIE y PEIE del registro INTCON se debe establecer cuando es necesario para permitir la recepcin de datos para provocar una interrupcin. 4. El bit RX9 del registro RCSTA debe ser fijado. 5. El Addendum del registro RCSTA se debe establecer, lo que permite que los datos para ser reconocidos como la direccin. 6. La recepcin de datos debe ser habilitada por establecer el bit CREN del registro RCSTA. 7. Tan pronto como los datos de 9-bits es recibido, el bit RCIF del registro PIR1 se establece automticamente. Si est activado, se produce una interrupcin. 8. El registro RCSTA debe ser ledo con el fin de comprobar si se han producido algunos errores durante la recepcin. El RX9D noveno bit se establece siempre. 9. La recibida de 8-bits de datos almacenados en el registro RCREG debe ser ledo. Se debe comprobar si la combinacin de estos bits coincide con la direccin predefinida. Si la coincidencia ocurre, es necesario limpiar el bit Adden del registro RCSTA, que permite a 8-bits de datos para ser recibido.
Como puede verse en la figura a continuacin, un mdulo MSSP representa slo un medio de el hardware necesario para establecer comunicacin en serie, mientras que la otra mitad se almacena en el dispositivo intercambia datos con. A pesar de que los mdulos en ambos extremos de la lnea son los mismos, sus modos son esencialmente diferentes en funcin de si operan como un maestro o un esclavo:
Si el microcontrolador a ser los controles programados a otro dispositivo o circuito (perifricos), debe ser configurada para funcionar como un maestro. Se generar reloj cuando sea necesario, es decir, slo cuando la recepcin y transmisin de datos son requeridos por el software. Obviamente, es exclusivamente del dispositivo principal para establecer la conexin o no.
En caso contrario, si el microcontrolador a programar es un perifrico de algn dispositivo ms complejo (por ejemplo, un PC), entonces debe funcionar como un esclavo. Como tal, siempre tiene que esperar a peticin de transmisin de datos para ser enviada por el dispositivo maestro.
MODO SPI
El modo SPI permite 8 bits de datos a transmitir y recibir simultneamente con 3 entradas / lneas de salida:
SDO - salida de datos serial - lnea de transmisin; SDI - datos serie en - lnea de recepcin, y SCK - Serial Clock - lnea de sincronizacin.
Aparte de estas tres lneas, existe la cuarta lnea (SS), as que puede ser utilizado si los intercambios microcontrolador datos con varios dispositivos perifricos. Refirase a la figura de abajo. SS - Slave Select - es una lnea adicional que se utiliza para la seleccin de un dispositivo especfico. Slo est activo cuando el microcontrolador est en modo esclavo, es decir, cuando la externa - dispositivo maestro requiere el intercambio de datos. El mdulo MSSP utiliza en el registro total de 4 cuando est en modo SPI:
SSPSTAT - registro de estado SSPCON - registro de control SSPBUF - bfer registro SSPSR - registro de desplazamiento (no disponible directamente)
Los tres primeros registros son de escritura / lectura y se puede cambiar en cualquier momento, mientras que el cuarto registro, ya que no est disponible, se utiliza para convertir los datos en "serial" en formato.
Como puede verse en la figura a continuacin, la parte central del mdulo SPI se compone de dos registros conectados a las patillas para la recepcin, transmisin y sincronizacin.
El registro de desplazamiento (SSPRS) est directamente conectado a los pines del microcontrolador y utilizado para la transmisin de datos en serie. El registro SSPRS tiene su entrada y salida as como los datos pueden ser desplazado dentro y fuera. En otras palabras, cada bit que aparece en la entrada (lnea de recepcin) simultneamente se desplaza a otro poco hacia la salida (lnea de transmisin). El registro SSPBUF (Buffer) es parte de la memoria utilizada para almacenar temporalmente los datos antes de ser enviado o inmediatamente despus de ser recibido. Despus de los 8 bits de datos se han recibido, el byte se mueve desde los SSPRS el registro SSPBUF. Tal operacin permite que el siguiente byte para ser recibido antes de leer los datos que acaba de ser recibidos. Cualquier escritura en el registro SSPBUF durante la transmisin / recepcin de datos se tendr en cuenta. Desde el punto de vista de los programadores, este registro es considerado el ms importante como ser las ms solicitadas. Es decir, si tenemos en cuenta la configuracin del modo por un momento, la transferencia de datos a travs de SPI en realidad viene a escribir y leer datos desde y hacia este registro, mientras que otros 'de acrobacias como los registros de movimiento se realiza automticamente por el hardware.
' In this example, PIC microcontroller (master) sends data byte to peripheral chip
' (slave) via SPI. Program uses SPI library functions SPI1_init() and SPI1_Write. dim Chip_Select as sbit at PORTC.RC0 ' Peripheral chip_select line is connected to RC0 dim Chip_Select_Direction as sbit at TRISC.0 ' TRISC0 bit defines RC0 pin to be input or output dim value as unsigned int ' Data to be sent (value) is of unsigned int type main: ANSEL, ANSELH = 0 ' All I/O pins are digital TRISB.0 = 1 TRISB.1 = 1 ' Configure RB0, RB1 pins as inputs Chip_Select = 0 ' Select peripheral chip Chip_Select_Direction = 0 ' Configure the CS# pin as an output SPI1_Init() ' Initialize SPI module SPI1_Write(value) ' Send value to peripheral chip ... En breve
Recepcin / transmisin de datos utilizando el modo SPI
Antes de comenzar la inicializacin de SPI, es necesario especificar varias opciones:
Modo Master TRISC.3 = 0 (el pin SCK es la salida del reloj); Modo esclavo TRISC.3 = 1 (el pin SCK es la entrada de reloj); Los datos de entrada de fase media o final del tiempo de salida (el bit SMP del registro SSPSTAT); El borde del reloj (el bit CKE del registro SSPSTAT); Velocidad en baudios, bits de SSPM3-SSPM0 del registro SSPCON (slo en modo master); Esclavo modo de seleccin, los bits SSPM3-SSPM0 del registro SSPCON (slo modo Esclavo).
Paso 1. Los datos que se transfieren deben ser por escrito a la SSPBUF registro tampn. Si el mdulo SPI funciona en modo maestro, el microcontrolador automticamente realice los siguientes pasos 2, 3 y 4. Si el mdulo SPI funciona como esclavo, el microcontrolador no realizar estos pasos hasta que el pin SCK detecta seal de reloj.
Paso 2. Los datos se mueve ahora en el registro SSPSR y el registro SSPBUF no se borra.
Paso 3. Estos datos se desplaza a la patilla de salida (el bit MSB primero), mientras que el registro est simultneamente siendo llenado con los bits a travs de la patilla de entrada. En el modo maestro, el propio microcontrolador genera el reloj, mientras que el modo esclavo usa un reloj externo (el pin SCK).
Paso 4. El registro es SSPSR completo una vez que 8 bits de datos se han recibido. Se indica al establecer el bit BF del registro SSPSTAT y el bit SSPIF del registro PIR1. Los datos recibidos (un byte) se desplaza automticamente de la SSPSR registrarse en el registro SSPBUF.Dado que la transmisin de datos en serie se realiza automticamente, el resto del programa se ejecuta normalmente, mientras que la transmisin de datos est en curso. En este caso, la funcin del bit SSPIF es generar una interrupcin cuando una transmisin de bytes se ha completado.
Paso 5. Finalmente, los datos almacenados en el registro SSPBUF est listo para usar y debe ser movido a un registro deseado.
I 2 MODO C
I C modo (Inter IC Bus) El modo I2C (Inter IC bus) es especialmente adecuado cuando el microcontrolador y un circuito integrado, que el microcontrolador debe intercambiar datos con, estn dentro del mismo dispositivo. Por lo general, otro microcontrolador o un circuito especializado, integrado barata que pertenece a la nueva generacin de los llamados 'componentes perifricos inteligentes "(mdulos de memoria, sensores de temperatura en tiempo real, relojes, etc) Al igual que en la comunicacin serie en modo SPI, la transferencia de datos en modo I2C es sncrona y bidireccional. Esta vez slo dos pines se utilizan para la transmisin de datos. Se trata de la SDA (Serial Data) y los pines SCL (Serial Clock). El usuario debe configurar estos pines como entradas o salidas por medio de los bits TRISC. Mediante la observacin de reglas particulares (protocolos), de este modo permite hasta 122 diferentes componentes para ser conectados simultneamente de una manera sencilla mediante el uso de slo dos valiosos pines I / O. Echemos un vistazo a cmo funciona: Reloj, necesario para sincronizar el funcionamiento de ambos dispositivos, siempre se genera por el dispositivo maestro (un microcontrolador) y su frecuencia afecta directamente a la tasa de baudios. A pesar de que existe un protocolo que permite la mxima frecuencia de reloj de 3,4 MHz (denominado bus I2C de alta velocidad), este libro cubre slo el protocolo de uso ms frecuente de la frecuencia de reloj de la cual est limitada a 100 KHz. No hay limitaciones para la frecuencia mnima. Cuando los componentes del maestro y el esclavo estn sincronizados con el reloj, cada intercambio de datos es siempre iniciada por el maestro. Una vez que el mdulo MSSP se ha habilitado, se espera una condicin de arranque que se produzca. El dispositivo maestro enva primero el bit de inicio (un cero lgico) a travs del pin SDA, a continuacin, una direccin de 7-bits del dispositivo esclavo seleccionado, y finalmente, el bit que requiere datos de escritura (0) o leer (1) al dispositivo . En otras palabras, ocho bits se desplazan al registro SSPSR despus de la condicin de arranque. Todos los dispositivos esclavos que comparten la misma lnea de transmisin simultnea recibir el primer byte, pero slo uno de ellos tiene la direccin para igualar y recibe los datos completos.
2
Una vez que el primer byte ha sido enviado (slo 8-bits de datos son transmitidos), el maestro entra en modo de recepcin y espera a que el reconocimiento del dispositivo esclavo que coincidencia de direccin se ha producido. Si el dispositivo esclavo enva el bit de confirmacin de datos (1), la transferencia de datos se mantendr hasta que el dispositivo maestro (microcontrolador) enva el bit de parada.
Esta es la explicacin ms simple de cmo dos componentes se comunican. Tal un microcontrolador es tambin capaz de controlar las situaciones ms complicadas cuando 1024 diferentes componentes (10-bit de direccin), compartidos por varios dispositivos maestros diferentes, estn conectados. Estos dispositivos se usan muy poco en la prctica y no hay necesidad de discutir ms a fondo. La siguiente figura muestra el diagrama de bloques del mdulo MSSP en el modo I C.
2
El mdulo MSSP utiliza seis registros para la operacin de I C. Algunos de ellos se muestran en la figura anterior:
SSPSTAT Registrarse
SMP bit de la muestra SPI modo maestro - Este bit determina la fase de entrada de datos.
1 - estado lgico se lee al final del tiempo de salida. 0 - estado lgico se lee en el medio del tiempo de salida.
Modo esclavo SPI - Este bit debe ser borrado cuando SPI se emplea en modo esclavo. I modo C (maestro o esclavo)
1 - Control de velocidad de subida desactivado para el modo de velocidad estndar (100 kHz). 0 - Control de Velocidad de giro habilitado para el modo de alta velocidad (400k Hz).
1 - Los datos se transfieren en flanco ascendente de pulso de reloj (0 - 1). 0 - Los datos se transfieren en el flanco descendente de pulso de reloj (1 - 0). 1 - Los datos se transfieren en el flanco descendente de pulso de reloj (1 - 0). 0 - Los datos se transfieren en flanco ascendente de pulso de reloj (0 - 1).
2
CKP = 1:
1 - Indica que el ltimo byte recibido o transmitido los datos. 0 - Indica que el ltimo byte recibido o transmitido es una direccin. 1 - el ltimo bit detectado es el bit de parada. 0 - el ltimo bit detectado no es el bit de parada. 1 - ltimo bit detectado es el bit de inicio. 0 - ltimo bit detectado no es el bit de inicio.
2
R / W - Leer bits escritura se utiliza en el modo I C solamente. Este bit contiene la informacin de bit R / W despus del partido la ltima direccin. Este bit slo es vlido desde el partido de la direccin del bit de inicio al lado, bit de parada o no bit ACK. En modo esclavo I C
1 - Lectura de datos. 0 - escritura de datos. 1 - Transmitir en curso. 0 - Transmitir no est en curso. 1 - El registro SSPADD debe ser actualizada. 0 - Direccin en el registro SSPADD es correcta y no necesita ser actualizado.
En el modo I C maestro
BF Buffer bit de estado completa Durante la recepcin de datos (en el SPI e I C modos)
1 - Recibe completa. El registro SSPBUF est lleno. 0 - Recibir no es completa. El registro SSPBUF est vaca. 1 - Los datos de transmisin en curso (no incluye los bits ACK y STOP). 0 - Transmitir datos completa (no incluye los bits ACK y STOP).
SSPCON Registrarse
1 - colisin detectada. Escribir en el registro SSPBUF se intent, mientras que las condiciones I2C no eran vlidos para la transmisin de empezar. 0 - No hay colisin. 1 - Un byte se recibe una nueva antes de leer los datos previamente recibidos. Puesto que no hay espacio para recibir nuevos datos, uno de estos dos octetos debe ser compensado. En este caso, los datos almacenados en el registro SSPSR est irremediablemente perdido. 0 - serie de datos se reciben correctamente.
SSPEN - puerto serie sncrono Activar bit determina la funcin de micro pines y se inicializa el mdulo MSSP: En modo SPI
1 - Habilita el mdulo MSSP y configura pines SCK, SDO, SDI y SS como pines del puerto serie. 0 - Deshabilita el mdulo MSSP y configura estos pines de E / S del puerto. 1 - Habilita el mdulo MSSP y configura pines SDA y SCL como pines del puerto serie. 0 - Deshabilita el mdulo MSSP y configura estos pines de E / S del puerto.
En el modo I C
CKP - bit de polaridad del reloj de seleccin no se utiliza en el modo I C maestro. En modo SPI
1 - Estado de reposo para el reloj es un alto nivel. 0 - en estado inactivo para el reloj es un nivel bajo. 1 - Activa el reloj. 0 - Mantiene baja del reloj. Se utiliza para proporcionar ms tiempo para la estabilizacin de los datos.
En modo esclavo I C
SSPM3-SSPM0 - sncronos bits de modo Serial Port Seleccionar. SSP modo se determina mediante la combinacin de estos bits:
SSPM3 0 0 0 0 0 0
SSPM2 0 0 0 0 1 1
SSPM1 0 0 1 1 0 0
SSPM0 0 1 0 1 0 1
MODO SPI Master Mode, reloj = Fosc / 4 SPI Master Mode, reloj = Fosc/16 SPI Master Mode, reloj = Fosc/64 SPI Master Mode, reloj = (TMR de salida) / 2 Modo SPI esclavo, SS pin de control activado Modo SPI esclavo, de las SS con discapacidad de control de pines, SS puede ser utilizado como pin I / O I C modo esclavo, 7 bits de la direccin utilizada I C modo de esclava, de 10-bits de direcciones utilizado I C Master Mode, reloj = Fosc / [4 (SSPAD +1)] Mscara utilizada en modo esclavo I C No se utiliza I C modo master controlado No se utiliza No se utiliza I C modo de esclava, de 7-bits de direcciones utilizado, iniciar y detener los bits permiten interrumpir I C modo de esclavos, la direccin de 10 bits utilizada, iniciar y detener los bits permiten interrumpir
0 0 1 1 1 1 1 1 1
1 1 0 0 0 0 1 1 1
1 1 0 0 1 1 0 0 1
0 1 0 1 0 1 0 1 0
SSPCON2 Registrarse
1 - Habilita la interrupcin cuando una direccin de llamada general (0000h) se recibe en el SSPSR. 0 - Direccin General de llamada desactivado.
1 - no reconoce. 0 - Reconocer.
1 - Iniciar la condicin de reconocer a la SDA y SCL pines y transmitir los bits de datos ACKDT. Se borra automticamente por el hardware. 0 - Reconocer condicin no se inicia.
1 - Inicia la condicin de STOP en los pines SDA y SCL. Este bit se borra automticamente por el hardware. 0 - condicin de STOP no se inicia.
1 - condicin de START aparicin de estos repetidos inici en los pines SDA y SCL. Este bit se borra automticamente por el hardware. 0 - condicin de START repetida no se inicia.
SEN - condicin de START Habilitado / bit Stretch Activado En modo I C nico Maestro
1 - Inicia la condicin de START en los pines SDA y SCL. Este bit se borra automticamente por el hardware. 0 - condicin de START no se inicia.
I 2 C en el modo Maestro
El caso ms comn es que el microcontrolador funciona como un maestro y un componente perifrico como un esclavo. Por eso, este libro cubre slo de este modo. Tambin se considera que la direccin se compone de 7 bits y un dispositivo de destino contiene un solo microcontrolador (maestro nico dispositivo). A fin de permitir mdulo MSSP en este modo, es necesario hacer lo siguiente:
Establecer la velocidad de transmisin (SSPADD registro), desactivar el control de velocidad de respuesta (al establecer el bit SMP del registro SSPSTAT) y seleccione el modo maestro (SSPCON registro). Despus de todos estos preparativos se han terminado y el mdulo se ha activado (SSPCON registro: poco SSPEN), es necesario esperar a que la electrnica interna para indicar que todo est listo para la transmisin de datos, es decir, el bit SSPIF del registro PIR1 est establecido. Este bit debe ser limpiado por el software y despus de que el microcontrolador est listo para intercambiar datos con perifricos.
Mximo 112 circuitos integrados dispositivos esclavos) al mismo tiempo pueden compartir la misma lnea de transmisin. El primer byte de datos enviada por el dispositivo maestro contiene la direccin para que coincida con slo un dispositivo esclavo. Todas las direcciones se muestran en las hojas de datos respectivas. El octavo bit del primer byte de datos se especifica la direccin de la transmisin de datos, es decir, si el microcontrolador es para enviar o recibir datos. En este caso, el octavo bit se borra a la lgica cero (0), lo que significa que se trata de transmisin de datos.
Cuando se produce coincidencia de direccin, el microcontrolador tiene que esperar a que el bit de reconocimiento de datos. El dispositivo esclavo reconoce coincidencia de direccin en la limpieza de la broca ASKSTAT del registro SSPCON2. Si el partido ha producido correctamente, todos los bytes de datos se transmiten en la misma forma. La transmisin de datos termina configurando el bit SEN del registro SSPCON2. La condicin de parada se produce, que permite el pin SDA para recibir impulsos: Inicio - Direccin - Reconocimiento - Dato - Reconocimiento de datos .... - Reconocimiento - Detente!
Inicio - Direccin - Reconocimiento - Datos - Reconocer ... - Reconocer los datos - Stop! En esta secuencia de pulsos, el bit de reconocimiento se envan al dispositivo esclavo.
La frecuencia de reloj del modo descrito en este libro depende de cristal de cuarzo seleccionado y el registro SPADD. La siguiente figura muestra la frmula utilizada para calcularlo.
' 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()
SSPOV (SSPCON, 6) - En el modo de recepcin, este bit se establece cuando un nuevo byte es recibido por el registro SSPSR a travs de la comunicacin en serie, mientras que los datos recibidos previamente no se ha ledo en el registro SSPBUF todava. Pines SDA y SCL - Cuando el mdulo SSP est habilitado, estos pines se convierten en salidas de desage abierto. Esto significa que deben ser conectados a las resistencias que son, en el otro extremo, conectados a la fuente de alimentacin positiva.
En breve
Recepcin / transmisin de datos en el modo I 2 C
Con el fin de establecer una comunicacin serie en modo I2C, lo siguiente se debe hacer: Configuracin del mdulo y envo de Direccin:
Valor para determinar la velocidad de transmisin debe ser escrito en el registro SSPADD. Control de SlewRate deben apagarse al establecer el bit SMP del registro SSPSTAT. Con el fin de seleccionar el modo Maestro, el valor binario de 1000 se debe escribir en los bits SSPM3-SSPM0 del registro SSPCON1. El bit SEN del registro SSPCON2 (secuencia de START) debe ser fijado. El bit SSPIF se ajusta automticamente al final de la secuencia de arranque cuando el mdulo est listo para funcionar. Se debe ser compensado. Direccin del esclavo debe ser escrito en el registro SSPBUF.
Cuando el byte se enva, el bit SSPIF (interrupcin) se ajusta automticamente despus de recibir el bit de reconocimiento del dispositivo esclavo. Los datos que se envan deben ser escritos para el registro SSPBUF. Cuando el byte se enva, el bit SSPIF (interrupcin) se ajusta automticamente despus de recibir el bit de reconocimiento del dispositivo esclavo. Con el fin de informar al dispositivo Esclavo que la transmisin de datos est completa, la condicin de parada debe ser iniciado por establecer el bit PEN del SSPCON registrarse. Con el fin de permitir la recepcin, el bit RSEN del registro SSPCON2 debe ser fijado. El bit SSPIF indica la recepcin de datos. Cuando se leen los datos desde el registro SSPBUF, el bit ACKEN del registro SSPCON2 debe establecerse con el fin de permitir que el bit de confirmacin para ser enviado. Con el fin de informar al dispositivo Esclavo que la transmisin de datos est completa, la condicin de STOP debe ser iniciado por establecer el bit PEN del SSPCON registrarse.
Recepcin de datos:
La conversin se realiza aplicando el mtodo de aproximacin sucesiva; Hay 14 entradas separadas analgicos conectados a los pines del microcontrolador del puerto; El convertidor A / D convierte una seal de entrada analgica en un nmero binario de 10-bit; La resolucin, es decir, la calidad de la conversin se puede ajustar para diferentes necesidades mediante la seleccin de referencias de tensin Vref-y Vref +.
Convertidor A / D
A pesar de que el uso de un convertidor A / D parece ser muy complicado, es muy sencilla, ms simple que el uso de mdulos de comunicacin temporizadores y serie, de todos modos.
Contiene ADRESH byte alto del resultado de la conversin; Contiene ADRESL byte bajo del resultado de la conversin;
A / D REQUISITOS DE ADQUISICIN
Para el voltaje a ser medido con precisin por medio del convertidor A / D, es necesario para proporcionar un retardo de tiempo determinado entre la seleccin de una entrada analgica y la medicin en s. Este retardo de tiempo se denomina "tiempo de adquisicin" y depende principalmente de la impedancia de la fuente. Existe una ecuacin para calcular este retardo de tiempo con precisin, que en el peor de los casos equivale a aproximadamente 20US. Por lo tanto, si desea que la conversin A / D para ser exactos, no se olvide este pequeo detalle.
ADCS1
ADCS0
APARATO DE ALTA FRECUENCIA (FOSC) 20 Mhz 8 Mhz 250 nS 1 nos 4 nos 2-6 uS 4 Mhz 500 ns 2 nos 8 nos 2-6 uS 1 Mhz 2 nos 8 nos 32 nos 2-6 uS
0 0 1 1
0 1 0 1
Cualquier cambio de la frecuencia de reloj microcontrolador afectar a la A / D de velocidad de conversin, que puede afectar adversamente el resultado del ADC. El abowe tabla muestra algunas de las posibles frecuencias de reloj del dispositivo, as como la forma en que afectan a la velocidad de la conversin A / D. Los valores en las celdas sombreadas se encuentran fuera del rango recomendado.
El convertidor A / D no se diferencia entre las seales digitales y analgicas. Con el fin de evitar errores en la medicin o para prevenir el chip se dae, todos los pines de entrada A / D debe configurarse como entradas analgicas antes del proceso de conversin se inicia. Los bits correspondientes se almacenan en el TRIS y ANSEL (ANSELH) registra; Cuando se lee el puerto con entradas analgicas marcadas como CH0-CH13, el estado de los bits correspondientes, es decir, su valor digital ser ledo como un cero lgico (0), y En trminos generales, el proceso de medicin de tensin por el convertidor se basa en la comparacin de la tensin de entrada a una escala immaginary con 1024 grados 10 (2 = 1024). La marca ms baja se denomina la tensin Vref, mientras que el ms alto que se conoce como el voltaje Vref +. La siguiente figura muestra las referencias de voltaje seleccionables y sus valores de corte, as.
Registro ADCON0
ADCS1, ADCS0 - A / D bits de reloj de conversin Seleccionar seleccionar la frecuencia de reloj que se utiliza para la sincronizacin interna del convertidor A / D. Tambin afecta a la velocidad de conversin A / D. ADCS1 0 0 1 1 ADCS2 0 1 0 1 RELOJ Fosc / 2 Fosc / 8 Fosc/32 RC *
Reloj * es generada por el oscilador interno incorporado en el convertidor A / D. CHS3-CHS0 - Analog Channel bits de seleccin de seleccionar un PIN (una entrada analgica) para la conversin A / D, es decir, la medicin de tensin:
CHS3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
CHS2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
CHS1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
CHS0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
CANAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13
PIN RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3 RA5/AN4 RE0/AN5 RE1/AN6 RE2/AN7 RB2/AN8 RB3/AN9 RB1/AN1 0 RB4/AN1 1 RB0/AN1 2 RB5/AN1 3 CVref Vref = 0,6 V
1 - la conversin A / D est en marcha. 0 - conversin A / D es completa. Este bit se borra automticamente despus de completar la conversin A / D. 1 - Un convertidor A / D est habilitado. 0 - convertidor A / D est desactivado.
'This example code reads analog value from channel 2 and displays it on PORTB and PORTC 'as a 10-bit binary number. dim adc_rd as word main: ANSEL = 0x04 TRISA = 0xFF ANSELH = 0 I/O TRISC = 0x3F outputs TRISB = 0
' Configure AN2 as an analog pin ' PORTA is configured as an input ' Configure all other AN pins as digital ' Pins RC7 and RC6 are configured as ' PORTB is configured as an output
while 1 temp_res = ADC_Read(2) PORTB = temp_res PORTC = temp_res >> 2 and RC6 wend end.
' Get a 10-bit result of AD conversion ' Send lower 8 bits to PORTB ' Send 2 most significant bits to RC7 ' Remain in the loop
ADCON1 Registrarse
1 - resultado de la conversin se justifica a la derecha. Seis bits ms significativos del registro ADRESH no se utilizan. 0 - resultado de la conversin est justificado a la izquierda. Por lo menos seis bits significativos del registro ADRESL no se utilizan.
VCFG1 - bit de referencia de voltaje selecciona la fuente de tensin de referencia negativa para el funcionamiento del convertidor A / D.
1 - La Vref patillas se alimenta con tensin de referencia negativa. 0 - tensin de alimentacin de alimentacin Vss se utiliza como una fuente de tensin de referencia negativa.
VCFG0 - bit de referencia de voltaje selecciona la fuente de tensin de referencia positiva para el funcionamiento del convertidor A / D.
1 - La Vref + pasador se alimenta con tensin de referencia positiva. 0 - Fuente de alimentacin Vdd voltaje se utiliza como una fuente de tensin de referencia positiva.
En Corto
Uso de un convertidor A / D
Con el fin de medir el voltaje en un pin de entrada por medio del convertidor A / D, el procedimiento debe realizarse: Paso 1 - Configuracin del puerto:
Escribir un uno lgico (1) a un bit del registro TRIS para configurar el pin apropiado como una entrada. Escribir un uno lgico (1) para un poco de la ANSEL registrarse para configurar el pin apropiado como una entrada analgica. Configuracin de tensin de referencia en el registro ADCON1. Seleccione un reloj de conversin A / D en el registro ADCON0. Seleccione uno de los canales de entrada CH0-CH13 del registro ADCON0. Selecciona el formato de datos utilizando el bit ADFM del registro ADCON1. Habilitar el convertidor A / D al poner el bit ADON del registro ADCON0.
Paso 4 - Esperar a que el tiempo de adquisicin requerido para pasar (aproximadamente 20US). Paso 5 - Iniciar la conversin mediante el establecimiento de la GO / bit DONE del registro ADCON0. Paso 6 - Esperar a que la conversin A / D para ser completado.
Compruebe en el programa si el bit GO / DONE se borra o esperar a que un A / D de interrumpir a ocurrir (debe estar previamente habilitado). Leer registros ADRESH y ADRESL.
Comparador analgico
En adicin al convertidor A / D, hay otro mdulo, que hasta hace poco se construy slo en circuitos integrados pertenecientes a los componentes electrnicos llamados analgicas. Debido al hecho de que apenas es posible encontrar cualquier dispositivo ms complejo en automticas que de algn modo no utiliza estos mdulos, dos comparadores analgicos de alta calidad estn integrados en el microcontrolador y conectado a sus patas. Cmo funciona un comparador analgico? Bsicamente, el comparador analgico es un amplificador provisto de dos entradas y una salida. Se compara la magnitud de las tensiones en dos entradas. Dependiendo de la entrada tiene un voltaje ms alto (un valor analgico), un cero lgico (0) o un uno lgico (1) (valores digitales) aparecer en su salida:
Cuando el voltaje analgico Vin en-es mayor que en Vin +, la salida del comparador es un nivel digital bajo (0). Cuando el voltaje analgico Vin en + es mayor que en Vin-, la salida del comparador es un nivel digital de alta (1).
El microcontrolador PIC16F887 est provisto de dos comparadores analgicos tales las entradas de los cuales estn conectados a los pines de E / S RA0-RA3, mientras que sus salidas estn conectadas a las RA4 y RA5 los pins. Hay tambin una fuente de tensin de referencia ajustable interna dentro del propio microcontrolador, que se discutir ms adelante. Estos dos mdulos analgicos estn bajo el control de los bits de los registros siguientes:
CM1CON0 est en control de comparador C1; CM2CON0 est en control del comparador C2; CM2CON1 est en control del comparador C2;
Aunque la idea principal, con el mdulo de tensin de referencia era proporcionar mdulos analgicos con variando la tensin de referencia, ahora se utiliza como un convertidor D / A tambin. Como tal, demostr ser muy til en algunas aplicaciones. Su funcionamiento est bajo el control del registro VRCON.
COMPARADORES e interrumpir
Cada cambio de estado lgico de la salida de cualquier comparador hace que el bit de bandera CMIF del registro PIR a ser fijado. Estos cambios tambin se generar una interrupcin si los bits siguientes se establecen:
El bit CMIE del registro PIE = 1; El bit PEIE del registro INTCON = 1, y El bit GIE del registro INTCON = 1.
Si una interrupcin se activa cuando el microcontrolador est en modo de reposo, cualquier cambio en la salida del comparador har que el microcontrolador para salir de este modo y proceder con la operacin normal.
CM1CON0 Registrarse
Los bits del registro CM1CON0 estn en el control del comparador C1. Se refiere principalmente a la conexin de las entradas. La siguiente figura muestra una parte del mdulo directamente afectados por los bits de este registro.
C1OUT - comparador C1 bit de salida es la salida del comparador C1. Si C1POL = 1 (salida del comparador est invertida)
1 - Salida analgica de tensin en el C1Vin + es inferior a la tensin analgica en C1Vin. 0 - Salida analgica de tensin en el C1Vin + es superior a la tensin analgica en C1Vin. 1 - Salida analgica de tensin en el C1Vin + es superior a la tensin analgica en C1Vin. 0 - Salida analgica de tensin en el C1Vin + es inferior a la tensin analgica en C1Vin. 1 - salida C1OUT comparador est conectada a la clavija C1OUT *. 0 - Salida del comparador slo se utiliza internamente.
* A fin de que el estado del bit C1OUT a estar presente en el pin, dos condiciones deben cumplirse: C1ON = 1 (comparador debe estar habilitado) y el pin correspondiente se debe configurar como una salida (bit TRIS = 0). C1POL - comparador C1 polaridad de salida poco Seleccionar permite que el estado de la salida del comparador C1 a ser invertida.
1 - salida del comparador C1 se invierte. 0 - salida del comparador C1 es no invertida. 1 - entrada no inversora C1Vin + est conectado a la tensin de referencia C1Vref. 0 - entrada no inversora + C1Vin est conectado a la C1IN + pasador.
C1CH1, C1CH0 - comparador C1 bits de seleccin de canal C1CH1 0 0 1 1 C1CH0 0 1 0 1 COMPARADOR C1VIN ENTRADA Entrada C1Vin-est conectado a la C12IN0 patillas Entrada C1Vin-est conectado a la C12IN1 patillas Entrada C1Vin-est conectado a la C12IN2 patillas Entrada C1Vin-est conectado a la C12IN3 patillas
CM2CON0 Registrarse
Los bits del registro CM2CON0 estn en el control del comparador C2. Similar al caso anterior, figura a continuacin muestra un esquema simplificado del circuito afectado por los bits de este registro.
C2OUT - comparador bit de salida C2 es la salida del comparador C2. Si C2POL = 1 (salida del comparador invertida)
1 - Salida analgica de tensin en el C2Vin + es inferior a la tensin analgica en C2Vin. 0 - Salida analgica de tensin en el C2Vin + es superior a la tensin analgica en C2Vin. 1 - Salida analgica de tensin en el C2Vin + es superior a la tensin analgica en C2Vin. 0 - Salida analgica de tensin en el C2Vin + es inferior a la tensin analgica en C2Vin. 1 - salida C2OUT comparador est conectada a la clavija C2OUT *. 0 - Salida del comparador es interno.
* A fin de que el estado del bit C2OUT a estar presente en el pin, dos condiciones deben cumplirse: C2ON = 1 (comparador debe estar habilitado) y el pin correspondiente se debe configurar como una salida (bit TRIS = 0). C2POL - comparador C2 polaridad de salida poco Seleccionar permite el estado de la salida del comparador C2 a ser invertida.
1 - comparador la salida C2 se invierte. 0 - comparador C2 es de salida no invertida. 1 - entrada no inversora C2Vin + est conectado a la C2Vref tensin de referencia. 0 - entrada no inversora + C2Vin est conectado a la C2IN + pasador.
C2CH1, C2CH0 comparador C2 bits de seleccin de canal C2CH1 0 0 1 1 C2CH0 0 1 0 1 COMPARADOR C2VIN ENTRADA Entrada C2Vin-est conectado a la C12IN0 patillas Entrada C2Vin-est conectado a la C12IN1 patillas Entrada C2Vin-est conectado a la C12IN2 patillas Entrada C2Vin-est conectado a la C12IN3 patillas
CM2CON1 Registrarse
Espejo Copia de la broca C1OUT Espejo Copia de la broca C2OUT C1RSEL comparador C1 de referencia Seleccione bits
1 - Variando CVref voltaje se utiliza en la fuente de referencia C1Vref tensin. 0 - 0,6 V de tensin de referencia fijo se utiliza en la fuente de referencia C1Vref tensin. 1 - Variando CVref voltaje se utiliza como una fuente de referencia C2Vref tensin. 0 - 0,6 V de tensin de referencia fija se utiliza como una fuente de referencia C2Vref tensin. 1 - Timer1 puerta utiliza la seal de pin T1G como fuente de reloj. 0 - Timer1 puerta utiliza la salida del comparador SYNCC2OUT como una fuente de reloj. 1 - comparador la salida C2 est sincronizado con el reloj del Timer1. 0 - comparador C2 es de salida de la seal asncrona.
VRCON Registrarse
1 - CVref voltaje fuente de referencia habilitada. 0 - Voltaje de fuente de referencia CVref desactivado. 1 - El pasador CVref se alimenta con CVref voltaje de la fuente de referencia. 0 - El pasador CVref se desconecta de CVref fuente de referencia. 1 - fuente de tensin de referencia se establece en la gama baja. 0 - Voltaje de fuente de referencia se ajusta a la gama alta. 1 - fuente de voltaje de referencia est en el intervalo entre Vref + y Vref. 0 - fuente de voltaje de referencia est en el intervalo entre Vdd y Vss (tensin de alimentacin).
VR3 - VR0 seleccin de valores CVref Si VRR = 1 (gama baja) Referencia de voltaje se calcula por medio de la frmula: CVref = ([VR3: VR0] / 24) Vdd Si VRR = 0 (gama alta) Referencia de voltaje se calcula por medio de la frmula: CVref = Vdd / 4 + ([VR3: VR0] / 32) Vdd
En Corto
Con el fin de utilizar adecuadamente incorporados en los comparadores, es necesario hacer lo siguiente: Paso 1 - Configuracin del mdulo:
Con el fin de seleccionar el modo adecuado, los bits de los registros y CM1CON0 CM2CON0 debe ser configurado.Interrumpir el cambio de modo debe estar deshabilitada.
Paso 2 - Internos de configuracin de voltaje de la fuente de referencia (cuando se usa). En el registro VRCON es necesario:
Seleccione uno de los dos rangos de tensin con el bit VRR. Configurar necesaria Vref utilizando los bits VR3 - VR0. Establezca el bit VROE si es necesario. Habilitar el voltaje de referencia Vref fuente configurando el bit de VREN.
Frmula utilizada para calcular la tensin de referencia: VRR = 1 (gama baja) CVref = ([VR3: VR0] / 24) VLADDER VRR = 0 (gama alta) CVref = (VLADDER / 4) + ([VR3: VR0] VLADDER/32) Vladder = Vdd o ([Vref +] - [Vref-]) o Vref +
Habilitar una interrupcin mediante el establecimiento de bits de CMIE (PIE registro), PEIE y GIE (registro INTCON). Lea los bits C1OUT y C2OUT del registro CMCON. Lea el bit de bandera CMIF del registro PIR. Cuando se establece, este bit debe ser limpiado desde el software.
El oscilador externo est integrado en el microcontrolador y conectado a los pines OSC1 y OSC2. Se llama "externo", ya que est conectado a los componentes externos tales como cristal de cuarzo, circuito resonador cermico o resistencia condensador. El modo de oscilador es seleccionado por los bits de la palabra de configuracin, cargados en el microcontrolador durante la programacin. El oscilador interno consiste en dos osciladores internos separados: El oscilador HFINTOSC es un oscilador interno de alta frecuencia que opera a 8MHz. El microcontrolador puede usar un reloj generada en esta frecuencia o despus de ser dividida en pre-escalador. El oscilador LFINTOSC es un oscilador interno de baja frecuencia que opera a 31 kHz. El reloj se genera se utiliza para reloj-perro y el momento del encendido, sino que tambin se puede utilizar como un reloj para el funcionamiento del microcontrolador entero.
El bit de reloj del sistema Select (bit SCS) del registro OSCCON se utiliza para la seleccin entre oscilador externo e interno.
OSCCON Registrarse
El registro OSCCON se utiliza para seleccionar y controlar oscilador de reloj y frecuencia de reloj. Contiene los siguientes bits: bits de seleccin de frecuencia (IRCF2, IRCF1, IRCF0), los bits de estado del oscilador (HTS, LTS) y el sistema de bits de control de reloj (OSTA, SCS).
IRCF2-0 -. Internos bits de frecuencia del oscilador seleccionar la combinacin de estos tres bits determina la tasa de pre-escalador, por lo tanto, la frecuencia de reloj del oscilador interno. IRCF2 1 1 1 1 0 0 0 0 IRCF1 1 1 0 0 1 1 0 0 IRCF0 1 0 1 0 1 0 1 0 FRECUENCIA 8 MHz 4 MHz 2 MHz 1 MHz 500 kHz 250 kHz 125 kHz 31 kHz OSC. HFINTOSC HFINTOSC HFINTOSC HFINTOSC HFINTOSC HFINTOSC HFINTOSC LFINTOSC
COSTOS - oscilador de puesta en marcha de tiempo de espera de bits de estado indica que la fuente de reloj se encuentra actualmente en uso. Es de slo lectura.
1 - oscilador de reloj externo est en uso. 0 - Uno de los osciladores de reloj interno est en uso (o HFINTOSC LFINTOSC).
HTS - poco HFINTOSC Estado (8 MHz - 125 kHz) indica si el oscilador interno de alta frecuencia es estable.
LTS-bit LFINTOSC estable (31 kHz) indica si el oscilador interno de baja frecuencia es estable.
SCS - reloj del sistema Seleccionar bits selecciona el oscilador para ser utilizado como una fuente de reloj.
0 - oscilador externo se utiliza como una fuente de reloj. El modo de oscilador se establece por los bits en la Palabra de configuracin escritos en la memoria del microcontrolador durante el proceso de programacin.
El modo de funcionamiento del oscilador se selecciona el programa despus de escribir y compilar estn completos.
Las ventajas del oscilador externo cuando establecidos para operar en el modo de CE:
La fuente de reloj externa independiente est conectada a la entrada OSC1 y la OSC2 est disponible como un propsito general I / O; Es posible sincronizar el funcionamiento del microcontrolador con el resto de un panel electrnico; En este modo el microcontrolador inicia la operacin tan pronto como la fuente de alimentacin est encendido. Sin tiempo de retraso es necesario para la estabilizacin de la frecuencia, y Suspensin temporal de la operacin de la fuente de reloj externa automticamente har que el microcontrolador para detener la operacin, dejando todos los datos intactos. Despus de reiniciar el oscilador externo, el microcontrolador procede con la operacin como si nada hubiera sucedido.
El oscilador externo en LP, XT y modos SA utiliza el oscilador externo dentro del microcontrolador como una fuente de reloj. La frecuencia de reloj depende del cristal de cuarzo o resonadores cermicos
conectados a OSC1 y OSC2 los pins. Dependiendo de la frecuencia de funcionamiento del componente en uso, seleccione uno de los modos siguientes:
Modo LP - (baja potencia) se utiliza para un cristal de cuarzo de baja frecuencia solamente. Este modo est diseado para conducir slo 32.768 cristales kHz normalmente en los relojes de cuarzo. Es fcil de reconocer por su pequeo tamao y forma cilndrica especfico. El consumo de corriente es el menor de los tres modos. XT modo se utiliza para el intermedio frecuencia cristales de cuarzo de hasta 8 Mhz. El consumo de corriente es el medio de los tres modos. Modo HS - (alta velocidad) se utiliza para la alta frecuencia de cristales de cuarzo de ms de 8 MHz. El consumo de corriente es la ms alta de los tres modos.
RC modo. Cuando el oscilador externo est configurado para operar en modo RC, el pasador OSC1 debe conectarse al circuito RC como se muestra en la figura a la derecha. El pasador OSC2 da salida a la frecuencia del oscilador RC dividida por 4.Esta seal de reloj puede ser utilizado para aplicaciones de calibracin, sincronizacin o de otro tipo.
Rcio modo. Asimismo, el circuito RC est conectada a la clavija OSC1. Esta vez, la disposicin OSC2 pasador se utiliza como un adicional de propsito general pin I / O.
En ambos casos, se recomienda el uso de componentes como se muestra en las figuras. La frecuencia de un oscilador se calcula segn la frmula F = 1 / T en la que:
f = frecuencia [Hz]; T = R * C = constante de tiempo [s]; R = resistencia de la resistencia [], y C = capacidad del condensador [F].
OSCILADOR INTERNO EN MODO INTOSC En este modo, el pasador OSC1 est disponible como un propsito general I / O, mientras que el pasador OSC2 salidas de frecuencia seleccionado oscilador interno dividido por 4.
OSCILADOR INTERNO EN MODO INTOSCIO En este modo, ambos pasadores estn disponibles como propsito general pines I / O.
1. El HFINTOSC de alta frecuencia del oscilador interno est calibrado de fbrica y funciona a 8 Mhz. Se
conecta a un postscaler (divisor de frecuencia). El postscaler permite este oscilador de impulsos de reloj de salida en una de las siete frecuencias. La seleccin de la frecuencia se realiza en el software utilizando IRCF2, IRCF1 y IRCF0 bits del registro OSCCON. El oscilador HFINTOSC se activa al seleccionar una de las siete frecuencias (entre 8 MHz y 125 kHz) y ajustar el reloj de bit del sistema Fuente (SCS) del registro OSCCON. Como puede verse en la figura a continuacin, todos los ajustes se realizan usando bits del registro OSCCON.
2. El LFINTOSC oscilador de baja frecuencia no est calibrado y funciona a 31 kHz. Se activa mediante la
seleccin de esta frecuencia de uso de bits del registro OSCCON y estableciendo el bit SCS del mismo registro.
La prueba de fallos monitor de reloj detecta el fallo comparando fuentes de reloj internas y externas. Si se necesita ms que 2mS para el reloj oscilador externo por venir, la fuente de reloj cambiar automticamente. El oscilador interno se har cargo de la funcin de la fuente de reloj principal de la operacin que est controlada por los bits del registro OSCCON. Cuando el bit del registro OSFIE PIE2 est establecido, una interrupcin ser generada. El reloj del sistema se mantendr en el que se obtengan
a partir del oscilador interno hasta que el microcontrolador se reinicia correctamente el oscilador externo y vuelve a la fuente de reloj externa. Este mdulo tambin est habilitada, cambiando la palabra de configuracin antes de iniciar el proceso de programacin. En este ejemplo, se realiza seleccionando la opcin Fail-Safe Monitor de Reloj.
OSCTUNE Registrarse
Las modificaciones en el registro OSCTUNE afecta a la frecuencia HFINTOSC, pero no la frecuencia LFINTOSC. No hay ninguna indicacin durante el funcionamiento del microcontrolador desplazamiento de frecuencia que se ha producido.
TUN4 - tun0 bits de sintona Frecuencia Mediante la combinacin de estos cinco bits, los cambios de frecuencia del oscilador de 8MHz..De esta manera, las frecuencias obtenidas por su divisin en el postscaler cambiar tambin.
TUN4 0 0 0
TUN3 1 1 1
TUN2 1 1 1
TUN1 1 1 0
TUN0 1 0 1
FRECUENCIA Mximo
0 0 1
0 0 1
0 0 1
0 0 1
1 0 1 Calibrado
1 1 1
0 0 0
0 0 0
1 0 0
0 1 0 Mnimo
EECON1 (registro de control); EECON2 (registro de control); EEDAT (almacena los datos listos para leer y escribir), y EEADR (direccin de la ubicacin de las tiendas de EEPROM para acceder).
El registro EECON2 no es una verdad, no existe fsicamente. Se utiliza nicamente en la secuencia de datos del programa de escritura. Adems de los registros antes mencionados, los registros y EEDATH EEADRH se utilizan tambin para escribir y leer la EEPROM.Tambin se utilizan para el programa (FLASH) de memoria de lectura y escritura. Estos registros se considera una zona de riesgo y rara vez se utiliza ya que cualquier error puede ser fatal para su programa (que seguramente no desea que su microcontrolador para eliminar de forma accidental o cambiar su propio programa). No habr nuevas discusiones aqu, pero ten cuidado.
EECON1 Registrarse
1 - la memoria de acceso al programa. 0 - Acceso a la memoria EEPROM. 1 - Escribir se termina prematuramente y el error se ha producido. 0 - Escribir completado. 1 - Escribe en la memoria EEPROM habilitada. 0 - Escribir en la memoria EEPROM deshabilitada. 1 - Inicia la escritura en la memoria EEPROM. 0 - Escribir en la memoria EEPROM completado. 1 - Inicia la lectura de la EEPROM. 0 - Leer EEPROM deshabilitada.
Paso 1: Escriba la direccin de (00h - FFh) en el registro EEADR. Paso 2: Seleccione el bloque de memoria EEPROM en la limpieza de la broca EEPGD del registro EECON1. Paso 3: Establecer el bit RD del registro mismo de leer la posicin de memoria adecuada. Paso 4: Los datos se almacenan en el registro EEDAT y est listo para usar.
El siguiente ejemplo ilustra el procedimiento anterior cuando el programa est escrito en lenguaje ensamblador:
BSF STATUS,RP1 BCF STATUS,RP0 MOVF ADDRESS,W MOVWF EEADR BSF STATUS,RP0 BCF EECON1,EEPGD BSF EECON1,RD BCF STATUS,RP0 MOVF EEDATA,W
; ; ; ; ; ; ; ; ;
Access bank 2 Move address to the W register Write address Access bank 3 Select EEPROM memory block Read data Access bank 2 Data is stored in the W register
W = EEPROM_Read (ADDRESS)
BSF STATUS,RP1 BSF STATUS,RP0 BTFSC EECON,WR1 GOTO $-1 BCF STATUS,RP0 MOVF ADDRESS,W MOVWF EEADR MOVF DATA,W MOVWF EEDATA BSF STATUS,RP0 BCF EECON1,EEPGD BSF EECON1,WREN BCF INCON,GIE BSF INTCON,GIE BCF EECON1,WREN MOVLW 55h MOVWF EECON2 MOVLW AAh MOVWF EECON2 BSF EECON1,WR
; ; ; ; ; ; ; ; ; ; ; ; ;
Wait for the previous write to complete Bank 2 Move address to W Write address Move data to W Write data Bank 3 Select EEPROM memory block Write to EEPROM enabled All interrupts disabled Interrupts enabled Write to EEPROM disabled
W = EEPROM_Write(ADDRESS, W)
' This example demonstrates the use of EEPROM Library in mikroBasic PRO for PIC. program eeprom_test dim ii as byte ' ii variable used in the loop main: ANSEL = 0 ' Configure AN pins as digital I/O ANSELH = 0 PORTB = 0 PORTC = 0 PORTD = 0 TRISB = 0 TRISC = 0 TRISD = 0 for ii = 0 to 32 step 1 ' Fill data buffer EEPROM_Write(0x80+ii, ii) ' Write data to address 0x80+ii next ii EEPROM_Write(0x02,0xAA) ' address 2 EEPROM_Write(0x50,0x55) ' address 0x50 Delay_ms(1000) ' PORTB = 0xFF ' PORTC = 0xFF Delay_ms(1000) PORTB = 0x00 PORTC = 0x00 Delay_ms(1000) PORTB = EEPROM_Read(0x02) display it on PORTB PORTC = EEPROM_Read(0x50) and display it on PORTC Delay_ms(1000) Write data (number 0xAA) to EEPROM Write data (number 0x55) to EEPROM Blink PORTB and PORTC diodes to indicate start of reading
' Read data from EEPROM address 2 and ' Read data from EEPROM address 0x50
for ii = 0 to 32 step 1 ' Read 32 bytes block from address 0x80 PORTD = EEPROM_Read(0x80+ii) ' and display data on PORTD Delay_ms(250) next ii end.
Cuando la tensin de alimentacin llega a 1,2 - 1,7 V, un circuito llamado de encendido se reinicia el temporizador del microcontrolador en un plazo aproximado 72mS. Temporizador Tan pronto como expire este tiempo, otro temporizador denominado arranque del oscilador genera otra seal de reposicin dentro de los perodos 1024 oscilador de cuarzo. Cuando expire este tiempo de retardo (marcado como reset T en la figura a la derecha) y el pin MCLR es excitada alta, el microcontrolador puede comenzar a ejecutar el primer programa de instruccin.
Adems de este llamado "controlado" reset que se produce en el momento en que la fuente de alimentacin continua, hay otras dos condiciones de restablecimiento llamados Negro de salida y Brown fuera que pueden ocurrir durante el funcionamiento del microcontrolador, as como en el momento la fuente de alimentacin se apaga.
NEGRO-restablecer
El restablecimiento de negro de salida tiene lugar cuando el microcontrolador est correctamente apagado. En este caso, el microcontrolador no tiene tiempo para hacer nada impredecible debido a que la tensin de alimentacin cae muy rpido en virtud de su valor mnimo. A la luz wordsthe otra se apaga, la cortina se cae y el espectculo ha terminado.
Brown-out de RESET
Cuando la tensin de alimentacin desciende lentamente (un ejemplo tpico es una descarga de la batera, aunque el microcontrolador experimenta mucho ms rpidas cadas de tensin como procesos lentos), los componentes electrnicos internos gradualmente deja de funcionar y se produce la llamada de Brown-restablecer. Antes de que el microcontrolador completamente deja de funcionar hay un riesgo de que los circuitos que operan a voltajes ms altos comenzar a realizar de forma impredecible. El reinicio brown-out tambin puede ser fatal para el programa, ya que se guarda en la memoria flash en el chip.
RUIDO
El ruido es un tipo especial de brown-out reset que se produce en el entorno industrial siempre que "parpadea de la tensin de alimentacin por un momento y cae por debajo del nivel mnimo. Incluso corto, por ejemplo un ruido en la fuente de alimentacin puede afectar considerablemente el funcionamiento del microcontrolador.
MCLR PIN
Un cero lgico (0) en el pin MCLR provoca que el microcontrolador que se restablezca inmediatamente y de una manera apropiada. Se recomienda para conectarlo como en la figura de la derecha. La funcin de los componentes adicionales es mantener "pura" lgica de un (1) durante la operacin normal. Si estos componentes se configuran para proporcionar un nivel lgico alto (1) en el pin MCLR despus de restablecer T es ms, el microcontrolador inmediatamente comenzar a operar. Esta condicin puede ser muy til cuando es necesario para sincronizar el funcionamiento del microcontrolador y la electrnica adicionales, as como el funcionamiento de varios microcontroladores.
Con el fin de evitar cualquier error que pueda ocurrir en el Brown-out reset, el PIC 16F887 tiene un "mecanismo de proteccin" built-in. Es un circuito simple, pero eficaz, que responde cada vez que la tensin de alimentacin cae por debajo de 4V durante ms de 100 microsegundos. Este circuito genera una seal de reposicin y desde ese momento el microcontrolador funciona como si se hubiera acaba de encender.
Captulo 4: Ejemplos
El propsito de este captulo es proporcionar informacin bsica que usted necesita saber con el fin de poder utilizar microcontroladores con xito en la prctica. En este captulo, por lo tanto, no contiene ningn programa o esquema super interesante dispositivo con soluciones sorprendentes. En cambio, los siguientes ejemplos son una prueba mejor que escribir un programa es un privilegio ni una cuestin de talento, pero la capacidad de los simples directivas de poner las piezas del rompecabezas juntas usando. Diseo y desarrollo de dispositivos, principalmente se reducen a el mtodo de "prueba correcta de la repeticin". Por supuesto, cuanto ms ests en l, ms complicado se hace desde las piezas del rompecabezas se unen por los nios y los arquitectos de primera clase ...
4.1 CONEXIN BSICA 4.2 COMPONENTES ADICIONALES 4.3 Ejemplo 1 - Escribir cabecera, configurar pines de E / S y utilizar la funcin de retardo 4.4 Ejemplo 2 - Instrucciones de uso, armado y LFINTOSC oscilador interno 4.5 Ejemplo 3 - TMR0 como contador, declarar nuevas variables, smbolos de uso y de rel 4.6 Ejemplo 4 - Use temporizadores TMR0, TMR1 y TMR2. Utilice las interrupciones, declarar el nuevo procedimiento 4.7 Ejemplo 5 - Uso del temporizador perro guardin Ejemplo 6 4,8 - Mdulo CCP1 como un generador de seal PWM 4.9 Ejemplo 7 - Utilice un convertidor A / D 4.10 EJEMPLO 8 - Utilizar memoria EEPROM 4.11 Ejemplo 9 - Dos dgitos contador de LED, la multiplexacin 4.12 EJEMPLO 10 - Utilizacin LCD 4.13 EJEMPLO 11 - comunicacin serie RS232 4.14 EJEMPLO 12 - Medir la temperatura con sensor de DS1820. El uso del protocolo '1-wire ' 4,15 Ejemplo 13 - la generacin de sonido, librera de sonidos ... 4.16 EJEMPLO 14 - Utilizar una pantalla grfica LCD 4.17 EJEMPLO 15 - Utilizar un panel sensible al tacto 4.18 EJEMPLO 16 - Utilizar un teclado 4x4
Como puede verse en la figura anterior, se trata de circuitos sencillos. Pero no es siempre el caso. Si el dispositivo de destino se utiliza para controlar costosas mquinas o dispositivos de soporte de vida, todo se complica cada vez ms. De todos modos, esta sencilla solucin va a hacer por el momento ...
FUENTE DE ALIMENTACIN
Aunque el PIC16F887 puede operar a diferentes voltajes de alimentacin, por qu 'la ley de Murphy "prueba? Un 5V DC tensin de alimentacin es el ms adecuado. El circuito, que se muestra en la pgina anterior, utiliza una barata integrado de tres terminales LM7805 regulador positivo y proporciona una estabilidad de la tensin alta calidad y muy corriente suficiente para permitir que los mdulos de microcontroladores y perifricos para operar con normalidad (los medios suficientes 1A).
La seal de reset
A fin de que el microcontrolador para funcionar correctamente, un uno lgico (VCC) debe ser aplicada en el pasador de reposicin. Un botn de conectar el pin de reset MCLR a GND no es necesario, pero es casi siempre proporcionada, ya que permite que el microcontrolador se recuperan rpidamente si algo sale mal. Al pulsar este botn, el pin MCLR se suministra con 0V, el microcontrolador se produce y el restablecimiento de la ejecucin del programa comienza desde el principio. Una resistencia de 10K se utiliza para evitar acortar el carril 5V DC a la tierra desde que ocurre cuando el botn se pulsa RESET.
Seal de reloj
A pesar de que el microcontrolador tiene un oscilador incorporado, no puede funcionar sin componentes externos que hacen que su funcionamiento estable y determinar su frecuencia de
operacin. Dependiendo de los componentes en uso y sus frecuencias de funcionamiento, el oscilador se puede ejecutar en cuatro modos diferentes:
LP - Cristal de baja potencia; XT - Cristal / resonador; SA - Cristal de alta velocidad / resonador, y RC - resistencia / condensador.
Cul es el punto de utilizar estos modos?Debido al hecho de que es casi imposible disear un oscilador para operar de forma estable sobre un amplio rango de frecuencias, el microcontrolador debe estar familiarizado con el tipo de cristal de cuarzo conectado de manera que se puede ajustar el funcionamiento de su oscilador de reloj a la misma. Por eso, todos los programas que se utilizan para los microcontroladores de programacin contiene una opcin para la seleccin del oscilador modo. Vase la figura de la izquierda.
Cristal de cuarzo
Cuando el cristal de cuarzo se utiliza para estabilizar la frecuencia, la incorporada en el oscilador funciona a una frecuencia precisa que no se ve afectada por cambios en el voltaje de suministro de potencia y temperatura. Esta frecuencia est por lo general aparece en la carcasa de cristal de cuarzo. Adems de los cristales, los condensadores C1 y C2 tambin debe estar conectado como por esquema de arriba. Su capacitancia no es de gran importancia. Por lo tanto, los valores indicados en la mesa de al lado el esquema debe ser considerado como una recomendacin, y no como una regla estricta.
Resonador cermico
Un resonador de cermica es ms barato, pero muy similar al cuarzo por su funcin y modo de funcionamiento. Por ello, estos dos esquemas, que ilustran su conexin con el microcontrolador, son idnticos. Sin embargo, en comparacin con el cristal de cuarzo, la capacitancia de los condensadores C1 y C2 es ligeramente diferente debido a las diferentes caractersticas elctricas. Consulte la tabla siguiente.
Resonadores de cermica normalmente estn conectados a osciladores cuando no es necesario para proporcionar una frecuencia extremadamente precisa.
RC oscilador
Si la frecuencia de funcionamiento no importa, entonces no hay necesidad de utilizar componentes adicionales costosos para su estabilizacin. En su lugar, una simple red RC, como se muestra en la figura a continuacin, se debe utilizar. En este caso, slo la entrada de oscilador de reloj del microcontrolador se utiliza, lo que significa que la seal de reloj con la Fosc / 4 frecuencia aparecer en el pasador OSC2. Esta frecuencia es la misma que la frecuencia de funcionamiento del microcontrolador, es decir, representa la velocidad de ejecucin de la instruccin.
Oscilador externo
Si se requiere para sincronizar el funcionamiento de varios microcontroladores o si por alguna razn, no es posible utilizar cualquiera de las configuraciones anteriores, una seal de reloj puede ser generada por un oscilador externo. Refirase a la figura de abajo.
Interruptores y pulsantes de
Interruptores y pulsadores es probable que los componentes ms simples que proporcionan la forma ms sencilla de llevar la tensin en unos pines del microcontrolador de entrada. Por supuesto, no es tan simple como que en la prctica ... Lo que lo hace complicado es un rebote de contacto. El rebote de contacto es un problema comn con los interruptores mecnicos. Cuando los contactos chocan juntos, su impulso y la elasticidad de actuar en conjunto para causar un rebote. El resultado es una corriente rpidamente impulsos elctricos en lugar de una transicin limpia de cero a plena corriente. En su mayora se produce debido a las vibraciones, las pequeas asperezas y la suciedad entre los contactos. El rebote ocurre demasiado rpido de modo que no es posible notar cuando estos componentes se utilizan normalmente.
Sin embargo, esto causa problemas en algunos circuitos lgicos y analgicos que responden suficientemente rpido como para malinterpretar encendido / apagado impulsos como una secuencia de datos. En otras palabras, todo el proceso no dura mucho tiempo (unos pocos micro o milisegundos), pero lo suficiente como para ser registrado por el microcontrolador. Cuando slo un pulsador se utiliza como una fuente de seal de contador, se producen errores en casi el 100% de los casos. Una de las posibles soluciones a este problema es conectar a un circuito simple RC para suprimir rpidos cambios de voltaje. Dado que el perodo de rebote no est definido, los valores de los componentes no puede determinarse con precisin. En la mayora de los casos, se recomienda el uso de los mismos valores, como se muestra en la figura a continuacin.
Si la estabilidad completa se requiere entonces medidas radicales deben ser tomadas. La salida del circuito lgico, como se muestra en la figura a continuacin (flip-flop RS), cambiar su estado lgico despus de detectar el primer pulso disparado por un rebote de contacto. Esta solucin es ms cara (interruptor SPDT), pero ms seguro sin duda.
Adems de estas soluciones de hardware, hay tambin una solucin de software sencillo. Cuando el programa comprueba el estado lgico de un pin de entrada y detecta un cambio, la comprobacin debe hacerse una vez ms despus de un cierto retraso. La verificacin de cambio significa que el botn del interruptor / pulsador ha cambiado su posicin. Las ventajas de esta solucin son claras: es de forma gratuita y se puede aplicar a los contactos de baja calidad.
RELS
Un rel es un interruptor elctrico que abre y cierra bajo el control de otro circuito elctrico. Por lo tanto, conectado a los pines de salida del microcontrolador y se utiliza para activar / desactivar los dispositivos de potencia tales como motores, transformadores, resistencias, bombillas, etc Estos dispositivos se colocan casi siempre lejos de los componentes sensibles a bordo. Hay varios tipos de rels y todos funcionan de la misma manera. Cuando la corriente fluye a travs de la bobina, el rel es operado por un electroimn para abrir o cerrar uno o ms conjuntos de contactos.Similar a acopladores pticos, no hay conexin galvnica (contacto elctrico) entre la entrada y salida de los rels. Rels por lo general requieren de alta tensin y alta corriente para iniciar la operacin, pero tambin los hay en miniatura que pueden ser activadas por baja corriente directa alimentado por un pin del microcontrolador.
La figura siguiente muestra la forma ms comn de conectar un rel a la red otros dispositivos de potencia.
Con el fin de evitar que el alto voltaje de autoinduccin, causada por una parada repentina del flujo de corriente a travs de la bobina, un diodo polarizado invertida est conectado en paralelo a la bobina. El propsito de este diodo es 'cortar' el pico de tensin.
DIODOS LED
Usted probablemente sabe todo lo que usted debe saber acerca de los LED, pero tambin debemos pensar en las generaciones ms jvenes ... Vamos a ver, cmo destruir un LED? Bueno ... fcilmente.
Quick Burning
Al igual que cualquier otro diodo, los LEDs tienen dos extremos-un nodo y un ctodo. Conecte un diodo correctamente a la tensin de alimentacin y que emitir luz felizmente. Gire el diodo al revs y aplicar la misma tensin de alimentacin (aunque sea por un momento).Es probable que no emiten luz - nunca ms!
Slow Burning
Hay un nominal (lo consideran como mximo) corriente especificada para cada LED que no se debe superar. Si esto sucede, el diodo emitir luz ms intensa, pero slo durante un corto perodo de tiempo.
DISPLAY LED
Bsicamente, una pantalla LED no es ms que varios LEDs moldeados en el caso mismo plstico. Hay muchos tipos de pantallas y algunos de ellos estn compuestos de varias decenas incorporados en los diodos que pueden visualizar smbolos diferentes. Sin embargo, la pantalla ms utilizada es un display de 7 segmentos. Se compone de 8 LEDs. Siete segmentos de un dgito se disponen en forma de rectngulo para mostrar los smbolos, mientras que el segmento adicional se utiliza para mostrar un punto decimal. Con el fin de simplificar la conexin, los nodos o ctodos de todos los diodos estn conectados a un solo pasador de modo que hay pantallas nodo comn y pantallas comunes de ctodo, respectivamente. Segmentos estn marcadas con las letras de la A a g, adems de DP, como se muestra en la figura a continuacin. Cuando se conecta una pantalla LED, cada diodo es tratada por separado, lo que significa que cada uno debe tener su propia resistencia limitadora de corriente.
Aqu hay algunas cosas que usted debe prestar atencin a la hora de comprar pantallas de LED:
Como se mencion anteriormente, dependiendo de si los nodos o ctodos estn conectados a la clavija comn, hay pantallas nodo comn y pantallas comunes catdicos. No hay ninguna diferencia entre ellos para nada en su apariencia lo que se recomienda para corroborar que se va a utilizar antes de instalarla.
La corriente mxima que cada pin del microcontrolador puede recibir o dar es limitado. Por lo tanto, si varias pantallas estn conectados al microcontrolador entonces llamado bajo LED actuales limitados a 2mA slo debe ser utilizado. Segmentos de la pantalla suelen ser marcadas con las letras de A a G, pero no hay una regla que indica rpida visualizacin pines que estn conectados. Por esta razn, es muy importante para comprobar la conexin antes de empezar a escribir un programa o el diseo de un dispositivo.
LED muestra conectado al microcontrolador normalmente ocupan un gran nmero de valiosos pines I / O, que puede ser molesto, especialmente cuando es necesario para visualizar mltiples nmeros dgitos. Es an ms complicado si, por ejemplo, es necesario para mostrar dos 6-dgitos. Un simple clculo muestra que 96 pines de salida son necesarios en este caso. La solucin a este problema se denomina multiplexacin. As es como una ilusin ptica basada en el mismo principio de funcionamiento como una cmara de pelcula est hecha. Slo un dgito est activo en un momento, pero cambian sus condiciones de encendido / apagado tan rpidamente hormigonado la impresin de que todos los dgitos de un nmero son activos simultneamente.
Echemos un vistazo a la figura de arriba. En primer lugar un byte que representa las unidades se carga en el puerto PORT2 microcontrolador y transistor T1 se activa al mismo tiempo. Despus de un tiempo, el transistor T1 est apagado, un byte que representa decenas se carga a PORT2 y el transistor T2 se activa. Este procedimiento se repite cclicamente a alta velocidad para todos los dgitos y transistores correspondientes. Un hecho decepcionante, lo que indica que el microcontrolador es slo una especie de ordenador en miniatura diseado para slo entienden el lenguaje de ceros y unos se expresa plenamente cuando se muestran los dgitos. Es decir, el microcontrolador no sabe lo que las unidades, decenas o centenares son, ni lo que diez dgitos que se usan para que parezca. Por esta razn, cada nmero que se muestra debe someterse al procedimiento siguiente: En primer lugar, un nmero de varios dgitos debe ser dividido en unidades, decenas etc en una subrutina especializado. Entonces cada uno de estos dgitos debe ser almacenado en un byte especfico. Dgitos de obtener la apariencia reconocible para los seres humanos mediante la realizacin de un procedimiento sencillo llamado "enmascaramiento". En otras palabras, un nmero binario se sustituye con una combinacin diferente de bits. Por ejemplo, el dgito 8 (0000 1000) se sustituye por el nmero binario 0111 1111 con el fin de activar todos los LEDs que muestran este dgito. El diodo nico que queda inactiva aqu est reservado para el punto decimal. Si el puerto microcontrolador est conectado a una pantalla de modo que "a" que el bit 0 segmento activa, poco "b" 1 segmento se activa, el bit 2 del segmento "c", etc, entonces la tabla de abajo muestra mscara binario apropiado para cada dgito.
MOSTRAR SEGMENTOS c 1 1 0 1 1 1 1 1 1 1 d 1 0 1 1 0 1 1 0 1 1 e 1 0 1 0 0 0 1 0 1 0 F 1 0 0 0 1 1 1 0 1 1 g 0 0 1 1 1 1 1 0 1 1
Adems de los dgitos (0-9), hay algunas letras del alfabeto - A, C, E, J, F, U, H, L, b, c, d, O, R, T-que tambin se puede mostrar por enmascaramiento. En caso de que las pantallas comunes del nodo se utilizan, todos los que se incluyen en la tabla de arriba debe ser reemplazado con ceros y viceversa. Adems, los transistores PNP debe utilizarse como conductores.
IC
Un acoplador ptico es un componente comnmente utilizado para microcontrolador galvnicamente separadas de cualquier corriente potencialmente peligroso o tensin en su entorno. Optoacoplador suelen tener fuentes de uno, dos o cuatro de luz (LED) en su entrada, mientras que en su salida, frente a los diodos, hay el mismo nmero de componentes sensibles luz (fototransistores, foto-tiristores o phototriacs). La cuestin es que un acoplador ptico utiliza un trayecto corto de transmisin ptica para transferir una seal entre los diodos y componentes foto-sensibles, mientras que los mantiene aislado elctricamente. Este aislamiento tiene sentido slo si estos componentes por separado alimentado. De esta manera, el microcontrolador y sus mdulos adicionales estn completamente protegidos de alto voltaje y ruidos que por lo general les hacen sufrir daos o funcionar de una manera impredecible. Los optoacopladores utilizados con ms frecuencia son los que tienen fototransistores sobre su produccin. Cuando se trata de los optoacopladores con el interior de la base-a-pin 6 de conexin (tambin hay optoacopladores sin ella), la base puede dejarse sin conectar.
La red de R / C se indica por una lnea punteada en la figura anterior es una conexin opcional que reduce los efectos del ruido mediante la eliminacin de impulsos muy cortos.
PANTALLA LCD
Una pantalla LCD se fabrica especficamente para el uso con los microcontroladores, lo que significa que no pueda ser activado por circuitos estndar de CI. Se utiliza para mostrar diferentes mensajes en una pantalla de cristal lquido en miniatura. La pantalla LCD se describe aqu es por su bajo precio y una gran capacidad de uso ms frecuente en la prctica. Se basa en el controlador HD44780 (Hitachi) y muestra los mensajes en dos lneas de 16 caracteres cada una. Distintos smbolos como las letras del alfabeto, las letras griegas, signos de puntuacin, smbolos matemticos, etc se pueden mostrar en ella. Tambin es
posible visualizar smbolos creados por el usuario. Otras funciones tiles incluyen cambio automtico de mensajes (izquierda y derecha), el aspecto del cursor, retroiluminacin LED, etc
El control de funcionamiento
R/W
0 1
D0 D1 D2 D3 D4 D5 D6 D7
Pantalla LCD
Una pantalla de LCD es un panel delgado y plano se utiliza para mostrar diferentes contenidos. Se compone de dos lneas cada uno con hasta 16 caracteres de 5x8 pxeles o 5x11. El funcionamiento de una pantalla LCD 5x8 se describe aqu, ya que es ms frecuentemente utilizado.
Contraste de la pantalla depende de la tensin de alimentacin y si los mensajes se muestran en una o dos lneas. Por esta razn, un voltaje variable (0-Vdd) se aplica a la clavija marcada como Vee mediante un potencimetro de ajuste. Algunas pantallas LCD tienen una luz de fondo integrada (LED de color azul o verde). Cuando la luz se utiliza, una resistencia limitadora de corriente debe ser conectado en serie con uno de los pasadores para el suministro de luz de fondo de potencia (similar a los LED).
Si no hay caracteres de la imagen o si se atenan cuando la pantalla se enciende, lo primero que se debe hacer es comprobar el potencimetro de ajuste de contraste. Est ajustado correctamente? Lo mismo se aplica si el modo de funcionamiento de la pantalla se ha cambiado (escribir en una o dos lneas).
LCD Memoria
Pantalla LCD contiene tres bloques de memoria:
DDRAM Display Data RAM; CGRAM Generador de caracteres de RAM, y Carcter CGROM Generador de ROM. Memoria DDRAM
La memoria DDRAM se utiliza para almacenar los caracteres que se mostrar. Es capaz de almacenar hasta 80 caracteres. Algunas posiciones de memoria estn directamente relacionados con los campos de caracteres en la pantalla. El principio de funcionamiento de la memoria DDRAM es muy sencillo: basta con configurar una pantalla para incrementar direcciones automticamente (desplazamiento a la derecha) y establecer la direccin de partida para el mensaje que se mostrar (por ejemplo, 00 hexadecimal). Despus de eso, todos los caracteres enviados a travs de lneas D0-D7 se mostrar en la pantalla como un mensaje que se utilizan para - de izquierda a derecha. En este caso, mostrando aperturas desde el campo primer carcter en la primera lnea porque la direccin de partida es 00 hexadecimal. No importa cuntos caracteres se envan, slo los diecisis primeros sern visibles en la pantalla, mientras que el resto de ellos se guarda y se muestra posteriormente con el comando de cambio. En la prctica, la pantalla LCD es como una ventana en el cambio de direccin izquierda-derecha en las posiciones de memoria que contengan caracteres distintos. Esto es, de hecho, cmo el efecto del mensaje desplazamiento sobre la pantalla se ha creado.
Si el cursor est activado, siempre se coloca en el campo de caracteres actualmente dirigida. En otras palabras, tan pronto como el carcter apropiado aparece en la posicin del cursor, la coursor se mueve automticamente al siguiente campo requerido. Como su nombre indica, la memoria DDRAM es un tipo de memoria RAM, lo que significa que los datos se pueden escribir y leer de ella, mientras que su contenido se pierde irremediablemente cuando se desconecta la alimentacin.
CGROM memoria
CGROM la memoria contiene un mapa de carcter estndar con todos los caracteres que se pueden visualizar en la pantalla. Cada personaje se le asigna una ubicacin de memoria:
Las direcciones de las ubicaciones de memoria CGROM coincidir con los caracteres ASCII estndar. Vamos a ver lo que significa acctually. Si el programa es ejecutado por el microcontrolador se encuentra con "P carcter de envo a puerto un comando, el valor binario 0101 0000 aparecer en el puerto. Este valor es equivalente ASCII de carcter P. Como resultado, el smbolo correspondiente al 0101 0000 ubicacin de memoria CGROM, es decir, la letra P, se visualiza en la pantalla. Lo mismo sucede con todas las letras del alfabeto (maysculas y pequeas), pero no a los nmeros. Si usted mira cuidadosamente el mapa de la pgina anterior, te dars cuenta de que las direcciones de todos los dgitos se desplaza hacia adelante en un 48 en relacin con sus valores (dgito 0 es la direccin 48, el dgito 1 direccin es 49, el dgito 2 direccin es 50, etc) . Por lo tanto, con el fin de mostrar los dgitos correctamente, es necesario aadir nmero decimal 48 a cada uno de ellos antes de enviarlo a una pantalla LCD.
Qu es ASCII? Desde sus inicios hasta la actualidad, los ordenadores pueden reconocer los nmeros solamente, pero no las letras.Esto significa que todos los datos de un permutas PC con un dispositivo perifrico se convierte en formato binario, aunque el mismo es reconocido por los seres humanos como cartas (teclado es un ejemplo excelente). En otras palabras, cada carcter coincide con una combinacin nica de ceros y unos. ASCII es la codificacin de caracteres basado en el alfabeto Ingls. El cdigo
ASCII especifica una correspondencia entre los smbolos de caracteres estndar y sus equivalentes numricos.
CGRAM MEMORIA
Adems de los caracteres estndar, la pantalla LCD tambin se pueden mostrar smbolos definidos por el usuario en el tamao de los pxeles 5x8. Se habilita por un tipo especial de memoria RAM llamada CGRAM (64 bytes). Los registros de memoria de 8 bits de ancho, pero slo 5 bits ms bajos se utilizan. Lgica uno (1) en cada registro representa un campo atenuado, mientras que 8 localidades agrupados juntos representan un carcter. Refirase a la figura a continuacin:
Los smbolos se define generalmente En un principio del programa por ceros y unos simples de escritura a los registros de la memoria CGRAM con el fin de formar las formas deseadas. Con el fin de mostrarlos, es suficiente para especificar la direccin de memoria adecuada. Preste atencin a la primera columna de
la hoja de CGROM de caracteres. No contiene las direcciones de memoria RAM, pero los smbolos que se debate aqu. En este ejemplo, los medios 'display 0' - pantalla 'smiley', significa 'una pantalla smbolo "" ancla "de pantalla, etc
RS = 1 - Los bits D0-D7 son las direcciones de los caracteres que se muestran. Un procesador incorporado en la pantalla LCD se dirige a un personaje de el mapa de caracteres y la muestra. La direccin DDRAM especifica la ubicacin en la pantalla en la que el personaje se va a mostrar. Esta direccin est predefinida o la direccin del carcter enviado anteriormente se incrementa automticamente. RS = 0 - bits D0 - D7 son los comandos utilizados para establecer el modo de funcionamiento de la pantalla.
Aqu est una lista de comandos relacionados con el funcionamiento de la pantalla LCD: COMAN DO Borrar pantalla Inicio del cursor Entrada modo de juego Mostrar control on / off Cursor / Pantalla de cambio Funcin de conjunto Establezca la direccin CGRAM Establezca la direccin DDRAM Lea "BUSY" bandera (BF) Escriba a CGRAM o DDRAM Leer de CGRAM o DDRAM R S R W D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 TIEMPO DE EJECUCI N 1.64mS 1.64mS
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 1 I/ D
1 x
40US
40US
D/ C N
R/ L F
40US
DL
40US
CGRAM direccin
40US
Direccin DDRAM
40US
BF
Direccin DDRAM
D7
D6
D5
D4
D3
D2
D1
D0
40US
D7
D6
D5
D4
D3
D2
D1
D0
40US
I / D 1 = Incremento (por 1) R / L 1 = Desplazamiento a la derecha 0 = Disminucin (por 1) 0 = Desplazamiento a la izquierda S 1 = Pantalla cambio de DL 1 = 8-bit de interfaz 0 = Mostrar cambio de 0 = 4-bit de interfaz D 1 = Pantalla en la N 1 = Pantalla de dos lneas 0 = 0 = apagado de pantalla de visualizacin en una sola lnea U 1 = cursor en la F 1 = formato de caracteres puntos 5x10 0 = 0 = cursor fuera de formato de caracteres puntos 5x7 B 1 = parpadeo del cursor en D / C 1 = cambio de pantalla 0 = parpadeo del cursor apagado 0 = Desplazamiento del cursor
QU ES UNA bandera de ocupado?
En comparacin con el microcontrolador, el LCD es un componente extremadamente lento. Por esta razn, era necesario para proporcionar una seal que, en cada ejecucin del comando, indican que la pantalla est lista para recibir siguiente pieza de datos. Esta seal se llama la bandera de ocupado y puede ser ledo desde la lnea de D7. Pantalla LCD est preparado para recibir nuevos datos cuando la tensin en esta lnea es 0V (BF = 0).
LCD Conexin
Dependiendo de cuntas lneas se utilizan para conectar un LCD al microcontrolador, hay de 8 bits y 4 bits de modos de funcionamiento de la pantalla LCD. El modo apropiado se selecciona al comienzo de la operacin en el proceso llamado "inicializacin". El modo de 8 bits LCD utiliza los pines D0-D7 para transferir datos, como se explica en la pgina anterior. El propsito principal del modo de 4-bit LCD es valiosa para salvar pines I / O del microcontrolador. Slo los 4 bits ms altos (D4-D7) se utilizan para la comunicacin de aqu, mientras que otros pueden dejarse sin conectar. Cada pieza de datos se envan a la pantalla LCD en dos pasos - cuatro bits superiores son enviadas primero (normalmente a travs de lneas D4-D7), entonces cuatro bits ms bajos.Como resultado del proceso de inicializacin, la pantalla LCD es capaz de enlazar e interpretar bits recibidos
correctamente.
Adems, los datos rara vez se lee de la pantalla LCD. En la mayora de los casos, el microcontrolador enva datos a la pantalla LCD, lo que significa que es posible ahorrar un adicional pin I / O por simple conectando el pin R / W a tierra. Este ahorro tiene su precio, por supuesto. Aunque el proceso de visualizacin de datos se realiza normalmente, no ser posible leer la bandera de ocupado, ya que no es posible leer la pantalla o bien. La buena noticia es que hay una solucin simple a este problema. Despus de enviar un carcter o un comando de la pantalla LCD, es necesario darle el tiempo suficiente para prepararse para recibir otra. Debido al hecho de que se tarda aproximadamente 1.64mS para un comando para que sea ejecutado, ser suficiente para esperar alrededor de 2 ms.
LCD de inicializacin
Tan pronto como la fuente de alimentacin pasa, la pantalla LCD se desactiva automticamente. Todo el proceso dura aproximadamente 15 ms. Despus de eso, la pantalla est lista para funcionar y su modo de funcionamiento est configurado por defecto. Esto significa que:
1. Pantalla se borra. 2. Modo DL = 1 - Comunicacin a travs de la interfaz de 8 bits N = 0 - Los datos se muestran en una lnea F = 0 - Formato de caracteres de la fuente es de 5 x 8 pxeles 3. Mostrar / cursor de encendido / apagado D = 0 - Display apagado U = 0 - fuera del cursor B = 0 - Parpadeo del cursor apagado 4. Entrada de caracteres ID = 1 direcciones de la pantalla se incrementa automticamente en 1 S = 0 Pantalla desplazar fuera
En la mayora de los casos de auto-rearme ocurre normalmente. Sobre todo, pero no siempre. Si por alguna razn la tensin de alimentacin no llega al mximo dentro de 10 ms, la pantalla empezar a llevar a cabo completamente imprevisible. Si la fuente de alimentacin no es capaz de cumplir esta condicin, o
si es necesario para proporcionar un funcionamiento seguro, el proceso de inicializacin se requiere. Se produce una condicin de reposicin nuevo, permitiendo as la visualizacin para operar normalmente. Hay dos algoritmos de inicializacin. Cul se va a realizar depende de si la conexin con el microcontrolador se establece a travs de 4 - o interfaz de 8-bits. La inicializacin siguiente proceso es el mismo para ambos algoritmos. Usted slo tiene que especificar algunos comandos bsicos y despus de eso, usted ser capaz de enviar masajes para la pantalla LCD. La figura siguiente ilustra la inicializacin de 8-bits de la pantalla LCD:
No es un error! En este algoritmo, el mismo valor es tres veces sucesivamente, enva y se muestra en la pantalla LCD. El procedimiento descrito en la inicializacin de 4-bit es el siguiente:
'In mikroBasic for PIC, it is sufficient to write only one function to perform the 'whole process of LCD initialization. Prior to calling this function it is necessary 'to declare bits LCD_D4-LCD_D7, LCD_RS and LCD_EN. ... sub procedure Lcd_Init ' Initialize LCD ...
EJEMPLOS PRCTICOS
El proceso de creacin de un nuevo proyecto es muy simple. Seleccione la opcin Nuevo proyecto en el men Proyecto, como se muestra en la figura de la derecha.
Aparecer una ventana llamada Asistente para nuevo proyecto, que le guiar a travs del proceso de creacin de un nuevo proyecto, parece. La ventana de introduccin de esta aplicacin contiene una lista de acciones a realizar cuando se crea un nuevo proyecto. Haga clic en Siguiente.
El proceso de creacin de un nuevo proyecto se puede dividir en cinco pasos:
1. Seleccin del microcontrolador para escribir un programa para. En este caso, es PIC16F887. 2. Seleccin del reloj del dispositivo. En este caso, es 8 MHz de reloj. 3. La seleccin del nombre y la ubicacin del proyecto. En este caso, el nombre del proyecto es la primera _Project y se guardar en la carpeta C: \ Mis proyectos. El compilador aade automticamente la extensin. Mbppi al nombre del proyecto y un archivo de cdigo fuente con el mismo nombre (First_Project. MBA) se crear en su seno. 4. En caso de que el proyecto consta de varios archivos de cdigo fuente, es necesario especificar todos ellos e incluir en el proyecto haciendo clic en el botn Agregar. En este ejemplo, no hay archivos de origen adicionales dentro del proyecto. 5. Por ltimo, es necesario aprobar todas las opciones seleccionadas, haga clic en Finalizar.
Despus de crear el proyecto, una nueva ventana en blanco para escribir un programa en el que aparecen. Consulte la figura siguiente.
Cuando el programa est escrito, es necesario compilarlo en un cdigo hexadecimal, seleccionando una de las opciones de generacin en el men Proyecto.:
Para crear un archivo. Hexagonal, seleccione Build (Ctrl + F9) en el men Proyecto o haga clic en el icono de la barra de herramientas de generacin de proyectos. La construccin todos los proyectos (Shift + F9) opcin genera todos los archivos dentro del proyecto, las bibliotecas (si hay un cdigo fuente para ellos) y los archivos def para el chip en uso. La opcin Build + Program (Ctrl + F11) es especial, ya que permite que el PRO mikroBasic para PIC compilador para cargar automticamente el programa en el microcontrolador despus de la compilacin. El proceso de programacin se realiza mediante el programador PICFlash.
Todos los errores detectados durante la compilacin se muestran en la ventana de mensajes. Si no se encuentran errores, el PRO mikroBasic para PIC compilador genera archivos de salida.
4,3 Ejemplo 1
Escribir cabecera, configurar pines de E / S y utilizar la funcin de retardo
Aqu es un sencillo programa que tiene por objeto simplemente para encender un LED pocos PORTB. Utilice este ejemplo para estudiar lo que es un programa real parece. La siguiente figura muestra el esquema de conexin adecuado, mientras que el programa correspondiente se encuentra en la pgina siguiente.
Cuando la fuente de alimentacin pasa, cada segundo el LED emite luz PORTB, lo que indica que el microcontrolador est correctamente conectado y funciona normalmente. Este ejemplo muestra cmo una cabecera escritas correctamente parece. Cabecera es el mismo para todos los programas descritos en este documento por lo que se omiten en los siguientes ejemplos. De todos modos, se considera que al comienzo de cada programa marcado como cabecera.
Para hacer este ejemplo ms interesante, que permitir a los LEDs conectados a PORTB a parpadear. Hay varias maneras de hacerlo:
1. Tan pronto como el microcontrolador est activada, todos los LEDs se emiten luz para un segundo. La funcin de retardo est a cargo de la misma en el programa. Slo tienes que configurar retardo expresado en milisegundos. 2. Despus de un segundo, el programa entra en el bucle y permanece all mientras variable k es menor que 20. La variable se incrementa en 1 despus de cada iteracin. Dentro del bucle for, el ciclo de trabajo de los pulsos es de 5:1 (500 ms: 100 ms) y cualquier cambio de estado lgico de los pines de salida hace que todos los LED parpadeen. 3. Cuando el programa se cierra el bucle, los cambios en la lgica del Estado (PORTB 0xb 01.010.101) y el programa entra en el bucle while infinito y permanece all tanto tiempo como 1 = 1 (bucle infinito). En este circuito el estado lgico PORTB se invierte cada 200 ms.
4,4 Ejemplo 2
Utilice las instrucciones de montaje y LFINTOSC oscilador interno ...
Este ejemplo es en realidad una secuela de la anterior. Se trata de un problema poco ms complicado ... La idea es hacer que los LEDs en un abrir y cerrar PORTB lentamente. Se puede hacer mediante el establecimiento de parmetro de retardo a ser grande en la funcin de retardo. Pero tambin hay otra forma ms eficiente de hacerlo. Te acuerdas de que este microcontrolador tiene un oscilador de LFINTOSC integrada que opera en la frecuencia de 31kHz? Ahora, es hora de darle una oportunidad. El programa comienza con el bucle do-hasta y se mantiene esta memoria para 20 ciclos. Despus de cada iteracin, se proporciona retraso de 100ms, lo cual se refleja como un LED PORTB relativamente rpido parpadeo. Cuando el programa se sale de este bucle, el microcontrolador inicia mediante el
oscilador LFINTOSC como una fuente de seal de reloj. LED parpadea mucho ms lento ahora, a pesar de que el programa ejecuta el mismo do-while con 10 veces menor demora. Para demostrar una situacin potentionally peligroso, bits de control son activados por instrucciones de montaje. En pocas palabras, al entrar o salir de una secuencia de montaje en el programa, el compilador no guardar los datos en el activo del banco de RAM, lo que significa que en esta seccin del programa, la seleccin del banco depende de francos suizos se inscribe en el uso. Al volver a la seccin de programa escrito en Basic, los bits de control RP0 y RP1 deben regresar al estado que tenan antes de entrar en la secuencia de montaje. En este caso, la variable saveBank auxiliar se utiliza para guardar el estado de estos dos bits.
Header ********************************************* program example_2 ' Program name dim k as byte ' Variable k is of byte type dim saveBank as byte ' Variable saveBank is of byte type main: ' Start of program k = 0 ' Initial value of variable k ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTB = 0 ' All PORTB pins are set to 0 TRISB = 0 ' PORTB pins are configured as outputs do PORTB = not PORTB Delay_ms(100) k = k+1 loop until k=20 ' ' ' ' Invert PORTB logic state 100mS delay Increment k by 1 Remain in loop while k<20
k=0 ' Reset variable k saveBank = STATUS and %01100000 ' Save the state of bits RP0 and RP1 ' (bits 5 and 6 of the STATUS register) asm ' Start of assembly sequence bsf STATUS,RP0 ' Select memory bank containing bcf STATUS,RP1 ' the OSCCON register bcf OSCCON,6 ' Select internal oscillator LFINTOSC bcf OSCCON,5 ' with a frequency of 31KHz bcf OSCCON,4 bsf OSCCON,0 ' Microcontroller uses internal oscillator end asm ' End of assembly sequence STATUS = STATUS and %10011111 ' Bits RP0 and RP1 return their original state STATUS = STATUS or saveBank do PORTB = not PORTB Delay_ms(10) k = k+1 loop until k=20 ' ' ' ' Invert PORTB logic state 10 mS delay Increment k by 1 Remain in loop while k<20
end.
Usted ha notado que la fuente de seal de reloj se cambia sobre la marcha. Si desea asegurarse de que, quite cristal de cuarzo antes de encender el microcontrolador. El microcontrolador no empezar a funcionar debido a la Palabra de configuracin cargado con el programa requiere que el cristal de cuarzo que se preste. Si se quita este cristal ms tarde, durante una operacin, no pasar nada, es decir que no afectar al funcionamiento del microcontrolador en absoluto.
4,5 Ejemplo 3
TMR0 como contador, declarar nuevas variables, smbolos de uso, utilice un rel ...
En los dos ejemplos anteriores el microcontrolador ejecuta el programa sin verse afectada por su entorno. Prcticamente, basados en microcontroladores los dispositivos que funcionan de esta manera son muy raras (por ejemplo, un controlador de nen simple seal).Clavijas de entrada tambin se utilizan en este ejemplo. El esquema que se da en la figura de abajo, mientras que el programa est en la pgina siguiente. Todava es muy simple. Temporizador TMR0 se utiliza como un contador. La entrada del contador est conectado a un pulsador de tal manera que cualquier presin botn hace que el temporizador TMR0 para contar un pulso. Cuando el nmero de impulsos coincide con el nmero almacenado en el registro de prueba, un uno lgico (5V) aparecer en el pasador PORTD.3. Esta tensin se utiliza para activar un rel electromecnico, y esto un poco por eso se llama 'relay' en el programa. Aqu, la prueba de registro de nmero de tiendas 5. Por supuesto, puede ser cualquier nmero que se obtiene ya sea por la computacin o define como una constante. Adems, el microcontrolador puede ejecutar algn otro dispositivo en lugar de rel, mientras que un sensor puede ser usado en lugar del botn pulsador. Este ejemplo ilustra una de las aplicaciones ms comunes del microcontrolador en la industria, cuando algo se lleva a cabo tantas veces como sea necesario, entonces algo ms debe estar encendido o apagado ....
' Header****************************************************** program example_3 ' Program name symbol RELAY = PORTD.3 ' Pin PORTD.3 is named RELAY dim TEST as byte ' Variable TEST is of byte type main: ' Start of program TEST = 5 ' Constant TEST = 5 ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTA = 0 ' Reset PORTA TRISA = 0xFF ' All portA pins are configured as inputs PORTD = 0 ' Reset PORTD TRISD = %11110111 ' Pin RD3 is configured as an output, while other pins are ' configured as inputs OPTION_REG.5 = 1 ' Counter TMR0 receives pulses through the RA4 pin OPTION_REG.3 = 1 ' Prescaler rate is 1:1 TMR0 = 0 ' Reset timer/counter TMR0 while 1 if TMR0 = TEST then constant TEST? RELAY = 1 RELAY) end if wend end. ' Does the number in timer match ' Numbers match. Set the RD3 bit (output ' Remain in endless loop ' End of program
Slo un smbolo (Relay) se utiliza aqu. Se le asigna el tercer pin del PORTD en la declaracin.
Si varios pines del puerto D se conectan a los rels, la expresin anterior se puede escribir de esta manera, as:
4,6 Ejemplo 4
Utilice Timer0, Timer1 y Timer2. Utilice las interrupciones, declarar el nuevo procedimiento ...
Si usted ha ledo los ejemplos anteriores, es probable que haya notado una desventaja del uso de las demoras. En todos estos casos, el microcontrolador es "cautivo" y no hace nada. Simplemente espera a que un cierto tiempo para pasar. Tales residuos de tiempo a menudo es un lujo inaceptable y algn otro mtodo debe ser empleado aqu. Te acuerdas de la historia de los temporizadores? Las interrupciones? En este ejemplo se hace la conexin entre ellos de una manera prctica. El esquema sigue siendo el mismo y el desafo tambin. Es necesario proporcionar un retardo de tiempo suficientemente largo para observar cambios en un puerto. Temporizador TMR0 con pre-escalador asignado se utiliza para este propsito. Se genera una interrupcin en cada registro de desbordamiento del temporizador y cada incrementos de rutina de interrupcin de la variable cnt por 1.Cuando llegue a 50, el PORTB se incrementa en 1. Todo el procedimiento se lleva a cabo "entre bastidores", que permite al microcontrolador para hacer otra cosa.
' Header****************************************************** program example_4a ' Start of program dim cnt as byte ' Define variable cnt as byte sub procedure interrupt ' should ' generated cnt = cnt + 1 ' incremented by 1 TMR0 = 96 ' value INTCON = 0x20 ' end sub ' main: OPTION_REG = 0x84 ANSEL = 0 digital ANSELH = 0 TRISB = 0 outputs PORTB = 0x0 TMR0 = 96 INTCON = 0xA0 cnt = 0 while 1 if cnt = 50 then PORTB = PORTB + 1 cnt = 0 end if wend end. ' End of program This subprocedure determines what be done when an interrupt is Interrupt causes cnt to be Timer TMR0 is returned its initial Bit T0IE is set, bit T0IF is cleared End of interrupt routine
' Start of program ' Prescaler is assigned to timer TMR0 ' All I/O pins are configured as ' All PORTB pins are configured as ' ' ' ' ' ' ' ' Reset PORTB Timer T0 counts from 96 to 255 Enable interrupt TMR0 Variable cnt is assigned a 0 Endless loop Increment PORTB after 50 interrupts Increment number on PORTB by 1 Reset variable cnt
'Header****************************************************** program example_4b ' Program name dim cnt as byte ' Define variable cnt sub procedure interrupt cnt = cnt+1 incremented by 1 PIR1.TMR1IF = 0 TMR1H = 0x80 returned TMR1L = 0x00 ' Define interrupt subprocedure ' Interrupt causes cnt to be ' Reset bit TMR1IF ' TMR1H and TMR1L timer registers are ' their initial values
end sub main: ANSEL = 0 digital ANSELH = 0 PORTB = 0xF0 TRISB = 0 T1CON = 1 PIR1.TMR1IF = 0 TMR1H = 0x80 TMR1L = 0x00 PIE1.TMR1IE = 1 cnt = 0 INTCON = 0xC0 while 1 if cnt = 76 then interrupts PORTB = not PORTB cnt = 0 end if wend end.
' End of interrupt routine ' Start of program ' All I/O pins are configured as ' ' ' ' ' Initial value of PORTB bits PORTB pins are configured as outputs Set timer TMR1 Reset bit TMR1IF Set initial value for timer TMR1
' Enable interrupt on overflow ' Reset variable cnt ' Enable interrupt (bits GIE and PEIE) ' Endless loop ' Change PORTB state after 76 ' Number in PORTB is inverted ' Reset variable cnt
En este caso, una interrupcin se habilita despus de que el temporizador registro TMR1 (TMR1H y TMR1L) de desbordamiento. La combinacin de bits cambiantes en PORTB es diferente de la que en el ejemplo anterior.
'Header****************************************************** program example_4c ' Program name dim cnt as byte ' Define variable cnt as byte sub procedure Replace PORTB = not PORTB end sub sub procedure interrupt if PIR1.TMR2IF then cnt = cnt +1 PIR1.TMR2IF = 0 TMR2 = 0 end if end sub ' Define procedure Replace ' Define new procedure Replace ' Procedure inverts port state ' ' ' ' ' Define interrupt subprocedure If bit TMR2IF = 1, Increment variable cnt by 1 Reset bit and reset register TMR2
main: cnt = 0 ANSEL = 0 digital ANSELH = 0 PORTB = %10101010 TRISB = 0 outputs T2CON = 0xFF TMR2 = 0 PIE1.TMR2IE = 1 INTCON = 0xC0 while 1 if cnt > 30 then interrupts Replace state cnt = 0 end if wend end.
' Start of program ' Reset variable cnt ' All I/O pins are configured as ' Logic state on PORTB pins ' All PORTB pins are configured as ' ' ' ' Set timer T2 Initial value of timer register TMR2 Enable interrupt Set bits GIE and PEIE
' Endless loop ' Change PORTB after more than 30 ' Function Replace inverts the PORTB ' Reset variable cnt
Esta vez, se genera una interrupcin despus de temporizador registro de desbordamiento TMR2 se produce. El procedimiento Reemplazar, que normalmente no pertenece a mikroBasic, se utiliza en este ejemplo para invertir puerto estado pasadores.
4,7 Ejemplo 5
Utilice el temporizador perro guardin
Este ejemplo ilustra cmo el temporizador de reloj perro no debe ser utilizado. Un comando que se utiliza para reiniciar el contador se ha dejado intencionadamente en el bucle principal del programa, lo que le permiti ganar la batalla del tiempo y hacer que el microcontrolador que se restablezca. Como resultado, el microcontrolador se restablece cada vez, que es indicado por los LEDs PORTB parpadear.
'Header****************************************************** program example_5 ' Program name main: ' Start of program OPTION_REG = 0x0E ' Prescaler is assigned to timer WDT (1:64) asm CLRWDT ' Assembly command to reset WDT timer end asm PORTB = 0x0F ' Initial value of the PORTB register TRISB = 0 ' All PORTB pins are configured as outputs Delay_ms(300) ' 30mS delay PORTB = 0xF0 ' Port PORTB value different from initial while 1 ' Endless loop. Program remains here until WDT wend ' timer resets the microcontroller end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesaria para que el temporizador de vigilancia mediante la seleccin deltemporizador Watchdog - opcin Activado en m programador.
4.8 Ejemplo 6
Mdulo CCP1 como un generador de seal PWM
Este ejemplo ilustra el uso de CCP1 mdulo en modo PWM. Para hacerlo ms interesante, la anchura de impulsos de salida P1A (PORTC, 2) se puede cambiar con los pulsadores simblicamente marcado como "oscura" y "brillante", mientras que la anchura conjunto es visible como una combinacin binaria en PORTB. El funcionamiento de este mdulo est bajo el control de los procedimientos pertenecientes a la Biblioteca especializada PWM. Tres de ellos se utilizan aqu:
longint )
Parmetro de frecuencia fija la frecuencia de la seal PWM expresada en Herz. En este ejemplo es 5 KHz. 2. PWM1_Start tiene el prototipo: sub procedure PWM1_Start() 3. PWM1_Set_Duty tiene el prototipo: sub
' Header ****************************************************** program example_6 ' Program name dim current_duty, old_duty, oldstate as byte ' Define variables current_duty ' old_duty and oldstate main: ' Start of program ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTA = 255 ' PORTA initial state TRISA = 255 ' All PORTA pins are configured as inputs PORTB = 0 ' Initial state of PORTB TRISB = 0 ' All PORTB pins are configured as outputs
PORTC initial state All PORTC pins are configured as outputs PWM module initialization (5 KHz) Initial value of variable current_duty Reset variable old_duty Start PWM1 module
while 1 ' Endless loop if oldstate and Button(PORTA, 0,1,1) then ' If the button connected to RA0 is pressed current_duty = current_duty + 1 ' increment variable current_duty if Button(PORTA, 0, 1, 1) then oldstate = 255 end if end if if oldstate and Button(PORTA, 1,1,1) then ' If the button connected to RA1 is pressed current_duty = current_duty - 1 ' decrement value current_duty if Button(PORTA, 1, 1, 1) then oldstate = 255 end if end if if old_duty <> current_duty then and old_duty are not PWM1_Set_Duty(current_duty) a new value, old_duty = current_duty value PORTB = old_duty PORTB end if Delay_ms(200) wend end.
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:
' If current_duty ' equal set PWM to ' save the new ' and show it on
PWM Botn
4,9 Ejemplo 7
Use un convertidor A / D
Un convertidor A / D, previsto en el PIC16F887 se utiliza en este ejemplo. Es necesario decir que todo es sencillo? Una seal analgica variable se aplica a la patilla AN2, mientras que el 10 - resultado poco de conversin se muestra en los puertos PORTB y PORD (8 bits menos significativos en PORTD y 2 MSB en PORTB). GND se utiliza como una tensin de referencia Vref negativo, mientras que el VCC se utiliza como una referencia de tensin positiva. Si utiliza una tensin varriable como Vref + (refirase a la parte discontinua del esquema) que ser capaz de "estirar y encoger" el rango de medicin de tensin.
En otras palabras, el convertidor A / D siempre genera un nmero binario de 10-bits, lo que significa que detecta 1024 niveles de voltaje (210 = 1.024) en total. La diferencia entre dos niveles de tensin no es siempre la misma. Cuanto menor es la diferencia entre Vref + y Vref-, menor es la diferencia entre dos niveles de 1024. Como se puede ver, el convertidor A / D es capaz de detectar ligeros cambios en el voltaje.
'Header****************************************************** program example_7 ' Program name dim temp_res as word ' Variable temp_res is of word type main: ' Start of program ANSEL = 0x0C ' Pin AN2 is configured as analog TRISA = 0xFF ' All PORTA pins are configured as inputs
Other pins are configured as digital PORTB pins RB7 and RB6 are configured as outputs All PORTD pins are configured as outputs Positive voltage reference is VCC.
while 1 ' Endless loop temp_res = ADC_Read(2) ' Result of A/D conversion is copied to temp_res PORTD = temp_res ' 8 LSBs are moved to PORTD PORTB = temp_res >> 2 ' 2 MSBs are moved to bits RB6 and RB7 wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca de ADC en el Library Manager antes de compilar:
ADC
4,10 Ejemplo 8
El uso de memoria EEPROM
Este ejemplo ilustra escribir y leer desde incorporada en la memoria EEPROM. El programa funciona como sigue. El ciclo principal se lee la ubicacin de la memoria EEPROM en la direccin 5. El programa entra entonces en un bucle sin fin en el que PORTB se incrementa y el estado de PORTA.2 entrada se comprueba. En el momento de pulsar la tecla marcada MEMO, un nmero almacenado en PORTB ser guardado en la memoria EEPROM en la direccin 5 y leer directamente de l y se muestra en PORTD en formato binario.
'Header****************************************************** program example_8 ' Program name main: ' Start of program ANSEL = 0 ' All I/O pins are configured as digital ANSELH = 0 PORTB = 0 ' PORTB initial value TRISB = 0 ' All PORTB pins are configured as outputs PORTD = 0 ' PORTB initial value TRISD = 0 ' All PORTD pins are configured as outputs TRISA = 0xFF ' All PORTA pins are configured as inputs
PORTD = EEPROM_Read(5) ' Read EEPROM memory at address 5 while 1 ' Endless loop PORTB = PORTB + 1 ' Increment PORTB by 1 Delay_ms(100) ' 100mS delay while not PORTA.B2 ' Remain in this loop as long as the button is pressed if not PORTA.B2 then EEPROM_Write(5,PORTB) ' If MEMO is pressed, save PORTB PORTD = EEPROM_Read(5) ' Read written data end if wend wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la librera EEPROM en el Library Manager antes de compilar:
EEPROM
Con el fin de comprobar si este programa funciona correctamente, basta con pulsar el botn MEMO y luego apagar el microcontrolador.Despus de reiniciarlo, el programa mostrar el PORTD el valor almacenado en la memoria EEPROM en addrsess 5. Recuerde que en el momento de la escritura, este valor se muestra en PORTB.
4,11 Ejemplo 9
Cuatro dgitos LED contra, la multiplexacin
El microcontrolador funciona como un contador de cuatro dgitos aqu. Variable i se incrementa (lo suficientemente lento como para ser notado) y su valor se muestra en un display de cuatro dgitos LED (9999-0). El objetivo es convertir un nmero binario a decimal, que se dividi en cuatro dgitos (miles, centenas, decenas y unidades). Dado que los segmentos de la pantalla LED estn conectados en paralelo, es necesario asegurarse de que cambian lo suficientemente rpido para hacer impresin de emisin de luz simultnea (tiempo multiplexado por divisin). En este ejemplo, el temporizador TMR0 est a cargo de la multiplexacin de tiempo, mientras que la funcin de mscara se utiliza para convertir un nmero binario a decimal.
'Header****************************************************** program example_9 ' Program name dim shifter, portd_index as byte ' Variables shifter and portd_index are of byte type digit, number as word ' Variables digit and number are of word type portd_array as word[4] ' Array portd_array has 4 members of word type sub function mask (dim num as Word) as Word ' Subroutine for masking select case num ' used to convert binary case 0 result = $3F ' numbers into appropriate case 1 result = $06 ' combination of bits to be case 2 result = $5B ' displayed on LED display case 3 result = $4F case 4 result = $66 case 5 result = $6D case 6 result = $7D case 7 result = $07 case 8 result = $7F case 9 result = $6F end select ' Case end end sub ' End of subroutine sub procedure interrupt ' Start of interrupt routine PORTA = 0 ' Turn off all 7-segment displays PORTD = portd_array [portd_index] ' Send appropriate value to PORTD PORTA = shifter ' Turn on appropriate 7-segment display shifter = shifter << 1 ' Move shifter to the next digit
if (portd_index > 3) then portd_index = 0 ' Turn on 1st, turn off 4th 7segment display end if TMR0 = 0 T0IF_bit = 0 end sub main: ANSEL = 0 ANSELH = 0 OPTION_REG = $80 prescaler) digit = 0 portd_index = 0 shifter = 1 TMR0 = 0 INTCON = $A0 PORTA = 0 TRISA = 0 PORTD = 0 TRISD = 0 number = 6789 ' Reset TIMER0 value ' Clear Timer0 interrupt flag ' End of interrupt routine ' Start of program ' Configure analog pins as digital I/O ' Timer0 settings (Timer0 work as timer with ' ' ' ' ' ' ' ' ' ' Initial value of variable Turn on 1st LED display Initial value of variable Clear Timer0 Enable interrupt with GIE Clear PORTA Set PORTA as output Clear PORTD Set PORTD as output Some initial value on LED ' ' ' ' ' ' ' ' digit shifter and T0IE bits
display
while TRUE ' Endless loop digit = number / 1000 portd_array[3] = mask(digit) digit = (number / 100) mod 10 portd_array[2] = mask(digit) digit = (number / 10) mod 10 portd_array[1] = mask(digit) digit = number mod 10 portd_array[0] = mask(digit) Delay_ms(1000) Inc(number) if (number > 9999) then number = 0 end if wend end. ' End of program
Extract thousands and store it to PORTD Extract hundreds and store it to PORTD Extract tens and store it to PORTD Extract ones and store it to PORTD
' One second delay ' Increment number ' Start to count from zero
4,12 Ejemplo 10
Utilice la pantalla LCD
Este ejemplo ilustra el uso de una pantalla LCD alfanumrica. Las bibliotecas de funciones que este programa sea ms sencillo. Dos mensajes escritos en dos lneas en la pantalla: mikroElektronika LCD de ejemplo Dos segundos ms tarde, el segundo mensaje se sustituye con la tensin presente en la entrada convertidor A / D (el pasador RA2). Por ejemplo: mikroElektronika Voltaje: 3.141V De todos modos, la temperatura actual o algn otro valor medido se puede visualizar en vez de la tensin.
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:
ADC LCD
'Header*************************************************** *** program example_10 ' Program name dim LCD_RS as sbit at RB4_bit ' Lcd module connections LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit
as as as as
at at at at
dim text as string [16] type dim ch, adc_rd as word word type dim tlong as longword type main: TRISB = 0 configured as outputs PORTB = 0xFF INTCON = 0 ANSEL = 0x04 analog input TRISA = 0x04 ANSELH = 0 digital Lcd_Init() Lcd_Cmd(_LCD_CURSOR_OFF) Lcd_Cmd(_LCD_CLEAR) text = "mikroElektronika" Lcd_Out(1,1,text) first line text = "LCD example" Lcd_Out(2,1,text) the second line ADCON1 = 0x80 TRISA = 0xFF as inputs Delay_ms(2000) text = "Voltage=" while 1 adc_rd = ADC_Read(2) input. Lcd_Out(2,1,text) line tlong = adc_rd * 5000 millivolts tlong = tlong / 1023 ch = (tlong / 1000) mod millivolts)
' Variable text is of string ' Variables ch and adc_rd are of ' Variable tlong is of longword ' Start of program ' All port PORTB pins are ' All interrupts disabled ' Pin RA2 is configured as an ' Rest of pins is configured as ' LCD display initialization ' LCD command (cursor off) ' LCD command (clear LCD) ' Define the first message ' Write the first message in the ' Define the second message ' Write the second message in ' A/D voltage reference is VCC ' All PORTA pins are configured ' Define the third message ' Endless loop ' A/D conversion. Pin RA2 is an ' Write result in the second ' Convert the result in ' 0..1023 -> 0-5000mV 10 ' Extract volts (thousands of
' from result Lcd_Chr(2,9,48+ch) ' Write result in ASCII format Lcd_Chr_CP(".") ' Write the decimal pint ch = (tlong / 100) mod 10 ' Extract hundreds of millivolts
Lcd_Chr_CP(48+ch) ch = (tlong / 10) mod 10 Lcd_Chr_CP(48+ch) ch = tlong mod 10 millivolts Lcd_Chr_CP(48+ch) Lcd_Chr_CP("V") Delay_ms(1) wend end. ' End of program
Write result in ASCII format Extract tens of millivolts Write result in ASCII format Extract digits for
' Write result in ASCII format ' Write a mark for voltage "V" ' 1mS delay
4,13 Ejemplo 11
Comunicacin serie RS232
Este ejemplo ilustra el uso de mdulo EUSART del microcontrolador. La conexin entre el microcontrolador y un PC se elabora en cumplimiento con el estndar de comunicacin RS232. El programa funciona como sigue. Cada byte recibido la comunicacin serie se muestra mediante diodos LED conectados al PORTB y se enva automticamente al remitente sobre el mismo. La forma ms fcil de probar el funcionamiento del programa es el uso de un programa estndar de Windows llamado Hyper Terminal.
' Header****************************************************** program example_11 ' Program name dim i as byte ' Variable is of byte type main: ' Start of program UART1_Init(19200) ' Initialize USART module ' (8 bit, 19200 baud rate, no parity bit...) while 1 ' Endless if UART1_Data_Ready() then i = UART1_Read() UART1_Write(i) end if wend end. loop ' If data has been received ' read it ' and send it back
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca UART en el Library Manager antes de compilar:
UART
4,14 Ejemplo 12
Medir la temperatura con el sensor DS1820. El uso del protocolo '1-wire '...
La medicin de temperatura es una de las operaciones ms comunes realizadas por el microcontrolador. Un sensor de temperatura DS1820 se utiliza aqu para medir. Es capaz de medir la temperatura dentro del intervalo de -55 C a 125 C con un 0,5 C de exactitud.Para transferir datos al microcontrolador, un tipo especial de comunicacin serial denominado 1-wire se utiliza. Debido a su aplicacin simple y ancho, tales sensores son dirigidos y controlados por las funciones almacenados en la biblioteca One_Wire.
Ow_Reset se utiliza para reiniciar el sensor; Ow_Read se utiliza para recibir los datos del sensor, y Ow_Write se utiliza para enviar comandos al sensor.
Aqu puede ver la ventaja de utilizar las bibliotecas con listas para usar las funciones. Usted, evidentemente, no es necesario estudiar la documentacin aportada por el fabricante a fin de utilizar este sensor adecuadamente. Es suficiente para copiar las funciones apropiadas para el programa. Si usted quiere saber cmo cualquiera de estas funciones se declara, simplemente haga clic derecho sobre l y seleccione la opcin de ayuda.
' Header****************************************************** program example_12 ' Program name dim LCD_RS as sbit at RB4_bit ' Lcd module connections LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB0_bit LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB3_bit ' End Lcd module connections ' Set TEMP_RESOLUTION to the corresponding resolution of the DS18x20 sensor in use: ' 18S20: 9 (default setting can be 9,10,11 or 12); 18B20: 12 const TEMP_RESOLUTION as byte = 9 ' Constant TEMP_RESOLUTION is of byte type dim text as char[9] ' Variable text is of char type temp as word ' Variable temp is of word type sub procedure Display_Temperature( dim temp2write as word ) const RES_SHIFT = TEMP_RESOLUTION - 8 dim temp_whole as byte ' Variable temp_whole is of byte type temp_fraction as word ' Variable temp_fraction is of word type text = "000.0000" if (temp2write and 0x8000) then ' Check if temperature is negative text[0] = "-" temp2write = not temp2write + 1 end if temp_whole = word(temp2write >> RES_SHIFT) ' Extract temp_whole if ( temp_whole div 100 ) then ' Convert temp_whole to characters text[0] = temp_whole div 100 + 48 else text[0] = "0" end if text[1] = (temp_whole div 10) mod 10 + 48 ' tens text[2] = temp_whole mod 10 + 48 ' ones temp_fraction = word(temp2write << (4-RES_SHIFT)) ' temp_fraction temp_fraction = temp_fraction and 0x000F ' convert it to temp_fraction = temp_fraction * 625 ' int text[4] = word(temp_fraction div 1000) + 48 ' thousands text[5] = word((temp_fraction div 100) mod 10 + 48) hundreds text[6] = word((temp_fraction div 10) mod 10 + 48) tens Extract Extract Extract and unsigned Extract ' Extract ' Extract
text[7] = word(temp_fraction mod 10) + 48 ones Lcd_Out(2, 5, text) temperature on Lcd end sub main: ' Start of program ANSEL = 0 ' Configure analog pins as digital I/O ANSELH = 0 text = "000.0000" Lcd_Init() ' Initialize Lcd Lcd_Cmd(_LCD_CLEAR) ' Clear Lcd Lcd_Cmd(_LCD_CURSOR_OFF) ' Turn off cursor Lcd_Out(1, 1, " Temperature: ")
Lcd_Chr(2,13,178) ' Print degree character, "C" for Centigrades ' Different LCD displays have different char code for degree Lcd_Chr(2,14,"C") ' If you see greek letter alpha type 178 instead of 223 while 1 ' Temperature is read in the main loop Ow_Reset(PORTE, 2) ' Onewire reset signal Ow_Write(PORTE, 2, 0xCC) ' Issue command SKIP_ROM Ow_Write(PORTE, 2, 0x44) ' Issue command CONVERT_T Delay_us(120) Ow_Reset(PORTE, 2) Ow_Write(PORTE, 2, 0xCC) ' Issue command SKIP_ROM Ow_Write(PORTE, 2, 0xBE) ' Issue command READ_SCRATCHPAD temp = Ow_Read(PORTE, 2) temp = (Ow_Read(PORTE, 2) << 8) + temp Display_Temperature(temp) ' Format and display result on Lcd Delay_ms(520) wend end. ' 520 mS delay ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:
One_Wire LCD
4,15 Ejemplo 13
La generacin de sonido, librera de sonidos ...
Las seales de audio a menudo se utiliza cuando es necesario llamar la atencin del usuario para hacer algo, para confirmar que uno de los botones es presionado, para advertir que los valores mnimos y mximos se alcanzan, etc Puede ser slo un "beep" como seal de as como melodas ms largos o ms cortos. Este ejemplo muestra cmo generar un sonido con las funciones que pertenecen a la biblioteca de sonido.
Adicionalmente a estas funciones, la funcin del botn tambin se utiliza para probar los pulsadores.
'Header****************************************************** program example_13 ' Program name sub procedure Tone1() Sound_Play(659, 250) ' Frequency = 659Hz, duration = 250ms end sub sub procedure Tone2() Sound_Play(698, 250) ' Frequency = 698Hz, duration = 250ms end sub sub procedure Tone3() Sound_Play(784, 250) ' Frequency = 784Hz, duration = 250ms end sub
sub procedure Melody() ' Play the melody "Yellow house" Tone1() Tone2() Tone3() Tone3() Tone1() Tone2() Tone3() Tone3() Tone1() Tone2() Tone3() Tone1() Tone2() Tone3() Tone3() Tone1() Tone2() Tone3() Tone3() Tone3() Tone2() Tone2() Tone1() end sub sub procedure ToneA() ' Tones used in Melody2 function Sound_Play( 880, 50) end sub sub procedure ToneC() Sound_Play(1046, 50) end sub sub procedure ToneE() Sound_Play(1318, 50) end sub sub procedure Melody2() ' Play Melody2 dim counter as byte for counter = 9 to 1 step -1 ToneA() ToneC() ToneE() next counter end sub main: ' Start of program ANSEL = 0 ANSELH = 0 ' Configure analog pins as digital I/O
C1ON_bit = 0 ' Disable comparators C2ON_bit = 0 TRISB = 0xF0 ' Configure RB7..RB4 as inputs and RB3 as output Sound_Init(PORTD, 3) Sound_Play(880, 5000) while TRUE ' Endless loop if (Button(PORTB,7,1,1)) then ' If PORTB.7 is pressed play Tone1 Tone1() while (RB7_bit <> 0) nop ' Wait for the button to be released wend end if if (Button(PORTB,6,1,1)) then ' If PORTB.6 is pressed play Tone1 Tone2()
while (RB6_bit <> 0) nop ' Wait for the button to be released wend end if if (Button(PORTB,5,1,1)) then ' If PORTB.5 is pressed play Tone1 Melody2() while (RB5_bit <> 0) nop ' Wait for the button to be released wend end if if (Button(PORTB,4,1,1)) then ' If PORTB.4 is pressed play Tone1 Melody() while (RB4_bit <> 0) nop ' Wait for the button to be released wend end if wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:
Botn Sonido
4,16 Ejemplo 14
Use pantalla LCD grfica
Una pantalla grfica LCD (GLCD) proporciona un mtodo avanzado para la visualizacin de los mensajes visuales. Mientras que la pantalla LCD de carcter slo puede mostrar caracteres alfanumricos, el GLCD tambin puede mostrar los mensajes en forma de dibujos y mapas de bits. Los ms comnmente utilizados grfica LCD tiene una resolucin de pantalla de 128x64 pxeles. El contraste GLCD se puede ajustar por medio de potencimetro P1. Aqu, el GLCD muestra un camin del mapa de bits de los cuales se almacena en la truck_bmp.mbas archivo.
'Header****************************************************** program example_14 ' Program name dim GLCD_DataPORT as byte at PORTD dim GLCD_CS1 as sbit at RB0_bit ' Glcd module connections GLCD_CS2 as sbit at RB1_bit GLCD_RS as sbit at RB2_bit GLCD_RW as sbit at RB3_bit GLCD_EN as sbit at RB4_bit GLCD_RST as sbit at RB5_bit dim GLCD_CS1_Direction as sbit at TRISB0_bit GLCD_CS2_Direction as sbit at TRISB1_bit GLCD_RS_Direction as sbit at TRISB2_bit GLCD_RW_Direction as sbit at TRISB3_bit GLCD_EN_Direction as sbit at TRISB4_bit GLCD_RST_Direction as sbit at TRISB5_bit ' End Glcd module
connections dim counter as byte someText as char[18] sub procedure Delay2S() ' 2 seconds delay sub function Delay_ms(2000) end sub main: ANSEL = 0 ANSELH = 0 ' Start of program ' Configure analog pins as digital I/O
Glcd_Init() ' Initialize Glcd Glcd_Fill(0x00) ' Clear Glcd while TRUE Glcd_Image(@truck_bmp) Delay2S() delay2S() Glcd_Fill(0x00) ' Endless loop ' Draw image ' Clear Glcd
Glcd_Box(62,40,124,63,1) ' Draw box Glcd_Rectangle(5,5,84,35,1) ' Draw rectangle Glcd_Line(0, 0, 127, 63, 1) ' Draw line Delay2S() counter = 5 while (counter <= 59) ' Draw horizontal and vertical lines Delay_ms(250) Glcd_V_Line(2, 54, counter, 1) Glcd_H_Line(2, 120, counter, 1) Counter = counter + 5 wend Delay2S() Glcd_Fill(0x00) ' Clear Glcd Glcd_Set_Font(@Character8x7, 8, 7, 32) ' Choose font "Character8x7" Glcd_Write_Text("mikroE", 1, 7, 2) ' Write string for counter = 1 to 10 ' Draw circles Glcd_Circle(63,32, 3*counter, 1) next counter Delay2S() Glcd_Box(10,20, 70,63, 2) Delay2S() Glcd_Fill(0xFF) Glcd_Set_Font(@Character8x7, 8, 7, 32) someText = "8x7 Font" ' Draw box ' Fill Glcd ' Change font
Glcd_Write_Text(someText, 5, 0, 2) delay2S() Glcd_Set_Font(@System3x5, 3, 5, 32) someText = "3X5 CAPITALS ONLY" Glcd_Write_Text(someText, 60, 2, 2) delay2S() Glcd_Set_Font(@font5x7, 5, 7, 32) someText = "5x7 Font" Glcd_Write_Text(someText, 5, 4, 2) delay2S()
' Write string ' Change font ' Write string ' Change font ' Write string
Glcd_Set_Font(@FontSystem5x7_v2, 5, 7, 32) ' Change font someText = "5x7 Font (v2)" Glcd_Write_Text(someText, 5, 6, 2) ' Write string delay2S() wend end. ' End of program
truck_bmp.mbas file:
module bitmap ' Module with bitmap code const truck_bmp as byte[1024] = (0,0,0,0,0,248,8,8,8,8,8,8,12,12,12,12,12,10,10,10,10,10,10,9,9 ,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,137,137,137,137,137,137,137,137,137,137,137,1 37,137,9,9,9,9,9, 9,9,9,9,9,9,13,253,13,195,6,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,255,0, 0,0,0,0,0,0,0,0,0,240,240,240,240,240,224,224,240,240,240,240,2 40,224,192,192,22 4,240,240,240,240,240,224,192,0,0,0,255,255,255,255,255,195,195 ,195,195,195,195, 195,3,0,0,0,0,0,0,0,0,0,0,0,0,255,240,79,224,255,96,96,96,32,32 ,32,32,32,32,32,3 2,32,32,32,32,32,64,64,64,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,255,25 5,255,255,255,0,0 ,0,0,255,255,255,255,255,0,0,0,0,255,255,255,255,255,0,0,0,255, 255,255,255,255,1 29,129,129,129,129,129,129,128,0,0,0,0,0,0,0,0,0,0,0,0,255,1,24 8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,16,224,24,36,196,70,130,130,133,217,102,112,160,19 2,96,96,32,32,160 ,160,224,224,192,64,64,128,128,192,64,128,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 63,96,96,96,224,96,96,96,96,96,96,99,99,99,99,99,96,96,96,96,99 ,99,99,99,99,96,9 6,96,96,99,99,99,99,99,96,96,96,99,99,99,99,99,99,99,99,99,99,9 9,99,99,96,96,96,
96,96,96,96,64,64,64,224,224,255,246,1,14,6,6,2,2,2,2,2,2,2,2,2 ,2,2,130,67,114,6 2,35,16,16,0,7,3,3,2,4,4,4,4,4,4,4,28,16,16,16,17,17,9,9,41,112 ,32,67,5,240,126, 174,128,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,12 7,127,127,127,255 ,255,247,251,123,191,95,93,125,189,189,63,93,89,177,115,243,229 ,207,27,63,119,25 5,207,191,255,255,255,255,255,255,255,255,127,127,127,127,127,1 27,127,127,255,25 5,255,127,127,125,120,120,120,120,120,248,120,120,120,120,120,1 20,248,248,232,14 3,0,0,0,0,0,0,0,0,128,240,248,120,188,220,92,252,28,28,60,92,92 ,60,120,248,248,9 6,192,143,168,216,136,49,68,72,50,160,96,0,0,0,0,0,0,0,0,0,128, 192,248,248,248,2 48,252,254,254,254,254,254,254,254,254,254,254,254,255,255,255, 255,255,246,239,2 08,246,174,173,169,128,209,208,224,247,249,255,255,252,220,240, 127,255,223,255,2 55,255,255,255,255,254,254,255,255,255,255,255,255,255,254,255, 255,255,255,255,2 55,255,254,254,254,254,254,254,254,254,254,254,254,254,254,254, 255,255,255,255,2 55,255,254,255,190,255,255,253,240,239,221,223,254,168,136,170, 196,208,228,230,2 48,127,126,156,223,226,242,242,242,242,242,177,32,0,0,0,0,0,0,0 ,0,0,0,1,1,1,1,3, 3,3,7,7,7,7,7,15,15,15,7,15,15,15,7,7,15,14,15,13,15,47,43,43,4 3,43,43,47,111,23 9,255,253,253,255,254,255,255,255,255,255,191,191,239,239,239,1 91,255,191,255,25 5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2 55,255,255,255,25 5,255,255,255,255,255,255,127,127,127,127,255,255,191,191,191,1 91,255,254,255,25 3,255,255,255,251,255,255,255,127,125,63,31,31,31,31,31,31,63,1 5,15,7,7,3,3,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 ,1,3,3,3,11,11,11 ,11,7,3,14,6,6,6,2,18,19,19,3,23,21,21,17,1,19,19,3,6,6,14,15,1 5,7,15,15,15,11,2 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) implements end. ' End of module
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar la biblioteca GLCD en el Administrador de la Biblioteca antes de la compilacin. Adems, es necesario incluir el Bitmap.mbas documento en el proyecto.
4,17 Ejemplo 15
El uso de un panel tctil
Un panel tctil es un fino, autoadhesivo panel transparente colocado sobre la pantalla de un LCD grfico. Es muy sensible a la presin de modo que incluso un toque suave hace que algunos cambios en la seal de salida. Hay unos pocos tipos de panel tctil. La ms simple es un panel tctil resistivo.
Se compone de dos lminas transparentes rgidas, formando un "sandwich" estructura, que tienen capas resistivas en sus lados interiores. La resistencia de estas capas generalmente no excede de 1K. Los lados opuestos de estas lminas tienen contactos disponibles para su uso a travs de un cable plano.
El proceso de determinacin de las coordenadas del punto en el que se pulsa el panel tctil se puede dividir en dos etapas. El primero es la determinacin de la coordenada X y la segunda es la determinacin de la coordenada Y del punto. Con el fin de determinar la coordenada X, es necesario conectar el contacto izquierdo en la superficie del suelo a una y el contacto adecuado para la fuente de alimentacin. Esto permite un divisor de tensin que se forman prensando el panel tctil. El valor del divisor se lee en el contacto con el fondo de la tensin superficial B. puede ir dentro del rango de 0 V a la fuente de alimentacin (5V) y depende de la coordenada X. Si el punto est ms cerca del contacto izquierdo de la superficie A, la tensin ser ms cercano a 0V.
Con el fin de determinar la coordenada Y, es necesario conectar el contacto con el fondo en la superficie B a tierra, y el contacto superior a la fuente de alimentacin. En este caso, el voltaje se lee en el contacto izquierdo de la superficie A. Con el fin de conectar un panel tctil al microcontrolador es necesario proporcionar un circuito de control del panel tctil. Por medio de este circuito, el microcontrolador conecta los contactos adecuados del panel tctil al suelo y la fuente de alimentacin (como se describi anteriormente) a fin de determinar las coordenadas X e Y. El contacto inferior de la superficie B y el contacto izquierdo de la superficie A estn conectados al microcontrolador es un convertidor A / D. Las coordenadas X e Y se determina midiendo la tensin en estos contactos, respectivamente. El programa relacionado describe un men en la pantalla grfica LCD, vuelve el circuito de control del panel tctil de encendido / apagado (panel sensible al tacto de conduccin) y lee los resultados de la conversin A / D, que en realidad representan las coordenadas X e Y del punto. Sobre la base de estas coordenadas es posible decidir lo que quiere el microcontrolador que hacer. En este ejemplo, el microcontrolador se activa / desactiva dos pines digitales conectados a los LEDs A y B. Funciones pertenecientes a la GLCD, librares Glcd_Fonts y ADC se utilizan en este ejemplo. Como la superficie del panel tctil es ligeramente ms grande que la superficie de la pantalla LCD grfico, es necesario realizar la calibracin del software del panel de toque con el fin de proporcionar una mayor precisin al determinar las coordenadas
'Header****************************************************** program example_15 ' Name of program dim GLCD_DataPORT as byte at PORTD ' GLCD module connections dim GLCD_CS1 as sbit at RB0_bit GLCD_CS2 as sbit at RB1_bit GLCD_RS as sbit at RB2_bit GLCD_RW as sbit at RB3_bit GLCD_EN as sbit at RB4_bit GLCD_RST as sbit at RB5_bit dim GLCD_CS1_Direction as sbit at TRISB0_bit GLCD_CS2_Direction as sbit at TRISB1_bit GLCD_RS_Direction as sbit at TRISB2_bit GLCD_RW_Direction as sbit at TRISB3_bit
GLCD_EN_Direction as sbit at TRISB4_bit GLCD_RST_Direction as sbit at TRISB5_bit ' End Glcd module connections dim x_coord, y_coord, x_coord128, y_coord64 as longint ' Scaled x-y position sub function GetX() as word PORTC.0 = 1 drive on, TOP drive off) PORTC.1 = 0 Delay_ms(5) result = ADC_Read(0) end sub sub function GetY() as word PORTC.0 = 0 drive off, TOP drive on) PORTC.1 = 1 Delay_ms(5) result = ADC_Read(1) end sub ' Reading X ' DRIVEA = 1 (LEFT drive on, RIGHT ' DRIVEB = 0 (BOTTOM drive off) ' READ-X (BOTTOM) ' Reading Y ' DRIVEA = 0 (LEFT drive off, RIGHT ' DRIVEB = 1 (BOTTOM drive on) ' READ-X (LEFT)
main: ' Start of program PORTA = 0x00 TRISA = 0x03 ' RA0 i RA1 are analog inputs ANSEL = 0x03 ANSELH = 0 ' Configure other analog pins as digital I/O PORTC = 0 TRISC = 0 ' PORTC pins are configured as outputs
Glcd_Init() ' Glcd_Init_EP5 Glcd_Set_Font(@font5x7, 5, 7, 32) ' Choose font size 5x7 Glcd_Fill(0) ' Clear GLCD Glcd_Write_Text("TOUCHPANEL EXAMPLE",10,0,1) Glcd_Write_Text("MIKROELEKTRONIKA",17,7,1) Glcd_Rectangle(8,16,60,48,1) ' Outline two buttons on GLCD: Glcd_Rectangle(68,16,120,48,1) Glcd_Box(10,18,58,46,1) Glcd_Box(70,18,118,46,1) Glcd_Write_Text("BUTTON1",14,3,0) Glcd_Write_Text("RC6 OFF",14,4,0) Glcd_Write_Text("BUTTON2",74,3,0) Glcd_Write_Text("RC7 OFF",74,4,0) while TRUE ' Read X-Y and convert it to 128x64 space x_coord = GetX() y_coord = GetY() x_coord128 = (x_coord * 128) / 1024 y_coord64 = 64 -((y_coord *64) / 1024)
' If BUTTON1 is selected: if ((x_coord128 >= 10) and (x_coord128 <= 58) and (y_coord64 >= 18) and (y_coord64 <= 46)) then if(PORTC.6 = 0) then PORTC.6 = 1 Glcd_Write_Text("RC6 ON ",14,4,0) else PORTC.6 = 0 Glcd_Write_Text("RC6 OFF",14,4,0) end if end if ' If BUTTON2 is selected: if ((x_coord128 >= 70) and (x_coord128 <= 118) and (y_coord64 >= 18) and (y_coord64 <= 46)) then if(PORTC.7 = 0) then PORTC.7 = 1 Glcd_Write_Text("RC7 ON ",74,4,0) else PORTC.7 = 0 Glcd_Write_Text("RC7 OFF",74,4,0) end if end if Delay_ms(100) wend ' While true end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar:GLCD ADC C_Stdlib
4.18 Ejemplo 16
Utilice un teclado 4x4
Un teclado es slo un conjunto de pulsadores conectados de tal manera para formar los filas 'y' columnas ', reduciendo as un nmero de pines I / O necesarias para su conexin. Un teclado con 16 pulsadores dispuestos en 4 filas y 4 columnas se utiliza en este ejemplo. El teclado 4x4 biblioteca contiene todas las funciones necesarias para la lectura de este teclado, as como para inicializar el puerto que est conectado. A fin de demostrar el funcionamiento del teclado 4x4, el mensaje se muestra en una pantalla LCD.
'Header****************************************************** program example_16 ' Program name dim kp, curX, curY as byte dim keypadPORT as byte at PORTD ' This variable must be defined in all projects using Keypad Lib. ' It define the port used for keypad connection dim LCD_RS as sbit at RB4_bit ' Lcd module connections LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit
as as as as as
at at at at at
main: curX=1 cursor position curY=1 ANSEL = 0 ANSELH = 0 TRISB = 0 PORTB = 0xFF Keypad_Init() Lcd_Init() Lcd_Cmd(_LCD_CLEAR)
' Start of program ' For keeping a record of the 2x16 LCD ' Configure analog pins as digital I/O
' Initialize keypad on PORTC ' Initialize LCD on PORTB, ' Clear display
while true ' Wait for some key to be pressed and released kp = 0 while kp = 0 kp = Keypad_Key_Click() Delay_ms(10) wend select case kp ' Prepare value for output case 1 kp = "1" case 2 kp = "2" case 3 kp = "3" case 4 kp = "A" case 5 kp = "4" case 6 kp = "5" case 7 kp = "6" case 8 kp = "B" case 9 kp = "7" case 10 kp = "8" case 11 kp = "9" case 12 kp = "C" case 13 kp = "*" case 14 kp = "0" case 15 kp = "#" case 16 kp = "D" end select if (curY > 16) then ' Change cursor position if (curX = 1) then Lcd_Cmd(_LCD_SECOND_ROW) curX = 2 curY = 1 else Lcd_Cmd(_LCD_FIRST_ROW) curX = 1 curY = 1
end if end if Lcd_Chr_CP(kp) ' Display on LCD Inc(curY) wend end. ' End of program
Con el fin de que este ejemplo funcione correctamente, es necesario comprobar las siguientes libreras en el Library Manager antes de compilar: Keypad4x4 LCD