Você está na página 1de 40

Professor Srgio Minas Melconian.

MICROCONTROLADOR
PIC16F877A

FUNDAMENTOS
E
PROGRAMAO BSICA

Professor Srgio Minas Melconian.

Introduo
PIC PROGRAMMABLE INTERRUPT CONTROLLER (CONTROLADOR DE INTERRUPO
PROGRAMVEL) um componente eletrnico programvel produzido pela Microchip Technology Inc, utilizado
no controle de processos e atividades lgicas.
Os microcontroladores so compostos de uma nica pastilha de silcio encapsulada, popularmente chamada de CI
(Circuito Integrado) e todos os elementos necessrios para o controle das atividades esto internamente ligados a
pastilha de silcio. Alis, essa a caracterstica principal que diferencia os microcontroladores dos
microprocessadores.
O PIC16F877A est enquadrado na famlia 8 bits de microcontroladores Microchip, possui via de programao
com 14 bits e um conjunto de 35 instrues.

Professor Srgio Minas Melconian.

Arquiteturas dos Microcontroladores


Os microcontroladores apresentam uma estrutura interna de mquina na qual ir determinar a maneira como os
dados e o programa sero processados.
As arquiteturas mais utilizadas para sistemas computacionais digitais so:
Arquitetura Von Neumann: A Unidade Central de Processamento (CPU) est conectada a memria de dados e
programa por um nico barramento (bus) de 8 bits.
Arquitetura Harvard: A Unidade Central de Processamento (CPU) est conectada a memria de dados e
memria de programa por barramento (bus) distintos. Sendo o barramento de dados composto por 8 bits e o
barramento de programa formado por 14 bits (caso da famlia 16F).

Arquitetura Harvard x Von Neumann


Os microcontroladores PIC utilizam como estrutura interna de mquina a arquitetura Harvard, a qual possibilita
uma velocidade de processamento mais rpida, pois em quanto uma instruo est sendo executada, outra j est
sendo buscada na memria. Alm do mais, o fato do barramento de instrues ser maior do que 8 bits, o OPCODE
(referncia instruo que um determinado processador possui para conseguir realizar determinadas tarefas) inclui
o dado e o local onde ele vai operar, o que indica que apenas uma posio de memria ser utilizada por instruo,
levando a uma economia de memria de programa.

Filosofias RISC E CISC


O fato do PIC trabalhar com a arquitetura Harvard, possibilita utilizar uma tecnologia chamada RISC (Reduced
Instruction Set Computer) Computador com Set de Instrues Reduzido. Ou seja, pode-se trabalhar com uma
lista de cdigos de instrues de programao de cerca de 35 instrues (esse nmero varia um pouco de modelo
para modelo).
J se fossemos utilizar a tecnologia CISC (Complex Instruction Set Computer) Computador com Set de
Instrues Complexo, seriam necessrios se conhecer cerca de 100 instrues de programao. Tornando o
aprendizado mais rduo, porm algumas funes na tecnologia CISC se tornam mais fceis, pois j existem, logo
para o programador que utiliza o set reduzido, h uma maior cobrana das suas habilidade.

Professor Srgio Minas Melconian.

O PIC16F877A

Microcontrolador de 40 pinos;

Memria de programa 14 bits com 8k words, capacidade de escrita e leitura pelo prprio cdigo interno;

Arquitetura Harvard e tecnologia RISC com 35 instrues;

33 portas configurveis como entrada e sada;

15 interrupes disponveis;

Memria de programao E2PROM FLASH permite a gravao do programa diversas vezes por meio de
pulsos eltricos no mesmo CI, no necessrio apag-lo por meio de luz ultravioleta;

Memria E2PROM (no-voltil) interna com 256 Bytes;

Memria RAM com 368 Bytes;

3 TIMERs (dois de 8 bits e um de 16 bits);

Comunicao serial padro RS232: SPI, I2C e USART;

Conversores A/D 10 bits (8x) e Comparadores analgicos (2x);

Dois mdulos CCP: Capture, Compare e PWM;

Programao in-circuit (alta e baixa tenso);

Power-on Reset (POR) interno Ao ligar o microcontrolador, ele garante funcionamento correto do PIC;

Brown-out Reset (BOR) interno Ele Reseta o PIC sempre que a tenso de alimentao for menor que
4V;

Professor Srgio Minas Melconian.

Pinagem Encapsulamento PDIP - 40 Pinos

Professor Srgio Minas Melconian.

Nomenclatura dos pinos


Nome do Pino

Tipo

Descrio

13
14
1

Caracte
rstica
I
O
I/P

OSC1 / CLKIN
OSC2 / CLKOUT
MCLR / VPP

ST/CMOS4

VSS
VDD
RA0 / AN0
RA1 / AN1
RA2 / AN2 / VREF- /
CVREF
RA3 / AN3 / VREF+

12/31
11/32
2
3
4

P
P
I/O
I/O
I/O

TTL
TTL
TTL

I/O

TTL

RA4 / T0CKI / C1OUT

I/O

ST

RA5 / SS / AN4 /
C2OUT

I/O

TTL

RB0 / INT
RB1
RB2
RB3 / PGM
RB4
RB5
RB6 / PGC

33
34
35
36
37
38
39

I/O
I/O
I/O
I/O
I/O
I/O
I/O

TTL/ST1
TTL
TTL
TTL
TTL
TTL
TTL/ST2

RB7 / PGD

40

I/O

TTL/ST2

RC0 / T1OSO / T1CKI

15

I/O

ST

RC1 / T1OSI / CCP2

16

I/O

ST

RC2 / CCP1

17

I/O

ST

RC3 / SCK / SCL

18

I/O

ST

RC4 / SDI / SDA

23

I/O

ST

RC5 / SDO
RC6 / TX / CK

24
25

I/O
I/O

ST
ST

RC7 / RX / DT

26

I/O

ST

RD0 / PSP0
RD1 / PSP1
RD2 / PSP2
RD3 / PSP3

19
20
21
22

I/O
I/O
I/O
I/O

TTL/ST3
TTL/ST3
TTL/ST3
TTL/ST3

ENTRADA PARA OSCILADORES EXTERNOS.


