MCU significa Unidad Microcontroladora. La abreviatura de microcontrolador en chino, comúnmente conocido como microcomputadora de un solo chip, consiste en reducir adecuadamente la frecuencia y las especificaciones de la CPU e integrar interfaces periféricas como memoria, contador, USB, conversión A/D, UART, PLC, DMA e incluso circuitos de controlador LCD en un solo chip para formar una computadora a nivel de chip. Puede realizar diferentes combinaciones de control para diversas aplicaciones, como teléfonos móviles, periféricos de PC, controles remotos, electrónica automotriz, motores paso a paso industriales y control de brazos robóticos. En la figura se puede ver una MCU.
uno
Breve historia del desarrollo de los microcontroladores
La historia de los microcontroladores no es muy extensa, pero su desarrollo ha sido muy rápido. Su producción y desarrollo suelen ir de la mano con la producción y el desarrollo de los microprocesadores (CPU). Desde que Intel Corporation de Estados Unidos lanzó su primer microprocesador de 4 bits en 1971, su desarrollo hasta la fecha se puede dividir, a grandes rasgos, en cinco etapas. A continuación, se presenta una introducción al desarrollo de los microcontroladores de Intel Corporation.
1971-1976
La etapa inicial del desarrollo de los microcontroladores. En noviembre de 1971, Intel diseñó el Intel 4004, un microprocesador de 4 bits con una integración de 2,000 transistores por chip, equipado con RAM, ROM y registro de desplazamiento, lo que dio origen al primer microprocesador MCS-4. Posteriormente, lanzó el microprocesador de 8 bits Intel 8008, y otras compañías lanzaron otros microprocesadores de 8 bits.
1976-1980
Etapa de microcontrolador de bajo rendimiento. Representada por la serie MCS-48 lanzada por Intel en 1976, utiliza una estructura monolítica que integra una CPU de 8 bits, una interfaz de E/S paralela de 8 bits, un temporizador/contador de 8 bits, RAM y ROM en un chip semiconductor. Si bien su rango de direccionamiento es limitado (no más de 4 KB), carece de E/S serie, su capacidad de RAM y ROM es reducida y su sistema de interrupciones es relativamente simple, sus funciones pueden satisfacer las necesidades de control industrial general e instrumentos y medidores inteligentes.
1980-1983
Etapa de microcontroladores de alto rendimiento. Los microcontroladores de 8 bits de alto rendimiento lanzados en esta etapa generalmente cuentan con puertos serie, sistemas de procesamiento de interrupciones multinivel y múltiples temporizadores/contadores de 16 bits. La capacidad de la RAM y la ROM integradas se incrementa, y el rango de direccionamiento puede alcanzar los 64 KB. Algunos chips también incluyen una interfaz de conversión analógica-digital.
1983~finales de la década de 1980
Etapa de microcontrolador de 16 bits. En 1983, Intel lanzó la serie MCS-96 de microcontroladores de 16 bits de alto rendimiento. Gracias a la adopción de la tecnología de fabricación más avanzada, el nivel de integración del chip alcanza los 120 000 transistores por chip.
Años 1990
Los microcontroladores están alcanzando un nivel superior en todos los aspectos de integración, funcionalidad, velocidad, fiabilidad y campos de aplicación.
two
Clasificación y aplicación de microcomputadoras de un solo chip
Los microcontroladores se pueden dividir en dos tipos según su tipo de memoria: aquellos sin ROM integrada y aquellos con ROM integrada. Para los chips sin ROM integrada, se debe conectar una EPROM externa antes de poder utilizarlos (normalmente el 8031); los chips con ROM integrada se dividen en tipo EPROM integrada (el chip típico es el 87C51), tipo ROM de máscara integrada MASK (el chip típico es el 8051), tipo Flash integrado (el chip típico es el 89C51) y otros tipos.
Según su finalidad, se pueden dividir en tipos de propósito general y de propósito especial; según el ancho del bus de datos y la longitud de los bytes de datos que se pueden procesar a la vez, se pueden dividir en microcontroladores de 8, 16 y 32 bits.
Actualmente, el mercado nacional más importante para la aplicación de microcontroladores se encuentra en el sector de la electrónica de consumo, seguido por el sector industrial y el de la electrónica automotriz. La electrónica de consumo abarca electrodomésticos, televisores, consolas de videojuegos, sistemas de audio y video, etc. Los sectores industriales incluyen hogares inteligentes, automatización, aplicaciones médicas y generación y distribución de energías renovables. El sector automotriz comprende sistemas de control de seguridad y de transmisión de energía.
three
Funciones básicas del microcontrolador
Para la mayoría de los microcontroladores, las siguientes funciones son las más comunes y básicas. En diferentes microcontroladores, la forma en que se describen puede variar, pero esencialmente son las mismas:
1. Temporizador: Aunque existen muchos tipos de temporizadores, se pueden resumir en dos categorías: Un tipo es el temporizador con intervalos de tiempo fijos, es decir, el tiempo de temporización lo establece el sistema y no puede ser controlado por el programa del usuario. El sistema solo proporciona varios intervalos de tiempo fijos para que el programa del usuario elija, como 32 Hz, 16 Hz, 8 Hz, etc. Este tipo de temporizador es más común en los microcontroladores de 4 bits, por lo que se puede utilizar para implementar funciones de reloj, temporización y otras funciones relacionadas.
El otro tipo es el temporizador programable. Como su nombre indica, el tiempo de temporización de este tipo de temporizador se puede controlar mediante el programa del usuario. Los métodos de control incluyen: selección de la fuente de reloj, selección de la división de frecuencia (preescalador) y ajuste del número preestablecido. Algunos microcontroladores disponen de las tres funciones simultáneamente, mientras que otros pueden tener solo una o dos. Este tipo de aplicación de temporizador es muy flexible y su uso práctico está en constante evolución. Una de las aplicaciones más comunes es su uso para implementar la salida PWM.
Dado que la fuente de reloj se puede seleccionar libremente, este tipo de temporizador generalmente se combina con el contador de eventos.
2. Puertos de E/S: Cualquier MCU tiene un cierto número de puertos de E/S. Sin puertos de E/S, el MCU pierde el canal para comunicarse con el mundo exterior. Según la configurabilidad del puerto de E/S, se puede dividir en los siguientes tipos:
Puerto de entrada o salida puro: Este tipo de puerto de E/S viene determinado por el diseño del hardware del microcontrolador. Solo puede funcionar como entrada o salida, y no se puede utilizar software para ajustes en tiempo real.
Puertos de E/S de lectura y escritura directa: Por ejemplo, el puerto de E/S del MCS-51 pertenece a este tipo de puerto. Cuando se ejecuta la instrucción de lectura del puerto de E/S, este se convierte en un puerto de entrada; cuando se ejecuta la instrucción de escritura del puerto de E/S, se convierte automáticamente en un puerto de salida.
Programación para configurar la dirección de entrada y salida: La entrada o salida de este tipo de puerto de E/S se configura mediante el programa según las necesidades reales. La aplicación es relativamente flexible y permite implementar diversas aplicaciones a nivel de bus, como el bus I2C, varios buses de control de controladores LCD y LED, etc.
Para el uso de puertos de E/S, un punto importante que debe tenerse en cuenta es: para el puerto de entrada, debe haber una señal de nivel clara para asegurar que no pueda quedar flotando (esto se puede lograr agregando una resistencia pull-up o pull-down); para el puerto de salida, el nivel de estado de salida debe considerar sus condiciones de conexión externa, y debe asegurarse de que no haya corriente de succión o succión en el estado de espera o estático.
3. Interrupción externa: La interrupción externa es una función básica de la mayoría de los microcontroladores. Generalmente se utiliza para la activación en tiempo real de señales, el muestreo de datos y la detección de estado. Los métodos de interrupción incluyen activación por flanco ascendente, activación por flanco descendente y activación por nivel. Las interrupciones externas se implementan generalmente a través de puertos de entrada. Si se trata de un puerto de E/S, su función de interrupción se activará solo cuando esté configurado como entrada; si se trata de un puerto de salida, la función de interrupción externa se desactivará automáticamente (existen algunas excepciones en la serie ATiny de ATMEL, que también puede activar la función de interrupción cuando es un puerto de salida). Las aplicaciones de las interrupciones externas son las siguientes:
Detección de señales de activación externas: Una se basa en requisitos en tiempo real, como el control de tiristores, la detección de señales repentinas, etc., mientras que la otra es la necesidad de ahorrar energía.
Medición de la frecuencia de la señal: Para garantizar que no se pierda la señal, la interrupción externa es la opción ideal.
Decodificación de datos: En el ámbito de las aplicaciones de control remoto, para reducir el coste de diseño, a menudo es necesario utilizar software para decodificar diversos datos codificados, como la decodificación de la codificación Manchester y PWM.
Detección de teclas y activación del sistema: Los microcontroladores que entran en modo de suspensión generalmente necesitan ser activados mediante interrupciones externas. La forma más básica es la pulsación de una tecla, que produce cambios de nivel.
4. Interfaz de comunicación: La interfaz de comunicación proporcionada por el MCU generalmente incluye interfaz SPI, UART, interfaz I2C, etc., que se describen a continuación:
Interfaz SPI: Este tipo de interfaz es el método de comunicación más básico que ofrecen la mayoría de los microcontroladores. Su transmisión de datos está controlada por un reloj síncrono. Las señales incluyen: SDI (entrada de datos serie), SDO (salida de datos serie), SCLK (reloj serie) y la señal Ready; en algunos casos, puede que no haya señal Ready. Este tipo de interfaz puede funcionar en modo maestro o esclavo. En términos generales, depende de quién proporciona la señal de reloj. Quien proporciona el reloj es el maestro, y quien lo proporciona es el esclavo.
UART (Transmisión y Recepción Asíncrona Universal): Es la interfaz de transmisión asíncrona más básica. Solo tiene dos líneas de señal: Rx y Tx. El formato de datos básico es: Bit de inicio + Bit de datos (7 u 8 bits) + Bit de paridad (par, impar o ninguno) + Bit de parada (1 o 2 bits). El tiempo que tarda un bit de datos en transmitirse se denomina velocidad de transmisión (Baudios Rate).
En la mayoría de los microcontroladores, la longitud de los bits de datos, el modo de verificación de datos (verificación de bits impares, pares o sin verificación), la longitud del bit de parada y la velocidad de transmisión (Baudios Rate) se pueden configurar de forma flexible mediante programación. El método más común para este tipo de interfaz es la comunicación con el puerto serie de un PC.
Interfaz I2C: I2C es un protocolo de transmisión de datos desarrollado por Philips. Se implementa mediante dos señales: SDAT (entrada y salida de datos serie) y SCLK (reloj serie). Su principal ventaja es que permite conectar múltiples dispositivos, identificarlos y acceder a ellos mediante direcciones. Otra gran ventaja del bus I2C es su facilidad de implementación mediante software a través del puerto de E/S. La velocidad de transmisión de datos está totalmente controlada por SCLK, que puede ser rápida o lenta, a diferencia de la interfaz UART, que tiene requisitos de velocidad estrictos.
5. Watchdog (temporizador de vigilancia): El temporizador de vigilancia es una configuración básica de la mayoría de los microcontroladores (algunos microcontroladores de 4 bits pueden no tener esta función). El temporizador de vigilancia de la mayoría de los microcontroladores solo permite que el programa lo reinicie, pero no lo desactive (algunos se configuran durante la grabación del programa, como los microcontroladores de la serie PIC de Microchip), y algunos microcontroladores utilizan un método específico para decidir si lo activan, como la serie KS57 de Samsung. Mientras el programa acceda al registro del temporizador de vigilancia, este se activa automáticamente y no se puede desactivar. En general, el tiempo de reinicio del temporizador de vigilancia se puede configurar mediante programación. La aplicación más básica del temporizador de vigilancia es proporcionar capacidad de autorrecuperación a los microcontroladores que fallan debido a errores inesperados.
Las cuatro
Fabricante mundial de microcontroladores de gran consumo
(Clasificados sin ningún orden en particular, organizados por fabricantes principales. Si falta alguno, por favor añádalo en la sección de comentarios).
Europa y América
1. Freescale+NXP (Freescale+NXP): Países Bajos, principalmente suministra microcontroladores de 16 y 32 bits. Aplicaciones: Electrónica automotriz, iluminación LED y general, atención médica, convergencia multimedia, electrodomésticos y herramientas eléctricas, tecnología de automatización de edificios, control de motores, fuentes de alimentación y convertidores de potencia, energía y redes inteligentes, automatización, infraestructura informática y de comunicaciones.
2. Microchip+Atmel (Microchip Technology + Atmel): Con sede en Estados Unidos, se dedica principalmente a la fabricación de microcontroladores de 16 y 32 bits. Sus aplicaciones incluyen electrónica automotriz, uso industrial, control de motores, automatización de edificios, electrodomésticos, sistemas de entretenimiento doméstico, iluminación, Internet de las cosas, energía inteligente, equipos electrónicos móviles y periféricos informáticos.
3. Cypress+Spansion (Cypress + Spansion Semiconductor): Con sede en Estados Unidos, se dedica principalmente a la fabricación de microcontroladores de 8, 16 y 32 bits. Sus aplicaciones abarcan la electrónica automotriz, electrodomésticos, dispositivos médicos, electrónica de consumo, comunicaciones y telecomunicaciones, industria y comunicaciones inalámbricas.
4. ADI (Analog Devices): Estados Unidos, principalmente suministra microcontroladores de 8, 16 y 32 bits. Aplicaciones: Aeroespacial y defensa, automoción, tecnología de la construcción, comunicaciones, electrónica de consumo, energía, sanidad, instrumentación y medición, motores, automatización industrial, seguridad.
5. Infineon: Alemania, principalmente suministra microcontroladores de 16 y 32 bits. Aplicaciones: electrónica automotriz, electrónica de consumo, ingeniería, vehículos comerciales y agrícolas, procesamiento de datos, transporte eléctrico, aplicaciones industriales, equipos médicos, equipos móviles, control y accionamiento de motores, suministro de energía para motocicletas, bicicletas eléctricas y pequeños vehículos eléctricos, redes inteligentes, iluminación, soluciones para sistemas solares y sistemas de energía eólica.
6. ST Microelectronics: Italia/Francia, principalmente suministra microcontroladores de 32 bits. Aplicaciones: Iluminación LED y general, transporte, sanidad, convergencia multimedia, electrodomésticos y herramientas eléctricas, automatización de edificios, control de motores, fuentes de alimentación y convertidores de potencia, energía y redes inteligentes, automatización, infraestructura informática y de comunicaciones.
7. Qualcomm: Con sede en Estados Unidos, suministra principalmente microcontroladores de 16 y 32 bits. Aplicaciones: Smartphones, tabletas y módems inalámbricos.
8. Texas Instruments: Estados Unidos, principalmente suministra microcontroladores de 16 y 32 bits. Ámbito de aplicación: electrónica automotriz, electrónica de consumo, equipos médicos, dispositivos móviles, comunicaciones.
9. Maxim (Maxim): Estados Unidos, principalmente suministra microcontroladores de 32 bits. Ámbito de aplicación: electrónica automotriz, electrónica de consumo, aplicaciones industriales, seguridad.
Japón y Corea del Sur
1. Renesas: Japón, principalmente suministra microcontroladores de 16 y 32 bits. Ámbito de aplicación: ordenadores y periféricos, electrónica de consumo, electrónica médica y sanitaria, electrónica automotriz, industria y comunicaciones.
2. Toshiba: Japón, principalmente suministra microcontroladores de 16 y 32 bits. Ámbito de aplicación: electrónica automotriz, uso industrial, control de motores, comunicaciones inalámbricas, teléfonos móviles, ordenadores y periféricos, procesamiento de imágenes, audio y vídeo, electrodomésticos, iluminación LED, seguridad, gestión de energía y equipos de entretenimiento.
3. Fujitsu: Japón, principalmente suministra microcontroladores de 32 bits. Ámbito de aplicación: automoción, medicina, maquinaria, electrodomésticos.
4. Samsung Electronics: Corea del Sur, principalmente suministra microcontroladores de 16 y 32 bits. Aplicaciones: electrónica automotriz, uso industrial, control de motores, automóviles, automatización de edificios, electrodomésticos, entretenimiento doméstico, automatización industrial, iluminación, Internet de las cosas, energía inteligente, equipos electrónicos móviles, periféricos de computadora.
Región de China
China continental
1. Sigma Microelectronics: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: telecomunicaciones, fabricación, energía, transporte, electricidad, etc.
2. Zhuhai Orbit: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: aeroespacial: estaciones satelitales, barcos, aeronaves; control industrial de alta gama: computadoras integradas; control de barcos, control industrial, equipos de energía, monitoreo ambiental.
3. Innovación de GigaDevice: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: automatización industrial, interfaz hombre-máquina, control de motores, monitoreo de seguridad, hogar inteligente, Internet de las cosas.
4. Shengsi Microelectronics: Principalmente suministra microcontroladores de 8 y 32 bits. Ámbito de aplicación: pequeños electrodomésticos, electrónica de consumo, mandos a distancia, ratones, baterías de litio, productos digitales, electrónica automotriz, instrumentos médicos y de medición, juguetes, control industrial, hogares inteligentes y seguridad, entre otros.
5. Chipsea Technology: Principalmente suministra microcontroladores de 16 y 32 bits. Ámbito de aplicación: instrumentación, Internet de las cosas, electrónica de consumo, electrodomésticos y electrónica automotriz.
6. Lianhua Integrated Circuit: Principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: electrónica de consumo, electrodomésticos, control industrial, equipos de comunicación, electrónica automotriz y ordenadores.
7. Zhuhai Jianrong: Principalmente suministra microcontroladores de 8 bits, ámbito de aplicación: electrodomésticos, fuentes de alimentación portátiles.
8. Tecnología de acciones: Principalmente proporciona microcontroladores de 8 a 32 bits, con un rango de aplicaciones que incluye tabletas, hogares inteligentes, multimedia, Bluetooth y audio wifi.
9. Aisco Microelectronics: Principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: chips para el consumidor, chips de comunicación, chips de información y electrodomésticos.
10. Huaxin Microelectronics: Principalmente suministra microcontroladores de 8 y 4 bits. Aplicaciones: receptores de satélite, cargadores de teléfonos móviles, calendarios perpetuos y mandos a distancia todo en uno.
11. Shanghai Belling (Huada Semiconductor Holdings): Principalmente suministra microcontroladores de 8, 16 y 32 bits. Aplicaciones: periféricos de computadora, HDTV, administración de energía, pequeños electrodomésticos y dispositivos digitales.
12. Haier Integrated Circuits: Principalmente ofrece microcontroladores de 14, 15 y 16 bits. Ámbito de aplicación: electrónica de consumo, electrónica automotriz, industria e instrumentación inteligente.
13. Beijing Ingenic: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: dispositivos portátiles, Internet de las cosas, electrodomésticos inteligentes, automóviles, electrónica de consumo, tabletas.
14. China Microelectronics: Principalmente suministra microcontroladores de 8 bits. Aplicaciones: electrodomésticos inteligentes, electrónica automotriz, sistemas de seguridad, iluminación LED para exteriores, juguetes inteligentes, hogares inteligentes y electrónica de consumo.
15. Circuito integrado Shenzhou Loongson: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: monitorización de energía, red inteligente, control digital industrial, Internet de las cosas, hogar inteligente, monitorización de datos.
16. Ziguang Microelectronics: Principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: electrodomésticos inteligentes.
17. Times Minxin: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: navegación de automóviles, monitoreo de tráfico, supervisión de buques pesqueros, red de telecomunicaciones eléctricas.
18. China Resources Silicon Microelectronics (una filial de China Resources Microelectronics): principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: electrónica de consumo, control industrial y electrodomésticos.
19. Tecnología básica nacional: Proporciona principalmente MCU de 32 bits, ámbito de aplicación: campo de seguridad de la información, campo de automatización de oficinas, campo de redes de comunicación, campo de seguridad de la información.
20. Zhongtian Micro: Principalmente suministra microcontroladores de 32 bits. Aplicaciones: teléfonos inteligentes, televisores digitales, decodificadores, electrónica automotriz, GPS, lectores electrónicos e impresoras.
21. China Resources Microelectronics: Principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: circuitos de control general para electrodomésticos, electrónica de consumo y automatización industrial.
22. Zhongying Electronics: Principalmente suministra microcontroladores de 4, 8, 16 y 32 bits. Ámbito de aplicación: electrodomésticos y motores.
23. Lingdong Microelectronics: Principalmente proporciona 32 bits, ámbito de aplicación: control de motores, control Bluetooth, pantallas de alta definición, carga inalámbrica, drones, microimpresoras, etiquetas inteligentes, cigarrillos electrónicos, pantallas de matriz de puntos LED, etc.
24. Nuvoton Technology: Principalmente proporciona MCU de 8 bits, ámbito de aplicación: iluminación, Internet de las cosas, etc.
25. Neusoft Carrier: Principalmente suministra microcontroladores de 8 y 32 bits. Aplicaciones: electrodomésticos, hogares inteligentes, instrumentación, controladores de paneles LCD, control industrial, etc.
26. Betley: Principalmente proporciona MCU de 32 bits, ámbito de aplicación: hogar inteligente, control industrial y productos de consumo.
27. Shengquan Technology: Principalmente proporciona MCU de 8 bits, ámbito de aplicación: paneles de visualización pequeños y medianos para automoción, educación, control industrial, medicina, etc.
28. Hangshun Chip: Principalmente suministra microcontroladores de 8 y 32 bits. Ámbito de aplicación: automoción, Internet de las cosas, etc.
29. Fudan Microelectronics: Principalmente suministra microcontroladores de 16 y 32 bits. Aplicaciones: contadores inteligentes, cerraduras inteligentes, etc.
30. Huada Semiconductor: Principalmente suministra microcontroladores de 8, 16 y 32 bits. Aplicaciones: control industrial, fabricación inteligente, vida inteligente e Internet de las cosas.
Taiwán, China
1. Hongjing Technology: principalmente suministra microcontroladores de 32 bits. Ámbito de aplicación: comunicaciones, control industrial, dispositivos de información y voz.
2. Holtek Semiconductor: principalmente suministra microcontroladores de 8 y 32 bits. Ámbito de aplicación: electrónica de consumo, iluminación LED, etc.
3. Lingyang Technology: principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: audio y vídeo domésticos.
4. Zhongying Electronics: principalmente suministra microcontroladores de 4 y 8 bits. Ámbito de aplicación: cargadores, baterías portátiles, electrodomésticos, control industrial.
5. Songhan Technology: principalmente suministra microcontroladores de 8 y 32 bits. Ámbito de aplicación: mandos a distancia, cargadores inteligentes, sistemas de gran y pequeña escala, básculas electrónicas, termómetros de oído, tensiómetros, manómetros de neumáticos y diversos equipos de medición y salud.
6. Winbond Electronics: principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: electrónica automotriz, electrónica industrial, redes, informática, electrónica de consumo e Internet de las cosas.
7. Tecnología de diez velocidades: principalmente ofrece microcontroladores de 4, 8 y 51 bits. Ámbito de aplicación: mandos a distancia, pequeños electrodomésticos.
8. Youhua Microelectronics: principalmente suministra microcontroladores de 4 y 8 bits. Ámbito de aplicación: productos de circuitos integrados de grabación, electrónica de consumo y productos para el hogar.
9. Microcontroladores de Yingguang Technology: principalmente ofrece microcontroladores de 4 y 8 bits. Ámbito de aplicación: maquinaria, automatización, electrodomésticos y robótica.
10. Elan Electronics: principalmente suministra microcontroladores de 8 y 16 bits. Ámbito de aplicación: electrónica de consumo, ordenadores, teléfonos inteligentes.
five
Consejos para aprender sobre microcontroladores
Los principios y funciones básicas de cualquier microcontrolador son similares. La única diferencia radica en la configuración y el número de módulos de funciones periféricas, sistemas de instrucciones, etc.
En los sistemas de instrucciones, aunque parezcan muy diferentes en su forma, en realidad solo se trata de símbolos distintos. Los significados que representan, las funciones que deben realizar y los métodos de direccionamiento son básicamente similares.
Para comprender un microcontrolador, primero necesita conocer su espacio ROM, espacio RAM, número de puertos de E/S, número de temporizadores y métodos de temporización, módulos de funciones periféricas (circuitos periféricos) proporcionados, fuentes de interrupción, voltaje de funcionamiento y consumo de energía, etc.
Tras comprender estas características del microcontrolador, el siguiente paso es comparar las funciones del microcontrolador seleccionado con las funciones necesarias para el desarrollo del proyecto real, y aclarar qué recursos se necesitan actualmente y cuáles no se utilizan en este proyecto.
Para las funciones que se necesitan en el proyecto pero que no están disponibles en el microcontrolador seleccionado, es necesario comprender detenidamente la información relevante del microcontrolador para implementarlas mediante métodos indirectos. Por ejemplo, si el proyecto que está desarrollando necesita comunicarse con el puerto COM de la PC y el microcontrolador seleccionado no dispone de un puerto UART, puede considerar el uso de interrupciones externas para implementar dicha comunicación.
Para acceder a los recursos necesarios para el desarrollo del proyecto, es preciso comprender y leer detenidamente el Manual*, pudiendo ignorar o consultar los módulos funcionales innecesarios. Para el aprendizaje de los microcontroladores, la aplicación práctica es fundamental.
Tras aclarar las funciones relevantes del microcontrolador, puede comenzar a programar.
Para principiantes o diseñadores que utilizan este microcontrolador por primera vez, es posible que encuentren descripciones poco claras de sus funciones. Para solucionar estos problemas, existen dos métodos. Uno consiste en escribir un programa de verificación específico para comprender las funciones descritas en la documentación; el otro, en ignorar temporalmente la documentación y escribir el programa del microcontrolador según el conocimiento actual, permitiendo su modificación y mejora durante la depuración. El primer método es adecuado para proyectos con tiempo disponible y para principiantes, mientras que el segundo es más apropiado para personas con cierta experiencia en el desarrollo de microcontroladores o cuando el cronograma del proyecto es ajustado.
No dediques tiempo a comprender el sistema de comandos. El sistema de instrucciones es simplemente una representación lógica. Durante la programación, solo podrás visualizar las instrucciones relevantes según tu propia lógica y los requisitos lógicos del programa. A medida que avances en la programación, dominarás cada vez más el sistema de instrucciones e incluso podrás memorizarlo de forma inconsciente.
six
Programación de microcontroladores
Existe una gran diferencia entre la programación de microcontroladores y la de PC. Si bien las herramientas de desarrollo de microcontroladores basadas en C son cada vez más populares, para los diseñadores que cuentan con un código de programa eficiente y prefieren usar lenguaje ensamblador, este sigue siendo el lenguaje de programación más conciso y eficaz.
En la programación de microcontroladores, la estructura básica es prácticamente la misma. Generalmente se divide en tres partes: la inicialización (que constituye la principal diferencia entre la programación de microcontroladores y la de PC), el bucle principal del programa y el controlador de interrupciones. Sus respectivas descripciones son las siguientes:
1. Inicialización: Para el diseño de todos los programas de MCU, la inicialización es el paso más básico e importante, que generalmente incluye lo siguiente:
Enmascarar todas las interrupciones e inicializar el puntero de pila: La parte de inicialización generalmente no desea que se produzcan interrupciones.
Borre el área de RAM del sistema y visualice la memoria: aunque a veces no sea completamente necesario, desde la perspectiva de la confiabilidad y la consistencia, especialmente para prevenir errores inesperados, se recomienda desarrollar buenos hábitos de programación.
Inicialización del puerto de E/S: Según los requisitos de la aplicación, configure el modo de entrada y salida del puerto de E/S correspondiente. Para el puerto de entrada, configure su resistencia pull-up o pull-down; para el puerto de salida, configure su nivel de salida inicial para evitar errores innecesarios.
Configuración de interrupciones: Todas las fuentes de interrupción que se utilicen en el proyecto deben estar activadas y deben configurarse las condiciones de activación. Las interrupciones redundantes que no se utilicen deben estar desactivadas.
Inicialización de otros módulos funcionales: Para todos los módulos periféricos del microcontrolador que se vayan a utilizar, se deben configurar los ajustes correspondientes según los requisitos de la aplicación. Por ejemplo, para la comunicación UART, se deben configurar la velocidad de transmisión (Baud Rate), la longitud de los datos, el método de verificación y la longitud del bit de parada. Para el temporizador del programador, se deben configurar la fuente de reloj, el número de división de frecuencia y los datos de recarga.
Inicialización de parámetros: Tras completar la inicialización del hardware y los recursos del microcontrolador, el siguiente paso consiste en inicializar algunas variables y datos utilizados en el programa. La inicialización de esta parte debe diseñarse de acuerdo con el proyecto específico y la estructura general del programa. Para algunas aplicaciones que utilizan la memoria EEPROM para guardar datos predefinidos del proyecto, se recomienda copiar los datos relevantes a la RAM del microcontrolador durante la inicialización para mejorar la velocidad de acceso del programa a los datos y reducir el consumo de energía del sistema (en principio, el acceso a la EEPROM externa aumentará el consumo de energía de la fuente de alimentación).
2. Cuerpo del bucle principal del programa: La mayoría de los microcontroladores funcionan de forma continua durante largos periodos, por lo que sus cuerpos de programa principales se diseñan básicamente en un bucle. Para aplicaciones con múltiples modos de funcionamiento, puede haber varios cuerpos de bucle, que se convierten mediante indicadores de estado. Para el cuerpo del programa principal, generalmente se organizan los siguientes módulos:
Programas de cálculo: Los programas de cálculo suelen consumir mucho tiempo, por lo que nos oponemos firmemente a procesarlos en cualquier interrupción, especialmente las operaciones de multiplicación y división.
Procesamiento de programas con requisitos de tiempo real bajos o nulos;
Programa de transmisión de pantalla: principalmente para aplicaciones con controladores LED y LCD externos.
3. Controlador de interrupciones: El programa de interrupciones se utiliza principalmente para gestionar tareas y eventos con altos requisitos de tiempo real, como la detección de señales externas repentinas, la detección y el procesamiento de botones, el conteo de tiempos, el escaneo de pantallas LED, etc.
En general, el programa de interrupción debe mantener el código lo más conciso y breve posible. Para las funciones que no necesitan procesarse en tiempo real, se puede activar el indicador de interrupción, y entonces el programa principal realizará las transacciones específicas. Esto es muy importante, especialmente para los microcontroladores de baja potencia y baja velocidad, que deben garantizar una respuesta oportuna a todas las interrupciones.
4. Para la organización de los diferentes cuerpos de tareas, los distintos microcontroladores tienen diferentes métodos de procesamiento:
Por ejemplo, para aplicaciones de MCU de baja velocidad y bajo consumo (Fosc=32768Hz), considerando que estos proyectos son dispositivos portátiles y utilizan pantallas LCD comunes, la respuesta a las pulsaciones de teclas y la respuesta de la pantalla requieren un alto rendimiento en tiempo real, por lo que generalmente se utilizan interrupciones temporizadas para procesar las pulsaciones de teclas, las acciones y la visualización de datos; para MCU de alta velocidad, como aplicaciones Fosc>1MHz, dado que el MCU tiene tiempo suficiente para ejecutar el cuerpo del bucle del programa principal en este momento, solo puede establecer varios indicadores de disparo en las interrupciones correspondientes y colocar todas las tareas en el cuerpo del programa principal para su ejecución.
5. En la programación de microcontroladores, hay algo que requiere especial atención:
Es necesario evitar que se acceda o modifique la misma variable o dato simultáneamente en los cuerpos del programa principal y de las interrupciones. Un método eficaz consiste en organizar el procesamiento de dichos datos en un módulo y determinar si se deben realizar operaciones relacionadas con ellos mediante el indicador de activación; en otros cuerpos del programa (principalmente interrupciones), solo se activan los indicadores de activación donde se necesite procesar los datos. Esto garantiza que la ejecución de los datos sea predecible y única.
seven Resumen de programación de microcontroladores para ingenieros
1. Desarrolla el buen hábito de resumir. Resumir no solo es un resumen de tu propio aprendizaje, sino también una revisión y profundización del proceso de aprendizaje. Además, te ayuda a evitar cometer errores la segunda vez.
2. Antes de escribir un programa, es fundamental comprender bien el proyecto, conocerlo a fondo y definir su estructura general. Es muy importante considerar cuidadosamente la organización y cuál es la más adecuada. Es necesario analizar qué módulo desarrollar primero, los pasos específicos de cada módulo, cómo nombrar cada función, su conexión con otros módulos, etc. Se recomienda tomar papel y lápiz para anotar los procesos importantes.
3. Para la programación modular en lenguaje C, primero debe dividir cada módulo, programar módulo por módulo, determinar una secuencia, seguir dicha secuencia y luego escribir el siguiente módulo una vez que el anterior se haya ejecutado correctamente. En el caso de los archivos de cabecera, escriba el archivo de cabecera del módulo una vez que este se haya escrito.
4. No ignores las advertencias cuando aparezcan. Significa que debe haber algo incorrecto en el programa. Debes encontrar la causa y buscar una solución. Sé específico al buscar fuentes. Puedes buscar información en Internet sobre este tema o pedir consejo a otros. Por ejemplo, la función principal de otro proyecto se agregó a este. Hay nombres de funciones duplicados. También hay razones para analizar los fenómenos experimentales y avanzar paso a paso. También se seleccionó la interfaz incorrecta al definir el puerto. A veces, es bueno tomar un descanso y reflexionar si realmente no puedes resolverlo. Por simple que parezca, debes prestar atención, ya que puede haber errores.
En el desarrollo de aplicaciones para microcontroladores, persisten problemas como la eficiencia en el uso del código, el rendimiento frente a interferencias y la fiabilidad. A continuación, resumimos algunas habilidades básicas que deben dominarse en el desarrollo de microcontroladores.
eight
Habilidades de desarrollo de microcontroladores
1. Cómo reducir los errores en los programas
En cuanto a cómo reducir los errores del programa, primero debe considerar los siguientes parámetros de administración fuera de rango que deben tenerse en cuenta durante el funcionamiento del sistema.
- Parámetros físicos: Estos parámetros son principalmente parámetros de entrada del sistema, que incluyen parámetros de excitación, parámetros de funcionamiento durante el procesamiento de adquisición y parámetros de resultado al final del procesamiento.
- Parámetros de recursos: Estos parámetros son principalmente los recursos de los circuitos, dispositivos y unidades funcionales del sistema, como la capacidad de memoria, la longitud de la unidad de almacenamiento y la profundidad de apilamiento.
- Parámetros de aplicación: Estos parámetros suelen aparecer como condiciones de uso de algunos microcontroladores y unidades funcionales. Parámetros de proceso: Se refieren a los parámetros que cambian de forma ordenada durante el funcionamiento del sistema.
2. Cómo mejorar la eficiencia del código de programación en lenguaje C.
El uso del lenguaje C para la programación de microcontroladores es una tendencia inevitable en el desarrollo y la aplicación de estos. Para lograr la máxima eficiencia al programar en C, es fundamental familiarizarse con el compilador que se utiliza. Primero, se debe probar la cantidad de líneas de instrucciones en lenguaje ensamblador que genera cada compilación en C, para así determinar su eficiencia. Al programar en el futuro, se debe usar la instrucción con la mayor eficiencia de compilación. Cada compilador de C presenta diferencias, por lo que la eficiencia de compilación también varía. La longitud del código y el tiempo de ejecución de un excelente compilador de C para sistemas embebidos son solo entre un 5 % y un 20 % mayores que los de la misma función escrita en lenguaje ensamblador.
Para proyectos complejos con plazos de desarrollo ajustados, se puede utilizar el lenguaje C, pero es imprescindible tener un conocimiento profundo del lenguaje C y del compilador del sistema MCU. Preste especial atención a los tipos de datos y algoritmos compatibles con el sistema de compilación de C. Si bien C es el lenguaje de alto nivel más común, los distintos fabricantes de MCU utilizan sistemas de compilación de C diferentes, especialmente en lo que respecta al funcionamiento de algunos módulos de funciones especiales. Por lo tanto, si no comprende estas características, surgirán numerosos problemas durante la depuración, lo que resultará en una menor eficiencia de ejecución que con el lenguaje ensamblador.
3. Cómo solucionar el problema de antiinterferencias del microcontrolador
La forma más eficaz de prevenir las interferencias es eliminar la fuente de interferencia y bloquear su trayectoria, pero esto suele ser difícil. Por lo tanto, solo podemos comprobar si la capacidad antiinterferencias del microcontrolador es lo suficientemente robusta. Si bien se está mejorando la capacidad antiinterferencias de los sistemas de hardware, la protección antiinterferencias por software está ganando cada vez más atención debido a su diseño flexible, el ahorro de recursos de hardware y su buena fiabilidad.
El fenómeno más común de interferencia en microcontroladores es el reinicio. En caso de que el programa se descontrole, se pueden usar trampas de software y temporizadores de vigilancia para devolverlo al estado de reinicio. Por lo tanto, lo más importante para que el software del microcontrolador resista la interferencia es gestionar el estado de reinicio.
Generalmente, los microcontroladores cuentan con registros de indicadores que permiten determinar la causa del reinicio. Además, también es posible almacenar indicadores en la memoria RAM. Cada vez que se reinicia el programa, se pueden identificar diferentes causas de reinicio analizando estos indicadores. Asimismo, se puede acceder directamente al programa correspondiente según dichos indicadores. Esto permite que el programa se ejecute de forma continua, sin que el usuario note el reinicio.
4. Cómo comprobar la fiabilidad del sistema de microcontrolador.
Cuando se completa el diseño de un sistema de microcontrolador, habrá diferentes elementos y métodos de prueba para los diferentes productos del sistema de microcontrolador, pero algunos deben ser probados:
- Comprueba la integridad de la función del software del microcontrolador.
- Prueba de encendido y apagado
- Test de envejecimiento
- Pruebas como ESD y EFT
En ocasiones, también podemos simular los daños que podrían producirse durante el uso humano. Por ejemplo, frotar deliberadamente el puerto de contacto del sistema microcontrolador con el cuerpo humano o con la ropa para comprobar su capacidad antiestática. Utilizar un taladro eléctrico de alta potencia cerca del sistema microcontrolador para comprobar su resistencia a las interferencias electromagnéticas.
En resumen, el microordenador de un solo chip se ha convertido en un aspecto fundamental del desarrollo y la aplicación de la informática. La importancia de su aplicación radica en que transforma radicalmente las ideas y los métodos tradicionales de diseño de sistemas de control.
La mayoría de las funciones que antes requerían circuitos analógicos o digitales ahora pueden implementarse mediante software utilizando microcontroladores. Esta tecnología de control, en la que el software reemplaza al hardware, se denomina tecnología de microcontrol y representa una revolución en la tecnología de control tradicional.
Además, durante el proceso de desarrollo y aplicación, debemos dominar ciertas habilidades y mejorar la eficiencia para que pueda utilizarse para una gama más amplia de propósitos.
Nueve
Resumen del funcionamiento del chip Las operaciones en el chip se centran principalmente en los registros del mismo. Estos registros tienen direcciones únicas asignadas en la memoria, y cada dirección se opera sobre la dirección correspondiente. Al analizar el chip, primero se debe examinar el diagrama de temporización, luego comprender los registros correspondientes, entender su funcionamiento, definir los puertos necesarios (que el programa puede identificar) y escribir los procedimientos de lectura y escritura.
Cómo escribir datos en el chip, cómo leer datos y por qué puerto introducir o leer (lo más importante).
Al conectar chips a través de un bus, primero debe comprender el protocolo de dicho bus. El chip conectado al bus I2C controla principalmente a los demás chips a través de este bus.
1. Un chip 74hc595 de la matriz de puntos se utiliza para la selección de columnas, y los otros dos para la selección de color. La matriz de puntos es equivalente a un conjunto de diodos.
El diodo solo se enciende cuando un extremo recibe un nivel alto y el otro un nivel bajo. Simplemente, al seleccionar un extremo de forma diferente, se iluminan colores distintos.
Selección del modo de funcionamiento del temporizador: Los cuatro bits superiores configuran el temporizador T1, y los cuatro inferiores, T0. Los dos últimos dígitos de cada modo configuran el modo de funcionamiento. Al configurar dos temporizadores, tenga cuidado al usar el operador OR (|). Al usar interrupciones, preste atención a borrar las que deban borrarse después de que se produzca la interrupción.
2. Transceptor de puerto serie: El modo 2 (recarga automática del valor inicial) se utiliza generalmente para configurar la velocidad de transmisión. Debido a que los distintos dispositivos tienen diferentes capacidades de procesamiento de datos, la configuración de la velocidad de transmisión sirve principalmente para gestionar dispositivos de baja velocidad y facilitar la comunicación entre ellos. El bit de bandera de interrupción debe borrarse mediante software. Al configurar la interrupción del puerto serie, independientemente de si se genera al enviar o recibir, puede entrar en la función de interrupción, por lo que es importante prestar atención a la configuración de dicha función. (Generalmente, se configura una función, ya sea como ordenador host o esclavo).
Si utilizas una interrupción para enviar datos, primero debes averiguar cómo acceder a ella. Para ello, primero debes enviar el mensaje una vez y luego podrás acceder a la interrupción. Solo se puede enviar un byte a la vez, y el siguiente bit solo se puede enviar después de que se active la interrupción (TI).
3. El convertidor PCF8591AD tiene cuatro canales de entrada. Al leer el PCF8591, se selecciona el canal y se lee la tensión de entrada correspondiente. Los datos convertidos se almacenan en el chip y luego se leen. Para la lectura, primero se escribe la dirección del chip, luego la subdirección del dispositivo (0x40 | número de canal) y, finalmente, los datos leídos.
4. La conversión DA consiste en escribir primero la dirección del dispositivo en el chip, luego la subdirección (0x40) y, finalmente, la cantidad digital que se va a convertir. Se introduce la información del chip de dirección del dispositivo.
5. En la pantalla LCD, una vez que los datos se escriben y se muestran, permanecerán siempre visibles sin actualizarse continuamente. Si desea modificarlos, deberá volver a introducirlos.
6. En el chip de reloj DS1302, al leer datos, se lee el primer dato en el flanco descendente del octavo reloj; al escribir datos, se prepara la siguiente salida. Preste atención al método de escritura del programa y a la ubicación del valor de retorno.
7. Primero, especifique el registro en el DS1302 y luego escriba datos en él. El registro en los datos del chip indica la dirección. (Todavía no entiendo del todo el programa de protección contra escritura. ¿No se escribe siempre? ¿Por qué sigue activada la protección contra escritura?)
(Según el autor anterior, se puede establecer una bandera después del tiempo de inicialización. Si existe esta bandera, no es necesario inicializar el tiempo. Sin embargo, si se apaga la alimentación, la RAM del microcontrolador no puede guardar esta bandera, por lo que se puede usar la RAM del DS1302 para guardarla y leerla después de encenderlo. Yo también soy principiante y planeo usar el DS1302 próximamente. No sé si esto es correcto y aún no lo he implementado. Por favor, compartan más información).
8. Es recomendable anotar la inicialización por si la olvidas más adelante. A veces, presta atención a si se procesa primero el bit menos significativo o el bit más significativo al leer o escribir, lo cual se puede determinar según el diagrama de tiempos.
9. En el caso de un transceptor infrarrojo, al recibir, determina si la señal es de nivel alto o bajo según el tiempo transcurrido entre dos flancos descendentes. Al escribir el programa, primero utilice un temporizador para determinar el tiempo, guárdelo y luego conviértalo a binario (lea más sobre cómo escribir este programa; es muy útil).
10. Motor paso a paso: Se utiliza principalmente para la conmutación. El par motor disminuye a medida que aumenta la velocidad. Se emplea principalmente para la alimentación automática de piezas procesadas en máquinas herramienta. También puede utilizarse en sistemas de control que requieren alta precisión.
El motor paso a paso es un dispositivo de control de lazo abierto que convierte señales de pulso eléctrico en desplazamiento angular o lineal. En condiciones normales, la velocidad y la posición de parada del motor dependen únicamente de la frecuencia y el número de pulsos de la señal, y no se ven afectadas por las variaciones de carga. Cuando el controlador recibe una señal de pulso, impulsa el motor para que gire en la dirección establecida con un ángulo fijo, denominado "ángulo de paso". Su rotación se produce paso a paso con un ángulo fijo. El desplazamiento angular se puede controlar ajustando el número de pulsos para lograr un posicionamiento preciso; al mismo tiempo, la velocidad y la aceleración de la rotación del motor se pueden controlar ajustando la frecuencia de pulso para regular la velocidad.
11. Servomotor: (servomotor) se refiere al motor que controla el funcionamiento de los componentes mecánicos en el sistema servo. Es un dispositivo de transmisión indirecta que asiste al motor. Los servomotores pueden controlar la velocidad y la precisión de la posición con gran precisión, y pueden convertir señales de voltaje en par y velocidad de rotación para accionar objetos de control. La velocidad del rotor del servomotor se controla mediante la señal de entrada y puede responder rápidamente. En el sistema de control automático, se utiliza como actuador y tiene las características de una pequeña constante de tiempo electromecánica, alta linealidad, voltaje de arranque, etc. Puede convertir la señal eléctrica recibida en desplazamiento angular o velocidad angular de salida en el eje del motor. Se dividen en dos categorías: servomotores de CC y CA. Su característica principal es que no hay rotación cuando el voltaje de la señal es cero, y la velocidad de rotación disminuye a una velocidad constante a medida que aumenta el par. Motor de CC: Gran rango, todos en coches pequeños.
12. Descripción general de los caracteres chinos:
Para mostrar caracteres chinos en un monitor o impresora, estos se diseñan en una matriz de puntos según los símbolos gráficos, y se obtiene el código de matriz de puntos (código de glifo) correspondiente.
El método de codificación unificada utilizado para representar caracteres chinos en la computadora crea una codificación interna (como un código estándar nacional), la cual es única (equivalente al número de identificación del carácter). La codificación externa, que facilita la introducción de caracteres chinos, es un código de entrada. Este código varía según el método de codificación utilizado. El código de glifo, que se utiliza para mostrar e imprimir caracteres chinos, es el código de glifo. La computadora busca el código de glifo del carácter chino en la biblioteca de fuentes mediante el código interno y realiza la conversión.
Código en la cámara
Según las disposiciones del código estándar nacional, cada carácter chino tiene un código binario específico, pero este código entra en conflicto con el código ASCII al ser procesado internamente por la computadora. Para solucionar este problema, se añade un 1 al primer dígito de cada byte del código estándar nacional. Dado que el código ASCII solo utiliza 7 bits, el "1" inicial sirve como marcador para identificar los códigos de caracteres chinos. Cuando la computadora procesa el código con un "1" al principio, lo interpreta como información de caracteres chinos, y cuando procesa el código con un "0" al principio, lo interpreta como un código ASCII. El código estándar nacional (código interno) procesado de esta manera es el código interno.
Si reemplazamos el "." de este gráfico "口" con "0", podemos obtener el código de glifo de "口" de forma muy vívida: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. Cuando la computadora quiere mostrar "口", primero encuentra la primera dirección de la biblioteca de fuentes de visualización, calcula en base al código interno de "口", y luego encuentra el código de glifo de "口", y luego escanea la pantalla secuencialmente de acuerdo con el código de glifo (en binario) a través del control del generador de caracteres. Cuando el código binario es "0", se escanea el lugar donde es "0" y se escanea el lugar donde es "1" para resaltarlo, de modo que se pueda obtener el patrón de caracteres "口".
Las fuentes de caracteres chinos están organizadas según el código estándar nacional y se almacenan en la memoria en forma de archivos binarios, formando una biblioteca de fuentes de caracteres chinos, también llamada biblioteca de glifos de caracteres chinos o biblioteca de caracteres chinos.
Dos métodos de codificación, véase el archivo de cabecera.
GB1616.h//------------------ Definición de la estructura de datos de la fuente de caracteres chinos ------------------------//structtypFNT_GB16 // Estructura de datos de la fuente de caracteres chinos {unsignedcharIndex[3]; // Índice del código interno del carácter chino unsignedchar Msk[32]; // Datos del código de la matriz de puntos }; ////////////////////////////////////////////////////////////////////////////////// Tabla de fuentes de caracteres chinos//// Biblioteca de caracteres chinos: Dinastía Song 16.punto, horizontalmente módulo bit alto izquierdo, disposición de datos: de izquierda a derecha, de arriba a abajo/ :Xu;ancho×alto (píxeles):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00, Esta estructura es muy simple: una es el código interno y la otra es la secuencia de matriz de puntos. La biblioteca de matriz de puntos anterior se colocó en el orden del código interno, y no se necesitaba ningún índice de código interno. Si solo se colocaran algunos caracteres chinos, se necesitaría el índice de código interno. (El carácter chino "Xu" al principio es para encontrar la secuencia de matriz de puntos de la palabra cuando se muestra "Xu". Esta secuencia de matriz de puntos la escribí yo. Cuando se muestra con 1602, porque el chip tiene una secuencia de matriz de puntos en inglés en la memoria, no es necesario escribirla). Generalmente, dos bytes son suficientes para el código interno. Si usa un byte más, solo agregue un 0 al final. De esta manera, la cadena de caracteres chinos se puede colocar directamente en el código interno de caracteres chinos;
codeGB_16[k].Index[0] codeGB_16[k] indica que hay un array de estructura typFNT_GB16 llamado codeGB_16 codeGB_16[k] es el miembro k+1 del array index es un miembro de la estructura typFNT_GB16, por lo que se puede hacer referencia a él con codeGB_16[k].Index. Al mismo tiempo, index es un array, por lo que se puede indexar[0] If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && es un operador AND lógico, lo que significa que los valores a ambos lados del símbolo && son verdaderos. Solo el valor de && es verdadero, es decir, verdadero && verdadero = verdadero. Esta frase significa que codeGB_16[k].Index[0]==c[0] y codeGB_16[k].Index[1]==c[1] se establecen simultáneamente. Si se ejecuta la siguiente instrucción, codeGB_16[] es un array de estructuras, y codeGB_16[k].Index[0] representa el valor del elemento 0 del miembro índice de la k-ésima estructura del array.
13. LCD 12864: Cada punto de visualización corresponde a un número binario: 1 significa encendido y 0, apagado. La memoria RAM que almacena esta información de la matriz de puntos se denomina memoria de datos de visualización. Para mostrar un gráfico o un carácter chino, se escribe la información de la matriz de puntos correspondiente en la unidad de almacenamiento correspondiente.
El contador de direcciones (AC) de la memoria RAM gráfica solo incrementa automáticamente la dirección horizontal (eje X) en uno. Cuando la dirección horizontal es igual a 0FH, se reinicia a 00H. Sin embargo, no incrementa automáticamente la dirección vertical con un acarreo. Por lo tanto, cuando se escriben varios datos de forma continua, el programa debe determinar si es necesario reiniciar la dirección vertical.
14. Dibujo de RAM (GDRAM) La memoria RAM de visualización de dibujo proporciona 128 × 8 bytes de espacio de memoria. Al modificar la memoria RAM de dibujo, primero se escriben continuamente los valores de las coordenadas horizontales y verticales, y luego se escriben dos bytes de datos en la memoria RAM de dibujo. El contador de direcciones (AC) incrementará automáticamente la dirección horizontal (dirección X) en uno. Cuando la dirección horizontal sea 0XFH, se restablecerá a 00H; la dirección vertical no se incrementará automáticamente en 1. La pantalla de dibujo debe estar apagada durante la escritura en la memoria RAM de dibujo.
[cpp] ver texto plano // Mostrar caracteres chinos void dispString (uchar X, Y,uchar *msg) // Qué fila es X y qué columna es Y. msg son caracteres chinos {if(X==0) write_data(*msg++); //Mostrar caracteres chinos }}////////////////////////////////// //////////////// ////////////////// Mostrar imagen voiddisppicture(uchar code *adder){ uint i,j;//*******Mostrar la configuración del contenido de la mitad superior de la pantalla for(i=0;i<32;i++)//32 direcciones de columna en la mitad superior de la pantalla { write_com(0x80 + i);//ESTABLECER dirección vertical VERTICALADD write_com(0x80);//ESTABLECER dirección horizontal HORIZONTAL ADDfor(j=0;j<16;j++) { write_data(*adder); adder++; }}//************Mostrar la configuración de contenido en la mitad inferior de la pantalla for(i=0;i<32;i++) //{ write_com(0x80 + i); //ESTABLECER dirección vertical VERTICALADD write_com(0x88); //ESTABLECER dirección horizontal HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;} }} En el lenguaje C, se asigna automáticamente espacio para una variable definida, y su dirección es el nombre de la variable. Mediante este nombre, se pueden recuperar los datos de la memoria y obtener nuevos datos mediante cálculos. Sin embargo, en lenguaje ensamblador, el programador debe definir el espacio de almacenamiento y enviar los datos al acumulador para su cálculo. Cada paso requiere la intervención del programador. En el lenguaje C, estos procesos los realiza el compilador.
15. Algunas preguntas y respuestas útiles ①. ¿Cómo se realiza la asignación de memoria de las variables en el lenguaje C para microcontroladores? ¿Es posible que el compilador añada de forma inteligente código de asignación y reciclaje durante el proceso de compilación? Lo fundamental es que, ¿cómo puedo asegurarme de que el programa que he creado no tenga errores de desbordamiento de memoria? Si realizo una operación recursiva, los requisitos de memoria son difíciles de calcular por mi cuenta.
②. ¿El lenguaje C del microcontrolador tendrá restricciones en la definición de variables? Por ejemplo, las operaciones de multiplicación y división de datos de punto flotante se escriben mediante lenguaje ensamblador, y el código es bastante complejo. Si se escribiera directamente en lenguaje C, ¿no sería demasiado simple?
③. En el archivo hexadecimal generado por el lenguaje C del microcontrolador, ¿la distribución de direcciones de la ROM de instrucciones y datos se asigna automáticamente por el compilador? ¿Pueden los usuarios asignarla?
Respuesta 1: Un programa para microcontrolador escrito en lenguaje C se compila primero mediante un programa (aparentemente c51.exe). Una vez finalizada la compilación, se ha configurado el espacio de almacenamiento de las variables, pero aún no se ha asignado la dirección específica (la dirección está flotante). A continuación, se conecta otro programa (aparentemente a51.exe). Tras la conexión, se determina la dirección específica.
Si hay demasiadas variables, el compilador indicará que el segmento de datos es demasiado grande. Para evitar errores de desbordamiento de memoria, lo principal es considerar si la pila se desborda, lo cual depende de la experiencia.
El lenguaje C para microcontroladores generalmente prohíbe la recursión, y las operaciones recursivas suelen evitarse. Al fin y al cabo, los microcontroladores no son ordenadores personales, lo que afectaría a su velocidad. Si se desea utilizar recursión, es más apropiado usar un chip DSP. En resumen, es fundamental elegir el chip adecuado.
Respuesta 2: El tamaño de la variable (número de dígitos) suele ser el mismo que el número de dígitos del acumulador del chip. Por ejemplo, el microcontrolador 51 suele usar 8 bits porque es de 8 bits.
El microcontrolador puede definir variables de bits, pero no matrices de bits. Escribir en lenguaje C parece sencillo, pero en realidad genera la mayor cantidad de código. El microcontrolador utilizado para el control apenas utiliza operaciones de punto flotante, lo que no solo es lento, sino también problemático y consume mucho espacio. Si se trata de un chip DSP, sería mucho mejor si contara con una estructura de hardware adecuada.
Respuesta 3: Generalmente, se asigna automáticamente. Se puede programar combinando lenguaje C y lenguaje ensamblador, o bien ensamblar en línea con Keil C. El intercambio de datos entre el chip y el exterior se realiza a través del puerto.
Número de teléfono de la empresa: +86-0755-83044319
Fax/FAX: +86-0755-83975897
Correo electrónico: 1615456225@qq.com
Pregunta: 3518641314 Gerente Li
Pregunta: 332496225 Gerente Qiu
Dirección: Habitación 809, Edificio C, Edificio de Tecnología Zhantao, Avenida Minzhi n.° 1079, Nuevo Distrito de Longhua, Shenzhen