Actualités
Actualités
Résumé de vulgarisation scientifique le plus convaincant de l'univers cinématographique Marvel
2022-03-16 529

MCU signifie « Microcontroller Unit » (unité de microcontrôleur). Ce microcontrôleur, souvent appelé « microprocesseur monopuce », permet de réduire la fréquence et les spécifications du processeur et d'intégrer sur une seule puce des interfaces périphériques telles que la mémoire, un compteur, l'USB, la conversion analogique-numérique, l'UART, un automate programmable, l'accès direct à la mémoire (DMA) et même des circuits de commande d'écran LCD, formant ainsi un ordinateur au niveau de la puce. Il peut réaliser différentes combinaisons de contrôle pour diverses applications, comme les téléphones portables, les périphériques PC, les télécommandes, l'électronique automobile, les moteurs pas à pas industriels et le contrôle des bras robotisés. Un MCU est visible sur la figure.



UN
Bref historique du développement des microcontrôleurs



L'histoire des microcontrôleurs est relativement récente, mais leur développement a été fulgurant. Leur production et leur développement sont généralement étroitement liés à ceux des microprocesseurs (CPU). Depuis le lancement du premier microprocesseur 4 bits par Intel Corporation aux États-Unis en 1971, leur développement peut être globalement divisé en cinq grandes étapes. Voici une introduction au développement des microcontrôleurs par Intel Corporation.


1971 ou 1976


La phase initiale du développement des microcontrôleurs. En novembre 1971, Intel conçoit l'Intel 4004, un microprocesseur 4 bits intégrant 2 000 transistors par puce, doté de RAM, de ROM et d'un registre à décalage, constituant ainsi le premier microprocesseur MCS-4. L'entreprise lance ensuite le microprocesseur 8 bits Intel 8008, puis d'autres microprocesseurs 8 bits sont commercialisés par d'autres sociétés.


1976 ou 1980


Étage microcontrôleur à faibles performances. Représenté par la série MCS-48 lancée par Intel en 1976, il utilise une structure monolithique intégrant un processeur 8 bits, une interface d'E/S parallèle 8 bits, un compteur/timer 8 bits, de la RAM et de la ROM sur une puce semi-conductrice. Bien que sa plage d'adressage soit limitée (4 Ko maximum), qu'il ne dispose pas d'E/S série, que la capacité de sa RAM et de sa ROM soit réduite et que son système d'interruptions soit relativement simple, ses fonctionnalités répondent aux besoins courants du contrôle industriel et des instruments et compteurs intelligents.


1980 ou 1983


Phase des microcontrôleurs hautes performances. Les microcontrôleurs 8 bits hautes performances lancés à cette étape disposent généralement de ports série, de systèmes de traitement des interruptions multiniveaux et de plusieurs compteurs/temporisateurs 16 bits. La capacité de la RAM et de la ROM intégrées est accrue, et la plage d'adressage peut atteindre 64 Ko. Certaines puces intègrent également une interface de conversion analogique-numérique.


1983~fin des années 1980


Étage microcontrôleur 16 bits. En 1983, Intel a lancé la série de microcontrôleurs 16 bits hautes performances MCS-96. Grâce à l'adoption des technologies de fabrication les plus récentes, le niveau d'intégration de la puce atteint 120 000 transistors par puce.


1990s


Les microcontrôleurs évoluent vers un niveau supérieur dans tous les aspects : intégration, fonctionnalité, vitesse, fiabilité et domaines d'application.



deux
Classification et application des micro-ordinateurs monopuces



Les microcontrôleurs (MCU) se divisent en deux catégories selon leur type de mémoire : ceux sans ROM intégrée et ceux avec ROM intégrée. Pour les puces sans ROM intégrée, une EPROM externe doit être connectée avant utilisation (généralement une 8031). Les puces avec ROM intégrée se répartissent en plusieurs types : EPROM intégrée (par exemple, la 87C51), ROM masquée intégrée (par exemple, la 8051), mémoire Flash intégrée (par exemple, la 89C51) et autres.


Selon leur finalité, on distingue les microcontrôleurs à usage général et ceux à usage spécifique ; selon la largeur du bus de données et la longueur des octets de données pouvant être traités simultanément, on distingue les microcontrôleurs 8, 16 et 32 ​​bits.


Actuellement, le marché le plus important pour les applications de microcontrôleurs (MCU) en Chine est celui de l'électronique grand public, suivi par le secteur industriel et l'électronique automobile. L'électronique grand public comprend les appareils électroménagers, les téléviseurs, les consoles de jeux, les systèmes audio et vidéo, etc. Le secteur industriel englobe les maisons connectées, l'automatisation, les applications médicales, ainsi que la production et la distribution d'énergies nouvelles. Le secteur automobile comprend les groupes motopropulseurs et les systèmes de contrôle de sécurité.



trois
Fonctions de base du microcontrôleur



For most MCUs, the following functions are the most common and basic. For different MCUs, the way they are described may be different, but they are essentially the same:


1. Minuteur (timer) : Bien qu’il existe de nombreux types de minuteurs, on peut les regrouper en deux catégories : les minuteurs à intervalles de temps fixes, dont la durée est définie par le système et non modifiable par le programme utilisateur. Le système propose uniquement quelques intervalles de temps fixes, tels que 32 Hz, 16 Hz, 8 Hz, etc. Ce type de minuteur est plus courant dans les microcontrôleurs 4 bits et peut donc être utilisé pour implémenter des fonctions d’horloge, de temporisation et autres fonctions connexes.


L'autre type est le minuteur programmable. Comme son nom l'indique, la durée de ce type de minuteur est contrôlée par le programme de l'utilisateur. Les méthodes de contrôle incluent : la sélection de la source d'horloge, la sélection du diviseur de fréquence (prédiviseur) et la définition d'un nombre prédéfini. Certains microcontrôleurs intègrent ces trois fonctions simultanément, tandis que d'autres n'en possèdent qu'une ou deux. Ce type de minuteur offre une grande flexibilité d'utilisation et ses applications évoluent constamment. L'une des plus courantes consiste à l'utiliser pour implémenter une sortie PWM.


Comme la source d'horloge peut être librement sélectionnée, ce type de minuterie est généralement associé au compteur d'événements.


2. Ports d'E/S : Tout microcontrôleur possède un certain nombre de ports d'E/S. Sans ports d'E/S, le microcontrôleur ne peut plus communiquer avec le monde extérieur. Selon leur configurabilité, les ports d'E/S peuvent être classés comme suit :


Port d'entrée ou de sortie pure : ce type de port d'E/S est déterminé par la conception matérielle du microcontrôleur. Il ne peut servir qu'en entrée ou en sortie, et aucun logiciel ne peut être utilisé pour des réglages en temps réel.


Lecture et écriture directes des ports d'E/S : par exemple, le port d'E/S du MCS-51 appartient à cette catégorie. Lors de l'exécution d'une instruction de lecture, il s'agit d'un port d'entrée ; lors de l'exécution d'une instruction d'écriture, il devient automatiquement un port de sortie.