SADA P/ CRISTAL.
MASTER CLEAR (RESET) EXTERNO. S FUNCIONA COM O PINO
EM NVEL LGICO 1.
ENTRADA PARA TENSO DE PROGRAMAO EM 13V.
GND (TERRA).
ALIMENTAO POSITIVA.
I/O DIGITAL OU ANALGICO.
I/O DIGITAL OU ANALGICO.
I/O DIGITAL OU ANALGICO OU TENSO NEGATIVA DE
REFERNCIA ANALGICA.
I/O DIGITAL OU ANALGICO OU TENSO POSITIVA DE
REFERNCIA ANALGICA.
I/O DIGITAL (OPEN DRAYN, NO CONSEGUE GERAR NVEL
LGICO ALTO) OU ENTRADA EXTERNA DO CONTADOR TMR0
OU SADA DO COMPARADOR 1.
I/O DIGITAL OU ENTRADA ANALGICA OU HABILITAO
EXTERNA PARA COMUNICAO SPI OU SADA DO
COMPARADOR 2.
I/O DIGITAL COM INTERRUPO EXTERNA.
I/O DIGITAL.
I/O DIGITAL.
I/O DIGITAL OU ENTRADA PARA PROGRAMAO EM 5V.
I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO.
I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO.
I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO
OU CLOCK DA PROGRAMAO SERIAL OU PINO DE IN-CIRCUIT
DEBUGGER.
I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO
OU DATA DA PROGRAMAO SERIAL OU PINO DE IN-CIRCUIT
DEBUGGER
I/O DIGITAL OU SADA DO OSCILADOR EXTERNO PARA TMR1
OU ENTRADA DE INCREMENTO PARA TMR1.
I/O DIGITAL OU ENTRADA DO OSCILADOR EXTERNO PARA
TMR1 OU ENTRADA DO CAPTURE2 OU SADAS PARA
COMPARE2/PWM2.
I/O DIGITAL OU ENTRADA DO CAPTURE1 OU SADAS PARA
COMPARE1/PWM1.
I/O DIGITAL OU ENTRADA/SADA DE CLOCK PARA
COMUNICAO SERIAL SPI / I2C.
I/O DIGITAL OU ENTRADA DE DADOS PARA SPI OU VIA DE
DADOS (I/O) PARA I2C.
I/O DIGITAL OU SADA DE DADOS PARA SPI.
I/O DIGITAL OU TX (TRANSMISSO) PARA COMUNICAO
USART ASSNCRONA OU CLOCK PARA COMUNICAO
SNCRONA.
I/O DIGITAL OU RX (RECEPO) PARA COMUNICAO USART
ASSNCRONA OU DATA PARA COMUNICAO SNCRONA.
I/O DIGITAL OU DADO 0 (COMUNICAO PARALELA).
I/O DIGITAL OU DADO 1 (COMUNICAO PARALELA).
I/O DIGITAL OU DADO 2 (COMUNICAO PARALELA).
I/O DIGITAL OU DADO 3 (COMUNICAO PARALELA).

ST

Professor Srgio Minas Melconian.


RD4 / PSP4
RD5 / PSP5
RD6 / PSP6
RD7 / PSP7
RE0 / RD / AN5

27
28
29
30
8

I/O
I/O
I/O
I/O
I/O

TTL/ST3
TTL/ST3
TTL/ST3
TTL/ST3
TTL/ST3

RE1 / WR / AN6

I/O

TTL/ST3

RE2 / CS / AN7

10

I/O

TTL/ST3

I/O DIGITAL OU DADO 4 (COMUNICAO PARALELA).


I/O DIGITAL OU DADO 5 (COMUNICAO PARALELA).
I/O DIGITAL OU DADO 6 (COMUNICAO PARALELA).
I/O DIGITAL OU DADO 7 (COMUNICAO PARALELA).
I/O DIGITAL OU CONTROLE DE LEITURA DA PORTA PARALELA
OU ENTRADA ANALGICA.
I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA
OU ENTRADA ANALGICA.
I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA
OU ENTRADA ANALGICA.

Legenda:
I
=> Input (Entrada);
O => Output (Sada);
I/O => Input/Output (Entrada ou Sada);
P
=> Power (Alimentao);
=> No utilizado;
TTL => Pino tipo TTL;
ST => Pino tipo Schmitt Trigger;
Notas:
1

Entrada tipo ST, quando configurado como interrupo externa.


Entrada tipo ST, durante o modo do programao serial.
3
Entrada tipo ST, quando configurado como I/O de uso geral e TTL quando usado em modo de porta paralela.
4
Entrada tipo ST, quando em modo RC e CMOS no geral.
2

Observao quanto TTL e Schmitt Trigger (ST)


As portas do PIC podem ser do tipo TTL ou ST, isso um dado muito importante no momento de se utiliz-las,
pois h interferncia direta nos nveis de tenso (0 ou 1) interpretados pelo microcontrolador.

(1), (2) Regio incerta, mantm nvel anterior (0 ou 1).

Professor Srgio Minas Melconian.

Estrutura Interna do PIC16F877A


O diagrama de blocos (original Microchip) indicado a baixo mostra as diversas partes que compem o
microcontrolador.

Professor Srgio Minas Melconian.

Ciclo de Mquina
Todo microcontrolador possui um sinal de clock para poder trabalhar. No caso dos microcontroladores PIC o sinal
de clock internamente dividido por 4. Assim sendo se utilizarmos um oscilador externo que gere um clock de
4MHz, tem-se um clock interno de 1MHz e um ciclo de mquina de 1s.
CKint = CKext / 4
TCM = 1 / Ckint

onde: CKint = Clock interno;


CKext = Clock externo;
onde: CM = Tempo de Ciclo de Mquina;

De maneira simplificada pode-se utilizar como clculo de ciclo de mquina a seguinte equao:
TCM = 4 / Freq. Osc.

onde: TCM = Tempo de Ciclo de Mquina;


Freq. Osc. = Freqncia do Oscilador;

Observao: No caso do microcontrolador PIC16F877A, a Microchip garante perfeito funcionamento do ciclo de


mquina com um oscilador de at 20MHz.
Ao observar as equaes anteriores possvel perceber que os TCM esto relacionados a uma constante de valor
4, mas qual o motivo desse nmero? Fcil o entendimento.
Para executar uma nica instruo pelo processador, algumas operaes so realizadas. O fato do processamento
no ser paralelo, exige operaes de processamentos executados em sub-ciclos de mquina, originados pela diviso
do clock externo. Estes sub-ciclos so conhecidos por Q1, Q2, Q3 e Q4.
O program counter (contador de programa) incrementado no instante Q1 automaticamente. Dentro dos quatro
tempos (Q1 a Q4), a instruo carregada para ULA executada, sendo trocadas informaes com a memria de
dados e o registrador W (Work) sempre que necessrio. Por fim, no instante Q4, a prxima instruo buscada da
memria de programa e colocada na ULA.
Esse processo conhecido como PIPELINE, ele permite que todas as instrues sejam executadas em um ciclo de
mquina.
Observao: As excees so os jumps (saltos) realizados no program counter, como chamadas de rotinas e
retornos que gastam 2 ciclos de mquina.
Exemplo PIPELINE
Vamos imaginar uma lavanderia, na qual possui quatro atividades a serem realizadas.
Seqncia de trabalho:

Colocar a roupa na mquina de lavar;


Depois de lavada colocar na secadora;
Depois de seca passar o ferro;
Por fim guard-la no armrio.

Professor Srgio Minas Melconian.


