Buscar

artigo trabalho pic

Prévia do material em texto

SEQUENCIAL DE LEDS COM MICROCONTROLADOR PIC 16F877
José Roberto Barbosa, Josiel de Oliveira e Silva, Guilherme Fanucchi 
Eng.ª Elétrica 8º Período.
FACULDADE ESTÁCIO DE CURITIBA
Beto19852003@hotmail.com, josiel_os@hotmail.com, guilhermefanucchi@hotmail.com
 
�
Resumo – Este relatório demonstra as sequências de procedimentos utilizados para o desenvolvimento do projeto de seqüencial de leds, acionado por um microcontrolador.
 OBJETIVO GERAL
O objetivo desse trabalho é desenvolver um programa em linguagem de programação assembly. Tal programa devera executar um sequencial de Leds, visto que utilizando o PIC 16F877.
II.INTRODUÇÃO TEÓRICA
Programar diretamente em linguagem de máquina até é possível. Mas muito mais difícil do que programar em assembly. "Assembly" significa montagem. "Assembler" significa montador. Montagem é o ato de transformar uma seqüência de código fonte (texto) em código objeto (linguagem de máquina). Usando esta linguagem e um programa montador, o programador não escreve em linguagem de máquina, e sim em uma linguagem textual, facilitando a construção dos programas. Embora fique mais fácil do que programar direto em linguagem de máquina, programar em ASSEMBLY ainda é uma das formas mais "difíceis" de programação, sendo conhecida como a linguagem de programação de "mais baixo nível". 
O arquivo fonte de um programa qualquer (aquela lista de comandos digitada pelo programador) é composto de instruções (mnemônicos), parâmetros, rótulos, comentários e diretivas, e após são transformados em linguagem de máquina por um programa montador.
Instrução: É o nome dado a uma operação que o microcontrolador pode realizar. Por exemplo, se o microcontrolador pode realizar a soma de dois valores, dizemos que existe no mínimo uma instrução para soma. No caso do microcontrolador PIC, as instruções que realizam soma são duas, a ADDWF e a ADDLW. 
Mnemônico: É uma representação textual de uma instrução. As instruções são, na verdade, códigos binários, e para serem entendidos pelos programador devem ser representados na forma textual. Se os mnemônicos não fossem utilizados, teríamos que programar assembly utilizando códigos numéricos difíceis de memorizar. Desta forma, uma das instruções de adição citadas anteriormente possui o mnemônico ADDWF.
Parâmetros: São as informações manipuladas por uma instrução. Isso é necessário sempre que precisarmos informar à instrução quais os elementos envolvidos na operação. Por exemplo, se desejarmos somar dois valores, a instrução poderá ser ADDWF ou ADDLW, mas os valores a serem somados também deverão ser informados, sendo estes últimos os que chamamos de "parâmetros."
Diretivas: São linhas que determinam como o programa montador irá trabalhar. Não geram efeito direto no código binário gerado. Por exemplo, a diretiva LIST    p=16F877 determina qual o microcontrolador que será usado.
Rótulos: São nomes dados as linhas do programa, e servem para que em uma instrução de desvio possa se determinar o ponto para onde se deseja ir no programa. Os rótulos sempre são alinhados na coluna 0 (sem espaços antes do mesmo), enquanto que as instruções devem ser escritas após uma margem (obrigatoriamente após a coluna 0).
Por se tratar de um microcontrolador RISC, o PIC oferece um número reduzido de instruções. No entanto, ainda podemos dividir as instruções utilizadas pela família 16 dos microcontroladores PIC em 6 grupos:
Instruções para manipulação de bytes de memória (b). 
Instruções para manipulação de bits de memória. (B). 
Desvios incondicionais.
Desvios condicionais. 
Instruções com valores constantes. 
Instruções de controle.
Registrador é o nome utilizado para identificar uma posição de memória interna do microcontrolador. No entanto, alguns destes registradores são utilizados para fins específicos, estando diretamente relacionados a periféricos internos do microcontrolador (como conversores AD, entradas e saídas digitais, configuração dos periféricos, etc.), e outros destes registradores não são fisicamente implementados (são "buracos" deixados para futuras melhorias do projeto do microcontrolador).
Outros registradores são os denominados "General Purpose Registers", ou "Registradores de Uso Geral". São posições de memória livres, que podem ser utilizados para armazenamento temporário de valores (variáveis). Como são parte da memória RAM do microcontrolador, todos os dados armazenados nos registradores são voláteis, ou seja, são perdidos ao se desligar o mesmo. 
Exemplo dos registradores mais comuns:
STATUS: este registrador possui 2 bits que servem para definir o BANCO DE MEMÓRIA que será usado nas próximas operações. Também possui informações referentes a sinalizadores de erro, estouro de memória, etc.
TRISA, TRISB, TRISC, TRISD, TRISE = Serve para definir se um determinado PINO será de entrada ou saída. Isso é importante, pois é desta forma que o PIC irá saber se você quer LER sinal de um pino (que flutuará conforme tensão de entrada) ou se quer ENVIAR um sinal para este pino (mantendo assim o nível de tensão desejado).
ADCON1 = Serve para configurar o conversor analógico/digital.
III.MATERIAIS NECESSÁRIOS
 - Computador 
 - Software MPLAB IDE v8.60.
 - Software PROTEUS 8.