Programmation pour configurer le sens d'entrée/sortie : L'entrée ou la sortie de ce type de port d'E/S est configurée par le programme en fonction des besoins. L'application est relativement flexible et permet de réaliser des applications au niveau du bus, telles que le bus I2C, divers bus de commande d'écrans LCD et de pilotes de LED, etc.


For the use of IO ports, an important point that must be kept in mind is: for the input port, there must be a clear level signal to ensure that it cannot float (this can be achieved by adding a pull-up or pull-down resistor); for the output port, the output status level must consider its external connection conditions, and it should be ensured that there is no current pulling or sinking in the standby or static state.


3. External interrupt: External interrupt is also a basic function of most MCUs. It is generally used for real-time triggering of signals, data sampling and status detection. The interrupt methods include rising edge trigger, falling edge trigger and level trigger. External interrupts are generally implemented through input ports. If it is an IO port, its interrupt function will be turned on only when it is set to input; if it is an output port, the external interrupt function will be automatically turned off (there are some exceptions in ATMEL's ATiny series, which can also trigger the interrupt function when it is an output port). The applications of external interrupts are as follows:


Détection des signaux de déclenchement externes : l’une repose sur des exigences en temps réel, telles que la commande des thyristors, la détection de signaux soudains, etc., tandis que l’autre est la nécessité d’économiser de l’énergie.


Mesure de la fréquence du signal : Afin de garantir qu’aucun signal ne soit manqué, l’interruption externe est le choix idéal.


Décodage des données : Dans le domaine des applications de télécommande, afin de réduire les coûts de conception, il est souvent nécessaire d’utiliser un logiciel pour décoder diverses données encodées, comme le décodage des codages Manchester et PWM.


Détection des touches et sortie de veille : les microcontrôleurs qui passent en mode veille doivent généralement être réveillés par des interruptions externes. La méthode la plus simple consiste à appuyer sur une touche, ce qui provoque des changements de niveau.


4. Communication interface: The communication interface provided by MCU generally includes SPI interface, UART, I2C interface, etc., which are described as follows:


Interface SPI : Ce type d’interface est la méthode de communication la plus basique proposée par la plupart des microcontrôleurs. La transmission des données est synchrone et contrôlée par une horloge. Les signaux utilisés sont : SDI (entrée de données série), SDO (sortie de données série), SCLK (horloge série) et le signal Ready. Dans certains cas, ce dernier peut être absent. Cette interface peut fonctionner en mode maître ou en mode esclave. En termes simples, le mode maître dépend de l’appareil qui fournit le signal d’horloge, et l’appareil esclave de l’autre.


UART (Universal Asynchronous Receive Transmit) : Il s’agit de l’interface de transmission asynchrone la plus simple. Elle ne comporte que deux lignes de signal, Rx et Tx. Le format de données de base est le suivant : bit de départ + bit de données (7 ou 8 bits) + bit de parité (paire, impaire ou aucune) + bit d’arrêt (1 ou 2 bits). Le temps de transmission d’un bit de données est appelé débit binaire.


Pour la plupart des microcontrôleurs, la longueur des bits de données, le mode de contrôle des données (contrôle sur bits impairs, pairs ou absence de contrôle), la longueur du bit d'arrêt et le débit en bauds sont configurables par programmation. La méthode la plus courante pour ce type d'interface est la communication avec le port série d'un PC.


Interface I2C : L’I2C est un protocole de transmission de données développé par Philips. Il utilise deux signaux : SDAT (entrée/sortie de données série) et SCLK (horloge série). Son principal avantage réside dans la possibilité de connecter plusieurs périphériques à ce bus et de les identifier et d’y accéder par leur adresse. L’un des atouts majeurs du bus I2C est sa grande facilité d’implémentation logicielle via un port d’E/S. Contrairement à l’interface UART, qui impose des contraintes de débit strictes, son débit de transmission est entièrement contrôlé par SCLK, qui peut être rapide ou lent.


5. Chien de garde (temporisateur de surveillance) : Le chien de garde est une fonction de base de la plupart des microcontrôleurs (certains microcontrôleurs 4 bits peuvent en être dépourvus). Sur la plupart des microcontrôleurs, le chien de garde permet uniquement au programme de se réinitialiser, mais pas de le désactiver (cette configuration est parfois automatique, comme sur certains microcontrôleurs de la série PIC de Microchip). D'autres microcontrôleurs, comme la série KS57 de Samsung, utilisent une méthode spécifique pour déterminer s'il doit être activé. Dès qu'un programme accède au registre du chien de garde, celui-ci est automatiquement activé et ne peut plus être désactivé. En général, le délai de réinitialisation du chien de garde est programmable. Son application principale est d'assurer l'autoréparation des microcontrôleurs en cas de panne inattendue.



Quatre
Fabricant mondial de microcontrôleurs grand public

(Classement sans ordre particulier, par principaux fabricants. Si un fabricant manque à l'appel, merci de l'indiquer dans les commentaires.)




Europe et Amérique




1. Freescale+NXP (Freescale+NXP) : Pays-Bas, fournit principalement des microcontrôleurs 16 bits et 32 bits. Applications : électronique automobile, éclairage LED et général, santé, convergence multimédia, appareils électroménagers et outils électriques, domotique, commande de moteurs, alimentations et convertisseurs de puissance, énergie et réseaux intelligents, automatisation, infrastructures informatiques et de communication.




2. Microchip+Atmel (Microchip Technology + Atmel) : États-Unis, ce fournisseur propose principalement des microcontrôleurs 16 bits et 32 bits. Applications : électronique automobile, applications industrielles, commande de moteurs, automobile, domotique, électroménager, divertissement à domicile, automatisation industrielle, éclairage, Internet des objets, énergie intelligente, équipements électroniques mobiles, périphériques informatiques.




3. Cypress+Spansion (Cypress + Spansion Semiconductor) : société américaine, spécialisée dans les microcontrôleurs 8 bits, 16 bits et 32 bits. Applications : électronique automobile, électroménager, médical, électronique grand public, communications et télécommunications, industrie, sans fil.




4. ADI (Analog Devices) : société américaine, spécialisée dans les microcontrôleurs 8 bits, 16 bits et 32 bits. Applications : aérospatiale et défense, automobile, génie du bâtiment, communications, électronique grand public, énergie, santé, instrumentation et mesure, moteurs, automatisation industrielle, sécurité.




5. Infineon: Germany, mainly provides 16-bit and 32-bit MCUs. Applications: automotive electronics, consumer electronics, engineering, commercial and agricultural vehicles, data processing, electric transportation, industrial applications, medical equipment, mobile equipment, motor control and drive, power supply, for motorcycles, electric bicycles and small electric vehicles, smart grids, lighting, solar system solutions, wind energy system solutions.




6. ST Microelectronics: Italy/France, mainly provides 32-bit MCU. Applications: LED and general lighting, transportation, healthcare, multimedia convergence, home appliances and power tools, building automation technology motor control, power supplies and power converters, energy and smart grids, automation, computer and communication infrastructure.




7. Qualcomm : société américaine, spécialisée dans les microcontrôleurs 16 bits et 32 bits. Applications : smartphones, tablettes, modems sans fil.




8. Texas Instruments : États-Unis, fournit principalement des microcontrôleurs 16 bits et 32 bits. Domaines d’application : électronique automobile, électronique grand public, équipements médicaux, appareils mobiles, communications.




9. Maxim (Maxim) : États-Unis, fournisseur principalement de microcontrôleurs 32 bits. Domaines d’application : électronique automobile, électronique grand public, applications industrielles, sécurité.




Le Japon et la Corée du Sud  




1. Renesas : Japon, fournisseur principalement de microcontrôleurs 16 bits et 32 bits. Domaines d’application : ordinateurs et périphériques, électronique grand public, électronique médicale et de santé, électronique automobile, industrie et communications.




2. Toshiba : Japon, fournit principalement des microcontrôleurs 16 bits et 32 bits. Domaines d’application : électronique automobile, applications industrielles, commande de moteurs, communications sans fil, téléphones mobiles, ordinateurs et périphériques, imagerie, audio et vidéo, appareils électroménagers, éclairage LED, sécurité, gestion de l’énergie, équipements de divertissement.




3. Fujitsu : Japon, fournit principalement des microcontrôleurs 32 bits. Domaines d’application : automobile, médical, mécanique, électroménager.




4. Samsung Electronics : Corée du Sud, fournisseur principalement de microcontrôleurs 16 bits et 32 bits. Applications : électronique automobile, applications industrielles, commande de moteurs, automobile, domotique, électroménager, divertissement à domicile, automatisation industrielle, éclairage, Internet des objets, énergie intelligente, équipements électroniques mobiles, périphériques informatiques.




région de Chine  




Chine continentale  




1. Sigma Microelectronics : Fournit principalement des microcontrôleurs 32 bits, domaines d'application : télécommunications, fabrication, énergie, transport, électricité, etc.




2. Zhuhai Orbit : Fournit principalement des microcontrôleurs 32 bits, domaines d'application : aérospatiale : stations spatiales, navires, aéronefs ; contrôle industriel haut de gamme : ordinateurs embarqués ; contrôle des navires, contrôle industriel, équipements électriques, surveillance environnementale.




3. GigaDevice Innovation: Mainly provides 32-bit MCU, application scope: industrial automation, human-machine interface, motor control, security monitoring, smart home, Internet of Things.




4. Shengsi Microelectronics : Fournit principalement des microcontrôleurs 8 bits et 32 bits. Domaines d’application : petits appareils électroménagers, électronique grand public, télécommandes, souris, batteries au lithium, produits numériques, électronique automobile, instruments et mesures médicaux, jouets, contrôle industriel, domotique et sécurité, etc.




5. Chipsea Technology : Fournit principalement des microcontrôleurs 16 et 32 bits. Domaines d’application : instrumentation, Internet des objets, électronique grand public, électroménager et électronique automobile.




6. Lianhua Integrated Circuit : Fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaines d’application : électronique grand public, électroménager, contrôle industriel, équipements de communication, électronique automobile et informatique.




7. Zhuhai Jianrong : Fournit principalement des microcontrôleurs 8 bits, domaine d'application : appareils ménagers, alimentation mobile.




8. Actions Technology : Fournit principalement des microcontrôleurs 8 bits à 32 bits, domaine d'application : tablettes, maison intelligente, multimédia, Bluetooth, audio wifi.




9. Aisco Microelectronics : Fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaines d’application : puces grand public, puces de communication, puces informatiques et appareils électroménagers.




10. Huaxin Microelectronics : Fournit principalement des microcontrôleurs 8 bits et 4 bits. Applications : récepteurs satellites, chargeurs de téléphones portables, calendriers perpétuels et télécommandes multifonctions.




11. Shanghai Belling (Huada Semiconductor Holdings) : Fournit principalement des microcontrôleurs 8 bits, 16 bits et 32 bits. Applications : périphériques informatiques, téléviseurs haute définition, gestion de l’alimentation, petit électroménager et appareils numériques.




12. Haier Integrated Circuits : Fournit principalement des microcontrôleurs 14 bits, 15 bits et 16 bits. Domaines d’application : électronique grand public, électronique automobile, industrie et instruments intelligents.




13. Beijing Ingenic : Fournit principalement des microcontrôleurs 32 bits, domaine d'application : appareils portables, Internet des objets, appareils électroménagers intelligents, automobiles, électronique grand public, tablettes.




14. China Microelectronics : Fournit principalement des microcontrôleurs 8 bits. Applications : appareils domotiques, électronique automobile, vidéosurveillance, éclairage et aménagement paysager LED, jouets intelligents, maisons connectées et électronique grand public.




15. Circuit intégré Shenzhou Loongson : Fournit principalement des microcontrôleurs 32 bits, domaine d’application : surveillance de l’énergie, réseau intelligent, contrôle numérique industriel, Internet des objets, maison intelligente, surveillance des données.




16. Ziguang Microelectronics : Fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaine d’application : appareils domotiques.




17. Times Minxin : Fournit principalement des microcontrôleurs 32 bits, domaine d'application : navigation automobile, surveillance du trafic, supervision des navires de pêche, réseau de télécommunications énergétiques.




18. China Resources Silicon Microelectronics (filiale de China Resources Microelectronics) : fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaines d’application : électronique grand public, contrôle industriel et électroménager.




19. Technologie nationale de base : Fournit principalement des microcontrôleurs 32 bits, domaine d'application : sécurité de l'information, bureautique, réseaux de communication, sécurité de l'information.




20. Zhongtian Micro : Fournisseur principalement de microcontrôleurs 32 bits. Applications : smartphones, téléviseurs numériques, décodeurs, électronique automobile, GPS, liseuses et imprimantes.




21. China Resources Microelectronics : Fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaines d’application : circuits de commande généraux pour appareils électroménagers, électronique grand public et automatisation industrielle.




22. Zhongying Electronics : Fournit principalement des microcontrôleurs 4 bits, 8 bits, 16 bits et 32 bits. Domaines d’application : appareils électroménagers et moteurs.




23. Lingdong Microelectronics : Fournit principalement des solutions 32 bits, domaine d'application : contrôle de moteur, contrôle Bluetooth, affichage haute définition, chargement sans fil, drones, micro-imprimantes, étiquettes intelligentes, cigarettes électroniques, écrans matriciels LED, etc.




24. Nuvoton Technology : Fournit principalement des microcontrôleurs 8 bits, domaine d'application : éclairage, Internet des objets, etc.




25. Neusoft Carrier : Fournit principalement des microcontrôleurs 8 bits et 32 bits. Applications : appareils électroménagers, maisons intelligentes, instrumentation, contrôleurs d’écrans LCD, contrôle industriel, etc.




26. Betley : Fournit principalement des microcontrôleurs 32 bits, domaine d'application : maison intelligente, contrôle industriel et produits de consommation.




27. Shengquan Technology : Fournit principalement des microcontrôleurs 8 bits, domaine d'application : panneaux d'affichage de petite et moyenne taille pour l'automobile, l'éducation, le contrôle industriel, le médical, etc.




28. Hangshun Chip : Fournit principalement des microcontrôleurs 8 bits et 32 bits. Domaines d’application : automobile, Internet des objets, etc.




29. Fudan Microelectronics : Fournit principalement des microcontrôleurs 16 bits et 32 bits. Applications : compteurs intelligents, serrures de porte intelligentes, etc.




30. Huada Semiconductor : Fournisseur principalement de microcontrôleurs 8 bits, 16 bits et 32 bits. Applications : contrôle industriel, fabrication intelligente, maison connectée et Internet des objets.




Taiwan, Chine  




1. Hongjing Technology : fournit principalement des microcontrôleurs 32 bits. Domaines d'application : communications, contrôle industriel, appareils informatiques et voix.




2. Holtek Semiconductor: mainly provides 8-bit and 32-bit MCUs. Application scope: consumer electronics, LED lighting, etc.




3. Lingyang Technology : fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaine d’application : audio et vidéo domestiques.




4. Zhongying Electronics : fournit principalement des microcontrôleurs 4 bits et 8 bits. Domaines d’application : chargeurs, alimentations mobiles, appareils électroménagers, contrôle industriel.




5. Songhan Technology : fournit principalement des microcontrôleurs 8 bits et 32 bits. Domaines d’application : télécommandes, chargeurs intelligents, systèmes de grande et petite taille, balances électroniques, thermomètres auriculaires, tensiomètres, manomètres de pression des pneus, divers équipements de mesure et de santé.




6. Winbond Electronics : fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaines d’application : électronique automobile, électronique industrielle, réseaux, informatique, électronique grand public, Internet des objets.




7. Technologie Ten Speed : propose principalement des microcontrôleurs 4 bits, 8 bits et 51 bits. Domaines d’application : télécommandes, petits appareils électroménagers.




8. Youhua Microelectronics : fournit principalement des microcontrôleurs 4 bits et 8 bits. Domaines d’application : circuits intégrés d’enregistrement, électronique grand public, produits ménagers.




9. Microcontrôleurs Yingguang Technology : propose principalement des microcontrôleurs 4 bits et 8 bits. Domaines d’application : machines, automatisation, électroménager, robotique.




10. Elan Electronics : fournit principalement des microcontrôleurs 8 bits et 16 bits. Domaines d’application : électronique grand public, ordinateurs, smartphones.
 




cinq
Tips for learning microcontrollers
   




Les principes et fonctions de base de tout microcontrôleur sont similaires. La seule différence réside dans la configuration et le nombre de modules de fonctions périphériques, de systèmes d'instructions, etc.




Les systèmes d'instructions, bien qu'ils paraissent très différents formellement, ne sont en réalité que des symboles différents. Leurs significations, les fonctions à accomplir et les méthodes d'adressage sont fondamentalement similaires.




Pour comprendre un microcontrôleur, il faut d'abord connaître son espace ROM, son espace RAM, le nombre de ports d'E/S, le nombre de temporisateurs et les méthodes de temporisation, les modules de fonctions périphériques fournis (circuits périphériques), les sources d'interruption, la tension de fonctionnement et la consommation d'énergie, etc.




Après avoir compris ces caractéristiques du microcontrôleur, l'étape suivante consiste à comparer les fonctions du microcontrôleur sélectionné avec les fonctions requises pour le développement réel du projet, et à clarifier quelles ressources sont actuellement nécessaires et lesquelles ne sont pas utilisées dans ce projet.




For functions that need to be used in the project but are not provided by the selected MCU, you need to carefully understand the relevant information of the MCU in order to implement them using indirect methods. For example, if the project you are developing needs to communicate with the PC COM port, and the selected MCU does not provide a UART port, you can consider using external interrupts to implement it.




Pour accéder aux ressources nécessaires au développement du projet, il est indispensable de bien comprendre et de lire le manuel*, en ignorant ou en survolant les modules fonctionnels non essentiels. L'apprentissage des microcontrôleurs repose avant tout sur la pratique.




Après avoir clarifié les fonctions pertinentes du microcontrôleur, vous pouvez commencer la programmation.




Pour les débutants ou les concepteurs utilisant ce microcontrôleur pour la première fois, il est possible que certaines descriptions de ses fonctions manquent de clarté. Deux solutions s'offrent à eux : écrire un programme de vérification spécifique pour comprendre les fonctions décrites dans la documentation, ou ignorer temporairement ces descriptions et programmer le microcontrôleur selon sa compréhension actuelle, en le modifiant et l'améliorant ultérieurement lors du débogage. La première méthode convient aux projets disposant de temps libre et aux débutants, tandis que la seconde est plus adaptée aux personnes ayant une certaine expérience du développement de microcontrôleurs ou lorsque les délais sont serrés.




Ne vous attardez pas trop sur la compréhension du système de commandes. Le système d'instructions n'est qu'une représentation de la logique. Vous pouvez uniquement interpréter les instructions pertinentes en fonction de votre propre logique et des exigences logiques du programme lors de la programmation. Au fur et à mesure de votre progression, vous maîtriserez de mieux en mieux le système d'instructions, jusqu'à le mémoriser inconsciemment.




six
Programmation de microcontrôleurs




Il existe une différence majeure entre la programmation de microcontrôleurs et celle de PC. Bien que les outils de développement de microcontrôleurs basés sur le C soient de plus en plus populaires, pour les concepteurs qui privilégient un code efficace et préfèrent l'assembleur, ce langage reste le plus concis et le plus performant.




Pour la programmation des microcontrôleurs, la structure de base reste globalement la même. Elle se divise généralement en trois parties : l’initialisation (qui constitue la principale différence entre la programmation des microcontrôleurs et celle des PC), la boucle principale du programme et le gestionnaire d’interruptions. Leurs descriptions respectives sont les suivantes :




1. Initialisation : Pour la conception de tous les programmes MCU, l’initialisation est l’étape la plus fondamentale et la plus importante, qui comprend généralement les éléments suivants :




Masquer toutes les interruptions et initialiser le pointeur de pile : la partie initialisation ne souhaite généralement pas que des interruptions se produisent.




Effacer la mémoire RAM du système et afficher la mémoire : Bien que cela ne soit pas toujours absolument nécessaire, du point de vue de la fiabilité et de la cohérence, et notamment pour éviter les erreurs inattendues, il est recommandé de développer de bonnes habitudes de programmation.




Initialisation du port d'E/S : en fonction des exigences de l'application, configurez le mode d'entrée et de sortie du port d'E/S concerné. Pour un port d'entrée, configurez sa résistance de rappel (pull-up ou pull-down) ; pour un port de sortie, configurez son niveau de sortie initial afin d'éviter les erreurs.




Paramètres d'interruption : Toutes les sources d'interruption nécessaires au projet doivent être activées et leurs conditions de déclenchement définies. Les interruptions redondantes non utilisées doivent être désactivées.




Initialisation des autres modules fonctionnels : Pour tous les modules fonctionnels périphériques du microcontrôleur qui doivent être utilisés, les paramètres correspondants doivent être configurés conformément aux exigences de l’application. Par exemple, pour la communication UART, le débit en bauds, la longueur des données, la méthode de vérification et la longueur du bit d’arrêt doivent être définis. Pour le temporisateur de programmation, sa source d’horloge, son facteur de division de fréquence et le rechargement des données doivent être configurés.




Initialisation des paramètres : Une fois l’initialisation du matériel et des ressources du microcontrôleur terminée, l’étape suivante consiste à initialiser certaines variables et données utilisées par le programme. Cette initialisation doit être conçue en fonction du projet et de l’architecture générale du programme. Pour certaines applications utilisant une EEPROM pour stocker des données préconfigurées, il est recommandé de copier ces données dans la RAM du microcontrôleur lors de l’initialisation afin d’améliorer la vitesse d’accès aux données et de réduire la consommation d’énergie du système (l’accès à une EEPROM externe augmentant généralement la consommation d’énergie de l’alimentation).




2. Corps de la boucle principale du programme : La plupart des microcontrôleurs fonctionnent en continu pendant une longue période ; leur programme principal est donc généralement conçu comme une boucle. Pour les applications à modes de fonctionnement multiples, il peut y avoir plusieurs boucles, dont le fonctionnement est assuré par des indicateurs d’état. Le corps du programme principal est généralement structuré comme suit :




Programmes de calcul : Les programmes de calcul sont généralement gourmands en temps de calcul, c’est pourquoi nous nous opposons fermement à leur traitement par interruption, en particulier pour les opérations de multiplication et de division.




Programmes de traitement avec des exigences en temps réel faibles ou nulles ;
 




Programme de transmission d'affichage : principalement destiné aux applications avec des pilotes LED et LCD externes.




3. Interrupt handler: The interrupt program is mainly used to handle tasks and events with high real-time requirements, such as detection of external sudden signals, detection and processing of buttons, timing counting, LED display scanning, etc.




En général, le programme d'interruption doit être aussi concis et court que possible. Pour les fonctions ne nécessitant pas de traitement en temps réel, un signal de déclenchement peut être activé dans l'interruption, permettant ainsi au programme principal d'exécuter les opérations correspondantes. Ceci est crucial, notamment pour les microcontrôleurs basse consommation et basse fréquence, qui doivent impérativement garantir une réponse rapide à toutes les interruptions.




4. Pour l'organisation des différents corps de tâches, les différents microcontrôleurs ont des méthodes de traitement différentes :




Par exemple, pour les applications utilisant des microcontrôleurs basse vitesse et basse consommation (Fosc = 32 768 Hz), notamment pour les appareils portables utilisant des écrans LCD classiques, la réactivité aux frappes clavier et l'affichage nécessitent des performances temps réel élevées. On utilise donc généralement des interruptions temporisées pour traiter les frappes clavier et l'affichage des données. En revanche, pour les microcontrôleurs haute vitesse (Fosc > 1 MHz), disposant du temps nécessaire pour exécuter la boucle principale du programme, il suffit de définir les indicateurs de déclenchement dans les interruptions correspondantes et de placer toutes les tâches dans le corps du programme principal pour exécution.




5. En programmation de microcontrôleurs, un point qui requiert une attention particulière est :

Il est nécessaire d'empêcher l'accès ou la modification simultanée d'une même variable ou donnée dans le corps du programme principal et celui d'une interruption. Une méthode efficace consiste à organiser le traitement de ces données dans un module et à déterminer, en fonction de l'état du drapeau de déclenchement, s'il convient d'effectuer des opérations sur ces données. Dans les autres parties du programme (principalement les interruptions), seuls les drapeaux de déclenchement des données à traiter sont activés. Ceci garantit un traitement des données prévisible et unique.




sept   Résumé de la programmation des microcontrôleurs par un ingénieur  




1. Prenez l'habitude de résumer. Résumer, c'est non seulement synthétiser ses apprentissages, mais aussi les réviser et les approfondir. Cela permet également d'éviter de répéter les mêmes erreurs.


2. Avant de commencer à écrire un programme, il est essentiel de bien comprendre le projet, d'en avoir une vision globale et d'en définir la structure générale. Il est primordial de réfléchir attentivement à l'organisation du programme et de déterminer la structure la plus pertinente. Il est nécessaire d'analyser quel module réaliser en premier, les étapes spécifiques de ce module, la manière de nommer chaque fonction, les liens avec les autres modules, etc. Il est conseillé de prendre une feuille de papier et de noter les processus importants.


3. For modular programming in C language, you must first divide each module, program module by module, determine a sequence, follow the sequence, and then write the next module after the module is successful. For header files, write the module's header file after the module is written.


4. Ne négligez pas les avertissements lorsqu'ils apparaissent. Cela signifie qu'il y a probablement un problème dans le programme. Vous devez en trouver la source et la corriger. Soyez précis dans vos recherches. Vous pouvez effectuer des recherches sur Internet ou demander conseil à d'autres personnes. Par exemple, la fonction principale d'un autre projet a peut-être été ajoutée à celui-ci. Il existe peut-être des noms de fonctions en double. Il est également important d'analyser les résultats expérimentaux et la progression étape par étape. Il se peut aussi que l'interface sélectionnée lors de la définition du port soit incorrecte. Parfois, il est bon de faire une pause et de réfléchir si vous n'arrivez vraiment pas à résoudre le problème. Même si cela paraît simple, il faut y prêter attention, car des erreurs peuvent s'y cacher.   
Dans le développement d'applications pour microcontrôleurs, des problèmes tels que l'efficacité du code, la résistance aux interférences et la fiabilité des microcontrôleurs restent des défis importants. Nous résumons ici plusieurs compétences fondamentales à maîtriser pour le développement de microcontrôleurs.        
 
  huit
  Microcontroller development skills  
1. Comment réduire les bogues dans les programmes
Regarding how to reduce program bugs, you should first consider the following out-of-range management parameters that should be considered during system operation.  
 
  • Paramètres physiques : Ces paramètres sont principalement des paramètres d’entrée du système, qui comprennent les paramètres d’excitation, les paramètres de fonctionnement pendant le traitement d’acquisition et les paramètres de résultat à la fin du traitement.
  • Paramètres de ressources : Ces paramètres concernent principalement les ressources des circuits, des dispositifs et des unités fonctionnelles du système, telles que la capacité de mémoire, la longueur de l’unité de stockage et la profondeur d’empilement.
  • Paramètres d'application : Ces paramètres apparaissent souvent comme conditions d'utilisation de certains microcontrôleurs et unités fonctionnelles. Paramètres de processus : Il s'agit des paramètres qui évoluent de manière ordonnée pendant le fonctionnement du système.

2. Comment améliorer l'efficacité du code de programmation en langage C
L'utilisation du langage C pour la programmation de microcontrôleurs est devenue incontournable dans le développement et l'application de ces derniers. Pour une efficacité optimale en programmation C, il est essentiel de bien maîtriser le compilateur C utilisé. Commencez par tester le nombre de lignes d'instructions en langage assembleur correspondant à chaque compilation C, afin d'évaluer précisément l'efficacité. Lors de vos futurs développements, privilégiez les instructions offrant la meilleure efficacité de compilation. Chaque compilateur C présentant des spécificités, l'efficacité de compilation peut varier. Avec un excellent compilateur C pour systèmes embarqués, la longueur du code et le temps d'exécution ne sont que 5 à 20 % supérieurs à ceux de la même fonction écrite en langage assembleur.  
Pour les projets complexes aux délais de développement serrés, le langage C peut être utilisé, à condition de maîtriser parfaitement le langage C et le compilateur C du système microcontrôleur. Il est essentiel de porter une attention particulière aux types de données et aux algorithmes pris en charge par le système de compilation C. Bien que le C soit le langage de haut niveau le plus répandu, les systèmes de compilation varient d'un fabricant de microcontrôleurs à l'autre, notamment pour l'utilisation de certains modules fonctionnels spécifiques. Par conséquent, une méconnaissance de ces spécificités peut engendrer de nombreuses difficultés lors du débogage et réduire les performances d'exécution par rapport au langage assembleur.


3. Comment résoudre le problème d'anti-interférence du microcontrôleur
The most effective way to prevent interference is to remove the interference source and block the interference path, but it is often difficult to do so, so we can only see whether the anti-interference ability of the microcontroller is strong enough. While improving the anti-interference ability of hardware systems, software anti-interference is receiving more and more attention because of its flexible design, saving of hardware resources, and good reliability.  
The most common phenomenon of microcontroller interference is reset. As for the program running away, software traps and watchdogs can actually be used to bring the program back to the reset state. Therefore, the most important thing for microcontroller software to resist interference is to handle the reset state.  
En général, les microcontrôleurs possèdent des registres d'état permettant de déterminer la cause d'une réinitialisation. Il est également possible d'implémenter des registres d'état en mémoire vive (RAM). À chaque réinitialisation du programme, l'analyse de ces registres permet d'identifier la cause et d'exécuter directement le programme correspondant. Ainsi, le programme peut continuer à fonctionner sans interruption, et l'utilisateur ne s'aperçoit pas de la réinitialisation.  
4. Comment tester la fiabilité du système à microcontrôleur
Une fois la conception d'un système à microcontrôleur terminée, il existera différents éléments et méthodes de test pour différents produits de systèmes à microcontrôleur, mais certains doivent être testés :
 
  • Tester l'intégralité du fonctionnement du logiciel du microcontrôleur
  • Test de mise sous tension et hors tension
  • Test de vieillissement
  • Des tests tels que l'ESD et l'EFT

Il est parfois possible de simuler les dommages pouvant survenir lors de l'utilisation. Par exemple, frotter délibérément le port de contact du microcontrôleur avec le corps ou un vêtement pour tester sa résistance à l'électricité statique. Utiliser une perceuse électrique puissante à proximité du microcontrôleur permet de tester sa résistance aux interférences électromagnétiques.


En résumé, le microprocesseur monopuce est devenu un élément essentiel du développement et des applications informatiques. Son importance majeure réside dans la transformation profonde des concepts et des méthodes de conception traditionnels des systèmes de contrôle.


Most of the functions that must be implemented by analog circuits or digital circuits in the past can now be implemented through software methods using microcontrollers. This kind of control technology in which software replaces hardware is also called micro-control technology, which is a revolution in traditional control technology.  
De plus, lors du processus de développement et d'application, nous devons maîtriser les compétences et améliorer l'efficacité afin qu'il puisse être utilisé à des fins plus variées.        
        Neuf
Résumé du fonctionnement de la puce
       
Les opérations sur la puce consistent principalement en des opérations sur ses registres. Chaque registre possède une adresse unique, mappée en mémoire ; une opération sur l'adresse correspondante est donc nécessaire. Pour comprendre le fonctionnement de la puce, il faut d'abord examiner le diagramme temporel, puis identifier les registres correspondants, définir les ports requis (qui seront accessibles par le programme) et enfin écrire les procédures d'écriture et de lecture.


Comment écrire des données dans la puce, comment lire des données et quel port utiliser pour l'entrée ou la lecture (le plus important).


Lorsqu'on connecte des puces via un bus, il est indispensable de comprendre le protocole de ce bus. La puce connectée au bus I2C contrôle principalement les autres puces via ce bus.


1. Un transistor 74HC595 de la matrice de points sert à la sélection des colonnes, et les deux autres à la sélection des couleurs. La matrice de points est équivalente à un ensemble de diodes.


La diode ne s'allume que lorsqu'une extrémité est à l'état haut et l'autre à l'état bas. En revanche, si une extrémité est sélectionnée différemment, différentes couleurs s'afficheront.


Sélection du mode de fonctionnement du temporisateur : les quatre bits de poids fort configurent le temporisateur T1, et les quatre bits de poids faible configurent T0. Les deux derniers bits de chaque mode déterminent ensuite le mode de fonctionnement. Lors de la configuration de deux temporisateurs, veillez à utiliser l’opérateur OU (|). En cas d’utilisation d’interruptions, assurez-vous de bien effacer les temporisateurs qui doivent l’être après l’entrée en interruption.


2. Émetteur-récepteur de port série : Le mode 2 (rechargement automatique de la valeur initiale) est généralement utilisé pour configurer le débit en bauds. Les capacités de traitement des données variant d'un appareil à l'autre, la configuration du débit en bauds vise principalement à assurer la communication entre les appareils à faible vitesse. Le bit d'indicateur d'interruption doit être effacé par logiciel. Lors de la configuration de l'interruption du port série, que celle-ci soit générée par l'envoi ou la réception, le système peut déclencher la fonction d'interruption. Il est donc important de bien configurer cette fonction. (La configuration se fait généralement par détection automatique, que l'ordinateur soit hôte ou esclave).