Ciclo sem PIPELINE

Ciclo com PIPELINE

Supondo que cada etapa gaste 30 minutos para ser realizada, utilizando o ciclo sem PIPELINE, um cesto de roupas
levar 2h para ficar pronto. J utilizando o ciclo com PIPELINE, o mesmo cesto ficar pronto em apenas 30
minutos. Ao final de duas horas teremos lavado 4 cestos de roupas.

10

Professor Srgio Minas Melconian.


Seqncia no PIC

Memrias
Memria de Programa: a memria onde ficar armazenada as instrues do programa no qual far o controle
das atividades. No caso do PIC16F877A esta uma memria do tipo FLASH de 8192 palavras (8K) e 14 bits.

11

Professor Srgio Minas Melconian.


Demais caractersticas da memria de programa
Vetor de Reset: a posio 0x0000h de endereo da memria de programa, para onde o programa vai quando
reiniciado (reset).
Vetor de interrupo: a posio 0x0004h de endereo da memria de programa, a posio de memria para
onde sero desviados todos os processamentos de interrupo. Este PIC possui 15 tipos de interrupes diferentes.
Pilha (STACK): uma regio, fisicamente separada da memria de programa, onde sero guardados os endereos
de retorno quando utilizados desvios para chamada de rotinas. Quando o programa desviado por meio do
comando CALL, o endereo seguinte ao ponto que estava sendo executado guardado na pilha, ao fim da rotina, o
programa retorna ao ponto que estava.
O PIC16F877A possui uma pilha com 8 nveis, possibilitando guardar at 8 endereos de retorno (8 desvios
consecutivos). Caso o programador tente ocupar mais de 8 nveis da pilha, a informao mais antiga ser perdida.
A pilha desse PIC armazena endereos de 13bits, sendo suficiente para gerenciar 8k de memria de programa.
Memria de Dados: A memria de dados voltil do tipo RAM (Random Access Memory). Serve para guardar
as variveis e os registradores utilizados pelo programa. Ela armazena dados de 8 bits e est dividida em dois
grupos: Registradores Especiais e Registradores de uso geral.

12

Professor Srgio Minas Melconian.


Demais caractersticas da memria de dados
Registradores Especiais: Regio da memria de dados onde se encontram todos os registradores especiais e que
so utilizados pelo PIC para a execuo do programa e processamento da ULA.
Registradores de uso geral: Regio da memria de dados onde possvel armazenar at 368 Bytes de variveis
definidas pelo programador, para serem escritas ou lidas pelo programa.
Observao: A memria de dados est divida em 4 bancos de memria (Banco 0, Banco 1, Banco 2 e Banco 3),
isso ocorre devido a existncia de apenas 7 bits para endereamento de todos os registradores, com isso s se pode
gerenciar 128 endereos diferentes. Por isso que o fabricante dividiu a memria em quatro grupos de 128 Bytes
cada.
Acesso aos bancos de memria
Para acessar os bancos de memria preciso gerenciar os registradores STATUS <RP1:RP0>.
BANCO RP1
0
0
1
0
2
1
3
1

RP0
0
1
0
1

Observao: Sempre que o PIC for ligado, o Banco 0 ser o primeiro a ser selecionado.

Interrupes
As interrupes so ferramentas que possibilitam a execuo de determinadas situaes no momento em que elas
ocorrem. Normalmente elas so geradas devido aes externas.
O PIC 16F877A composto por 15 interrupes diferentes, as quais sempre sero desviadas para o vetor de
interrupo (0004h) da memria de programa.

13

Professor Srgio Minas Melconian.


As 15 interrupes que compem o PIC 16F877A so:

Interrupo de Timer 0;
Interrupo Externa;
Interrupo por mudana de Estado;
Interrupo da Porta Paralela (PSP);
Interrupo dos Conversores A/D;
Interrupo de Recepo da USART;
Interrupo de Transmisso da USART;
Interrupo da Comunicao Serial (SPI e I2C);
Interrupo do CCP1 (Capture/Compare/PWM);
Interrupo do Timer 1;
Interrupo de Timer 2;
Interrupo de fim de escrita na E2PROM/FLASH;
Interrupo de Coliso de Dados (BUS Collision);
Interrupo dos Comparadores;

Caractersticas Eltricas
Temperatura de Trabalho
Temperatura de Armazenamento
Tenso de Trabalho
Tenso Mxima no Pino VDD (em relao a Vss)
Tenso Mxima no MCRL (em relao a Vss)
Tenso Mxima no Pino RA4 (em relao a Vss)
Tenso Mxima nos Demais Pinos (em relao a Vss)
Dissipao Mxima de Energia
Corrente Mxima de Sada no Pino Vss
Corrente Mxima de Entrada no Pino VDD
Corrente Mxima de Sada de um Pino (em VDD)
Corrente Mxima de Entrada de um Pino (em Vss)
Corrente Mxima de Entrada do PORTA, PORTB e PORTE
Corrente Mxima de Sada do PORTA, PORTB e PORTE
Corrente Mxima de Entrada do PORTC e PORTD
Corrente Mxima de Sada do PORTC e PORTD

-55C at +125C
-65C at +150C
4V a 5,5V
-0,3V a 7,5V
0 a 14V
0 a 8,5V
-0,3V a (VDD + 0,3V)
1W
300mA
250mA
25mA
25mA
200mA
200mA
200mA
200mA

14

Professor Srgio Minas Melconian.

Set de Instrues
O Set de instrues dividido em quatro grupos, os quais compem um conjunto com 35 instrues:

Operaes com registradores;

Operaes com literais;

Operaes com bits;

Controles;

Operaes com Registradores


Instruo Argumentos

Descrio

ADDWF

f,d

Soma W e f guardando o resultado em d.

ANDWF

f,d

Lgica "E" entre W e f, guarda o resultado em d.

CLRF

COMF

f,d

Calcula o complemento de f guardando o resultado em d

DECF

f,d

Decrementa f, guardando o resultado em d.

Limpa f.

Decrementa f, guardando o resultado em d e pula a prxima linha


DECFSZ

f,d

se o resultado for zero.

INCF

f,d

Incrementa f, guardando o resultado em d.


Incrementa f, guardando o resultado em d e pula a prxima linha se

INCFSZ

f,d

o resultado for zero.

IORWF

f,d

Lgica "ou" entre W e f, guardando o resultado em d.

MOVF

f,d

Move f para d (copia f em d).

MOVWF

RLF

f,d

Rotaciona f um bit para esquerda.

RRF

f,d

Rotaciona f um bit para direita.

SUBWF

f,d

Subtrai W de f (f - W) guardando o resultado em d.

Move W para f (copia W em f).

Executa uma inverso entre as partes alta e baixa de f, guardando


SWAPF

f,d

em d.

XORWF

f,d

