8051: Sequencial de LEDs utilizando interrupções, botões e código em assembly

date
Mar 30, 2022
slug
sequencial-de-leds-com-8051-e-interrupcoes-codigo-assembly
status
Published
tags
Tecnologia
Microcontroladores
Engenharia Elétrica
summary
Pequeno circuito & código em assembly projetado com o objetivo de acender 8 LEDs em duas sequências diferentes através do uso das interrupções INT0 e INT1 do microcontrolador 8051.
type
Post
O microcontrolador Intel MCS-51 (também denominado Intel 8051) representa um marco na história dos microcontroladores de 8 bits. Lançado pela Intel Corporation em meados da década de 1980, este dispositivo consolidou-se como uma das soluções mais difundidas e influentes no desenvolvimento de sistemas embarcados.
Sua arquitetura, caracterizada pela simplicidade e robustez, proporcionou ampla adoção em aplicações industriais, acadêmicas e comerciais, estabelecendo-o como referência no segmento de microcontroladores de 8 bits.
E este artigo apresenta a análise e implementação de uma solução prática que explora as capacidades de interrupção externa do microcontrolador 8051. O projeto demonstra a utilização coordenada das interrupções INT0 e INT1 para controle direcional de uma sequência luminosa, evidenciando conceitos fundamentais de programação em sistemas embarcados.
Objetivo do Estudo
💡
Descrição do Exercício O desafio proposto consiste em projetar um circuito capaz de acender sequencialmente oito LEDs, com um intervalo de 1 segundo entre o acionamento e o desligamento de cada LED. Dois botões são utilizados para definir o sentido de acendimento dos LEDs:
  • Botão 1: Acendimento da esquerda para a direita (associado à interrupção INT0).
  • Botão 2: Acendimento da direita para a esquerda (associado à interrupção INT1).
Para a implementação, são utilizadas as interrupções externas do microcontrolador 8051, que permitem que cada botão dispare uma rotina específica de controle da sequência dos LEDs.
O diagrama a seguir ilustra a lógica adotada, que será posteriormente implementada no código de programação do microcontrolador.

Estratégia de Implementação

A solução emprega o sistema de interrupções externas do microcontrolador 8051, permitindo resposta imediata aos comandos do usuário. Esta abordagem garante processamento prioritário dos comandos de direção, a Utilização otimizada dos recursos computacionais e a separação lógica entre rotinas de controle.

Metodologia

O desenvolvimento baseia-se na implementação de rotinas de interrupção específicas para cada entrada de controle, assegurando que a mudança de direção seja processada instantaneamente, independentemente do estado atual da sequência.
A arquitetura proposta está detalhada através de diagramas de fluxo a seguir e foi implementada no código de programação do microcontrolador.
Foto: fluxograma do algoritmo a ser implementado em assembly.Foto: fluxograma do algoritmo a ser implementado em assembly.
Foto: fluxograma do algoritmo a ser implementado em assembly.

Diagrama Esquemático

A seguir, apresenta-se o diagrama sugerido do circuito de hardware utilizado na solução do exercício. Nele, é possível identificar a disposição dos oito LEDs e dos dois botões de pressão momentânea. Cada LED é acionado individualmente, respeitando o intervalo de 1 segundo entre o acionamento e o desligamento. A alimentação dos LEDs é realizada por meio dos pinos do PORT 2 do microcontrolador, aos quais estão conectados resistores limitadores de corrente de 220 Ω, garantindo a proteção dos componentes e o controle adequado da corrente elétrica.
Foto: esquemático da solução proposta utilizando o simulador Proteus.Foto: esquemático da solução proposta utilizando o simulador Proteus.
Foto: esquemático da solução proposta utilizando o simulador Proteus.

Código

Dessa forma, o circuito apresentado foi montado no software de simulação ISIS Proteus v8.3, permitindo a verificação funcional do projeto em ambiente virtual. Em seguida, com base no algoritmo previamente descrito, foi desenvolvido o seguinte código em linguagem Assembly, utilizando a IDE MCU8051 para escrita e compilação do programa.
; MCU: AT89S5x, Clock: 12 MHz, Ciclo de Máquina: 1 us ; Autor: J. Gomes Data: 14 de setembro de 2021 ORG 000H ; onde o programa começa após o RESET LJMP INICIO ; pula os endereços previstos de interrupção, ; por meio do label INICIO. ; --- INICIO DAS ROTINAS ATENDIDAS POR INTERRUPÇÃO ORG 0003H ; endereço da interrupção INT0 LJMP LED_ESQ ; pula para o serviço de interrupção INT0 ORG 0013H ; endereço da interrupção INT1 LJMP LED_DIR ; pula para o serviço de interrupção INT1 ; --- FIM DAS ROTINAS ATENDIDAS POR INTERRUPÇÃO INICIO: MOV IE,#10000101B ; habilita serviços de interrupção INT0 e INT1 MOV A,#00000001B ; valor inicial armazenado no acc LOOP: ; INICIO DO LOOP PRINCIPAL DO PROGRAMA MOV P2,#000H ; mantém os leds normalmente apagados SJMP LOOP ; permanece em loop LED_ESQ: ; Faz com que os 8 LEDs acendam da esquerda para a direita ; a cada 1s MOV P2,A ; envia o conteudo do acc para o port2 RL A ; desloca à esquerda os bits do acc ACALL DELAY1S ; delay de 1s RETI ; fim do programa de interrupção INT0 LED_DIR: ; Faz com que os 8 LEDs acendam da direita para a esquerda ; a cada 1s MOV P2,A ; envia o conteudo do acc para o port2 RR A ; desloca à direita os bits do acc ACALL DELAY1S ; delay de 1s RETI ; fim do programa de interrupção INT1 DELAY1S: ; INICIO DAS ROTINAS DE TEMPORIZAÇÃO MOV R5,#250D ; 1 ciclo + 2 ciclos do mnemônico call DELAY1X:ACALL DELAY1MS ; Chama-se a rotina de delay de 1ms ACALL DELAY1MS ; por cerca de 4 vezes por 250 vezes, ACALL DELAY1MS ; isto é, 4 x 1ms x 250 = 1000ms ~ 1s ACALL DELAY1MS DJNZ R5,DELAY1X RET DELAY1MS: ; rotina de delay de cerca de 1 ms MOV R6, #250D ; 1 ciclo MOV R7, #250D ; 1 ciclo DLYAUX0:DJNZ R6, DLYAUX0 ; 2 ciclos DLYAUX1:DJNZ R7, DLYAUX1 ; 2 ciclos RET ; Total: 1us + 1us + 250 x 2us + 250 x 2us = 1002us ~ 1ms END ; fim do programa

Resultado da Simulação

Por fim, utilizando a ferramenta de osciloscópio disponível no ambiente de simulação, foram conectadas ponteiras de prova aos pontos relevantes do circuito.
Foto: sinais observados no osciloscópio conforme oscilação dos LEDs.Foto: sinais observados no osciloscópio conforme oscilação dos LEDs.
Foto: sinais observados no osciloscópio conforme oscilação dos LEDs.
Com isso, é possível obter um gráfico representativo dos sinais gerados durante o acionamento dos LEDs, permitindo verificar a temporização de cada pulso e comparar os intervalos ao longo do tempo, assegurando que o comportamento do circuito esteja de acordo com o especificado no escopo do exercício.

Referência

  1. NICOLOSI, Denys E. C. Microcontrolador 8051 Detalhado. 9ª ed. São Paulo: Érica, 2009.
Críticas, elogios ou sugestões?
© 2016 - 2025 | J. Caraumã

Made in Roraima, Brazil