IV.PROCEDIMENTO EXPERIMENTAL
Montado circuito no software PROTEUS 8, visto que esse software é um simulador, onde podemos testar o funcionamento de nosso algoritmo.
Construído programa em linguagem assembly usando o software MPLAB IDE v8.60.
Executado simulação no simulador.
No algoritmo construído é especificado um nome para cada led. O registrador trisb define a direção do PORTB. Quando cada bit deste registrador estiver em 1, o respectivo pino estará configurado como entrada e quando estiver em 0, como saída. Como foi atribuído o valor 0 (zero) para todo o registrador trisb, o PORTB ficou configurado totalmente como saída. Depois deste ponto, inicia-se o processo de oscilação do led. O comando led1=1 faz com que o nível lógico alto (5 V) esteja presente na
Saída. Assim, o led acenderá. Em seguida, a rotina de retardo delay_ms(500) faz com que o programa pare naquele ponto por 500 ms. Logo abaixo, o comando led1=0 faz com que o mesmo led apague. O fluxo continua assim até o led8, quando o comando goto loop principal faz com que o programa volte a executar
Tudo novamente, acendendo e apagando os leds. 
�
Fig.1
Programa:
 LIST p=16F877A 	; pic usado
	#include "P16F877.INC"	; inclui a biblioteca do MCu utilizado
VAR1 equ 0x20		;define posição de memória 20H
VAR2 equ 0x21		;define posição de memória 21H
VAR3 equ 0x22		;define posição de memória 22H
 org 0		;define endereço de origem na ROM
 goto inicio		;desvia execução para rótulo INICIO
;; =========================== rotina de tempo
tempo movlw 0x03		;rotina de tempo. W <- 3
 movwf VAR1		;VAR1 <- W
temp1 movlw 0x3F		;W <- 3Fh (63 em decimal)
 movwf VAR2		;VAR2 <- W
temp2 movlw 0xFF		;W <- FFH (255 em decimal)
 movwf VAR3		;VAR3 <- W
 decfsz VAR3,F		;decrementa VAR3 pula prox.linha se zerar
 goto $-1		;volta uma linha
 decfsz VAR2,F		;decrementa VAR2 pula prox.linha se zerar
 goto temp2		;volta para “temp2”
 decfsz VAR1,F		;decrementa VAR1 pula prox.linha se zerar
 goto temp1		;volta para “temp1”
 return			;retorna da subrotina p/ onde foi chamada
;;============================ rotina de inicialização (prepara a estação)
inicio bcf STATUS, RP1	;desliga bit STATUS,RP1. escolhe bank0.
 bsf STATUS, RP0	;liga bit STATUS,RP0. escolhe bank1
 movlw 0xff		;carrega FFH (11111111) no acumulador
 movwf TRISD		;move acum.p/TRISD (PORTD como entrada)
 movlw 0x00		;zera todo o acumulador (move zeros)
 movwf TRISC		;mov acum.p/TRISC, todoPORTC como saída
 movwf TRISE		;mov acum.p/TRISE, todo PORTE como saída
movwf TRISA;
 bcf STATUS, RP0	;desliga bit STATUS,RP0 (volta bank0)
;; ==================================== parte ciclica
comeco bsf PORTE,2 	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTE,2	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
 bsf PORTE,1	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTE,1	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
bsf PORTE,0 	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTE,0	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
bsf PORTA,0 	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTA,0	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
bsf PORTA,1 	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTA,1	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
bsf PORTA,2	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTA,2	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
bsf PORTA,3 	;
 movlw 0xff		;
 movwf PORTC		;
 call tempo		;
 bcf PORTA,3	;
 movlw 0x3f		;
 movwf PORTC		;
 call tempo		;
 movlw 0x0f		;
 movwf PORTC		;
 call tempo		;
 movlw 0x03		;
 movwf PORTC		;
 call tempo		;
 goto comeco		;
	
 END
 
					 
 V.CONCLUSÃO
De forma geral a experiência demonstrou que as aplicações de microcontroladores, podem ser a solução em variados tipos de aplicação, podendo ser elaborado circuitos simples e mais complexos também.
O estudo para o domínio da tecnologia em questão exige, muitas horas de carga horária, devido à complexidade, no caso do uso de todos os recursos que o PIC oferece.
VI.REFERÊNCIAS
[1] Desbravando o PIC – Eletrônica – 1° Edição.
[2] Prof. Luiz Marcelo chiasse da Silva, “analise de circuitos digitais- PIC 16F628A”, UFPR, 2005.

Continue navegando