Lgica "ou exclusivo" entre k e W guardando o resultado em d.

15

Professor Srgio Minas Melconian.


Operaes com Literais
Instruo Argumentos

Descrio

ADDLW

Soma k com W, guardando o resultado em W.

ANDLW

Lgica "E" entre k e W, guardando o resultado em W.

IORLW

Lgica "OU" entre k e W, guardando o resultado em W.

MOVLW

Move k para W.

SUBLW

Subtrai W de k (k - W), guardando o resultado em W.

XORLW

Lgica "OU EXCLUSIVO entre k e W, guardando o resultado em W.

Operaes com bit


Instruo Argumentos

Descrio

BCF

f,b

Impe 0(zero) ao bit do registrador f.

BSF

f,b

Impe 1 (um) ao bit do registrador f.

BTFSC

f,b

Testa o bit b do registrador f e pula a prxima linha se for 0 (zero).

BTFSS

f,b

Testa o bit b do registrador f e pula a prxima linha se for 1 (um).

Controles
Instruo Argumentos

Descrio

CLRW

Limpa w.

NOP

Gasta um ciclo de mquina sem fazer nada.

CALL

Executa a rotina R.

CLRWDT

Limpa o registrador WDT para no acontecer reset.

GOTO

Desvia para o ponto R mudando o PC.

RETFIE

Retorna de uma interrupo.

RETLW

Retorna de uma rotina com k em W.

RETURN

Retorna de uma rotina sem afetar W.

SLEEP

Coloca o PIC em modo sleep (dormindo) para economia de energia.

16

Professor Srgio Minas Melconian.

Fluxogramas
Os fluxogramas so ferramentas que ajudam o programador a estruturar de maneira grfica uma seqncia
lgica de atividades que posteriormente sero executadas por um determinado programa.
Elementos utilizados na construo dos fluxogramas:
Inicio ou Trmino Smbolo utilizado para representar inicio ou trmino de
programa;
Processo Smbolo utilizado para descrever uma determinada tarefa;

Dados Smbolo utilizado para descrio de entrada de dados;

Tomada de deciso Smbolo utilizado para testes condicionais. E tomada de


deciso pode seguir um fluxo verdadeiro ou falso.
Exemplo: Sero somados dois nmeros inteiros A+B, se o resultado for par guarda em P, j se o resultado
for impar guarda em I e finaliza o programa.
Inicio
Pega nmero A.

Pega nmero B.
Soma A+B
No

Guarda A+B em I

A+B Par?

Sim

Guarda A+B em P

FIM

17

Professor Srgio Minas Melconian.

Primeiro Exemplo Boto e LED


Ser dado inicio a programao dos microcontroladores PIC com um programa tradicional e simples de se
entender.
Funcionamento: Ao apertar um boto, um LED se manter ligado at o boto ser solto.
Fluxograma

INICIO
CONFIGURAES
INICIAIS
1
SIM
ACENDE O LED

BOTO
PRESSIONADO?

NO
APAGA O LED

O Programa
;*************************************************************************************
;*
PROGRAMA LIGA LED POR MEIO DE UM BOTO
*
;*************************************************************************************
;***************************CONFIGURAO PARA GRAVAO*************************
#INCLUDE <P16F877A.INC>

;MODELO DO MICROCONTROLADOR UTILIZADO.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; CP - CODE PROTECTION (HABILITA OU DESABILITA LEITURA DA MEMRIA DE PROGRAMA).
; DEBUG - DEPURADOR DA PLACA ICD 2 (HABILITA OU DESABILITA DEPURADOR DA PLACA ICD 2).
; PWRTE - POWER UP TIMER (HABILITA OU DESABILITA TEMPORIZADOR QUE AGUARDA 72 ms PARA
;ESTABILIZAR O PIC).
; WDT - WATCHDOG TIMER ("CO DE GUARDA" TEMPORIZADOR QUE RESETA O PIC QUANDO SISTEMA
;TRAVADO).
; BOREN - BROWN OUT DETECT (SE A ALIMENTAO VDD FOR MENOR QUE 4V DURANTE 100 MICRO-SEG.
;O PIC RESETA).
; LVP - LOW VOLTAGE PROGRAM (SISTEMA DE PROGRAMAO EM BAIXA TENSO).
; XT - OSCILADOR DO TIPO CRISTAL.

18

Professor Srgio Minas Melconian.


;**************************DEFINIO DOS BANCOS DE MEMRIA RAM************************
#DEFINE BANK0
#DEFINE BANK1

BCF
BSF

STATUS, RP0
STATUS, RP0

;SETA BANK 0 DE MEMRIA.


;SETA BANK 1 DE MEMRIA.

;O PIC 16F877A POSSUI QUATRO BANCOS DE MEMRIAS PARA OS REGISTRADORES ESPECIAIS (SFR). POR
;ISSO, QUANDO QUEREMOS ACESSAR ALGUM REGISTRADOR SFR, DEVEMOS PRIMEIRO INFORMAR AO
;SISTEMA QUAL BANK QUEREMOS TRABALHAR.
;PARA ISSO DEVEMOS ALTERAR OS BITS RP0 E RP1 NO REGISTRADOR STATUS.
;TABELA:
;
BANCO
RP1 RP0
;
0
0
0
;
1
0
1
;
2
1
0
;
3
1
1
;OBS: SEMPRE QUE O PIC INICIA, RP1 E RP0 SO INICIADOS COM ZERO.LOGO O BANK 0 SEMPRE O
;PRIMEIRO SELECIONADO.
;***************************************VARIVEIS*************************************
CBLOCK 0X70
;ENDEREO LOCALIZADO NA MAMRIA DE DADOS DO BANK 0. FOI
;ESCOLHIDO, POIS EST LOCALIZAO ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAO.
ENDC

;FIM DO BLOCO DE MEMRIA.

;*****************************************FLAGS***************************************
; SINALIZA QUEM GEROU A INTERRUPO. "NO SER UTILIZADO NESTE PROGRAMA".
;***************************************CONSTANTES************************************
; FILTRO PARA EVITAR RUIDOS DOS BOTES. "NO SER UTILIZADO NESTE PROGRAMA".
;****************************************ENTRADAS*************************************
#DEFINE BOTAO_0 PORTB,0

;BOTO QUE LIGA O SISTEMA - (PINO 33 - RB0)

;*****************************************SADAS**************************************
#DEFINE LED_1 PORTB,1

;LED 1 - (PINO 34 - RB1)


;0 -> APAGADO
;1 -> ACESO

;*************************************VETOR DE RESET**********************************
ORG 0X0000
GOTO INICIO

;ENDEREO DO VETOR DE RESET


;PULA PARA O INICIO

;***********************************INICIO DA INTERRUPO*****************************
ORG 0X0004
RETFIE

;ENDEREO DO VETOR DE INTERRUPO


;RETORNA DA INTERRUPO