Si vous utilisez une interruption pour envoyer des données, vous devez d'abord déterminer comment l'activer. Il est donc nécessaire d'effectuer une première envoi avant de pouvoir l'activer. Un seul octet peut être envoyé à la fois, et le bit suivant ne peut être envoyé qu'après l'activation de TI.


3. Le convertisseur PCF8591AD possède quatre canaux d'entrée. Lors de la lecture du PCF8591, le canal sélectionné permet de lire la tension d'entrée correspondante. Les données converties sont stockées dans la puce puis lues. La lecture commence par l'écriture de l'adresse de la puce, suivie de la sous-adresse du périphérique (0x40 | numéro de canal), puis des données lues.


4. La conversion Da consiste d'abord à écrire l'adresse du périphérique dans la puce, puis la sous-adresse (0x40), et enfin la valeur numérique à convertir. Les informations relatives à l'adresse du périphérique sont présentées ci-dessous.


5. Sur l'écran LCD, une fois les données enregistrées et affichées, elles resteront affichées en permanence sans rafraîchissement continu. Pour les modifier, il faudra les saisir à nouveau.


6. Pour la puce d'horloge DS1302, lors de la lecture de données, la première donnée est lue sur le front descendant du huitième signal d'horloge lors de l'écriture, puis la puce prépare la sortie suivante. Il convient de prêter attention à la méthode d'écriture du programme et à l'emplacement de la valeur de retour.


