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 Intel MCS-51 (também conhecido como Intel 8051) é um microcontrolador de 8 bits amplamente utilizado, lançado pela Intel em meados da década de 1980. Com uma arquitetura relativamente simples e robusta, tornou-se um dos microcontroladores mais populares já desenvolvidos. Este artigo apresenta uma breve descrição da solução de um exercício prático que utiliza duas de suas interrupções externas, INT0 e INT1, acionadas por meio de dois botões distintos. Esses botões controlam o acendimento sequencial de LEDs, conforme o sentido desejado.
💡
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.
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.
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.
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
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, foi 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 exercício.

Referência

  1. NICOLOSI, Denys E. C. Microcontrolador 8051 Detalhado. 9ª ed. São Paulo: Érica, 2009.
If you have any questions, please contact me.
© 2016 - 2025 | J. Caraumã

Made in Roraima, Brazil