Menu English Ukrainian Russo Início

Biblioteca técnica gratuita para amadores e profissionais Biblioteca técnica gratuita


ENCICLOPÉDIA DE RÁDIO ELETRÔNICA E ENGENHARIA ELÉTRICA
Biblioteca gratuita / Esquemas de dispositivos radioeletrônicos e elétricos

Programação modular de sistemas de controle no MCS48. Enciclopédia de rádio eletrônica e engenharia elétrica

Biblioteca técnica gratuita

Enciclopédia de eletrônica de rádio e engenharia elétrica / Microcontroladores

Comentários do artigo Comentários do artigo

Sabe-se que o mesmo microcontrolador pode controlar equipamentos tecnológicos complexos e um moedor de café doméstico ou relógio eletrônico. A adaptação a um objeto específico é realizada alterando o programa do microcontrolador, o hardware quase não é afetado. O artigo proposto é dedicado a técnicas de programação para microcontroladores da série MCS48, que são amplamente utilizados em sistemas de controle para diversas finalidades. Suas principais disposições também são válidas para dispositivos mais modernos.

O desenvolvimento e a modernização de programas de controle são muito facilitados se forem construídos de acordo com um princípio modular. Nesse caso, depois de ganhar alguma experiência e, principalmente, nossa própria biblioteca de módulos depurados, programar um novo sistema de controle (CS) se resume a substituir alguns módulos de um programa já existente e depurado e, possivelmente, complementá-lo com fragmentos que levem em consideração as especificidades de um determinado sistema.

Este princípio está embutido na estrutura de muitas linguagens de alto nível (PASCAL, C++), e o programador é literalmente forçado a segui-lo. Infelizmente, os ASSEMBLERS (inclusive para MSS48), embora dêem ao programador maior liberdade de escolha de meios e métodos para resolver problemas, via de regra, não monitoram a observância da disciplina de programação. Isso geralmente leva à criação de programas tão confusos que nem mesmo seus autores conseguem descobrir o que foi feito depois de algum tempo, sem falar no uso de fragmentos depurados em outros programas. A adesão consciente aos conceitos modulares comuns facilita e acelera muito a programação de microcontroladores. Um exemplo de um programa modular típico para CS é dado na tabela. Sua sintaxe corresponde ao ASSEMBLY tabular TASM para o microprocessador 8048.

Como você pode ver, no início do texto do programa, as diretivas EQU dão nomes às constantes e atribuem valores. Usar constantes nomeadas é sempre preferível a especificar valores numéricos diretamente nas instruções executáveis ​​do processador. Por exemplo, o atraso de tempo implementado por uma das sub-rotinas discutidas abaixo é definido por três números. Eles são dados pelas constantes N1, N2 e N3. Se você precisar alterar a velocidade do obturador, basta especificar novos valores nos operadores EQU. Caso contrário, seria necessário procurar em todo o programa instruções com operandos iguais a esses números, decidir se cada um deles se refere a um atraso de tempo e indicar novos valores nos casos necessários.

Obviamente, esse trabalho requer muito tempo e muitas vezes não ocorre sem erros. É especialmente complicado pelo fato de que alguns comandos podem não usar o número inteiro, mas, por exemplo, seu byte alto ou baixo. O ASSEMBER já na fase de tradução do programa é capaz de calcular algumas constantes com base nos valores de outras. Esta possibilidade é ilustrada pelo cálculo dos bytes alto (N3N) e baixo (N3L) do número NXNUMX.

Em seguida, o programa aloca memória para variáveis. Eles fazem isso com as mesmas diretivas EQU, mas ao contrário das descrições das constantes, eles especificam não os valores numéricos das variáveis, mas os endereços das células de memória que ocupam.

Programação modular de sistemas de controle no MCS48
(clique para ampliar)

Se o MONTADOR permitir, a possibilidade de utilização de macros não deve ser negligenciada. Cada uma delas é, por assim dizer, uma nova instrução que executa uma operação não fornecida diretamente pelo sistema de instrução do processador. Descrevendo uma instrução de macro, o programador dá a ela um nome (que, obviamente, não coincide com o nome de nenhuma das instruções "reais") e especifica as ações necessárias na forma de uma Sequência de instruções de máquina. Cada vez que encontra uma instrução de macro em um programa, o ASSEMBLER irá substituí-la pela sequência especificada. Neste exemplo, duas macros são usadas. Um deles transfere o conteúdo do acumulador para a célula de memória de dados especificada pelo parâmetro macro e o outro - de volta.