19

Professor Srgio Minas Melconian.


;*************************************INICIO DO PROGRAMA******************************
INICIO
CLRF PORTB

;LIMPA PORTB

BANK1

;TRABALHAR COM BANK1

MOVLW B'00000001'
MOVWF TRISB
;ENTRADA, 0 -> SADA).

;DEFINE RB0 COMO ENTRADA E DEMAIS PORTS B COMO SADA (1 ->

BANK0

;TRABALHAR COM BANK0

;*************************************ROTINA PRINCIPAL********************************
MAIN
BTFSC BOTAO_0
GOTO BOTAO_LIBERADO
GOTO BOTAO_PRESSIONADO

;O BOTO_0 EST PRESSIONADO?


;VAI PARA BOTO_LIBERADO.
;VAI PARA BOTO_PRESSIONADO.

BOTAO_LIBERADO
BCF LED_1
GOTO MAIN

;APAGA LED_1
;RETORNA AO LOOP PRINCIPAL (MAIN)

BOTAO_PRESSIONADO
BSF LED_1
GOTO MAIN

;ACENDE LED_1
;RETORNA AO LOOP PRINCIPAL (MAIN)

;**************************************FIM DO PROGRAMA********************************
END
;FIM DO PROGRAMA (OBRIGATRIO)

Exerccios Propostos
Utilizando como parmetro o primeiro exemplo, faa as seguintes alteraes:
A) Inverta a lgica do LED, ao pressionar o boto o LED apagar e ao liber-lo o LED acender.
B) Ao apertar o boto faa dois LEDs acenderem.
C) Utilize dois botes e quatro LEDs. Quando um boto for pressionado dois LEDs acesos se apagaro, j o
outro boto ao ser pressionado acender dois LEDs que estavam apagados.

20

Professor Srgio Minas Melconian.

Segundo Exemplo Contador de Tempo (DELAY)


Neste segundo exemplo ser estudada uma rotina para contar tempo.
Funcionamento: Ao apertar um boto, um LED se manter ligado por 1s e desligar logo em seguida.
Fluxograma

INICIO
CONFIGURAES
INICIAIS
1
SIM

BOTO

NO

PRESSIONADO?

APAGA O LED

ACENDE O LED

CONTADOR DE
TEMPO = 0s?

NO

DECREMENTA
CONTADOR DE TEMPO.

SIM

APAGA O LED

21

Professor Srgio Minas Melconian.


O Programa
;****************************************************************************************************
;*
PROGRAMA CONTADOR DE TEMPO (DELAY)
*
;****************************************************************************************************
;******************************** ARQUIVOS DE DEFINIO DO PIC **********************************
#INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO - PIC 16F877A
__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;******************************** PAGINAO DE MEMRIA DO PIC **********************************
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

;HABILITA BANCO 0 DE MEMRIA


;HABILITA BANCO 1 DE MAMRIA

;********************************** DEFINIO DAS VRIAVEIS **************************************


CBLOCK 0X70

;INICIO DA MEMRIA DE SUARIO

TEMPO1
TEMPO2
TEMPO3

;CONTADOR DE TEMPO1 (VALOR 250)


;CONTADOR DE TEMPO2 (VALOR 250)
;CONTADOR DE TEMPO3 (VALOR 4)

ENDC

;FIM DO BLOCO DE MEMRIA

;**************************************** ENTRADAS ************************************************


#DEFINE BOTAO_0

PORTB,0

;BOTO QUE LIGA O SISTEMA - (PINO 33 - RB0)

;***************************************** SADAS ***************************************************


#DEFINE

LED_1

PORTB,1

;PORTA DO LED1 (PINO 34 - RB1)


;0 -> APAGADO
;1 -> ACESO

;************************************* VETOR DE RESET *********************************************


ORG 0X0000
GOTO INICIO

;ENDEREO INICIAL PARA PROCESSAMENTO


;VAI PARA INICIO DO PROGRAMA

;********************************* INICIO DA INTERRUPO *****************************************


ORG 0X0004
RETFIE

;ENDEREO INICIAL DA INTERRUPO


;RETORNA DA INTERRUPO

;********************************** INICIO DO PROGRAMA *******************************************


INICIO
CLRF PORTB

;LIMPA TODO PORTB

22

Professor Srgio Minas Melconian.


BANK1

;HABILITA BANCO 1 DE MEMRIA DO PIC

MOVLW B'00000001'
MOVWF TRISB
;CONFIGURA PORTB,0 COMO ENTRADA E DEMAIS PINOS COMO SADA.
BANK0

;RETORNA PARA O BANCO 0 DE MEMRIA DO PIC

;*********************************** ROTINA PRINCIPAL **********************************************


MAIN
BTFSC BOTAO_0
GOTO BOTAO_LIBERADO
GOTO BOTAO_PRESSIONADO

;O BOTO_0 EST PRESSIONADO?


;VAI PARA BOTO_LIBERADO.
;VAI PARA BOTO_PRESSIONADO.

BOTAO_LIBERADO
BCF LED_1
;APAGA LED_1
GOTO MAIN
;RETORNA AO LOOP PRINCIPAL (MAIN)
BOTAO_PRESSIONADO
BSF LED_1
;ACENDE LED_1
CALL DELAY
;CHAMA ROTINA DE DELAY
BCF LED_1
;DESLIGA LED_1
GOTO MAIN
;RETORNA AO LOOP PRINCIPAL (MAIN)
;*********************************** ROTINA DE DELAY *********************************************
DELAY

;ROTINA DE DELAY

MOVLW .4
MOVWF TEMPO3 ;TEMPORIZA 1s
DL3
MOVLW .250
MOVWF TEMPO2 ;TEMPORIZA 1/4s = 0.25s
DL2
MOVLW .250
MOVWF TEMPO1 ;TEMPORIZA 1ms
DL1
NOP
;GASTA UM CICLO DE MQUINA.
DECFSZ TEMPO1 ;DECREMENTA TEMPO1
GOTO DL1
DECFSZ TEMPO2 ;DECREMENTA TEMPO2
GOTO DL2
DECFSZ TEMPO3 ;DECREMENTA TEMPO3
GOTO DL3

23

Professor Srgio Minas Melconian.


RETURN

;RETORNA DA ROTINA DE DELAY

;*********************************** FIM DO PROGRAMA *********************************************


END

;FIM DO PROGRAMA

Exerccios Propostos
Utilizando como parmetro o segundo exemplo, faa as seguintes alteraes:
A) Ao apertar um boto, um LED ficar ligado por 5s e desligado logo em seguida.
B) Ao apertar um boto, ligue o LED_1, aps 2s ligue o LED_2 e os desligue aps 2s.
C) Ao ligar o microcontrolador, o LED_1 deve se manter aceso constantemente, passados 4s o LED_2 dever
piscar 5 vezes com um DELAY de 1s apagado e 3s ligado.

