MCU significa Unidade Microcontroladora. A abreviação de microcontrolador em chinês, comumente conhecido como microcomputador de chip único, consiste em reduzir a frequência e as especificações da CPU, integrando interfaces periféricas como memória, contador, USB, conversão A/D, UART, PLC, DMA e até mesmo circuitos de driver de LCD em um único chip, formando um computador em nível de chip. Ele pode executar diferentes combinações de controle para diversas aplicações, como telefones celulares, periféricos de PC, controles remotos, eletrônica automotiva, motores de passo industriais e controle de braços robóticos. Um exemplo de MCU pode ser visto na figura.
um
A brief history of the development of microcontrollers
A história dos microcontroladores não é longa, mas seu desenvolvimento tem sido muito rápido. Sua produção e desenvolvimento geralmente acompanham a produção e o desenvolvimento dos microprocessadores (CPUs). Desde que a Intel Corporation, dos Estados Unidos, lançou seu primeiro microprocessador de 4 bits em 1971, seu desenvolvimento pode ser dividido em cinco fases principais. A seguir, apresentamos uma introdução ao desenvolvimento dos microcontroladores pela Intel Corporation.
1971 1976 ~
A fase inicial do desenvolvimento de microcontroladores. Em novembro de 1971, a Intel projetou o Intel 4004, um microprocessador de 4 bits com 2,000 transistores integrados por chip, equipado com RAM, ROM e registradores de deslocamento, formando o primeiro microprocessador MCS-4. Em seguida, lançou o microprocessador de 8 bits Intel 8008, e outros microprocessadores de 8 bits foram lançados por outras empresas.
1976 1980 ~
Estágio de microcontrolador de baixo desempenho. Representado pela série MCS-48 lançada pela Intel em 1976, utiliza uma estrutura monolítica que integra uma CPU de 8 bits, interface de E/S paralela de 8 bits, temporizador/contador de 8 bits, RAM e ROM em um único chip semicondutor. Embora seu alcance de endereçamento seja limitado (não mais que 4 KB), não possua E/S serial, a capacidade de RAM e ROM seja pequena e o sistema de interrupções seja relativamente simples, suas funções atendem às necessidades de controle industrial geral e de instrumentos e medidores inteligentes.
1980 1983 ~
High-performance microcontroller stage. The high-performance 8-bit microcontrollers launched at this stage generally have serial ports, multi-level interrupt processing systems, and multiple 16-bit timers/counters. The capacity of the on-chip RAM and ROM is increased, and the addressing range can reach 64 KB. Some chips also have an A/D conversion interface.
1983 - final da década de 1980
Estágio de microcontrolador de 16 bits. Em 1983, a Intel lançou a série de microcontroladores de alto desempenho de 16 bits MCS-96. Graças à adoção da mais recente tecnologia de fabricação, o nível de integração do chip chega a 120,000 transistores por chip.
1990s
Os microcontroladores estão evoluindo para um nível superior em todos os aspectos de integração, funcionalidade, velocidade, confiabilidade e campos de aplicação.
dois
Classificação e aplicação de microcomputadores de chip único
MCUs can be divided into two types according to their memory types: those without on-chip ROM and those with on-chip ROM. For chips without on-chip ROM, an external EPROM must be connected before they can be used (typically 8031); chips with on-chip ROM are divided into on-chip EPROM type (typical chip is 87C51), MASK on-chip mask ROM type (typical chip is 8051), on-chip Flash type (typical chip is 89C51) and other types.
De acordo com a finalidade, podem ser divididos em tipos de uso geral e de uso específico; de acordo com a largura do barramento de dados e o comprimento dos bytes de dados que podem ser processados de uma só vez, podem ser divididos em MCUs de 8, 16 e 32 bits.
Atualmente, o mercado doméstico de microcontroladores (MCUs) mais amplo está no setor de eletrônicos de consumo, seguido pelos setores industrial e automotivo. Os eletrônicos de consumo incluem eletrodomésticos, televisores, consoles de jogos, sistemas de áudio e vídeo, etc. Os setores industriais incluem casas inteligentes, automação, aplicações médicas e geração e distribuição de novas energias. O setor automotivo abrange sistemas de transmissão e controle de segurança.
três
Basic functions of microcontroller
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. Temporizador (Timer): Embora existam muitos tipos de temporizadores, eles podem ser resumidos em duas categorias: Um tipo é o temporizador com intervalos de tempo fixos, ou seja, o tempo de temporização é definido pelo sistema e não pode ser controlado pelo programa do usuário. O sistema fornece apenas alguns intervalos de tempo fixos para o programa do usuário escolher, como 32 Hz, 16 Hz, 8 Hz, etc. Este tipo de temporizador é mais comum em microcontroladores de 4 bits, portanto, pode ser usado para implementar funções de clock, temporização e outras funções relacionadas.
O outro tipo é o Temporizador Programável. Como o nome sugere, o tempo de temporização desse tipo de temporizador pode ser controlado pelo programa do usuário. Os métodos de controle incluem: seleção da fonte de clock, seleção da divisão de frequência (pré-escala) e configuração do número de pré-seleção. Alguns microcontroladores possuem os três simultaneamente, enquanto outros podem ter apenas um ou dois deles. Esse tipo de temporizador é muito flexível e seu uso prático está em constante evolução. Uma das aplicações mais comuns é a implementação de uma saída PWM.
Como a fonte de clock pode ser selecionada livremente, esse tipo de temporizador geralmente é combinado com o contador de eventos.
2. Portas de E/S: Qualquer MCU possui um certo número de portas de E/S. Sem portas de E/S, o MCU perde o canal de comunicação com o mundo externo. De acordo com a configurabilidade das portas de E/S, elas podem ser divididas nos seguintes tipos:
Pure input or pure output port: This type of IO port is determined by the MCU hardware design. It can only be input or output, and software cannot be used for real-time settings.
Portas de E/S de leitura e escrita direta: Por exemplo, a porta de E/S do MCS-51 pertence a este tipo de porta. Quando a instrução de leitura da porta de E/S é executada, ela se torna uma porta de entrada; quando a instrução de escrita da porta de E/S é executada, ela se torna automaticamente uma porta de saída.
Programação para definir a direção de entrada e saída: A entrada ou saída deste tipo de porta de E/S é configurada pelo programa de acordo com as necessidades reais. A aplicação é relativamente flexível e pode implementar algumas aplicações em nível de barramento, como o barramento I2C, diversos barramentos de controle de LCD, drivers de LED, etc.
Para a utilização de portas de E/S, um ponto importante a ser considerado é: para a porta de entrada, deve haver um sinal de nível claro para garantir que não fique em estado flutuante (isso pode ser obtido adicionando um resistor pull-up ou pull-down); para a porta de saída, o nível de status da saída deve levar em conta as condições de conexão externas, e deve-se garantir que não haja consumo ou perda de corrente no estado de espera ou estático.
3. Interrupção externa: A interrupção externa também é uma função básica da maioria dos MCUs. Geralmente, é usada para acionamento em tempo real de sinais, amostragem de dados e detecção de status. Os métodos de interrupção incluem acionamento por borda de subida, acionamento por borda de descida e acionamento por nível. As interrupções externas geralmente são implementadas por meio de portas de entrada. Se for uma porta de E/S, sua função de interrupção será ativada somente quando configurada como entrada; se for uma porta de saída, a função de interrupção externa será desativada automaticamente (há algumas exceções na série ATiny da ATMEL, que também pode acionar a função de interrupção quando configurada como porta de saída). As aplicações de interrupções externas são as seguintes:
Detecção de sinais de disparo externos: Uma delas baseia-se em requisitos de tempo real, como o controle de tiristores, a detecção de sinais repentinos, etc., enquanto a outra visa à economia de energia.
Medição da frequência do sinal: Para garantir que nenhum sinal seja perdido, a interrupção externa é a escolha ideal.
Decoding of data: In the field of remote control applications, in order to reduce the cost of design, it is often necessary to use software to decode various encoded data, such as the decoding of Manchester and PWM encoding.
Detecção de teclas e ativação do sistema: Para microcontroladores que entram em estado de repouso, geralmente é necessário ativá-los por meio de interrupções externas. A forma mais básica é o pressionamento de uma tecla, que produz mudanças de nível através da ação da tecla.
4. Interface de comunicação: A interface de comunicação fornecida pelo MCU geralmente inclui interface SPI, UART, interface I2C, etc., que são descritas a seguir:
Interface SPI: Este tipo de interface é o método de comunicação mais básico fornecido pela maioria dos microcontroladores. Sua transmissão de dados é controlada por um clock síncrono. Os sinais incluem: SDI (entrada de dados serial), SDO (saída de dados serial), SCLK (clock serial) e sinal de Pronto; em alguns casos, pode não haver sinal de Pronto; este tipo de interface pode operar no modo mestre ou no modo escravo. Em termos simples, depende de quem fornece o sinal de clock. A parte que fornece o clock é o mestre e a outra parte é o escravo.
UART (Universal Asynchronous Receive Transmit): É a interface de transmissão assíncrona mais básica. Possui apenas duas linhas de sinal, Rx e Tx. O formato básico de dados é: Bit de Início + Bit de Dados (7 bits/8 bits) + Bit de Paridade (Par, Ímpar ou Nenhum) + Bit de Parada (1 a 2 bits). O tempo ocupado por um bit de dados é chamado de taxa de transmissão (Baud Rate).
For most MCUs, the length of data bits, data check mode (odd check, even check or no check), stop bit length and Baud Rate can be flexibly set through program programming. The most commonly used method of this type of interface is to communicate with the serial port of a PC.
I2C interface: I2C is a data transmission protocol developed by Philips. It is also implemented using 2 signals: SDAT (serial data input and output) and SCLK (serial clock). Its biggest benefit is that multiple devices can be attached to this bus and identified and accessed through addresses; one of the biggest benefits of the I2C bus is that it is very convenient to use software to implement it through the IO port. Its transmission data rate is completely controlled by SCLK, which can be fast or slow, unlike the UART interface, which has strict rate requirements.
5. Watchdog (temporizador watchdog): O watchdog também é uma configuração básica da maioria dos microcontroladores (alguns microcontroladores de 4 bits podem não ter essa função). O watchdog da maioria dos microcontroladores permite apenas que o programa o reinicie, mas não o desligue (alguns são configurados durante a gravação do programa, como nos microcontroladores da série PIC da Microchip), enquanto outros usam um método específico para decidir se devem ligá-lo, como a série KS57 da Samsung. Assim que o programa acessa o registrador do watchdog, ele é ligado automaticamente e não pode ser desligado novamente. De modo geral, o tempo de reinicialização do watchdog pode ser configurado programaticamente. A aplicação mais básica do watchdog é fornecer uma capacidade de autorrecuperação para microcontroladores que travam devido a falhas inesperadas.
Quatro
Fabricante global de microcontroladores convencionais
(Classificados sem ordem específica, organizados por fabricantes principais. Se estiver faltando alguma informação, por favor, adicione na área de comentários.)
Europa e América
1. Freescale+NXP (Freescale+NXP): Holanda, fornece principalmente MCUs de 16 e 32 bits. Aplicações: Eletrônica automotiva, LED e iluminação geral, saúde, convergência multimídia, eletrodomésticos e ferramentas elétricas, tecnologia de automação predial, controle de motores, fontes de alimentação e conversores de energia, energia e redes inteligentes, automação, infraestrutura de computadores e comunicação.
2. Microchip+Atmel (Microchip Technology + Atmel): Dos Estados Unidos, fornece principalmente microcontroladores de 16 e 32 bits. Aplicações: eletrônica automotiva, uso industrial, controle de motores, automóveis, automação predial, eletrodomésticos, entretenimento doméstico, automação industrial, iluminação, Internet das Coisas (IoT), energia inteligente, equipamentos eletrônicos móveis e periféricos de computador.
3. Cypress+Spansion (Cypress + Spansion Semiconductor): Empresa dos Estados Unidos, fornece principalmente microcontroladores (MCUs) de 8, 16 e 32 bits. Aplicações: eletrônica automotiva, eletrodomésticos, equipamentos médicos, eletrônicos de consumo, comunicações e telecomunicações, indústria e tecnologia sem fio.
4. ADI (Analog Devices): Estados Unidos, fornece principalmente microcontroladores de 8, 16 e 32 bits. Aplicações: Aeroespacial e defesa, aplicações automotivas, tecnologia predial, comunicações, eletrônicos de consumo, energia, saúde, instrumentação e medição, motores, automação industrial, segurança.
5. Infineon: Alemanha, fornece principalmente microcontroladores de 16 e 32 bits. Aplicações: eletrônica automotiva, eletrônica de consumo, engenharia, veículos comerciais e agrícolas, processamento de dados, transporte elétrico, aplicações industriais, equipamentos médicos, equipamentos móveis, controle e acionamento de motores, fontes de alimentação para motocicletas, bicicletas elétricas e pequenos veículos elétricos, redes inteligentes, iluminação, soluções para sistemas de energia solar e soluções para sistemas de energia eólica.
6. ST Microelectronics: Itália/França, fornece principalmente microcontroladores de 32 bits. Aplicações: iluminação LED e geral, transporte, saúde, convergência multimídia, eletrodomésticos e ferramentas elétricas, tecnologia de automação predial, controle de motores, fontes de alimentação e conversores de energia, energia e redes inteligentes, automação, infraestrutura de computadores e comunicação.
7. Qualcomm: The United States, mainly provides 16-bit and 32-bit MCUs. Applications: Smartphones, tablets, wireless modems.
8. Texas Instruments: Estados Unidos, fornece principalmente microcontroladores de 16 e 32 bits. Aplicações: eletrônica automotiva, eletrônica de consumo, equipamentos médicos, dispositivos móveis e comunicações.
9. Maxim (Maxim): Estados Unidos, fornece principalmente MCUs de 32 bits. Âmbito de aplicação: eletrônica automotiva, eletrônica de consumo, aplicações industriais, segurança.
Japão e Coreia do Sul
1. Renesas: Japão, fornece principalmente microcontroladores de 16 e 32 bits. Âmbito de aplicação: computadores e periféricos, eletrônicos de consumo, eletrônicos médicos e de saúde, eletrônicos automotivos, indústria e comunicações.
2. Toshiba: Japão, fornece principalmente microcontroladores de 16 e 32 bits. Aplicações: eletrônica automotiva, uso industrial, controle de motores, comunicações sem fio, telefones celulares, computadores e periféricos, imagem, áudio e vídeo, eletrodomésticos, iluminação LED, segurança, gerenciamento de energia e equipamentos de entretenimento.
3. Fujitsu: Japão, fornece principalmente microcontroladores de 32 bits. Âmbito de aplicação: automotivo, médico, maquinário, eletrodomésticos.
4. Samsung Electronics: Coreia do Sul, fornece principalmente microcontroladores (MCUs) de 16 e 32 bits. Aplicações: eletrônica automotiva, uso industrial, controle de motores, automóveis, automação predial, eletrodomésticos, entretenimento doméstico, automação industrial, iluminação, Internet das Coisas (IoT), energia inteligente, equipamentos eletrônicos móveis e periféricos de computador.
China region
China continental
1. Sigma Microelectronics: Fornece principalmente microcontroladores de 32 bits, com aplicações em telecomunicações, manufatura, energia, transporte, eletricidade, etc.
2. Zhuhai Orbit: Fornece principalmente MCUs de 32 bits, com foco em aplicações nas áreas aeroespacial (estações de satélite, navios e aeronaves); controle industrial de ponta (computadores embarcados, controle naval, equipamentos de energia e monitoramento ambiental).
3. Inovação da GigaDevice: Fornece principalmente MCUs de 32 bits, com aplicações em: automação industrial, interface homem-máquina, controle de motores, monitoramento de segurança, casas inteligentes e Internet das Coisas.
4. Shengsi Microelectronics: Fornece principalmente microcontroladores (MCUs) de 8 e 32 bits. Aplicações: pequenos eletrodomésticos, eletrônicos de consumo, controles remotos, mouses, baterias de lítio, produtos digitais, eletrônica automotiva, instrumentos e medições médicas, brinquedos, controle industrial, casas inteligentes e segurança, entre outros.
5. Chipsea Technology: Fornece principalmente MCUs de 16 e 32 bits. Âmbito de aplicação: instrumentação, Internet das Coisas, eletrônicos de consumo, eletrodomésticos e eletrônica automotiva.
6. Lianhua Integrated Circuit: Fornece principalmente microcontroladores (MCUs) de 8 e 16 bits. Aplicações: eletrônicos de consumo, eletrodomésticos, controle industrial, equipamentos de comunicação, eletrônica automotiva e computadores.
7. Zhuhai Jianrong: Fornece principalmente microcontroladores de 8 bits, com aplicações em eletrodomésticos e fontes de alimentação portáteis.
8. Actions Technology: Fornece principalmente MCUs de 8 a 32 bits, com aplicações em: tablets, casas inteligentes, multimídia, Bluetooth e áudio Wi-Fi.
9. Aisco Microelectronics: Fornece principalmente microcontroladores de 8 e 16 bits. Aplicações: chips para o consumidor, chips de comunicação, chips de informação e eletrodomésticos.
10. Huaxin Microelectronics: Fornece principalmente microcontroladores de 8 e 4 bits. Aplicações: receptores de satélite, carregadores de celular, calendários perpétuos e controles remotos multifuncionais.
11. Shanghai Belling (Huada Semiconductor Holdings): Fornece principalmente microcontroladores de 8, 16 e 32 bits. Aplicações: periféricos de computador, HDTV, gerenciamento de energia, pequenos eletrodomésticos e dispositivos digitais.
12. Haier Integrated Circuits: Fornece principalmente microcontroladores (MCUs) de 14, 15 e 16 bits. Aplicações: eletrônicos de consumo, eletrônicos automotivos, indústria e instrumentos inteligentes.
13. Beijing Ingenic: Fornece principalmente MCUs de 32 bits, com aplicações em dispositivos vestíveis, Internet das Coisas, eletrodomésticos inteligentes, automóveis, eletrônicos de consumo e tablets.
14. China Microelectronics: Fornece principalmente microcontroladores de 8 bits. Aplicações: eletrodomésticos inteligentes, eletrônica automotiva, monitoramento de segurança, iluminação LED e paisagismo, brinquedos inteligentes, casas inteligentes e eletrônicos de consumo.
15. Shenzhou Loongson Integrated Circuit: Fornece principalmente MCUs de 32 bits, com aplicações em: monitoramento de energia, redes inteligentes, controle digital industrial, Internet das Coisas, casas inteligentes e monitoramento de dados.
16. Ziguang Microelectronics: Fornece principalmente microcontroladores de 8 e 16 bits. Aplicação: eletrodomésticos inteligentes.
17. Times Minxin: Mainly provides 32-bit MCU, application scope: car navigation, traffic monitoring, fishing vessel supervision, power telecommunications network.
18. China Resources Silicon Microelectronics (uma subsidiária da China Resources Microelectronics): fornece principalmente MCUs de 8 e 16 bits. Âmbito de aplicação: eletrônicos de consumo, controle industrial e eletrodomésticos.
19. Tecnologia Nacional Essencial: Fornece principalmente MCU de 32 bits, com escopo de aplicação nas áreas de segurança da informação, automação de escritórios, redes de comunicação e segurança da informação.
20. Zhongtian Micro: Mainly provides 32-bit MCUs. Applications: smartphones, digital TVs, set-top boxes, automotive electronics, GPS, e-readers, and printers.
21. China Resources Microelectronics: Fornece principalmente microcontroladores (MCUs) de 8 e 16 bits. Âmbito de aplicação: circuitos de controle geral para eletrodomésticos, eletrônicos de consumo e controle de automação industrial.
22. Zhongying Electronics: Fornece principalmente microcontroladores (MCUs) de 4, 8, 16 e 32 bits. Aplicações: eletrodomésticos e motores.
23. Lingdong Microelectronics: Fornece principalmente processadores de 32 bits, com aplicações em: controle de motores, controle Bluetooth, displays de alta definição, carregamento sem fio, drones, microimpressoras, etiquetas inteligentes, cigarros eletrônicos, telas de matriz de pontos de LED, etc.
24. Nuvoton Technology: Fornece principalmente microcontroladores de 8 bits, com aplicações em iluminação, Internet das Coisas, etc.
25. Neusoft Carrier: Mainly provides 8-bit and 32-bit MCUs. Applications: home appliances, smart homes, instrumentation, LCD panel controllers, industrial control, etc.
26. Betley: Fornece principalmente MCUs de 32 bits, com aplicações em: casas inteligentes, controle industrial e produtos de consumo.
27. Shengquan Technology: Fornece principalmente MCUs de 8 bits, com aplicações em painéis de exibição de pequeno e médio porte para os setores automotivo, educacional, de controle industrial, médico, etc.
28. Hangshun Chip: Mainly provides 8-bit and 32-bit MCUs. Application scope: automobiles, Internet of Things, etc.
29. Fudan Microelectronics: Fornece principalmente microcontroladores de 16 e 32 bits. Aplicações: medidores inteligentes, fechaduras inteligentes, etc.
30. Huada Semiconductor: Mainly provides 8-bit, 16-bit, and 32-bit MCUs. Applications: industrial control, intelligent manufacturing, smart life, and the Internet of Things.
Taiwan, China
1. Hongjing Technology: fornece principalmente microcontroladores de 32 bits. Âmbito de aplicação: comunicações, controle industrial, dispositivos de informação e voz.
2. Holtek Semiconductor: fornece principalmente microcontroladores de 8 e 32 bits. Aplicações: eletrônicos de consumo, iluminação LED, etc.
3. Lingyang Technology: fornece principalmente microcontroladores de 8 e 16 bits. Aplicação: áudio e vídeo domésticos.
4. Zhongying Electronics: fornece principalmente microcontroladores de 4 e 8 bits. Aplicações: carregadores, fontes de alimentação portáteis, eletrodomésticos e controle industrial.
5. Songhan Technology: fornece principalmente microcontroladores (MCUs) de 8 e 32 bits. Aplicações: controles remotos, carregadores inteligentes, sistemas de grande e pequeno porte, balanças eletrônicas, termômetros auriculares, monitores de pressão arterial, medidores de pressão de pneus e diversos equipamentos de medição e saúde.
6. Winbond Electronics: fornece principalmente microcontroladores (MCUs) de 8 e 16 bits. Aplicações: eletrônica automotiva, eletrônica industrial, redes, computadores, eletrônicos de consumo e Internet das Coisas.
7. Tecnologia de dez velocidades: fornece principalmente microcontroladores de 4 bits, 8 bits e 51 bits. Âmbito de aplicação: controles remotos, pequenos eletrodomésticos.
8. Youhua Microelectronics: fornece principalmente microcontroladores (MCUs) de 4 e 8 bits. Aplicações: circuitos integrados para gravação, eletrônicos de consumo e produtos domésticos.
9. Microcontroladores da Yingguang Technology: fornece principalmente MCUs de 4 e 8 bits. Aplicações: máquinas, automação, eletrodomésticos e robótica.
10. Elan Electronics: fornece principalmente microcontroladores de 8 e 16 bits. Aplicações: eletrônicos de consumo, computadores e smartphones.
cinco
Dicas para aprender sobre microcontroladores
Os princípios básicos e as funções de qualquer MCU são semelhantes. A única diferença reside na configuração e no número de módulos de função periféricos, sistemas de instrução, etc.
For instruction systems, although they appear to be very different in form, they are actually just different symbols. The meanings they represent, the functions to be completed, and the addressing methods are basically similar.
Para entender um microcontrolador (MCU), primeiro você precisa saber seu espaço de ROM, espaço de RAM, número de portas de E/S, número de temporizadores e métodos de temporização, módulos de função periférica (circuito periférico) fornecidos, fontes de interrupção, tensão de operação e consumo de energia, etc.
Após compreender essas características do MCU, o próximo passo é comparar as funções do MCU selecionado com as funções necessárias para o desenvolvimento do projeto em si, e esclarecer quais recursos são atualmente necessários e quais não são utilizados neste projeto.
Para funções que precisam ser usadas no projeto, mas que não são fornecidas pelo microcontrolador selecionado, é necessário compreender cuidadosamente as informações relevantes do microcontrolador para implementá-las usando métodos indiretos. Por exemplo, se o projeto que você está desenvolvendo precisa se comunicar com a porta COM do PC e o microcontrolador selecionado não fornece uma porta UART, você pode considerar o uso de interrupções externas para implementar essa comunicação.
Para os recursos necessários ao desenvolvimento do projeto, você precisa entender e ler atentamente o Manual*, podendo ignorar ou navegar pelos módulos funcionais desnecessários. Para o aprendizado de MCUs, a aplicação prática é fundamental e o objetivo principal.
After clarifying the relevant functions of the MCU, you can start programming.
Para iniciantes ou projetistas que estão usando este microcontrolador pela primeira vez, podem surgir muitas descrições pouco claras das funções do microcontrolador. Para esses problemas, existem dois métodos para resolvê-los. Um deles é escrever um programa de verificação específico para entender as funções descritas nos dados; o outro é ignorá-las temporariamente e escrever o programa do microcontrolador de acordo com o seu entendimento atual, deixando-o para ser modificado e aprimorado durante a depuração. O primeiro método é adequado para projetos com tempo disponível e para iniciantes, enquanto o segundo método é adequado para pessoas com alguma experiência em desenvolvimento de microcontroladores ou quando o cronograma do projeto é apertado.
Don't take any special time to understand the command system. The instruction system is just a symbol of logical description. You can only view the relevant instructions according to your own logic and the logical requirements of the program during programming. As programming progresses, you will become more and more proficient in the instruction system, and you can even memorize it unconsciously.
seis
Programação de microcontroladores
Existe uma grande diferença entre programar um microcontrolador (MCU) e programar um computador (PC). Embora as ferramentas de desenvolvimento de MCU baseadas em C estejam se tornando cada vez mais populares, para os projetistas que buscam código eficiente e preferem usar linguagem assembly, esta ainda é a linguagem de programação mais concisa e eficaz.
Para a programação de microcontroladores (MCUs), a estrutura básica pode ser considerada praticamente a mesma. Geralmente, ela é dividida em três partes: a inicialização (esta é a principal diferença entre a programação de MCUs e a de PCs), o corpo do loop principal do programa e o manipulador de interrupções. Suas respectivas descrições são as seguintes:
1. Inicialização: Para o projeto de todos os programas de MCU, a inicialização é a etapa mais básica e importante, que geralmente inclui o seguinte:
Mascare todas as interrupções e inicialize o ponteiro da pilha: A parte de inicialização geralmente não deseja que ocorram interrupções.
Limpar a área de RAM do sistema e exibir a memória: Embora às vezes possa não ser estritamente necessário, do ponto de vista da confiabilidade e consistência, especialmente para evitar erros inesperados, é recomendável desenvolver bons hábitos de programação.
Initialization of the IO port: According to the application requirements of the project, set the input and output mode of the relevant IO port. For the input port, you need to set its pull-up or pull-down resistor; for the output port, you must set its initial level output to prevent unnecessary errors.
Configurações de interrupção: Todas as fontes de interrupção necessárias para o projeto devem ser ativadas e as condições de disparo configuradas. Interrupções redundantes não utilizadas devem ser desativadas.
Inicialização de outros módulos funcionais: Para todos os módulos funcionais periféricos do MCU que precisam ser utilizados, as configurações correspondentes devem ser feitas de acordo com os requisitos da aplicação do projeto. Por exemplo, para comunicação UART, é necessário definir a taxa de transmissão (Baud Rate), o comprimento dos dados, o método de verificação e o comprimento do bit de parada. Para o temporizador do programador, é preciso definir sua fonte de clock, o número de divisões de frequência e os dados de recarga.
Inicialização de parâmetros: Após concluir a inicialização do hardware e dos recursos do microcontrolador (MCU), o próximo passo é inicializar algumas variáveis e dados utilizados no programa. A inicialização desta parte precisa ser planejada de acordo com o projeto específico e a estrutura geral do programa. Para algumas aplicações que utilizam a EEPROM para salvar dados predefinidos do projeto, recomenda-se copiar os dados relevantes para a RAM do MCU durante a inicialização para melhorar a velocidade de acesso aos dados pelo programa e reduzir o consumo de energia do sistema (em princípio, o acesso à EEPROM externa aumentará o consumo de energia da fonte de alimentação).
2. Corpo do loop principal do programa: A maioria dos MCUs opera continuamente por longos períodos, portanto, seus corpos de programa principais são basicamente projetados em um loop. Para aplicações com múltiplos modos de operação, pode haver múltiplos corpos de loop, que são alternados por meio de flags de estado. Para o corpo do programa principal, os seguintes módulos são geralmente organizados:
Programas de cálculo: Os programas de cálculo geralmente consomem muito tempo, por isso somos firmemente contra processá-los em qualquer interrupção, especialmente operações de multiplicação e divisão.
Processamento de programas com requisitos de tempo real baixos ou inexistentes;
Display transmission program: mainly for applications with external LED and LCD drivers.
3. Tratador de interrupção: O programa de interrupção é usado principalmente para lidar com tarefas e eventos que exigem alta precisão em tempo real, como detecção de sinais externos repentinos, detecção e processamento de botões, contagem de tempo, leitura de displays de LED, etc.
In general, the interrupt program should keep the code as concise and short as possible. For functions that do not need to be processed in real time, the trigger flag can be set in the interrupt, and then the main program will perform specific transactions. This is very important, especially for low-power, low-speed MCUs, which must ensure timely response to all interrupts.
4. Para a organização de diferentes conjuntos de tarefas, diferentes MCUs possuem diferentes métodos de processamento:
Por exemplo, para aplicações com microcontroladores (MCUs) de baixa velocidade e baixo consumo de energia (Fosc = 32768 Hz), considerando que tais projetos são dispositivos portáteis e utilizam displays LCD comuns, a resposta a pressionamentos de teclas e a resposta do display exigem alto desempenho em tempo real. Portanto, interrupções temporizadas são geralmente utilizadas para processar as ações de pressionamento de teclas e a exibição de dados. Já para MCUs de alta velocidade, como em aplicações com Fosc > 1 MHz, como o MCU tem tempo suficiente para executar o corpo do loop principal do programa, ele pode apenas definir os flags de disparo nas interrupções correspondentes e colocar todas as tarefas no corpo do programa principal para execução.
5. Na programação de microcontroladores, um aspecto que requer atenção especial é:
É necessário impedir que a mesma variável ou dado seja acessado ou definido simultaneamente nos corpos de interrupção e do programa principal. Um método eficaz de prevenção consiste em organizar o processamento desses dados em um módulo e determinar se as operações relacionadas devem ser realizadas com base no sinalizador de disparo; em outros corpos do programa (principalmente interrupções), os sinalizadores de disparo devem ser definidos apenas onde os dados precisam ser processados. Isso garante que a execução dos dados seja previsível e única.
Sete Engineer's summary of microcontroller programming
1. Desenvolva o bom hábito de resumir. Resumir não é apenas sintetizar o que você aprendeu, mas também revisar e aprofundar o processo de aprendizagem. Além disso, ajuda a evitar erros repetidos.
2. Antes de escrever um programa, você deve primeiro ter um entendimento familiar do projeto, estar ciente dele e delinear uma estrutura geral. É muito importante considerar cuidadosamente como organizá-lo e qual é o layout mais adequado. É necessário analisar qual módulo fazer primeiro, os passos específicos de cada módulo, como nomear cada função, a conexão com outros módulos, etc. É uma boa ideia pegar um pedaço de papel e anotar os processos importantes.
3. Para programação modular em linguagem C, você deve primeiro dividir cada módulo, programá-lo módulo por módulo, determinar uma sequência, segui-la e, em seguida, escrever o próximo módulo após a conclusão bem-sucedida do módulo anterior. Quanto aos arquivos de cabeçalho, escreva o arquivo de cabeçalho do módulo após a conclusão do módulo.
4. Não ignore os avisos quando eles aparecerem. Isso significa que deve haver algo errado no programa. Você precisa descobrir a origem do problema e encontrar uma solução. Seja específico ao procurar as causas. Você pode pesquisar informações na internet ou pedir conselhos a outras pessoas. Por exemplo, a função principal de outro projeto foi adicionada a este projeto. Existem nomes de funções duplicados. Também existem motivos para analisar os fenômenos experimentais e o progresso passo a passo. Pode ter havido uma interface incorreta selecionada ao definir a porta. Às vezes, é bom fazer uma pausa e pensar sobre o problema se você realmente não conseguir resolvê-lo. Não importa quão simples seja, você deve prestar atenção, pois pode haver erros.
No desenvolvimento de aplicações de microcontroladores, problemas como a eficiência no uso do código, o desempenho anti-interferência e a confiabilidade dos microcontroladores ainda são desafiadores. A seguir, resumimos algumas habilidades básicas que devem ser dominadas no desenvolvimento de microcontroladores.
oito
Habilidades em desenvolvimento de microcontroladores
1. Como reduzir erros em programas
Para reduzir erros de programação, considere primeiro os seguintes parâmetros de gerenciamento de valores fora do intervalo durante a operação do sistema.
- Parâmetros físicos: Esses parâmetros são principalmente parâmetros de entrada do sistema, que incluem parâmetros de excitação, parâmetros operacionais durante o processamento de aquisição e parâmetros de resultado ao final do processamento.
- Parâmetros de recursos: Esses parâmetros referem-se principalmente aos recursos de circuitos, dispositivos e unidades funcionais do sistema, como capacidade de memória, tamanho da unidade de armazenamento e profundidade de empilhamento.
- Parâmetros de aplicação: Esses parâmetros de aplicação geralmente aparecem como condições de uso de alguns microcontroladores e unidades funcionais. Parâmetros de processo: referem-se aos parâmetros que mudam de forma ordenada durante a operação do sistema.
2 How to improve the efficiency of C language programming code
A utilização da linguagem C para programação de microcontroladores é uma tendência inevitável no desenvolvimento e aplicação desses dispositivos. Para obter a máxima eficiência na programação em C, é fundamental familiarizar-se com o compilador C utilizado. Inicialmente, teste o número de linhas de código em linguagem assembly correspondentes a cada compilação em C, para que você possa avaliar a eficiência. Ao programar em C, priorize o código com a maior eficiência de compilação. Cada compilador C apresenta diferenças específicas, o que impacta diretamente a eficiência de compilação. O comprimento do código e o tempo de execução de uma função em C de alta qualidade para sistemas embarcados são apenas 5 a 20% maiores do que os da mesma função escrita em linguagem assembly.
For complex projects with tight development time, C language can be used, but the prerequisite is that you are very familiar with the C language and C compiler of the MCU system. Pay special attention to the data types and algorithms supported by the C compilation system. Although C language is the most common high-level language, different MCU manufacturers have different C language compilation systems, especially in the operation of some special function modules. Therefore, if you do not understand these features, there will be many problems during debugging, which will lead to lower execution efficiency than assembly language.
3. Como resolver o problema de interferência do microcontrolador
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.
O fenômeno mais comum de interferência em microcontroladores é o reset. Para evitar que o programa saia do controle, mecanismos de interrupção (como traps) e watchdogs podem ser usados para trazê-lo de volta ao estado de reset. Portanto, o mais importante para que o software do microcontrolador resista a interferências é saber lidar com o estado de reset.
Geralmente, os microcontroladores possuem alguns registradores de flags que podem ser usados para determinar a causa do reset; além disso, você também pode armazenar flags na RAM. Cada vez que o programa é reiniciado, diferentes causas de reset podem ser determinadas pela análise dessas flags; você também pode saltar diretamente para o programa correspondente com base em diferentes flags. Isso permite que o programa seja executado continuamente, e o usuário não perceberá que o programa foi reiniciado durante o uso.
4. Como testar a confiabilidade do sistema de microcontrolador
When a microcontroller system design is completed, there will be different test items and methods for different microcontroller system products, but some must be tested:
- Teste a integridade das funções do software do microcontrolador.
- Teste de ligar e desligar
- Teste de envelhecimento
- Testes como ESD e EFT
Sometimes, we can also simulate the damage that may occur during human use. For example, deliberately rub the contact port of the microcontroller system with the human body or clothing fabric to test the anti-static ability. Use a high-power electric drill to work close to the microcontroller system to test the ability to resist electromagnetic interference.
Em resumo, o microcomputador de chip único tornou-se um aspecto importante do desenvolvimento e das aplicações da computação. A grande importância da aplicação do microcomputador de chip único reside no fato de que ele altera fundamentalmente as ideias e os métodos tradicionais de projeto de sistemas de controle.
A maioria das funções que antes precisavam ser implementadas por circuitos analógicos ou digitais agora podem ser implementadas por meio de software, utilizando microcontroladores. Esse tipo de tecnologia de controle, na qual o software substitui o hardware, também é chamado de tecnologia de microcontrole, e representa uma revolução na tecnologia de controle tradicional.
Além disso, durante o processo de desenvolvimento e aplicação, devemos dominar habilidades e aprimorar a eficiência para que o sistema possa ser utilizado para uma gama mais ampla de finalidades.
Nove
Resumo da operação do chip As operações no chip consistem principalmente em operações nos registradores presentes nele. Os registradores possuem endereços únicos mapeados na memória, e a operação é realizada no endereço correspondente. Ao analisar o chip, observe primeiro o diagrama de tempo, depois compreenda os registradores correspondentes, entenda como eles operam, defina as portas necessárias (que podem ser identificadas pelo programa) e escreva os procedimentos de operação de leitura e escrita.
Como gravar dados no chip, como ler dados e qual porta usar para entrada ou leitura (o mais importante).
Ao conectar chips através de um barramento, é fundamental compreender o protocolo desse barramento. O chip conectado ao barramento I2C controla principalmente outros chips através desse barramento.
1. Um 74HC595 na matriz de pontos é usado para seleção de coluna, e os outros dois são usados para seleção de cor. A matriz de pontos é equivalente a um conjunto de diodos.
O diodo só acende quando uma extremidade recebe um nível alto e a outra um nível baixo. A diferença é que, ao selecionar uma extremidade de forma diferente, cores diferentes serão emitidas.
Seleção do modo de operação do temporizador: Os quatro bits mais significativos definem o temporizador T1 e os quatro bits menos significativos definem T0. Em seguida, os dois últimos dígitos de cada modo definem o modo de operação. Ao configurar dois temporizadores, tenha cuidado ao usar o operador OR (|). Ao usar interrupções, atente-se para limpar os sinais que devem ser limpos após a entrada na interrupção.
2. Transceptor de porta serial: O Modo 2 (recarregamento automático do valor inicial) é geralmente usado para definir a taxa de transmissão (baud rate). Como diferentes dispositivos têm diferentes capacidades de processamento de dados, a configuração da taxa de transmissão serve principalmente para lidar com dispositivos de baixa velocidade e garantir a comunicação entre eles. O bit de sinalização de interrupção deve ser limpo por software. Ao configurar a interrupção da porta serial, independentemente de qual interrupção seja gerada durante o envio ou recebimento, ela pode entrar na função de interrupção; portanto, preste atenção à configuração da função de interrupção. (Geralmente, a configuração da função é intuitiva, dependendo se o computador é o host ou o escravo).
Se você usar uma interrupção para enviar dados, terá que descobrir como entrar na interrupção pela primeira vez. Portanto, você precisa enviar os dados uma vez antes de poder entrar na interrupção. Apenas um byte pode ser enviado por vez, e o próximo bit só pode ser enviado depois que o sinal TI for ativado.
3. O conversor PCF8591AD possui quatro canais de entrada. Ao ler o PCF8591, o canal selecionado lê a tensão de entrada correspondente. Os dados convertidos são armazenados no chip e, em seguida, lidos. Durante a leitura, primeiro se escreve o endereço do chip, depois o subendereço do dispositivo (0x40|número do canal) e, por fim, os dados são lidos.
4. A conversão DA consiste em primeiro escrever o endereço do dispositivo no chip, depois escrever o subendereço (0x40) e, por fim, escrever o valor digital a ser convertido. A seguir, são apresentadas informações sobre o chip de endereço do dispositivo.
5. No visor LCD, após os dados serem gravados e exibidos, eles permanecerão visíveis sem atualização contínua. Se desejar alterá-los, será necessário digitá-los novamente.
6. Para o chip de clock DS1302, ao ler dados, o primeiro dado é lido na borda de descida do oitavo pulso de clock durante a escrita de dados, e então prepara-se para a próxima saída. Preste atenção ao método de escrita do programa e à localização do valor de retorno.
7. Primeiro, especifique o registrador no DS1302 e, em seguida, escreva os dados nele. O registrador de dados do chip indica o endereço. (Ainda não entendi muito bem o programa de proteção contra gravação. Não há escrita constante? Por que a proteção contra gravação permanece ativada?)
(De acordo com o usuário anterior, você pode definir um sinalizador após o tempo de inicialização. Se esse sinalizador estiver definido, não é necessário inicializar novamente. No entanto, se a alimentação for desligada, a RAM do microcontrolador não poderá salvar esse sinalizador. Portanto, você pode usar a RAM do DS1302 para salvar o sinalizador e lê-lo após ligar o microcontrolador. Também sou iniciante e pretendo usar o DS1302 em breve. Não sei se isso está correto e ainda não implementei. Por favor, compartilhe mais informações.)
8. É recomendável anotar a inicialização para o caso de você se esquecer dela mais tarde. Às vezes, preste atenção se o bit menos significativo ou o bit mais significativo é operado primeiro durante a leitura ou a escrita, o que pode ser determinado consultando o diagrama de tempo.
9. For infrared transceiver, when receiving, it determines whether it is high level or low level based on the time between two falling edges. When writing a program, first use a timer to determine the time, save it, and then convert it into binary (read more about how to write this program, it is very good).
10. Motor de passo: É usado principalmente para comutação. O torque do motor de passo diminui à medida que a velocidade aumenta. É usado principalmente para alimentação automática de peças processadas em máquinas-ferramenta. Também pode ser usado em locais de controle que exigem maior precisão.
O motor de passo é um dispositivo de controle de malha aberta que converte sinais de pulso elétrico em deslocamento angular ou linear. Em condições sem sobrecarga, a velocidade e a posição de parada do motor dependem apenas da frequência e do número de pulsos do sinal, não sendo afetadas por variações de carga. Quando o driver do motor de passo recebe um sinal de pulso, ele o aciona para girar na direção definida em um ângulo fixo, chamado de "ângulo de passo". Sua rotação ocorre passo a passo em um ângulo fixo. O deslocamento angular pode ser controlado pelo número de pulsos para obter um posicionamento preciso; ao mesmo tempo, a velocidade e a aceleração da rotação do motor podem ser controladas pela frequência dos pulsos para obter a regulação da velocidade.
11. Servo motor: (servo motor) refers to the engine that controls the operation of mechanical components in the servo system. It is an indirect transmission device that assists the motor. Servo motors can control speed and position accuracy very accurately, and can convert voltage signals into torque and rotational speed to drive control objects. The rotor speed of the servo motor is controlled by the input signal and can respond quickly. In the automatic control system, it is used as an actuator and has the characteristics of small electromechanical time constant, high linearity, starting voltage, etc. It can convert the received electrical signal into the angular displacement or angular velocity output on the motor shaft. They are divided into two categories: DC and AC servo motors. Their main feature is that there is no rotation when the signal voltage is zero, and the rotational speed decreases at a constant speed as the torque increases. DC motor: Large range, all on small cars.
12. Visão geral dos caracteres chineses:
Para exibir caracteres chineses em um monitor ou impressora, os caracteres chineses são dispostos em uma matriz de pontos de acordo com símbolos gráficos, obtendo-se assim o código de matriz de pontos correspondente (código de glifo).
O método de codificação unificado usado para representar caracteres chineses no computador forma uma codificação de caracteres chineses chamada código interno (como um código padrão nacional), e o código interno é único (equivalente ao número de identificação do caractere). A codificação de caracteres chineses formada para facilitar a entrada de caracteres chineses é um código de entrada, que é um código externo de caracteres chineses. O código de entrada é diferente devido aos diferentes métodos de codificação e, portanto, varia. O código de caracteres chineses formado para exibir e imprimir caracteres chineses é um código de glifo. O computador encontra o código de glifo do caractere chinês na biblioteca de modelos de fontes por meio do código interno do caractere chinês e realiza sua conversão.
Código interno da câmera
According to the provisions of the national standard code, each Chinese character has a certain binary code, but this code will conflict with the ASCII code when processed internally by the computer. To solve this problem, add 1 to the first digit of each byte of the national standard code. Since the ASCII code only uses 7 bits, the "1" in the first place can be used as a mark to identify Chinese character codes. When the computer processes the code with "1" in the first place, it understands it as Chinese character information, and when it processes the code with "0" in the first place, it understands it as an ASCII code. The national standard code (internal code) processed in this way is the internal code.
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.
As fontes de caracteres chineses são organizadas de acordo com o código padrão nacional e armazenadas na memória na forma de arquivos binários, formando uma biblioteca de fontes de caracteres chineses, também chamada de biblioteca de glifos de caracteres chineses ou biblioteca de caracteres chineses.
Existem dois métodos de codificação; consulte o arquivo de cabeçalho.
GB1616.h//------------------ Definição da estrutura de dados da fonte de caracteres chineses ------------------------//structtypFNT_GB16 //Estrutura de dados da fonte de caracteres chineses {unsignedcharIndex[3]; //Índice do código interno do caractere chinês unsignedchar Msk[32];//dados do código da matriz de pontos }; /////////////////////////////////////////////////////////////////////////////////// Tabela de fontes de caracteres chineses//// Biblioteca de caracteres chineses: Dinastia Song 16.dot, módulo horizontal do bit mais significativo à esquerda, disposição dos dados: da esquerda para a direita, de cima para baixo/////////////////////////////////////////////////////////////////////////////////////conststructtypFNT_GB16 codeGB_16[]= //tabela de dados{/*---------------------------------------------------------------------------------;arquivo fonte/texto :Xu;largura×altura (pixels):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, This structure is very simple: one is the internal code, and one is the dot matrix sequence. The previous dot matrix library was placed in the order of the internal code, and no internal code index was needed. If only some Chinese characters were placed, the internal code index was needed. (The Chinese character "Xu" in the front is to find the dot matrix sequence of the word when outputting "Xu". This dot matrix sequence is written by myself. When displayed with 1602, because the chip has an English dot matrix sequence in the memory, there is no need to write it.) Generally, two bytes are enough for the internal code. If you use one more byte, you just add a trailing 0. In this way, the Chinese character string can be directly placed in the Chinese character internal code;
codeGB_16[k].Index[0] indica que existe um array de estruturas do tipo typFNT_GB16 chamado codeGB_16. codeGB_16[k] é o elemento k+1 do array. index é um elemento da estrutura typFNT_GB16, portanto, pode ser referenciado com codeGB_16[k].Index. Ao mesmo tempo, index é um array, então pode ser indexado como indexed[0]. Se ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && é um operador lógico AND, o que significa que os valores em ambos os lados do símbolo && são verdadeiros. Somente o valor de && é verdadeiro, ou seja, verdadeiro && verdadeiro = verdadeiro. Esta frase significa: codeGB_16[k].Index[0]==c[0] e codeGB_16[k].Index[1]==c[1] são estabelecidos simultaneamente. Se a seguinte instrução for executada, codeGB_16[] é um array de estruturas, codeGB_16[k].Index[0] significa o valor do elemento 0 do índice k da k-ésima estrutura do array de estruturas.
13. LCD 12864: Cada ponto de exibição corresponde a um número binário, onde 1 significa ligado e 0 significa desligado. A memória RAM que armazena essas informações da matriz de pontos é chamada de memória de dados de exibição. Para exibir um determinado gráfico ou caractere chinês, basta escrever as informações da matriz de pontos correspondentes na unidade de armazenamento apropriada.
O contador de endereços (AC) da memória RAM gráfica incrementará automaticamente apenas o endereço horizontal (eixo X) em um. Quando o endereço horizontal for igual a 0FH, ele será zerado para 00H. No entanto, ele não incrementará automaticamente o endereço vertical com um carry. Portanto, quando vários dados são gravados continuamente, o programa precisa determinar se o endereço vertical precisa ser zerado.
14. RAM de desenho (GDRAM) A memória RAM de desenho fornece 128×8 bytes de espaço de memória. Ao alterar a RAM de desenho, primeiro escreva os valores das coordenadas horizontal e vertical continuamente e, em seguida, escreva dois bytes de dados na RAM de desenho. O contador de endereços (AC) incrementará automaticamente o endereço horizontal (endereço X) em um. Quando o endereço horizontal for 0XFH, ele será redefinido para 00H; o endereço vertical não será incrementado automaticamente em 1. O monitor de desenho deve estar desligado durante a escrita na RAM de desenho.
[cpp] view plain copy//Display Chinese characters voiddispString (uchar X, Y,uchar *msg)//Which row is X and which column is Y. msg is Chinese characters {if(X==0) write_data(*msg++); //Display Chinese characters }}////////////////////////////////// //////////////// ////////////////// Display image voiddisppicture(uchar code *adder){ uint i,j;//*******Display the upper half screen content settings for(i=0;i<32;i++)//32 column addresses in the upper half of the screen { write_com(0x80 + i);//SET vertical address VERTICALADD write_com(0x80);//SET horizontal address HORIZONTAL ADDfor(j=0;j<16;j++) { write_data(*adder); adder++; }}//************Display content settings in the lower half of the screen for(i=0;i<32;i++) //{ write_com(0x80 + i); //SET vertical address VERTICALADD write_com(0x88); //SET horizontal address HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;} }} Na linguagem C, o espaço é alocado automaticamente para uma variável definida, e seu endereço é o nome da variável. Através desse nome, os dados podem ser recuperados na memória e novos dados podem ser obtidos por meio de cálculos. Já na linguagem assembly, o programador precisa definir o espaço de armazenamento e enviar os dados para o acumulador para serem calculados. Cada etapa requer intervenção do programador. Na linguagem C, esses processos são realizados pelo compilador.
15. Algumas perguntas e respostas úteis 1. Como é feita a alocação de memória para variáveis na linguagem C de microcontroladores? O compilador adiciona código de alocação e reciclagem de forma inteligente durante o processo de compilação? A questão principal é: como posso garantir que o programa que desenvolvi não apresente erros de estouro de memória? Se eu estiver realizando uma operação recursiva, os requisitos de memória são difíceis de calcular manualmente.
2. A linguagem C do microcontrolador terá restrições na definição de variáveis? Por exemplo, as operações de multiplicação e divisão de dados de ponto flutuante são escritas em assembly, e o código é bastante complexo. Se fosse escrito diretamente em linguagem C, não seria muito simples?
③. No arquivo hexadecimal gerado pela linguagem C do microcontrolador, a distribuição de endereços da ROM de instruções e dados é atribuída automaticamente pelo compilador? Os usuários podem fazer essa atribuição?
Resposta 1: Um programa de microcontrolador escrito em linguagem C é compilado inicialmente por um programa (aparentemente c51.exe). Após a conclusão da compilação, o espaço de armazenamento das variáveis é definido, mas o endereço específico ainda não foi alocado (o endereço é flutuante). Em seguida, outro programa (aparentemente a51.exe) é conectado. Após a conexão, o endereço específico é determinado.
Se houver variáveis em excesso, o compilador alertará que o segmento de dados é muito grande. Para garantir que não ocorra um erro de estouro de memória, a principal consideração é se haverá estouro de pilha, e isso depende da experiência.
A linguagem C dos microcontroladores geralmente proíbe recursão, e operações recursivas são geralmente evitadas. Afinal, microcontroladores não são PCs, o que afetaria a velocidade. Se você precisar usar recursão, é mais apropriado usar um chip DSP. Em resumo, você precisa saber escolher o chip adequado.
Answer 2: The size of the variable (number of digits) is generally the same as the number of digits in the chip accumulator. For example, 51 commonly uses 8 bits because it is an 8-bit microcontroller.
O microcontrolador pode definir variáveis binárias, mas não vetores binários. Programar em linguagem C parece simples, mas na realidade gera a maior quantidade de código. O microcontrolador usado para controle raramente utiliza operações de ponto flutuante, o que não só é lento, como também trabalhoso e ocupa espaço. Se fosse um chip DSP, seria muito melhor se ele tivesse uma estrutura de hardware adequada.
Resposta 3: Geralmente, a alocação é automática. O chip pode ser programado em uma combinação de linguagem C e linguagem assembly, ou pode ser montado online usando o Keil C. A troca de dados entre o chip e o exterior é feita através da porta.
Número de telefone da empresa: +86-0755-83044319
Fax: +86-0755-83975897
E-mail: 1615456225@qq.com
QQ: 3518641314 Gerente Li
QQ: 332496225 Gerente Qiu
Endereço: Sala 809, Edifício C, Edifício de Tecnologia Zhantao, nº 1079 Avenida Minzhi, Novo Distrito de Longhua, Shenzhen