Depois que a energia é ligada (ou um sinal de reset é dado), o microcontrolador começa a executar o programa a partir do endereço zero. Este endereço é geralmente usado para escrever um comando de salto incondicional para o ponto inicial do programa real (neste caso, o rótulo START). Isso é necessário porque as interrupções de hardware sempre transferem o controle para endereços fixos 3 e 7 (para outros tipos de microcontroladores, os endereços podem ser diferentes, mas ainda estão localizados no início da memória de programa). Os comandos de transição incondicional para as rotinas de serviço das interrupções correspondentes localizadas nestes endereços devem ser "desviados" pelo programa principal.

O próximo passo é definir os modos de operação do controlador (por exemplo, selecionar bancos de memória e registradores), inicializar variáveis ​​e dispositivos externos. Um erro típico de programadores novatos é assumir que, imediatamente após iniciar o programa, as variáveis ​​já possuem alguns valores definidos. Esse equívoco é reforçado pelo fato de que algumas linguagens de alto nível (como BASIC) definem automaticamente todas as variáveis ​​para um valor inicial de zero. Em programas em linguagem assembly (e em muitas outras linguagens), o próprio programador deve cuidar para que, antes da primeira leitura do valor de uma variável, algo já tenha sido escrito na célula de memória a ela alocada. Um bom estilo de programação exige que os valores iniciais sejam atribuídos às variáveis ​​logo no início do programa. Neste caso, isto é feito pela sub-rotina 1INIT.

A seção de inicialização do dispositivo externo geralmente se parece com uma chamada alternativa para sub-rotinas, cada uma das quais redefine uma delas (conversor analógico-digital, indicador LED, teclado, etc.) e pode ser facilmente substituída ao finalizar e melhorar o sistema. Frequentemente, essas mesmas rotinas verificam a integridade dos dispositivos.

Em seguida, a maioria dos programas de controle entra em um loop principal de repetição infinita, cuja execução é suspensa apenas para lidar com interrupções. O ciclo consiste em subprogramas para pesquisar o teclado e outros sensores, verificar os sinalizadores definidos pelas sub-rotinas de processamento de interrupção (por exemplo, o sinalizador para a expiração de um intervalo de tempo especificado ou o final do conversor analógico-digital), processar as informações recebidas de acordo com o algoritmo de controle especificado, emitir ações de controle para atuadores, enviar informações sobre o estado do processo tecnológico para uma tela de cristal líquido ou outros indicadores. A saída do loop principal geralmente é fornecida apenas em situações de emergência, por exemplo, se para eliminar as conseqüências de uma falha for necessário repetir a inicialização de todas as variáveis ​​e dispositivos externos, bem como no processamento de interrupções.

Assim, um programa construído de forma modular é um conjunto de sub-rotinas. Se, por exemplo, for utilizado um teclado diferente no novo sistema de controle, será suficiente substituir a sub-rotina BUTT. Para que tal substituição seja simples e indolor, certas regras devem ser desenvolvidas e sempre observadas. As sub-rotinas, se possível, devem salvar o conteúdo de todos os registradores do controlador, receber dados iniciais e emitir resultados nos mesmos registradores e células de memória, utilizar a mesma codificação de caracteres, etc.

É necessário lutar contra o desejo natural (especialmente para programadores que superaram as primeiras dificuldades e começam a se sentir profissionais) de simplificar o programa, afastando-se de regras rígidas e usando técnicas não padronizadas. Aparentemente, à primeira vista, a complicação injustificada será totalmente recompensada, facilitando a depuração e o retrabalho do programa como um todo.

Vamos considerar algumas características das sub-rotinas. I NCREM e DESREM realizam o necessário em muitos casos, a operação de aumentar ou diminuir um determinado valor de um número binário de 16 bits (seus bytes altos e baixos estão, respectivamente, nos registradores R6 e R5). As constantes que especificam a quantidade de incremento são descritas no início do programa.

Como qualquer microcontrolador funciona muito mais rápido que o equipamento tecnológico, é muito importante poder organizar o atraso no programa. Nesse caso, o contador/temporizador interno do processador é usado. Tem capacidade limitada e estoura em milissegundos. Cada estouro gera uma solicitação de interrupção. A rotina de serviço de interrupção do timer (TIME) os conta e, quando o número especificado é alcançado, define o sinalizador de tempo limite FLT para um. Todas as sub-rotinas cujo trabalho depende do tempo, resta analisar o estado deste sinalizador. Portanto, é possível realizar velocidades do obturador de vários segundos e até minutos.