24

Professor Srgio Minas Melconian.

Terceiro Exemplo Gerando Som (BUZZER)


Neste terceiro exemplo ser estudada uma rotina para se gerar som com um cristal piezeltrico (Buzzer).
Funcionamento: Para um buzzer soar, necessrio aliment-lo com uma fonte de sinal. Neste caso, o PIC ira
gerar ondas quadradas com freqncia tal para o funcionamento do mesmo.
Fluxograma

INICIO
CONFIGURAES
INICIAIS

GERAR ONDA
QUADRADA COM
FREQUNCIA f.

O Programa
;****************************************************************************************************
;*
PROGRAMA BUZZER
*
;****************************************************************************************************
;********************************* ARQUIVOS DE DEFINIO DO PIC **********************************
#INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO - PIC 16F877A
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

;********************************* PAGINAO DE MEMRIA DO PIC **********************************


#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

;HABILITA BANCO 0 DE MEMRIA


;HABILITA BANCO 1 DE MAMRIA

;*********************************** DEFINIO DAS VRIAVEIS *************************************


CBLOCK 0X70 ;INICIO DA MEMRIA DE SUARIO
TEMPO1

;VARIAVEL TEMPO1

25

Professor Srgio Minas Melconian.


ENDC ;FIM DO BLOCO DE MEMRIA
;******************************************* SADAS ************************************************
#DEFINE BUZZER PORTA,5

;PORTA DO BUZZER

;************************************** VETOR DE RESET ********************************************


ORG 0X0000
GOTO INICIO

;ENDEREO INICIAL PARA PROCESSAMENTO


;VAI PARA INICIO DO PROGRAMA

;*********************************** INICIO DA INTERRUPO ****************************************


ORG 0X0004
RETFIE

;ENDEREO INICIAL DA INTERRUPO


;RETORNA DA INTERRUPO

;********************************** INICIO DO PROGRAMA *******************************************


INICIO
CLRF PORTA

;LIMPA TODO PORTA

BANK1

;HABILITA BANCO 1 DE MEMRIA DO PIC

MOVLW B'00000000'
MOVWF TRISA
;CONFIGURA TODO PORTA COMO SADA.
BANK0

;RETORNA PARA O BANCO 0 DE MEMRIA DO PIC

;************************************ ROTINA PRINCIPAL ********************************************


MAIN

;INICIO DA ROTINA PRINCIPAL

BSF BUZZER
CALL DELAY_MS
BCF BUZZER
CALL DELAY_MS
GOTO MAIN

;SETA O PORTA,5 (BUZZER)


;CHAMA ROTINA DE DELAY
;LIMPA O PORTA,5 (BUZZER)
;CHAMA ROTINA DE DELAY
;VAI PARA O INICIO DA ROTINA PRINCIPAL

;**************************************ROTINA DE DELAY********************************
DELAY_MS

;ROTINA DE DELAY

MOVLW .50
;MOVER O NUMERO 50 EM DECIMAL PARA W (VALOR MAXIMO = 256)
MOVWF TEMPO1 ;MOVER O NUMERO 50 PARA TEMPO1
NOP

;PERDE UM CICLO DE MQUINA (S PARA GANHAR TEMPO)

DECFSZ TEMPO1,F ;DECREMENTA TEMPO1 E GUARDA O RESULTADO EM F, E PULA A PROXIMA LINHA


SE RESULTADO FOR ZERO (FIM DO TEMPO1?)

26

Professor Srgio Minas Melconian.


GOTO $-2
RETURN

;NO, VOLTA DUAS INSTRUES


;SIM, PASSOU TEMPO
;RETORNA DA ROTINA DE DELAY

;************************************* FIM DO PROGRAMA *******************************************


END

;FIM DO PROGRAMA

Exerccios Propostos
Utilizando como parmetro o terceiro exemplo, faa as seguintes alteraes:
A) Altere as freqncias geradas, deixando o som mais grave.
B) Faa o buzzer soar de maneira que fique bipando com delay de 2s.
C) Insira 3 botes, cada um ao ser pressionado ira gerar uma freqncia diferente. (o som s ser escutado em
quanto o boto estiver pressionado).

27

Professor Srgio Minas Melconian.

Quarto Exemplo Rotao de Bit


Neste quarto exemplo ser estudada uma rotina para rotao de bit.
Funcionamento: Um bit ficar rotacionando para esquerda.
LED
L0
L0
L1
L1
L2
L2
L3
L3

ESTADO
LIGA
DESLIGA
LIGA
DESLIGA
LIGA
DESLIGA
LIGA
DESLIGA

Fluxograma

INICIO
CONFIGURAES
INICIAIS

LIMPA
REGISTRADOR
STATUS,C

ROTACIONAR O BIT

(3X)

LIMPA LED
(PORTB)

28

Professor Srgio Minas Melconian.


O Programa
;*********************************************************************************************
;*
PROGRAMA ROTAO DE BIT COM RLF
*
;*********************************************************************************************
;******************************CONFIGURAO PARA GRAVAO*****************************
#INCLUDE <P16F877A.INC>

;MODELO DO MICROCONTROLADOR UTILIZADO.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;**************************DEFINIO DOS BANCOS DE MEMRIA RAM************************
#DEFINE BANK0
#DEFINE BANK1

BCF STATUS, RP0


BSF STATUS, RP0

;SETA BANK 0 DE MEMRIA.


;SETA BANK 1 DE MEMRIA.

;***************************************VARIVEIS*************************************
CBLOCK 0X70
;ENDEREO LOCALIZADO NA MAMRIA DE DADOS DO BANK 0. FOI ESCOLHIDO, POIS
;EST LOCALIZAO ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAO.
TEMPO1
TEMPO2
TEMPO3

;CONTADOR PARA DELAY 1ms


;CONTADOR PARA DELAY 1/4s = 0,25s
;CONTADOR PARA DELAY 1s

ENDC

;FIM DO BLOCO DE MEMRIA.

;*****************************************SADAS**************************************
#DEFINE LED PORTB

;DEFINE PORTB COMO LED.


;0 -> APAGADO
;1 -> ACESO

;*************************************VETOR DE RESET**********************************
ORG 0X0000
GOTO INICIO

;ENDEREO DO VETOR DE RESET


;PULA PARA O INICIO

;***********************************INICIO DA INTERRUPO*****************************
ORG 0X0004
RETFIE

;ENDEREO DO VETOR DE INTERRUPO


;RETORNA DA INTERRUPO

;*************************************INICIO DO PROGRAMA******************************
INICIO
CLRF PORTB

;LIMPA PORTB

BANK1

;TRABALHAR COM BANK1

29

Professor Srgio Minas Melconian.


MOVLW B'00000000'
MOVWF TRISB
;DEFINE PORTS B COMO SADA (1 -> ENTRADA, 0 -> SADA).
BANK0

