Você está na página 1de 3

Titulo

Tony Ribeiro Alves de Sousa, Carlos Bruno Lima Pessoa e Rhuan Carlos

Engenharia da Computação – Unifesspa


Marabá – Pará - BRASIL

Resumo – Nesse projeto é desenvolvido um código assembly montagem em MPLAB X IDE e os testes no simulador e no
no software MPLAB X IDE e simulado no software SimulIDE, hardware real.
codigo esse que tem a função de acender e controlar o brilho do
LED, tendo a utilização do TIMER0. III. RESULTADOS OBTIDOS

Palavras-chaves – Codigo, LED, brilho, TIMER0. Rodando o codigo no simulador o led inicia apagado,
pois ele inicia com o duty igual a zero, pressionando o botão 1
I. INTRODUÇÃO o PWM é gerado acendendo assim o LED, a medida que o
O objetivo deste experimento é projetar e botão 1 é pressionado vai aumentando o duty cilcle e a
implementar um circuito para controlar o acionamento de um intensidade do brilho tambem, varrendo os botões com o
LED usando um microcontrolador PIC. O circuito deve ser TIMER0. Pressionando o botão 2 diminui o PWM e diminui o
capaz de ligar o LED e controlar sua intensidade a partir do brilho do LED ate que ele apague, pois temos o duty igual a
PWM. O objetivo principal é demonstrar como usar um zero, com a verrudura dos botoes pode manter pressionado os
microcontrolador para controle digital e sua capacidade de botões para o controle do brilho. Logo a baixo está o codigo
controlar programaticamente dispositivos externos, como usado.
LEDs.
;Atividade Avaliativa de Mic Mic
II. METODOLOGIA ;Controle de Brilho de LED por PWM
Neste experimento, um circuito é projetado no ;Foi utilizado o pic16f628a
simulador SimulIde para controlar o acionamento de um
LED usando um microcontrolador PIC. O microcontrolador é list p=16F628A
programado para ligar/desligar e controlar a intensidade do #include <p16F628a.inc>
LED com base no ciclo ativo. Adicionalmente, foi __config _XT_OSC & _WDT_OFF & _PWRTE_ON
desenvolvido um código assembly no software MPLAB X & _BOREN_OFF & _LVP_OFF & _CP_OFF & _CPD_OFF
IDE para configurar as portas digitais, implementar a lógica & _MCLRE_OFF
de controle do LED e utilizar os recursos do
microcontrolador.
O circuito é simulado no SimulIde, onde são ; --- Paginação de Memória ---
realizados testes para verificar se o LED está acionado
corretamente com base no sinal de entrada. O código em #define bank0 bcf STATUS,RP0 ;Cria um
Assembly é compilado no MPLAB X IDE e carregado no mnemônico para selecionar o banco 0 de memória
microcontrolador PIC para testes reais. #define bank1 bsf STATUS,RP0 ;Cria um
A combinação de SimulIde e MPLAB X IDE fornece mnemônico para selecionar o banco 1 de memória
um ambiente completo para desenvolver e testar circuitos
usando microcontroladores PIC. Além de se familiarizar com
as ferramentas amplamente utilizadas na indústria de ; --- Mapeamento de Hardware (PARADOXUS
sistemas embarcados, esta prática de laboratório ajuda a PEPTO) ---
entender os conceitos de programação de
microcontroladores, o uso de portas digitais e a linguagem #define LED1 PORTA,3 ;LED1 ligado ao pino RA3
assembly. #define LED2 PORTA,2 ;LED2 ligado ao pino RA2
Portanto, o laboratório envolveu o desenho do circuito #define S1 PORTB,0 ;Botão S1 ligado ao pino RB0
em SimulIde, a programação de um microcontrolador PIC #define S2 PORTA,5 ;Botão S2 ligado ao pino RA5
para controlar o LED, o desenvolvimento do código de
; --- Registradores de Uso Geral ---
cblock H'20' ;Início da memória disponível para o btfsc STATUS,Z ;CCPR1L = 0?
usuário goto exit_ISR ;Sim, desvia para saída da interrupção
decf CCPR1L,F ;Não, decrementa CCPR1L
W_TEMP ;Registrador para armazenar o conteúdo
temporário de work
STATUS_TEMP ;Registrador para armazenar o ; -- Recupera Contexto (Saída da Interrupção) --
conteúdo temporário de STATUS
exit_ISR:
endc ;Final da memória do usuário
swapf STATUS_TEMP,W ;Copia em Work o
; --- Vetor de RESET --- conteúdo de STATUS_TEMP com os nibbles invertidos
movwf STATUS ;Recupera o conteúdo de STATUS
org H'0000' ;Origem no endereço 00h de memória swapf W_TEMP,F ;W_TEMP = W_TEMP com os
goto inicio ;Desvia para a label início nibbles invertidos
swapf W_TEMP,W ;Recupera o conteúdo de Work
; --- Vetor de Interrupção --- retfie ;Retorna da interrupção