Para iniciar a contagem de um novo intervalo, é necessário inserir os valores iniciais nas células de trabalho da sub-rotina TIME e ligar o timer. A sub-rotina SET2M, por exemplo, define o atraso de tempo para 2 minutos. O cálculo dos valores iniciais tem várias sutilezas.

Sabe-se que nos microcontroladores da série MSS48, os pulsos chegam à entrada do contador/temporizador interno com uma frequência 480 vezes menor que a frequência do oscilador de quartzo. Por exemplo, com uma frequência de ressonador de quartzo de 7 MHz, o número gravado no contador muda a cada 480/7000000 = 0,00006857 s = 68,57 µs. Portanto, o contador transbordará (e gerará uma solicitação de interrupção) em 68,57 -(256-N1) µs, onde N1 é o número originalmente gravado no contador. Se cada vez que você iniciar uma nova contagem a partir desse número, então N0,1 = 2 0,1/[7000000 (1480-N256)] estouros ocorrerão em 1 s (atraso de tempo mínimo).

Obviamente, o mesmo atraso de tempo pode ser obtido com N1 e N2 diferentes, mas como esses números não podem ser fracionários, será implementado com algum erro. A tarefa é selecionar um par de valores para o qual o erro é mínimo. No caso em questão, a melhor opção é N1 = 13, N2 = 6. Obtém-se uma temporização de 2 min repetindo o procedimento descrito N3 = 1200 vezes.

Freqüentemente, é necessário usar diferentes procedimentos para processar as mesmas interrupções de hardware em diferentes modos de operação do programa. Uma maneira de fazer isso é ilustrada pela sub-rotina INTER. Analisa o código do tipo de interrupção inserido pelo programa principal na célula INTT e, dependendo do seu valor, chama uma das rotinas de serviço de interrupção ISR1 ou ISR2. Observe que ambos terminam com RET, não RETR. É fácil aumentar o número de opções de processamento e até fazer com que, para um determinado valor do código, várias sub-rotinas diferentes sejam chamadas uma após a outra.

Não é necessário escrever todas as sub-rotinas necessárias no arquivo de texto do programa principal. Os módulos depurados e usados ​​repetidamente em diferentes programas podem ser localizados em arquivos separados e conectados ao programa principal usando as diretivas INCLUDE. Cada arquivo de inclusão pode conter uma ou mais rotinas. A desvantagem deste método é que os nomes das variáveis, constantes e rótulos em todos os módulos usados ​​não devem ser repetidos. Privado desse defeito, o método de tradução separada de módulos com sua subsequente fusão no nível do código do objeto, infelizmente, não é suportado pelo TASM ASSEMBLY.

Autor: D. Ryzhov, Vladimir

Veja outros artigos seção Microcontroladores.

Leia e escreva útil comentários sobre este artigo.

<< Voltar

Últimas notícias de ciência e tecnologia, nova eletrônica:

Máquina para desbastar flores em jardins 02.05.2024

Na agricultura moderna, o progresso tecnológico está se desenvolvendo com o objetivo de aumentar a eficiência dos processos de cuidado das plantas. A inovadora máquina de desbaste de flores Florix foi apresentada na Itália, projetada para otimizar a etapa de colheita. Esta ferramenta está equipada com braços móveis, permitindo uma fácil adaptação às necessidades do jardim. O operador pode ajustar a velocidade dos fios finos controlando-os a partir da cabine do trator por meio de um joystick. Esta abordagem aumenta significativamente a eficiência do processo de desbaste das flores, proporcionando a possibilidade de adaptação individual às condições específicas do jardim, bem como à variedade e tipo de fruto nele cultivado. Depois de testar a máquina Florix durante dois anos em vários tipos de frutas, os resultados foram muito encorajadores. Agricultores como Filiberto Montanari, que utiliza uma máquina Florix há vários anos, relataram uma redução significativa no tempo e no trabalho necessários para desbastar flores. ... >>

Microscópio infravermelho avançado 02.05.2024