;TRABALHAR COM BANK0.

;*************************************ROTINA PRINCIPAL********************************
MAIN
BCF STATUS,C
;LIMPA CARRY (REGISTRADOR RELACIONADO AS OPERAES MATEMTICAS)
MOVLW B'00000001'
;MOVER VALOR 1 EM BINRIO PARA W (VALOR MENOS SIGNIFICATIVO)
MOVWF LED
;MOVER VALOR DE W (W=1)PARA LED (PORTB)
CALL DELAY_1S ;CHAMA ROTINA DE DELAY
RLF LED
CALL DELAY_1S

;ROTACIONA BIT DO LED PARA ESQUERDA


;CHAMA ROTINA DE DELAY

RLF LED
CALL DELAY_1S

;ROTACIONA BIT DO LED PARA ESQUERDA


;CHAMA ROTINA DE DELAY

RLF LED
CALL DELAY_1S

;ROTACIONA BIT DO LED PARA ESQUERDA


;CHAMA ROTINA DE DELAY

CLRF LED
GOTO MAIN

;LIMPA LED
;RETORNA PARA MAIN

;**************************************ROTINA DE DELAY********************************
DELAY_1S

;ROTINA DE DELAY

MOVLW .4
MOVWF TEMPO3 ;TEMPORIZA 1s
DL3
MOVLW .250
MOVWF TEMPO2 ;TEMPORIZA 1/4s = 0.25s
DL2
MOVLW .250
MOVWF TEMPO1 ;TEMPORIZA 1ms
DL1
NOP
;GASTA UM CICLO DE MQUINA.
DECFSZ TEMPO1 ;DECREMENTA TEMPO1
GOTO DL1
DECFSZ TEMPO2 ;DECREMENTA TEMPO2
GOTO DL2

30

Professor Srgio Minas Melconian.


DECFSZ TEMPO3 ;DECREMENTA TEMPO3
GOTO DL3
RETURN

;RETORNA DA ROTINA DE DELAY

;**************************************FIM DO PROGRAMA********************************
END

;FIM DO PROGRAMA (OBRIGATRIO)

Exerccios Propostos
Utilizando como parmetro o quarto exemplo, faa as seguintes alteraes:
A) Inverta o sentido de rotao do bit para a direita.
B) Ao invs de rotacionar apenas o bit como no exemplo, rotacione o bit, mantendo o anterior ligado.
LED
L0
L1
L2
L3
L0
L1
L2
L3

ESTADO
LIGA
LIGA
LIGA
LIGA
DESLIGA
DESLIGA
DESLIGA
DESLIGA

C) Mantenha a seqncia pedida no item B (iniciar ligada) e insira um boto que ao ser pressionado, ir manter
todos os LEDs ligados por 5s, em seguida a seqncia do item B voltar a rotacionar.

31

Professor Srgio Minas Melconian.

Quinto Exemplo Display 7 segmentos (Catodo Comum)


Neste quinto exemplo ser estudada uma rotina para aplicao do display de 7 segmentos catodo comum..
Funcionamento: Um boto ira incrementar um contador que vai de 0 15 e outro boto ira decrementar o mesmo.
Fluxograma

32

Professor Srgio Minas Melconian.


O Programa
;*************************************************************************************
;*
PROGRAMA CONTADOR - DISPLAY 7 SEGMENTOS E CONTADOR
*
;*************************************************************************************
;******************************CONFIGURAO PARA GRAVAO**********************
#INCLUDE <P16F877A.INC>

;MODELO DO MICROCONTROLADOR UTILIZADO.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;**************************DEFINIO DOS BANCOS DE MEMRIA RAM*****************
#DEFINE BANK0 BCF STATUS, RP0
#DEFINE BANK1 BSF STATUS, RP0

;SETA BANK 0 DE MEMRIA.


;SETA BANK 1 DE MEMRIA.

;***************************************VARIVEIS************************************
CBLOCK 0X70
;ENDEREO LOCALIZADO NA MAMRIA DE DADOS DO BANK 0. FOI ESCOLHIDO, POIS
;EST LOCALIZAO ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAO.
CONTADOR
FLAGS
FILTRO1
FILTRO2

;ARMAZENA O VALOR DA CONTAGEM


;ARMAZENA OS FLAGS DE CONTROLE
;FILTRAGEM PARA O BOTO 1
;FILTRAGEM PARA O BOTO 2

ENDC

;FIM DO BLOCO DE MEMRIA.

;*****************************************FLAGS***************************************
; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA.
#DEFINE ST_BT0
#DEFINE ST_BT1

FLAGS,0
FLAGS,1

;STATUS DO BOTO 0
;STATUS DO BOTO 1

;***************************************CONSTANTES************************************
; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
MIN EQU .0
MAX EQU .15
T_FILTRO EQU .255

;VALOR MNIMO PARA O CONTADOR


;VALOR MXIMO PARA O CONTADOR
;FILTRO PARA BOTO

;****************************************ENTRADAS*************************************
#DEFINE BOTAO_0 PORTB,0
#DEFINE BOTAO_1 PORTB,1

;PORTA DO BOTO - (PINO 35 - RB2)


;PORTA DO BOTO - (PINO 34 - RB1)

;*****************************************SADAS**************************************
;NO SER UTILIZADO NESTE PROGRAMA.

33

Professor Srgio Minas Melconian.


;*************************************VETOR DE RESET**********************************
ORG 0X0000
GOTO INICIO

;ENDEREO DO VETOR DE RESET


;PULA PARA O INICIO

;***********************************INICIO DA INTERRUPO*****************************
ORG 0X0004
RETFIE

;ENDEREO DO VETOR DE INTERRUPO


;RETORNA DA INTERRUPO

;********************ROTINA DE CONVERSO BINRIO -> DISPLAY 7 SEGMENTOS***************


; ESTA ROTINA IR RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER
; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO J EST
; FORMATADO PARA AS CONDIES DE LIGAO DO DISPLAY AO PORTD.
;
a
; **********
; *
*
; f *
*b
; * g
*
; **********
; *
*
; e*
*c
; * d
*
; ********** *.
CONVERTE
MOVF CONTADOR,W
ANDLW B'00001111'
ADDWF PCL,F
;

;COLOCA CONTADOR EM W
;MASCARA VALOR DE CONTADOR
;CONSIDERAR SOMENTE AT 15
;SOMA DESLOCAMENTO AO PROGRAM COUTER, GERANDO UMATABELA"CASE"

B'PGFEDCBA' ; POSIO CORRETA DOS SEGUIMENTOS