org H'0004' ;As interrupções deste processador inicio:


apontam para este endereço
bank1 ;Seleciona o banco 1 de memória
; -- Salva Contexto -- movlw H'56' ;move literal 01010110b para work
movwf OPTION_REG ;Timer0 incrementa com ciclo
movwf W_TEMP ;Copia o conteúdo de Work para de máquina, prescaler 1:128, pullups ON
W_TEMP movlw H'F7' ;move F7h para work
swapf STATUS,W ;Move o conteúdo de STATUS movwf TRISB ;configuro RB3 como saída (pwm)
com os nibbles invertidos para Work movlw H'FF' ;move 255d para work
bank0 ;Seleciona o banco 0 de memória (padrão do movwf PR2 ;PR2 = 255d (registrador de controle do
RESET) Timer2)
movwf STATUS_TEMP ;Copia o conteúdo de
STATUS com os nibbles invertidos para STATUS_TEMP bank0 ;Seleciona o banco 0 de memória
movlw H'07' ;move literal 07h para work
; -- Final do Salvamento de Contexto -- movwf CMCON ;Desabilita comparadores internos
movlw H'E0' ;move literal E0h para work
btfss INTCON, T0IF ;Houve estouro do Timer0? movwf INTCON ;Habilita interrupção do Timer0 e
goto exit_ISR ;Não, desvia para saída da interrupção interrupção global
bcf INTCON,T0IF ;Sim, limpa flag do Timer0 movlw H'06' ;move literal 06h para work
movlw D'108' ;Move literal 108d para work movwf T2CON ;Ativa timer2, com prescaler 1:16
movwf TMR0 ;Reinicia TMR0 clrf CCPR1L ;Zera CCPR1L (pwm inicia com duty
btfss S1 ;Botão 1 pressionado? 0%)
goto inc_PWM ;Sim, desvia para inc_PWM movlw H'0C' ;move literal 00001100b para work
btfss S2 ;Não, botão 2 pressionado? movwf CCP1CON ;Habilita modo PWM
goto dec_PWM ;Sim, desvia para dec_PWM goto $ ;aguarda interrupção...
goto exit_ISR ;Não, desvia para saída da interrupção
end
inc_PWM:
Logo abaixo (Figura 3) temos a representação do
movlw D'255' ;Move literal 255d para work circuito executando o código demostrado anteriormente.
xorwf CCPR1L,W ;W = W xor CCPR1L
btfsc STATUS,Z ;CCPR1L = 255?
goto exit_ISR ;Sim, desvia para saída da interrupção
incf CCPR1L,F ;Não, incrementa CCPR1L
goto exit_ISR ;desvia para saída da interrupção

dec_PWM:

movlw D'0' ;Move literal 0d para work


xorwf CCPR1L,W ;W = W xor CCPR1L
mostrou válido, com estrutura adequada e instruções
precisas. O circuito de simulação atende aos requisitos,
permitindo o fluxo de corrente suficiente para acender o
LED. Os softwares utilizados, MPLAB X IDE e SimulIDE,
mostraram-se eficientes e confiáveis.
Os laboratórios fornecem aprendizado em
programação de montagem, simulação de circuito e
integração de hardware e software. Concluindo, o
experimento atingiu seus objetivos, aprimorou o
conhecimento e serviu de base para futuros projetos na
região.

Fig. 1. Circuito do codigo em Assembly.

IV. CONCLUSÃO
Neste experimento, o código assembly desenvolvido em
MPLAB X IDE permitiu a correta conexão do LED em um
circuito simulado em SimulIDE. O resultado é satisfatório, o
LED acende quando o botão 1 é pressionado e se intensifica
quando se mantem pressionado e dimnui e apaga wuando se
pressiona e mantem pressionado o botão 2. O código se REFERENCES

Você também pode gostar