Os microscópios desempenham um papel importante na pesquisa científica, permitindo aos cientistas mergulhar em estruturas e processos invisíveis aos olhos. Porém, vários métodos de microscopia têm suas limitações, e entre elas estava a limitação de resolução ao utilizar a faixa infravermelha. Mas as últimas conquistas dos pesquisadores japoneses da Universidade de Tóquio abrem novas perspectivas para o estudo do micromundo. Cientistas da Universidade de Tóquio revelaram um novo microscópio que irá revolucionar as capacidades da microscopia infravermelha. Este instrumento avançado permite ver as estruturas internas das bactérias vivas com incrível clareza em escala nanométrica. Normalmente, os microscópios de infravermelho médio são limitados pela baixa resolução, mas o desenvolvimento mais recente dos pesquisadores japoneses supera essas limitações. Segundo os cientistas, o microscópio desenvolvido permite criar imagens com resolução de até 120 nanômetros, 30 vezes maior que a resolução dos microscópios tradicionais. ... >>

Armadilha de ar para insetos 01.05.2024

A agricultura é um dos sectores-chave da economia e o controlo de pragas é parte integrante deste processo. Uma equipe de cientistas do Conselho Indiano de Pesquisa Agrícola-Instituto Central de Pesquisa da Batata (ICAR-CPRI), em Shimla, apresentou uma solução inovadora para esse problema: uma armadilha de ar para insetos movida pelo vento. Este dispositivo aborda as deficiências dos métodos tradicionais de controle de pragas, fornecendo dados sobre a população de insetos em tempo real. A armadilha é alimentada inteiramente por energia eólica, o que a torna uma solução ecologicamente correta que não requer energia. Seu design exclusivo permite o monitoramento de insetos nocivos e benéficos, proporcionando uma visão completa da população em qualquer área agrícola. “Ao avaliar as pragas-alvo no momento certo, podemos tomar as medidas necessárias para controlar tanto as pragas como as doenças”, diz Kapil ... >>

Notícias aleatórias do Arquivo

Dessalinização da água do mar com base em membrana de nanofibra 06.07.2021

Cientistas coreanos criaram um método de dessalinização que pode tornar a água do mar potável em minutos. Para fazer isso, eles usaram um processo de destilação por membrana.

Graças ao método de destilação por membrana, os cientistas conseguiram remover 99,9% do sal da água em um mês. No entanto, o principal problema no desenvolvimento desse método foi que esses filtros param de filtrar a água depois que a membrana fica molhada, por isso foi necessário criar um material que fosse o mais resistente possível à umidade. E, ao mesmo tempo, deve manter a capacidade de filtrar a água. Como resultado, a membrana foi feita de nanofibras poliméricas, que são feitas por eletrofiação, quando os fios da fibra da membrana são formados em um campo eletrostático.

Os cientistas usaram uma mistura de polímero de fluoreto de polivinilideno e hexafluoropropileno como base e um aerogel de silicato misturado com um polímero de baixa concentração como casca para produzir uma membrana composta com uma superfície super-hidrofóbica. Se comercializada, essa solução pode ajudar a aliviar a crise de água potável exacerbada pelas mudanças climáticas, pois é menos intensiva em energia.

A maioria das usinas de dessalinização modernas consomem uma grande quantidade de energia para sua operação. Além disso, como resultado da operação das estações de dessalinização, a salmoura permanece no resíduo, que é então despejado de volta nos mares e oceanos. Segundo a ONU, mais de 3 bilhões de pessoas em todo o mundo sofrem com a escassez de água.

Outras notícias interessantes:

▪ Estacionar será mais fácil

▪ Lâmpada Inteligente Conectada Lâmpada LED Cree

▪ Velocímetro esportivo de radar da TI

▪ Tela para cegos

▪ Laser líquido que não evapora no ar

Feed de notícias de ciência e tecnologia, nova eletrônica

 

Materiais interessantes da Biblioteca Técnica Gratuita:

▪ seção do site Firmware. Seleção de artigos

▪ artigo Cozimento lateral. expressão popular

▪ artigo Que planta Linnaeus nomeou após o órgão genital feminino? Resposta detalhada

▪ Avaliador de artigos (perito em avaliação de imóveis). Descrição do trabalho

▪ artigo Controle de tom ativo de cinco bandas. Enciclopédia de rádio eletrônica e engenharia elétrica

▪ artigo Conversor 144/27 MHz com um oscilador local suave. Enciclopédia de rádio eletrônica e engenharia elétrica

Deixe seu comentário neste artigo:

Имя:


E-mail opcional):


Comentário:





Todos os idiomas desta página

Página principal | Biblioteca | Artigos | Mapa do Site | Revisões do site

www.diagrama.com.ua

www.diagrama.com.ua
2000-2024