RETLW B'00111111' ; 00 - RETORNA SMBOLO CORRETO 0
RETLW B'00000110' ; 01 - RETORNA SMBOLO CORRETO 1
RETLW B'01011011' ; 02 - RETORNA SMBOLO CORRETO 2
RETLW B'01001111' ; 03 - RETORNA SMBOLO CORRETO 3
RETLW B'01100110' ; 04 - RETORNA SMBOLO CORRETO 4
RETLW B'01101101' ; 05 - RETORNA SMBOLO CORRETO 5
RETLW B'01111101' ; 06 - RETORNA SMBOLO CORRETO 6
RETLW B'00000111' ; 07 - RETORNA SMBOLO CORRETO 7
RETLW B'01111111' ; 08 - RETORNA SMBOLO CORRETO 8
RETLW B'01101111' ; 09 - RETORNA SMBOLO CORRETO 9
RETLW B'01110111' ; 10 - RETORNA SMBOLO CORRETO A
RETLW B'11111111' ; 11 - RETORNA SMBOLO CORRETO B
RETLW B'00111001' ; 12 - RETORNA SMBOLO CORRETO C
RETLW B'10111111' ; 13 - RETORNA SMBOLO CORRETO D
RETLW B'01111001' ; 14 - RETORNA SMBOLO CORRETO E
RETLW B'01110001' ; 15 - RETORNA SMBOLO CORRETO F

34

Professor Srgio Minas Melconian.


;*************************************INICIO DO PROGRAMA******************************
INICIO
BANK1

;ALTERA PARA O BANCO 1

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

B'00000011'
TRISB
B'00000000'
TRISC
B'00000000'
TRISD

BANK0

;DEFINE RB0 E RB1 COMO ENTRADA


;DEFINE TODO O PORTC COMO SADA
;DEFINE TODO O PORTD COMO SADA

;ALTERA PARA O BANCO 0

CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF FLAGS
MOVLW MIN
MOVWF CONTADOR
GOTO ATUALIZA

;LIMPA O PORTB
;LIMPA O PORTC
;LIMPA O PORTD
;LIMPA TODOS OS FLAGS
;INICIA CONTADOR = MIN = 0
;ATUALIZA O DISPLAY INICIALMENTE

;*************************************ROTINA PRINCIPAL********************************
MAIN
BSF
MOVLW
MOVWF
MOVWF

PORTC,3
T_FILTRO
FILTRO1
FILTRO2

;ATIVA O DISPLAY DA PLACA.


;INICIALIZA FILTRO1 = T_FILTRO
;INICIALIZA FILTRO2 = T_FILTRO

CHECA_BT0
BTFSC BOTAO_0
GOTO BT0_LIB

BTFSS ST_BT0
GOTO DEC
GOTO CHECA_BT1

;O BOTO 0 EST PRESSIONADO?


;NO, ENTO TRATA COMO LIBERADO
;SIM
;DECREMENTA O FILTRO DO BOTO
;TERMINOU?
;NO, CONTINUA ESPERANDO
;SIM
;BOTO J ESTAVA PRESSIONADO? (FLAG)
;NO, EXECUTA AO DO BOTO
;SIM, CHECA BOTO 1

BCF

;MARCA BOTO 0 COMO LIBERADO (FLAG)

DECFSZ FILTRO1,F
GOTO CHECA_BT0

BT0_LIB
ST_BT0

CHECA_BT1
BTFSC BOTAO_1
GOTO BT1_LIB
DECFSZ FILTRO2,F

;O BOTO 1 EST PRESSIONADO?


;NO, ENTO TRATA COMO LIBERADO
;SIM
;DECREMENTA O FILTRO DO BOTO

35

Professor Srgio Minas Melconian.

BTFSS ST_BT1
GOTO INC
GOTO MAIN

;TERMINOU?
;NO, CONTINUA ESPERANDO
;SIM
;BOTO J ESTAVA PRESSIONADO? (FLAG)
;NO, EXECUTA AO DO BOTO
;SIM, VOLTA AO LOOPING

BCF
ST_BT1
GOTO MAIN

;MARCA BOTO 1 COMO LIBERADO (FLAG)


;RETORNA AO LOOPING

GOTO CHECA_BT1

BT1_LIB

DEC
BSF
ST_BT0
MOVF CONTADOR,W
XORLW MIN
BTFSC STATUS,Z
GOTO MAIN
DECF CONTADOR,F
GOTO ATUALIZA
INC

;AO DE DECREMENTAR
;MARCA BOTO 0 COMO J PRESSIONADO (FLAG)
;COLOCA CONTADOR EM W
;APLICA XOR ENTRE CONTADOR E MIN
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SER ZERO
;RESULTOU EM ZERO?
;SIM, RETORNA SEM AFETAR CONT.
;NO
;DECREMENTA O CONTADOR
;ATUALIZA O DISPLAY

INCF CONTADOR,F
GOTO ATUALIZA

;AO DE INCREMENTAR
;MARCA BOTO 1 COMO J PRESSIONADO (FLAG)
;COLOCA CONTADOR EM W
;APLICA XOR ENTRE CONTADOR E MAX
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SER ZERO
;RESULTOU EM ZERO?
;SIM, RETORNA SEM AFETAR CONT.
;NO
;INCREMENTA O CONTADOR
;ATUALIZA O DISPLAY

CALL CONVERTE

;CONVERTE CONTADOR NO NMERO DO DISPLAY

MOVWF

;ATUALIZA O PORTD PARA VISUALIZARMOS O VALOR DE


; CONTADOR NO DISPLAY.
;NO, VOLTA AO LOOP PRINCIPAL

BSF
ST_BT1
MOVF CONTADOR,W
XORLW
MAX
BTFSC STATUS,Z
GOTO MAIN

ATUALIZA

GOTO MAIN

PORTD

;**************************************FIM DO PROGRAMA********************************
END

;FIM DO PROGRAMA (OBRIGATRIO)

36

Professor Srgio Minas Melconian.


Exerccios Propostos
Utilizando como parmetro o quinto exemplo, faa as seguintes alteraes:
A) Faa um contador OCTAL (0 7).
B) Faa um contador ALFABTICO de A H.

37

Professor Srgio Minas Melconian.

Esquema Eltrico da Placa de Teste

38

Professor Srgio Minas Melconian.

Lay-out Placa de Teste

Observao: Adicione dois JUMPERS conforme representados em vermelho.


39

Professor Srgio Minas Melconian.

Referncias

Desbravando o PIC - Ampliado e Atualizado para PIC 16F628A.


Autor: David Jos de Souza.
Editora: rica.

PIC16F877A Conectando o PIC Recursos Avanados.


Autor (es): David Jos de Souza e Nicolas Csar Lavinia.
Editora: rica.

Microcontroladores PIC - Tcnicas Avanadas.


Autor: Fabio Pereira.
Editora: rica.

Apostila Microarquitetura de alto desempenho Pipeline.


Autor: Gabriel P. Silva.
Universidade Federal de Rio de Janeiro.

Datasheet PIC16F877A.

http://www.labtools.com.br/

40

Você também pode gostar