7. Spécifiez d'abord le registre dans le DS1302, puis écrivez-y des données. Le registre de données de la puce indique l'adresse. (Je ne comprends toujours pas bien le programme de protection en écriture. N'y a-t-il pas toujours des écritures ? Pourquoi la protection en écriture est-elle toujours activée ?)


(D'après la personne qui a expliqué précédemment, il est possible de définir un indicateur après l'initialisation. Si cet indicateur est présent, l'initialisation est inutile. Cependant, en cas de coupure de courant, la RAM du microcontrôleur ne peut pas sauvegarder cet indicateur. Il est donc possible d'utiliser la RAM du DS1302 pour le sauvegarder et le relire après la mise sous tension. Je suis moi-même débutant et je compte utiliser le DS1302 prochainement. Je ne sais pas si cette méthode est correcte et je ne l'ai pas encore mise en pratique. Merci de partager vos connaissances.)


8. Il est préférable de noter l'initialisation au cas où vous l'oublieriez. Il est parfois important de vérifier si, lors de la lecture ou de l'écriture, le bit de poids faible ou le bit de poids fort est traité en premier ; cela peut être déterminé à partir du diagramme temporel.


9. Pour un émetteur-récepteur infrarouge, en réception, le niveau du signal (haut ou bas) est déterminé par l'intervalle de temps entre deux fronts descendants. Lors de la programmation, utilisez d'abord un minuteur pour mesurer cet intervalle, sauvegardez-le, puis convertissez-le en binaire (pour plus d'informations sur la programmation, consultez la documentation ; c'est très utile).


10. Moteur pas à pas : Il est principalement utilisé pour la commutation. Le couple du moteur pas à pas diminue lorsque la vitesse augmente. Il est principalement utilisé pour l’alimentation automatique de pièces usinées sur des machines-outils. Il peut également être utilisé dans des applications de contrôle de haute précision.


Le moteur pas à pas est un dispositif à commande en boucle ouverte qui convertit des signaux d'impulsions électriques en déplacements angulaires ou linéaires. En l'absence de surcharge, la vitesse et la position d'arrêt du moteur dépendent uniquement de la fréquence et du nombre d'impulsions du signal, et ne sont pas affectées par les variations de charge. Lorsqu'un signal d'impulsion est reçu, le contrôleur du moteur pas à pas le fait tourner dans la direction définie selon un angle fixe, appelé « angle de pas ». La rotation s'effectue par pas successifs selon cet angle fixe. Le déplacement angulaire peut être contrôlé en ajustant le nombre d'impulsions pour un positionnement précis ; parallèlement, la vitesse et l'accélération de rotation du moteur peuvent être contrôlées en ajustant la fréquence des impulsions pour une régulation de vitesse.


11. Servomoteur : Un servomoteur est un moteur qui contrôle le fonctionnement des composants mécaniques d'un système d'asservissement. Il s'agit d'un dispositif de transmission indirecte qui assiste le moteur. Les servomoteurs permettent un contrôle très précis de la vitesse et de la position, et convertissent les signaux de tension en couple et en vitesse de rotation pour actionner les objets contrôlés. La vitesse du rotor du servomoteur est contrôlée par le signal d'entrée et réagit rapidement. Dans un système de commande automatique, il est utilisé comme actionneur et présente les caractéristiques suivantes : faible constante de temps électromécanique, linéarité élevée, tension de démarrage élevée, etc. Il convertit le signal électrique reçu en un déplacement angulaire ou une vitesse angulaire sur l'arbre moteur. On distingue deux catégories de servomoteurs : les servomoteurs à courant continu (CC) et les servomoteurs à courant alternatif (CA). Leur principale caractéristique est l'absence de rotation lorsque la tension du signal est nulle, et la diminution constante de la vitesse de rotation à mesure que le couple augmente. Moteur CC : Large gamme, notamment utilisé dans les petits véhicules.


12. Aperçu des caractères chinois :
Pour afficher des caractères chinois sur un écran ou une imprimante, ces caractères sont conçus sous forme de matrice de points selon des symboles graphiques, et le code de matrice de points correspondant (code glyphe) est obtenu.


La méthode d'encodage unifiée utilisée pour représenter les caractères chinois sur ordinateur génère un encodage interne (tel qu'un code normalisé national), unique (équivalent au numéro d'identification du caractère). L'encodage externe, conçu pour faciliter la saisie des caractères chinois, est appelé code d'entrée. Ce code d'entrée varie selon les méthodes d'encodage et présente donc une grande diversité. Le code d'affichage et d'impression des caractères chinois est appelé code glyphe. L'ordinateur recherche le code glyphe du caractère dans la bibliothèque de polices grâce à son code interne et effectue sa conversion.


Code intégré à l'appareil photo


Conformément à la norme nationale de codage, chaque caractère chinois possède un code binaire spécifique. Cependant, ce code entre en conflit avec le code ASCII lors du traitement interne par l'ordinateur. Pour résoudre ce problème, on ajoute 1 au premier octet de chaque caractère de la norme nationale. Le code ASCII n'utilisant que 7 bits, le « 1 » initial sert de marqueur pour identifier les caractères chinois. Lorsque l'ordinateur traite un code commençant par « 1 », il l'interprète comme un caractère chinois ; lorsqu'il traite un code commençant par « 0 », il l'interprète comme un code ASCII. Le code de la norme nationale ainsi modifié (code interne) devient le code interne.


If we replace the "." of this "口" graphic with "0", we can get the glyph code of "口" very vividly: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. When the computer wants to output "口", it first finds the first address of the display font library, calculates based on the internal code of "口", and then finds the glyph code of "口", and then scans the screen sequentially according to the glyph code (in binary) through the control of the character generator. Where the binary code is "0", the place where it is "0" is scanned, and the place where it is "1" is scanned to highlight, so the character pattern of "口" can be obtained.


Les polices de caractères chinois sont organisées selon l'ordre du code standard national et stockées en mémoire sous forme de fichiers binaires, formant une bibliothèque de polices de caractères chinois, également appelée bibliothèque de glyphes de caractères chinois ou bibliothèque de caractères chinois.


Deux méthodes d'encodage, voir le fichier d'en-tête


GB1616.h//------------------ Définition de la structure de données de la police de caractères chinois ------------------------//structtypFNT_GB16 //Structure de données de la police de caractères chinois {unsignedcharIndex[3]; //Index du code interne du caractère chinois unsignedchar Msk[32];//Données du code de la matrice de points }; /// ... :Xu;largeur×hauteur (pixels):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00,0x00,
 
Cette structure est très simple : elle contient le code interne et la séquence de points. La bibliothèque de matrices de points précédente était organisée selon le code interne, sans nécessiter d'index. L'index de code interne devenait nécessaire pour afficher uniquement des caractères chinois. (Le caractère chinois « Xu » en début de chaîne permet de trouver sa séquence de points lors de l'affichage de « Xu ». Cette séquence est de mon invention. Lors de l'affichage avec 1602, la puce possédant déjà une séquence de points anglaise en mémoire, il est inutile de l'écrire.) En général, deux octets suffisent pour le code interne. Si un octet supplémentaire est utilisé, il suffit d'ajouter un zéro à la fin. Ainsi, la chaîne de caractères chinois peut être directement insérée dans le code interne correspondant.


codeGB_16[k].Index[0] codeGB_16[k] indicates that there is an array of structure typFNT_GB16 called codeGB_16 codeGB_16[k] is the k+1 member of the array index is a member of structure typFNT_GB16, so it can be referenced with codeGB_16[k].Index. At the same time, index is an array, so it can be indexed[0] If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && is a logical AND operator, which means that the values on both sides of the && symbol are true. Only the value of && is true, that is, true && true =true. This sentence means: codeGB_16[k].Index[0]==c[0] and codeGB_16[k].Index[1]==c[1] are established at the same time. If the following statement is executed, codeGB_16[] is a structure array, codeGB_16[k].Index[0] means the 0th element value of the index member of the Kth structure of the structure array.  
      13. 12864 LCD:

Chaque point d'affichage correspond à un nombre binaire : 1 signifie allumé, 0 signifie éteint. La mémoire vive (RAM) qui stocke ces informations matricielles est appelée mémoire de données d'affichage. Afficher un graphique ou un caractère chinois consiste à écrire les informations matricielles correspondantes dans l'unité de stockage appropriée.  
Le compteur d'adresses (AC) de la mémoire RAM graphique incrémente automatiquement l'adresse horizontale (axe X) de un. Lorsque l'adresse horizontale vaut 0FH, il est réinitialisé à 00H. En revanche, l'adresse verticale n'est pas incrémentée automatiquement avec retenue. Par conséquent, lors d'écritures successives de plusieurs données, le programme doit déterminer si l'adresse verticale doit être réinitialisée.


14. Mémoire vive (GDRAM)

La mémoire RAM de l'affichage offre un espace mémoire de 128 × 8 octets. Lors de la modification de cette mémoire, écrivez d'abord les valeurs des coordonnées horizontales et verticales de manière contiguë, puis deux octets de données. Le compteur d'adresses (AC) incrémente automatiquement l'adresse horizontale (adresse X). Lorsque l'adresse horizontale atteint 0XFH, elle est réinitialisée à 00H ; l'adresse verticale n'est pas incrémentée automatiquement. L'affichage doit être éteint pendant l'écriture dans la mémoire RAM.

 
[cpp] afficher la copie brute//Afficher les caractères chinois void dispString (uchar X, Y,uchar *msg)//Quelle ligne est X et quelle colonne est Y. msg est un caractère chinois {if(X==0) write_data(*msg++); //Afficher les caractères chinois }}/////////////////////////////////// ///////////////// /////////////////// Afficher l'image void disppicture(uchar code *adder){ uint i,j;//*******Afficher les paramètres de contenu de la moitié supérieure de l'écran for(i=0;i<32;i++)//32 adresses de colonne dans la moitié supérieure de l'écran { write_com(0x80 + i);//DÉFINIR l'adresse verticale VERTICALADD write_com(0x80);//DÉFINIR l'adresse horizontale HORIZONTAL ADDfor(j=0;j<16;j++) { write_data(*adder); adder++; }}//************Paramètres d'affichage du contenu dans la moitié inférieure de l'écran for(i=0;i<32;i++) //{ write_com(0x80 + i); //DÉFINIR l'adresse verticale VERTICALADD write_com(0x88); //DÉFINIR l'adresse horizontale HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;} }}
 
En langage C, l'espace mémoire est automatiquement alloué à une variable définie, et son adresse correspond à son nom. Grâce à ce nom, les données peuvent être récupérées en mémoire et de nouvelles données peuvent être obtenues par calcul. En assembleur, en revanche, le programmeur doit définir l'espace de stockage et envoyer les données à l'accumulateur pour le calcul. Chaque étape requiert une intervention du programmeur. En langage C, ces processus sont effectués par le compilateur.




15. Quelques questions et réponses utiles

1. Comment l'allocation mémoire des variables est-elle effectuée en langage C pour microcontrôleur ? Le compilateur ajoute-t-il intelligemment le code d'allocation et de recyclage lors de la compilation ? L'important est de savoir comment garantir que mon programme ne génère pas d'erreurs de dépassement de mémoire. Si j'effectue une opération récursive, il est difficile de calculer moi-même les besoins en mémoire.




2. Le langage C du microcontrôleur impose-t-il des restrictions à la définition des variables ? Par exemple, les opérations de multiplication et de division des nombres à virgule flottante sont écrites en assembleur, et le code est assez complexe. S'il était écrit directement en C, ne serait-il pas trop simple ?




③ Dans le fichier hexadécimal généré par le langage C du microcontrôleur, la distribution des adresses des ROM d'instructions et de données est-elle automatiquement attribuée par le compilateur ? Les utilisateurs peuvent-ils la modifier ?




Réponse 1 : Un programme de microcontrôleur écrit en langage C est d'abord compilé par un programme (probablement c51.exe). Une fois la compilation terminée, l'espace mémoire alloué aux variables est défini, mais l'adresse spécifique n'est pas encore attribuée (l'adresse est flottante). Ensuite, un autre programme (probablement a51.exe) est lancé. Après ce lancement, l'adresse spécifique est déterminée.  
Si le nombre de variables est trop élevé, le compilateur signalera que le segment de données est trop volumineux. Pour éviter une erreur de dépassement de mémoire, il faut principalement vérifier si la pile déborde, et cela dépend de l'expérience.




Le langage C des microcontrôleurs interdit généralement la récursivité, et les opérations récursives sont généralement évitées. En effet, les microcontrôleurs ne sont pas des ordinateurs, ce qui impacte leurs performances. Si la récursivité est nécessaire, il est préférable d'utiliser un processeur de signal numérique (DSP). En résumé, il est essentiel de choisir le processeur adapté.




Réponse 2 : La taille de la variable (nombre de chiffres) correspond généralement au nombre de chiffres de l’accumulateur du microcontrôleur. Par exemple, 51 utilise généralement 8 bits car il s’agit d’un microcontrôleur 8 bits.

Le microcontrôleur peut définir des variables binaires, mais pas de tableaux de bits. Programmer en C semble simple, mais génère en réalité une quantité importante de code. Le microcontrôleur utilisé pour le contrôle utilise très peu les opérations en virgule flottante, ce qui est non seulement lent, mais aussi complexe et gourmand en ressources. S'il s'agit d'une puce DSP, une architecture matérielle adaptée serait bien plus performante.




Réponse 3 : Généralement, l’allocation est automatique. La programmation peut se faire en langage C et en langage assembleur, ou par assemblage en ligne avec Keil C. L’échange de données entre la puce et l’extérieur se fait via le port.



Numéro de téléphone de l'entreprise : +86-0755-83044319
Fax/FAX : +86-0755-83975897
Courriel : 1615456225@qq.com
QQ : 3518641314 Gestionnaire Li

QQ : 332496225 Gestionnaire Qiu

Adresse : Salle 809, Bâtiment C, Immeuble technologique Zhantao, n° 1079 avenue Minzhi, Nouveau district de Longhua, Shenzhen

whatsapp

Ligne d'assistance

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950