Talvez você goste
- Gerar link
- X
- Outros aplicativos
8051: Sequência de LEDs utilizando Interrupções INT0, INT1 e botões (Código em Assembly)
O Intel MCS-51 (também conhecido como Intel 8051) faz parte de uma família de microcontroladores de 8 bits lançada pela Intel em meados de 1980. Além disso, é um dos microcontroladores mais populares já produzidos e apresenta uma arquitetura relativamente simples. Assim, o presente artigo descreve brevemente a solução de um exercício proposto que faz uso de duas de suas interrupções (INT0 e INT1), acionadas distintamente por dois botões diferentes os quais permitem acender alguns LEDs em sequência.
Exercício Proposto: projetar um circuito que consiste em acender sequencialmente 8 LEDs utilizando interrupções, considerando o tempo de 1 (um) segundo entre ligar e desligar cada LED individualmente. E utilizando, ainda, dois botões (botão 1 e botão 2) com a função de determinar o sentido de acendimento dos LEDs, isto é, da esquerda para direita ou da direita para a esquerda, respectivamente.
Primeiro, observe que, vamos fazer uso das interrupções INT0 e INT1, respectivamente, para cada uma das rotinas de controle de acionamento dos LEDs em sequência. Dessa forma, conforme diagrama a seguir, fica definido a lógica que vamos utilizar a seguir no código de programação do microcontrolador.
A seguir, tem-se o diagrama sugerido do circuito do hardware utilizado na solução do exercício, de modo que é possível verificar os 8 (oito) LEDs e os 2 (dois) botões. Veja que os botões são de contato momentâneo e, inclusive, considerando-se que os LEDs serão acionados individualmente e segundo o intervalo de 1 (um) segundo entre ligar e desligar, tem-se que a alimentação de cada LED pode ser realizada através dos respectivos pinos do PORT 2 do microcontrolador, pinos estes aos quais também estão ligados resistores limitadores de corrente no valor de 220 Ω.
Assim, o circuito acima foi montado no software ISIS Proteus v8.3 para simulação. Em seguida, de acordo com o algoritmo sugerido acima, fez-se através da IDE MCU8051 o seguinte código em Assembly.
;
; MCU: AT89S5x, Clock: 12 MHz, Ciclo de Máquina: 1 us
;
; Autor: J. G. Silva 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-se a ferramenta de osciloscópio para as ponteiras de provas adicionadas ao circuito acima da simulação, pode-se obter o seguinte resultado gráfico de modo a verificar a temporização de acionamento para cada LED e comparar este valor ao longo do tempo.
Referências
NICOLOSI, Denys E. C. Microcontrolador 8051 Detalhado. Erica. 6ª Edição.
- Gerar link
- X
- Outros aplicativos
Postagens mais visitadas
A Morte da Cachorra Baleia em Vidas Secas
- Gerar link
- X
- Outros aplicativos
Como Ser Um Bom Professor: Os Dez Mandamentos de George Pólya
- Gerar link
- X
- Outros aplicativos
Aplicação da Teoria Moderna de Portfólio de Markowitz com Python Utilizando Dados da Bolsa de Valores Brasileira (B3)
- Gerar link
- X
- Outros aplicativos
Carauman: Modelo de Livro e-Book Gratuito em LaTeX
- Gerar link
- X
- Outros aplicativos
Amor e a Flor da Vida
- Gerar link
- X
- Outros aplicativos
Sobre o Poema Popular "Domingos, Manhãs Silenciosas" e a visita da Professora Lúcia Helena Galvão em Roraima
- Gerar link
- X
- Outros aplicativos
Amanhecer na Serra Grande (Livreto)
- Gerar link
- X
- Outros aplicativos
Hipótese da Representação de Platão e Modelos de Inteligência Artificial (IA)
- Gerar link
- X
- Outros aplicativos
Comentários
Postar um comentário