Você está na página 1de 88

Anotaes de Aula

Microcontrolador PIC 16F877

Curso: Tecnlogo em Automao Industrial


Disciplina: Microprocessadores e Microcontroladores
Prof Nilton Serigioli

Sumrio
Captulo 1 Introduo aos microcontroladores ..................................................3
Microcontroladores versus microprocessadores ..............................3
CISC e RISC.....................................................................................4
Captulo 2 O que um PIC ? ............................................................................5
Captulo 3 Conhecendo o PIC 16F877 .............................................................12
Diagrama interno .............................................................................13
Pinagem e caractersticas eltricas .................................................14
Descrio dos pinos ........................................................................15
Mapeamento da memria de dados ................................................18
Captulo 4 Conjunto de instrues .....................................................................19
Exemplos das instrues...................................................................21
Exerccios .........................................................................................26
Captulo 5 Programao ....................................................................................31
Captulo 6 Conversor AD....................................................................................33
Captulo 7 Comunicao Serial USART..........................................................37
Captulo 8 Software MPLAB
Criar um Projeto.................................................................................42
Gravar um Programa.........................................................................47
Testando o programa DEBUGGER ...............................................48
Captulo 9 Compilador MPLAB C18 ...................................................................51
Captulo 10 Exemplos
Esquema Eltrico 1: Botes e LEDs .................................................53
Exemplo 1: Liga e desliga uma sada .............................................. 55
Exemplo 2: Atribuio de nomes para os PORTs ............................57
Exemplo 3: Temporizao - Oscilador.............................................. 58
Esquema Eltrico 2: Display de 7 segmentos...................................61
Exemplo 4: Trabalhando com Display de 7 segmentos................... 64
Exemplo 5: Multiplexao de Display de 7 segmentos.....................68
Esquema Eltrico 3: Display LCD e Conversor AD...........................69
Exemplo 5: Trabalhando com Display LCD.......................................74
Captulo 11 Linguagem C .................................................................................82
Projeto Integrador ..................................................................................................85
Tabela ASCII ...... ..................................................................................................87
Simulao utilizando Proteus .................................................................................88
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Pgina anterior Tabela de contedos Pgina seguinte


CAPTULO 1- Introduo aos Microcontroladores

Introduo
As circunstncias que se nos deparam hoje no campo dos microcontroladores tm
os seus primrdios no desenvolvimento da tecnologia dos circuitos integrados.
Este desenvolvimento tornou possvel armazenar centenas de milhares de
transistores num nico chip. Isso constituiu um pr-requisito para a produo de
microprocessadores e, os primeiros computadores foram construdos adicionando
perifricos externos tais como memria, linhas de entrada e sada, temporizadores
e outros. Um crescente aumento do nvel de integrao permitiu o aparecimento
de circuitos integrados contendo simultaneamente processador e perifricos. Foi
assim que o primeiro chip contendo um microcomputador e que mais tarde haveria
de ser designado por microcontrolador.
Aplicaes
Microcontroladores so usados com frequncia em produtos e dispositivos de
controle automtico, tais como sistemas de controle em motores de automveis,
controles remotos, mquinas de escritrio, ferramentas e brinquedos. Ao reduzir o
tamanho, custo e consumo de energia em comparao com um projeto que usa
microprocessador, memria e dispositivos de E/S separados, microcontroladores
tornam vivel economicamente o controle eletrnico de muitos processos. Cerca
de 50% dos microcontroladores vendidos so controladores "simples", outros 20%
so processadores de sinais digitais (DSPs) mais especializados.
Os microcontroladores podem ser encontrados em praticamente todos os
dispositivos eletrnicos digitais que nos cercam: carto de banco, dentro do
monitor, controladores de temperatura, Harddisk, relgio de pulso, rdio relgio,
mquinas de lavar, forno de microondas, telefones, etc. Voc est certamente
cercado de dezenas deles agora. Eles permitiram evoluo de equipamentos
que h anos no evoluam como os motores a combusto, que agora com o novo
controle eletrnico podem funcionar com sistema bicombustvel e poluindo menos
e as mquinas fotogrficas, que migraram de processos qumico/mecnico a
circuitos com microcontroladores. (fonte:www.wikipedia.com.br)

Microcontroladores versus Microprocessadores


Um microcontrolador difere de um microprocessador em vrios aspectos. Primeiro
e o mais importante, a sua funcionalidade. Para que um microprocessador possa
ser usado, outros componentes devem-lhe ser adicionados, tais como memria e
componentes para receber e enviar dados. Em resumo, isso significa que o
microprocessador o verdadeiro corao do computador. Por outro lado, o
microcontrolador foi projetado para ter tudo num s. Nenhum outro componente
externo necessrio nas aplicaes, uma vez que todos os perifricos
necessrios j esto contidos nele. Assim, ns poupamos tempo e espao na
construo dos dispositivos.
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Tecnologia CISC e RISC


Os microcontroladores PIC so fabricados com a tecnologia RISC (Reduced
Instruction Set Computer) que contm um conjunto reduzido de instrues, j os
Microcontroladores da famlia 8051 so fabricados uma tecnologia CISC
(Complex Instruction Set Computer) que possuem um conjunto de instrues mais
complexos.
Arquitetura Harvard e Von-Neumann
A arquitetura de Harvard um conceito mais recente que a de Von-Neumann. Ela
adveio da necessidade de pr o microcontrolador a trabalhar mais rapidamente.
Na arquitetura de Harvard, a memria de dados est separada da memria de
programa. Assim, possvel uma maior fluncia de dados atravs da unidade
central de processamento e, claro, uma maior velocidade de funcionamento. A
separao da memria de dados da memria de programa faz com que as
instrues possam ser representadas por palavras de mais que 8 bits. O
PIC16F877 usa 14 bits para cada instruo, o que permite que todas as instrues
ocupem uma s palavra de instruo. tambm tpico da arquitetura Harvard ter
um repertrio com menos instrues que a de Von-Neumann's, instrues essas,
geralmente
executadas
apenas
num
nico
ciclo
de
clock.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

CAPTULO 2 - O que o PIC?

O PIC um circuito integrado produzido pela Microchip Technology Inc., que


pertence da categoria dos microcontroladores, ou seja, um componente integrado
que em um nico dispositivo contm todos os circuitos necessrios para realizar
um completo sistema digital programvel.
O PIC pode ser visto externamente como um circuito integrado TTL ou CMOS
normal, mas internamente dispe de todos os dispositivos tpicos de um sistema
microprocessado, ou seja:

Uma CPU (Central Processor Unit, ou seja, Unidade de Processamento


Central) e sua finalidade interpretar as instrues de programa.

Uma memria PROM (Programmable Read Only Memory ou Memria


Programvel Somente para Leitura) ou EEPROM (Electrically Erasable
Programmable Read Only Memory) ou FLASH na qual ir memorizar de
maneira permanente as instrues do programa.

Uma memria RAM (Random Access Memory ou Memria de Acesso


Aleatrio) utilizada para memorizar as variveis utilizadas pelo programa.

Uma serie de LINHAS de I/O para controlar dispositivos externos ou


receber pulsos de sensores, chaves, etc.

Uma serie de dispositivos auxiliares ao funcionamento, ou seja, gerador de


clock, bus, contador, etc.

A presena de todos estes dispositivos em um espao extremamente pequeno, da


ao projetista ampla gama de trabalho e enorme vantagem em usar um sistema
microprocessado, onde em pouco tempo e com poucos componentes externos
podemos fazer o que seria oneroso fazer com circuitos tradicionais.
O PIC esta disponvel em uma ampla gama de modelos para melhor adaptar-se as
exigncias de projetos especficos, diferenciando-se pelo nmero de linha de I/O e
pelo contedo do dispositivo.
Uma descrio detalhada da tipologia do PIC disponvel no site da Microchip,
onde conseguimos encontrar grandes e variadas quantidades de informaes
tcnicas, software de apoio, exemplos de aplicaes e atualizaes disponveis.
Unidade Central de Processamento
Vamos agora adicionar mais 3 locais de memria a um bloco especfico para que
possamos ter as capacidades de multiplicar, dividir, subtrair e mover os seus
contedos de um local de memria para outro. A parte que vamos acrescentar
chamada "central processing unit" (CPU) ou Unidade Central de Processamento.
Os locais de memria nela contidos chamam-se registros. Os registros so,
portanto, locais de memria cujo papel ajudar a executar vrias operaes

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

matemticas ou quaisquer outras operaes com dados, quaisquer que sejam os


locais em que estes se encontrem.
Vamos olhar para a situao atual. Ns temos duas entidades independentes
(memria e CPU) que esto interligadas, deste modo, qualquer troca de dados
retardada bem como a funcionalidade do sistema diminuda. Se, por exemplo,
ns desejarmos adicionar os contedos de dois locais de memria e tornar a
guardar o resultado na memria, ns necessitamos de uma ligao entre a
memria e o CPU. Dito mais simplesmente, ns precisamos obter um "caminho"
atravs do qual os dados possam passar de um bloco para outro.
Bus
Este "caminho" designa-se por "bus. Fisicamente ele corresponde a um grupo de
8, 16 ou mais fios. Existem dois tipos de bus: bus de dados e de endereo. O
nmero de linhas do primeiro depende da quantidade de memria que desejamos
enderear e o nmero de linhas do outro depende da largura da palavra de dados,
no nosso caso igual a oito. O primeiro bus serve para transmitir endereos do
CPU para a memria e o segundo para ligar todos os blocos dentro do
microcontrolador. Neste momento, a funcionalidade j aumentou, mas um novo
problema apareceu: ns temos uma unidade capaz de trabalhar sozinha, mas que
no possui nenhum contato com o mundo exterior, ou seja, conosco. De modo a
remover esta deficincia, vamos adicionar um bloco que contm vrias
localizaes de memria e que, de um lado, est ligado ao bus de dados e do
outro s linhas de sada do microcontrolador que coincidem com pinos do circuito
integrado e que, portanto, ns podemos ver com os nossos prprios olhos.
Entrada/ sada - PORTs
Os PORTs so as entradas e sadas do microcontrolador, existem vrios tipos de
ports. Quando trabalhamos com ports primeiro de tudo necessrio escolher o
ports com que queremos trabalhar e, em seguida, enviar ou receber dados para
ou desse ports.
Quando se trabalha com ele, o ports funciona como um local de memria.
Qualquer coisa de que se l ou que se escreve possvel identificar facilmente
nos pinos do microcontrolador.
Watchdog Timer (WDT)
Outra coisa que nos vai interessar a fluncia da execuo do programa pelo
microcontrolador durante a sua utilizao. Suponha que como resultado de
qualquer interferncia (que ocorre frequentemente num ambiente industrial), o
nosso microcontrolador para de executar o programa ou, ainda pior, desata a
trabalhar incorretamente.
Claro que, quando isto acontece com um computador, ns simplesmente
carregamos no boto de reset e continuamos a trabalhar. Contudo, no caso do
microcontrolador ns no podemos resolver o nosso problema deste modo,
porque no temos boto. Para ultrapassar este obstculo, precisamos introduzir
no nosso modelo um novo bloco chamado watchdog timer (co de guarda do
tempo). Este bloco de fato outro contador que est continuamente a contar e
que o nosso programa pe a zero sempre que executado corretamente. No caso
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

de o programa "travar", o zero no vai ser escrito e o contador, por si s, ir


resetar o microcontrolador quando alcanar o seu valor. Isto vai fazer com que o
programa execute novamente e desta vez corretamente. Este um elemento
importante para que qualquer programa se execute fielmente, sem precisar da
interveno do ser humano.
O contador do WDT independente do ciclo de mquina do PIC. Existe dentro da
pastilha um circuito oscilador tipo RC que incrementa o contador do WDT, de
forma que ele trabalha indepentemente do oscilador do PIC. Isso significa que o
WDT continua operando memso em modo SLEEP.
O perodo de estouro do WDT de aproximadamente 18ms. Esse tempo pode ser
alterado pelo registrador OPTION_REG.
Power-on Reset (POR)
Um pulso de Power-on Reset gerado internamente no PIC sempre que a borda
de subida do VDD for detectada, ou seja, somente na energizao do
microcontrolador. O POR utilizado para garantir que o microcontrolador opere
corretamente e no sofra problemas durante a energizao.
Power-up Timer (PWRT)
O Power-up Timer um temporizador utilizado para garantir que o PIC somente
comece a operar depois que a fonte de alimentao estiver estabilizada. O PWRT
faz com que o PIC permanea em estado de reset durante um intervalo de 72ms.
Brown-out Reset (BOR)
O Brown-out Reset fora um reset no PIC sempre que a teno de alimentao
estiver abaixo de 4V durante um intervalo de tempo maior que 100s.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Gerador de Clock oscilador


O circuito do oscilador usado para fornecer um clock, ao microcontrolador. O
clock necessrio para que o microcontrolador possa executar um programa ou
as instrues de um programa.
Oscilador RC: esse o tipo mais simples e tambm o mais barato, mas por outro
lado o menos preciso.
Oscilador Ressonador: o ressonador cermico uma segunda opo, no to
barato quanto um RC, mas bem mais preciso e estvel.
Oscilador de Cristal XT: o cristal est contido num invlucro de metal com dois
pinos onde foi escrita a frequncia a que o cristal oscila. Dois capacitores
cermicos devem ligar cada um dos pinos do cristal massa, e os terminais do
cristal ligados aos pinos OSC1 e OSC2 do microcontrolador. Quando projetamos
um dispositivo, a regra colocar o oscilador to perto quanto possvel do
microcontrolador, de modo a evitar qualquer interferncia nas linhas que ligam o
oscilador ao microcontrolador.
Os cristais so os osciladores mais precisos que podemos utilizar, mas tambm
so os mais caros.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Unidade de Memria
A memria a parte do microcontrolador cuja funo guardar dados. A maneira
mais fcil de explicar descrev-la como uma grande prateleira cheia de gavetas.
Se supusermos que marcamos as gavetas de modo a elas no se confundirem
umas com as outras, ento o seu contedo ser facilmente acessvel. Basta saber
a designao da gaveta e o seu contedo ser conhecido.
A memria o conjunto de todos os locais de memria (gavetas) e
endereamento nada mais que selecionar um deles. Isto significa que
precisamos selecionar o endereo desejado (gaveta) e esperar que o contedo
desse endereo nos seja apresentado (abrir a gaveta). Alm de ler de um local da
memria (ler o contedo da gaveta), tambm possvel escrever num endereo
da memria (introduzir um contedo na gaveta).

O PIC16F877 tem dois blocos de memria separados, um para dados e o outro


para o programa. A memria EEPROM e os registos de uso geral na memria
RAM constituem o bloco para dados e a memria FLASH constitui o bloco de
programa.
A memria de programa a parte responsvel pelo armazenamento do
programa. Para a famlia do PIC 16F esta memria do tipo FLASH, o que torna
possvel programar o microcontrolador muitas vezes antes de este ser instalado
num dispositivo, e, mesmo depois da sua instalao, podemos alterar o programa
e parmetros contidos. O tamanho da memria de programa de 8192 endereos
de palavras (8K words) de 14 bits.
A memria de dados (RAM) serve para guardar as variveis e os registradores
utilizados pelo programa. Esta memria armazena dados de 8 bits e voltil, ou
seja, quando o PIC desenergizado, ela automaticamente perdida.
Para o PIC 16F877 a RAM possui 512 bytes, sendo 368 bytes para uso geral e 77
bytes para os registradores especiais
A memria de dados (E2PROM) serve para guardar as informaes que no
podemos perder quando o PIC desenergizado. A memria E2PROM de 8 bits
com 256 bytes de tamanho.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Registros Especiais (SFR)


Os registradores SFR (Special Function Registers ou Registros de Funes
Especiais) so utilizados pelo microcontrolador para execuo do programa e
processamento da ULA. Servem tambm para configurao de vrias funes e
para utilizao de todos os perifricos.

Registradores de uso geral


So registradores destinados para armazenamento de variveis definidas pelo
usurio para serem escritas e lidas pelo programa. O PIC 16F877 possui 368
bytes disponveis para uso geral.

Contador de Programa
O contador de programa (PC = Program Counter), um registro de 13 bits que
contm o endereo da instruo que vai ser executada. Ao incrementar ou alterar
(por exemplo, no caso de saltos) o contedo do PC, o microcontrolador consegue
executar as todas as instrues do programa, uma aps outra.

Pilha
O PIC16F877 tem uma pilha (stack) de 13 bits e 8 nveis de profundidade, o que
corresponde a 8 locais de memria com 13 bits de largura. O seu papel bsico
guardar o valor do contador de programa quando ocorre um salto do programa
principal para o endereo de um subprograma a ser executado. Depois de ter
executado o subprograma, para que o microcontrolador possa continuar com o
programa principal a partir do ponto em que o deixou, ele tem que ir buscar pilha
esse endereo e carreg-lo no contador de programa. Quando nos movemos de
um programa para um subprograma, o contedo do contador de programa
empurrado para o interior da pilha (um exemplo disto a instruo CALL). Quando
so executadas instrues tais como RETURN, RETLW ou RETFIE no fim de um
subprograma, o contador de programa retirado da pilha, de modo a que o
programa possa continuar a partir do ponto em que a seqncia foi interrompida.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

10

Mapeamento da Memria

Vetor Reset: trata-se do primeiro endereo da memria de programa que ser


executado aps um start-up ou reset. Endereo 0000h
Vetor Interrupo: Quando acontecer uma interrupo o programa ser desviado
para o endereo 0004h.
Organizao da Memria de Dados: a memria de dados dividida em bancos
(pginas), para este PIC, existe 4 bancos que so selecionados pelo registrador
especial STATUS, nos bits RP1 (STATUS<6>) e RP0 (STATUS<5>).
RP1: RP0
0
0
0
1
1
0
1
1

BANCO
0
1
2
3

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

11

CAPTULO 3 - Conhecendo o PIC 16F877A

Microcontrolador de 40 pinos;
Via de programao com 14 bits e 35 instrues;
33 portas configurveis como entrada e sada;
15 interrupes disponveis;
Memria de programao E2PROM FLASH;
Memria de programa de 8Kwords;
Memria E2PROM interna com 256 bytes;
Memria RAM com 368 bytes;
Trs timers;
Comunicao seriais: SPI, I2C e USART;
Conversores analgicos de 10 bits (8x) e comparadores analgicos (2x)
Dois mdulos CCP: Capture, Compare e PWM;

Caractersticas da famlia 16F87XX

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

12

Diagrama interno do PIC 16F877A

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

13

Pinagem PIC 16F877

Caractersticas Eltricas
Temperatura de trabalho
Temperatura de armazenamento
Tenso de trabalho
Tenso mxima no pino Vdd (em relao ao Vss)
Tenso mxima no pino MCRL (em relao ao Vss)
Tenso mxima no pino RA4 (em relao ao Vss)
Tenso mxima nos demais pinos (em relao ao Vss)
Dissipao de energia
Corrente mxima de sada no pino Vss
Corrente mxima de entrada no pino Vdd
Corrente mxima de sada de um pino( quando em Vss)
Corrente mxima de entrada de um pino( quando em Vdd)
Corrente mxima de entrada do PORTA, PORTB e PORTE
combinados
Corrente mxima de sada do PORTA, PORTB e PORTE
combinados
Corrente mxima de entrada do PORTC e PORTD combinados
Corrente mxima de sada do PORTC e PORTD combinados

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

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

14

Descrio dos pinos

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

15

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

16

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

17

Mapamento da Memria de Dados

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

18

CAPTULO 4 - Conjunto de Instrues


O conjunto completo compreende 35 instrues conforme tabela a seguir. Uma
razo para este pequeno nmero de instrues resulta principalmente do fato de
estarmos a falar de um microcontrolador RISC cujas instrues foram otimizadas
tendo em vista a rapidez de funcionamento, simplicidade de arquitetura e
compacidade de cdigo. O nico inconveniente, que o programador tem que
dominar a tcnica desconfortvel de fazer o programa com apenas 35
instrues.

Perodo de execuo da instruo


Todas as instrues so executadas num nico ciclo, exceto as instrues de
ramificao condicional se a condio for verdadeira, ou se o contedo do
contador de programa for alterado pela instruo. Nestes casos, a execuo
requer dois ciclos de instruo e o segundo ciclo executado como sendo um
NOP (Nenhuma Operao). Quatro oscilaes de clock perfazem um ciclo de
instruo (ciclo de mquina). Se estivermos a usar um oscilador com 4MHz de
freqncia, o tempo normal de execuo de uma instruo ser de 1s e, no caso
de uma ramificao condicional de 2s.
Resumo do Set de instrues
Termos utilizados:
Work - W: trata-se de um registrador temporrio para as operaes da
ULA. Tambm chamado de acumulador.
File - F: referncia de um registrador (posio de memria) propriamente
dito.
Literal - L: um nmero qualquer.
Destino - d : o local onde deve ser armazenado o resultado da operao.
Existem somente dois destinos possveis: f, que guardar o resultado no
prprio registrador ou no w, que colocar o resultado em Work.
Bit - B: refere-se a um bit dentro de um byte.
Teste - T: quando queremos testar o estado de um bit.
Skip S: significa pulo, e utilizado para criar desvios.
Set S: refere-se ao ato de setar um bit, isto , torna-lo equivalente a UM.
Clear C: refere-se ao ato resetar um bit, isto , torna-lo equivalente a
ZERO.
Zero Z: algumas instrues podem gerar desvios se o resultado da
operao for zero.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

19

Instrues
ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ

Argumentos
f,d
f,d
f
f,d
f,d
f,d

INCF
INCFSZ

f,d
f,d

IORWF
MOVF
MOVWF
RLF
RRF
SUBWF
SWAPF

f,d
f,d
f,d
f,d
f,d
f,d
f,d

XORWF

f,d

Instrues
ADDLW
ANDLW
IORLW
MOVLW
SUBLW
XORLW

Argumentos
K
K
K
K
K
K

Operaes com Registradores


Descrio
Soma W e f, guardando o resultado em d
Lgica E entre W e f, guardando o resultado em d
Limpa f.
Limpa W
Calcula o complemento de f, guardando o resultado em d
Decrementa f, guardando o resultado em d
Decrementa f, guardando o resultado em d e pula a prxima linha
se o resultado for zero
Incrementa f, guardando o resultado em d
Incrementa f, guardando o resultado em d e pula a prxima linha se
o resultado for zero
Lgica OU entre W e f, guardando o resultado em d
Move f para d
Move W para f.
Rotaciona f 1 bit para esquerda, guardando o resultado em d
Rotaciona f 1 bit para direita, guardando o resultado em d
Subtrai E de f (W-f), guardando o resultado em d
Executa a inverso entre as partes alta e baixa de f, guardando o
resultado em d
Lgica OU exclusivo entre W e f, guardando o resultado em W
Operaes com literais
Descrio
Soma k com W, guardando o resultado em W
Lgica E entre k e W, guardando o resultado em W
Lgica OU entre k e W, guardando o resultado em W
Move k para W
Subtrai W de k , guardando o resultado em W
Lgica OU exclusivo entre k e W, guardando o resultado em W

OperaescomBits
Instrues
BCF
BSF
BTFSC
BTFSS

Argumentos
f,b
f,b
f,b
f,b

Descrio
Impe ZERO no bit do registrador f
Impe UM no bit do registrador f
Testa o bit do registrador f, e pula a prxima linha se ele for ZERO
Testa o bit do registrador f, e pula a prxima linha se ele for UM

Argumentos
R
R
K
-

Descrio
Gasta um ciclo de mquina sem fazer absolutamente nada
Executa a rotina R
Limpa o registrador WDT para no ocorrer o reset
Desvia para o ponto R, mudando o PC
Retorna de uma interrupo
Retorna de uma rotina, com k em W
Retorna de uma rotina, sem afetar W
Coloca o PIC em modo sleep

Controles
Instrues
NOP
CALL
CLRWDT
GOTO
RETFIE
RETLW
RETURN
SLEEP

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

20

Exemplos de utilizao das instrues


O microcontrolador s entende o Cdigo Binrio, mas o programador pode
entender outros formatos como: Decimal, Hexadecmal e cdigo ASCII e eles
devem ser declarados da seguinte forma:
Decimal
Exemplo:

D ou .
D20 ou .20

Hexadecimal
Exemplo:

H ou 0X
H20 ou 0X20

Binrio
Exemplo

B
B00001111

ASCII
Exemplo

A
Aa

1- Exemplos de Operaes com Bits:


BSF
PORTB,1
Antes da instruo: PORTB = B00000000
Depois da instruo: PORTB = B00000010
BCF
PORTB,1
Antes da instruo: PORTB = B00000010
Depois da instruo: PORTB = B00000000
BTFSC
BCF
BSF

PORTA,6 ; testa a bit 7 do PORTA e se for ZERO pula a instruo


PORTB,1
; bit 7 =1
PORTB,1
; bit 7 =0

BTFSS
BCF
BSF

PORTA,6 ; testa a bit 7 do PORTA e se for UM pula a instruo


PORTB,1
; bit 7 =0
PORTB,1
; bit 7 =1

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

21

2- Exemplos de Manipulao de Registradores:


MOVLW
0x10
Depois da instruo: W = 0x10
MOVWF
REG1
Antes da instruo: W = 0x10
Depois da instruo: W = 0x10

REG1 = xx
REG1 = 0x10

MOVF
REG1,W
Antes da instruo: W = 0x10
Depois da instruo: W = 0x20

REG1 = 0x20
REG1 = 0x20

CLRF
REG1
Depois da instruo: REG1 = 0x00
CLRW
Depois da instruo: W = 0x00
INCF
REG1,F
Antes da instruo: REG1 = 0x09
Depois da instruo: REG1 = 0x10
INCF
REG1,W
Antes da instruo: REG1 = 0x06
Depois da instruo: REG1 = 0x06

W= 0x02
W= 0x07

DECF
REG1,F
Antes da instruo: REG1 = 0x09
Depois da instruo: REG1 = 0x08
DECF
REG1,W
Antes da instruo: REG1 = 0x10
Depois da instruo: REG1 = 0x10

W= 0x02
W= 0x0F

SWAPF
REG1,F
Antes da instruo: REG1 = B00001111
Depois da instruo: REG1 = B11110000

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

22

3-Exemplos de Operaes Aritmticas:


ADDLW
0x13
Antes da instruo: W = 0x10
Depois da instruo: W = 0x23
ADDWF
REG1,W
Antes da instruo: W = 0x17
Depois da instruo: W = 0x28

REG1 = 0x11
REG1 = 0x11

ADDWF
REG1,F
Antes da instruo: W = 0x17
Depois da instruo: W = 0x17

REG1 = 0x17
REG1 = 0x28

SUBLW

0x07

Antes da inst: W = 0x08


Depois da inst: W = 0x01
Carry C = 1 resultado
positivo
Z=0

SUBLW

0x00

Antes da inst: W = 0x02


Depois da inst: W = 0xFE
(254)
Carry C = 0 resultado
negativo
Z=0

SUBWF
REG1,W
Antes da instruo: W = 0x17
Depois da instruo: W = 0x06

SUBLW

0x10

Antes da inst: W = 0x10


Depois da inst: W = 0x00
Carry C = 1 resultado
positivo ou zero
Z=1

REG1 = 0x11
REG1 = 0x11

Usando instrues aritmticas para comparar valores


MOVF
SUBWF
BTFSC
GOTO
GOTO

A,W
B,W
STATUS,C
MAIOR
(Caso A seja maior que B)
MENOR
(Caso A seja menor que B)

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

23

4- Exemplos de operaes lgicas


ANDLW
0x B00001111
Antes da instruo: W= B10010101
Depois da instruo: W= B00000101
ANDWF
PORTA,W
Antes da instruo: PORTA= B11111111
Depois da instruo: PORTA= B11111111

W= B01110111
W= B01110111

IORLW
0x B00001111
Antes da instruo: W= B10010101
Depois da instruo: W= B10011111
IORWF
PORTA,W
Antes da instruo: PORTA= B11111111
Depois da instruo: PORTA= B11111111

W= B01110111
W= B01110111

XORLW
B00010010
Antes da instruo: W= B00000100
Depois da instruo:W= B00010110
XORWF
PORTA,W
Antes da instruo: PORTA = B00100010
Depois da instruo: PORTA = B00100010

W= B00100010
W= B00000000

Usando a instruo XORWF para comparar valores


MOVF
XORWF
BTFSS
GOTO
GOTO

A,W
B,W
STATUS,Z
DIFERENTE
IGUAL

; Movimenta o contedo de A para W


; Ou exclusivo entre W e B
; Testa o flag de ZERO
; Quando o resultado lgico for um o flag Z =0
; Quando o resultado lgico for zero o flag Z =1

COMF
PORTA,W
Antes da instruo: PORTA = B00100010
Depois da instruo: PORTA = B00100010

W= B11011101

RRF REG1,F
Antes da instruo: REG1= B11100110
Depois da instruo: REG1 = B01110011

C= 0
C= 0

RLF REG1,F
Antes da instruo: REG1= B11100110
Depois da instruo: REG1 = B11001100

C= 0
C= 1

DECFSZ

CONTADOR,F

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

24

GOTO
GOTO

CONTINUA
ACABOU

Depois da instruo: decrementa o registrador CONTADOR e testa, se diferente


de zero executa a instruo GOTO CONTINUA. Se o CONTADOR for zero pula e
executa a instruo GOTO ACABOU.
INCFSZ
GOTO
GOTO

CONTADOR,F
CONTINUA
ACABOU

Depois da instruo: incrementa o registrador CONTADOR e testa, se diferente de


zero executa a instruo GOTO CONTINUA. Se o CONTADOR for zero pula e
executa a instruo GOTO ACABOU.
Escrita e compilao de um programa em Assembly

O cdigo fonte em assembly possui a extenso .ASM e adicionado um arquivo


.INC que um arquivo de texto onde esto declarados todos os registradores e
outras definies necessrias.
Durante a compilao do cdigo, o compilador assembler gera uma srie de
arquivos com nome identido ao cdigo, mas com extenses diferentes:
HEX um arquivo que contm o cdigo de operao o qual ser enviado
ao PIC pelo programador.
LST um arquivo de texto na qual vem reportado por inteiro o codigo
assembly e a correspondente traduo em opcode. No utilizado na
programao do PIC.
ERR contm uma lista de erros de compilao que mostra o nmero da
linha do cdigo na qual est com erro
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

25

Exerccios

Exerccio 1: Instrues de movimentao


Instrues

Descrio das Instrues

Contedo dos
Registradores

MOVLW
0X20
MOVWF
REGA
MOVLW
.10
MOVWF
REGB
DECF REGB,F
INCF REGA,F
MOVF REGA,W
MOVWFREGC
INCF REGC,W
CLRF REGA
SWAPFREGB,F

Exerccio 2: Instrues de movimentao


Instrues

Descrio das Instrues

Contedo dos
Registradores

MOVLW
0X0F
MOVWF
REGA
MOVWF
REGB
SWAPFREGB,F
INCF REGB,W
MOVWFREGA
INCFREGA
CLRWF

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

26

Exerccio 3: Instrues Lgicas


Instrues

Descrio das Instrues

Contedo dos
Registradores

MOVLW
.200
MOVWF
REGA
MOVLW
.100
MOVWF
REGB

MOVFREGA,W
ANDLW0X0F
MOVWFREGC

MOVFREGA,W
ANDWFREGB,W
MOVWFREGD

MOVFREGA,W
IORLW0X0F
MOVWFREGE

MOVFREGA,W
XORWFREGB,W
MOVWFREGF
COMFREGF,F
Exerccio 4: Utilizando as instrues estudas, faa um programa que atenda a
seguinte situao lgica. REGE = (REGA.REGB) + (REGC.REGD)

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

27

Exerccio 5: Comparao de valores utilizando XOR


Instrues
Descrio das Instrues

Contedo dos
Registradores

MOVLW
.10
MOVWF
REGA
MOVLW
.5
MOVWF
REGB
MOVLW
.1
MOVWF
REGC
CONTINUA
MOVF REGA,W
XORWFREGB,W
BTFSS STATUS,Z
GOTO DIFERENTE
GOTO IGUAL

DIFERENTE
INCF REGB,F
RLFREGC,F
GOTO CONTINUA

IGUAL
CLRF REGB
GOTO CONTINUA
Exerccio 6: Utilizando as instrues estudas, faa um programa que atenda a
seguinte situao:
Contador de 0 a 99 - a cada varredura do programa o registrador UNIDADE deve
ser incrementado at que seu contedo seja igual a 10, aps isso a UNIDADE
deve ser zerada e incrementar um no registrador DEZENA.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

28

Exerccio 7: Comparao de valores


Instrues
Descrio das Instrues

Contedo dos
Registradores

MOVLW
.128
MOVWF
REGA
MOVLW
.1
MOVWF
REGB
MOVLW
.10
MOVWFCONTADOR
FICA
DECFSZCONTADOR
GOTO CONTINUA
GOTO ACABOU

CONTINUA
RLFREGB,F
RRFREGA,F
GOTO FICA

ACABOU
CLRF CONTADOR
GOTO FICA
Exerccio 8: Faa o mesmo programa do exerccio 6 utilizando como comparao
a instruo DECFSZ .

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

29

Exerccio 9: Instrues Aritmticas


Instrues

Descrio das Instrues

Contedo dos
Registradores

MOVLW
.10
MOVWF
REGA
MOVLW
.20
MOVWF
REGB
MOVFREGB,W
ADDLW.5
MOVWFREGB

MOVFREGA,W
ADDWF
REGB,W
MOVWFREGC

TESTE
MOVFREGA,W
SUBWFREGC,W
BTFSCSTATUS,C
GOTOMAIOR
GOTOMENOR

MAIOR
DECFREGC
GOTOTESTE
MENOR
INCFREGC
GOTOTESTE
Exerccio 10: Utilizando as instrues estudas, faa um programa que atenda a
seguinte situao: REGD= (REGA+REGB+REGC), se REGD for maior que 15 o
nible alto do REGD deve ser limpo.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

30

CAPTULO 5 - Programao
Arquivo de Definio: INCLUDES
A fim de padronizar e agilizar mais a programao, existe a possibilidade de
criarmos e utilizarmos arquivos de definio, que foram chamados pela Microchip
de arquivo Includes. Esses arquivos nada mais so do que arquivos de texto,
ou mesmo cdigo fonte, que sero inclusos no seu programa. Desta forma, a
prpria Microchip criou um arquivo include para cada tipo de microcontrolador, em
que esto definidos os nomes e endereos de todos os SFRs e uma srie de
outras definies necessrias para a utilizao dos microcontroladores.
#INCLUDE <P16F877A.INC>

;ARQUIVO PADRO MICROCHIP PARA 16F877A

Constantes e Definies: EQU e DEFINES


A diretriz EQU associa um nome a um nmero.
Nome da varivel EQU endereo da memria.
Nome da constante EQU valor da constante.

(CONTADOR EQU 0X0E)


(TEMPO
EQU .100 )

A diretriz # DEFINE substitui os nomes por uma expresso inteira. Por exemplo
podemos dar um nome a uma sada, substituindo PORTB,1 por LED
# DEFINE

LED

PORTB,1

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

31

Configurando as opes do PIC

__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF &


_LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

BOR (Brown Out Detect) trata de um sistema de deteco automtica de baixa


tenso. Isso significa que, se a tenso de alimentao for menor que 4V por mais
de 100s, o sistema ser reiniciado.
_CP_ON: Code protection ligado impedir que qualquer pessoa consiga ler o
programa gravado dentro do PIC.
_CPD_ON: Para acesso externo EEPROM habilitado.
_DEBUG_ON: Modo debug in-circuit habilitado, RB6 e RB7 dedicados para the
debug.
_LVP_ON: Para sistema de programao em baixa tenso ativado.
_WRT_ON: habilitado a escrita na memria FLASH

_BODEN_ON: BOR (Brown Out Detect) trata de um sistema de deteco


automtica de baixa tenso. Isso significa que, se a tenso de alimentao for
menor que 4V por mais de 100s, o sistema ser reiniciado.

_PWRTE_ON: Para Power Up ligado - esta opo ir fazer com que o PIC s
comece a operar cerca de 72ms aps o pino MCLR ser colocado em nvel alto.

_WDT_ON: Para WatchDog ligado.

_XT_OSC: oscilador tipo cristal ou ressonadores

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

32

CAPTULO 6 -O CONVERSOR A/D DO PIC16F87X


Todos os modelos de microcontroladores PIC16F87X integram o conversor A/D.
Vamos ver como Funciona neste microcontrolador.

Generalidades
O conversor A/D encontra-se implementado em silcio nos PIC16F87X. Trata-se
de um conversor de aproximaes sucessivas e com 10 bits de resoluo.O
modelo de 28 terminais dispe de cinco canais de entrada, e os 40 terminais de
oito canais. Nos PIC16F870/3/6 os cinco canais de entradas so suportados pelos
terminais da porta A.
Para seu funcionamento so necessrias duas voltagens de referncia, chamadas
Vref+ e Vref-, que devem ser selecionadas por software e que podem utilizar
tenses internas (VDD e Vss) do prprio microcontrolador ou tenses externas
aplicadas pelos pinos RA3/AN3/Vref+ e RA2/AN2/Vref-.

Registro de trabalho e de controle


O conversor utiliza quatro registros: dois de controle chamados ADCON0 e
ADCON1, e dois de resultado ADRESH e ADRESL.
Os dois primeiros registros controlam o funcionamento do CAD (Conversor A/D).

O registro ADCON0
Os dois bits mais significativos ADCS1:0 so usados para selecionar a frequncia
de clock empregada na converso (Tosc=1/Fosc). Na tabela podemos ver a
correspondncia de cada combinao de bits com um tempo de converso. Este
tempo chamado de TAD e, trabalhando com um CAD de 10 bits de resoluo,
necessidades um mnimo de 12TAD para finalizar a converso. A durao mnima
de um TAD nos PIC16F87X de 1,6_s.
Os bits CHS2:0 selecionam o canal por onde se introduzir o sinal analgico a ser
convertido. Na tabela mostra-se a correspondncia.
O bit GO/DONE serve para iniciar a converso. Uma vez colocada em 1
permanecer nesse estado enquanto dure a converso e passar
automaticamente para 0 quanto finalize. O bit ADON o bit de habilitao do
conversor. Se o seu valor for 1 permite o funcionamento do conversor, porm se o
seu valor for 0 probe ou inabilita o funcionamento deste.
O bit ADCON0<1> no est implementado, no possui nenhuma funo.
ADCON0(ENDEREOS:1Fh)
R/W-0
ADCS1
bit7

R/W-0
ADCS0

R/W-0
CHS2

R/W-0
CHS1

R/W-0
CHS0

R/W-0
GO/DON E

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

R/W-0
-

R/W-0
ADON
bit0

33

O registro ADCON1
O bit mais significativo do registro ADCON1 o ADFM e serve para selecionar o
formato do resultado da converso. Se o seu valor for 1 o resultado ser
justificado direita. Portanto, tendo em conta que a resoluo
ADCON1 (ENDEREOS:9Fh)
U-0
ADFM
bit7

U-0
-

R/W-0
-

U-0
-

R/W-0
PCFG3

R/W-0
PCFG2

R/W-0
PCFG1

R/W-0
PCFG0
bit0

Registros de controle ADCONO e ADCONI.


ADCSI
ADCS0
TAD
0
0
2Tosc
0
1
8.Tosc
1
0
32.Tosc
1
1
Oscilador RC Interno
Seleo da freqncia de trabalho do CAD.

Do conversor de 10 bits, os seis bits mais significativos do registro ADRESH


sero interpretados como 0.
Quanto o bit ADFM possui o valor 0, o resultado da converso ser justificado
esquerda.
Portanto, os seis bits menos significativos do registro ADRESL tero o valor 0. No
grfico da figura podemos observar como se realiza a justificao do resultado. Os
bits seguintes ADCON1<6:4> no esto implementados e os quatro bits menos
significativos do registro PCFG3:0 so usados para configurar os pinos do
microcontrolador. Assim, poderemos definir quais pinos desejamos que sejam
entradas analgicas e quais sero linhas de E/S (digitais), se quisermos utilizar
tenses de referncias, etc. Na tabela da figura so mostradas todas as
combinaes possveis. A primeira coluna contm os bits PCFG3:0, as trs
colunas seguintes pertencem aos canais no- implementados no PIC16F870; as
prximas cinco colunas so os canais da porta A; as duas seguintes indicam de
onde tomamos as tenses de referncia e a ltima indica o nmero de canais
analgicos e disponveis e o nmero de canais usados como tenses de
referncia.
A letra A assinala que o canal ser usado como canal analgico e a letra D que
ser usado como E/S digital.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

34

Os registros de trabalho
Os registros de trabalho so aqueles onde se armazenar o resultado da
converso. O registro ADRESH (1Eh) conter a parte alta do resultado e o registro
ADRESL (9Eh) a parte baixa. O resultado ter 10 bits, portanto os seis restantes
sero preenchidos com zeros em funo do bit ADFM.
Seleo TAD
TAD
ADCS1:ADCS0
20 MHz
5 MHz
1.25mHZ
2.Tosc
00
100 ns
400 ns
1,6 ns
8.Tosc
01
400 ns
1.6 ns
6,4 us
32.Tosc
10
1,6 us
6,4 us
2,6us
AC
11
2-6 us
2-6 us
2-6 us
Valores assumidos por TAD para diferentes freqncias de trabalho.

333,3kHz
6 us
24 us
96 us
2-6 us

CHS2
CHS1
CHS0 CANAL
0
0
0
Canal 0 (RA0/AN0)
0
0
1
Canal 1 (RA1/AN1)
0
1
0
Canal 2 (RA2/AN2)
0
1
1
Canal 3 (RA3/AN3)
1
0
0
Canal 4 (RA4/AN4)
1
0
1
Canal 5 (RA5/AN5) (1)
1
1
0
Canal 6 (RA6/RA6) (1)
1
1
1
Canal 7 (RA7/AN7)
(1) No implementados nos PICI6F87X de 28 terminais
Seleo do canal a converter.

Funcionamento em modo SLEEP


Pode-se programar uma converso enquanto o microcontrolador estiver no modo
SLEEP, porm neste caso torna-se necessrio utilizar como relgio de converso
o modo RC, j que o relgio normal do PIC parado neste modo.
Quando selecionados este relgio o CAD espera um ciclo de instruo antes de
comear a converso, o que permite executar a instruo SLEEP. Ao Finalizar a
converso , o resultado colocado nos registros ADRESH:ADRESL; o bit
GO/DONE coloca-se em 0 e se gera uma interrupo (se estiver autorizada), o
que faz com que o PIC saia do modo SLEEP. Caso a interrupo no esteja
autorizada, o CAD espera neste estado at que o processador saia do modo
SLEEP, momento em que o resultado e o bit GO/DONE continuam sendo vlidos.

Realizando uma converso


Para realizar uma converso existem seis fases diferentes:
1 Fase Configurao do conversor A/D: Configurao dos canais de entrada e
das tenses de referncias com ADCON1. Seleo do canal de entrada a
converter, seleo do relgio para converso e habilitao ou autorizao do
funcionamento no ADCON0.
2 Fase Configurao da interrupo A/D: Se desejamos provocar uma
interrupo, ao finalizar uma converso devemos apagar o sinalizador ADIF e
habilitar ou colocar em 1 os bits de autorizao ADIE, PEIE e GIE.
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

35

3 Fase Esperar o tempo de aquisio da amostra a converter.


4 Fase Incio da converso: Devemos colocar em 1 o bit GO/DONE do registro
ADCON0.
5 Fase Esperar at que se complete a converso: Testamos o bit GO/DONE
at que seja 0, ou esperamos at que acontea uma interrupo e seja ativado o
bit sinalizador ADIF.
6 Fase Leitura do resultado de ADRESH:ADRESL e colocamos o bit ADI em 0.
Para comearmos uma nova converso devemos esperar no mnimo um tempo de
2.TAD para realizar a seguinte aquisio, repetindo todos os passos desde a
terceira fase.
Exemplo
Desejamos configurar os terminais RA0, RA1 e RA3 como entradas analgicas
para o CAD e os pinos RA2 e RA5 como E/S digitais.
Como devemos programar p PIC16F870?
A soluo consiste em gravar nos quatro bits menos significativos do registro
ADCON1 (PCFG3:0) o valor 0100. A tenso de referncia neste caso seria de
VDD.
PCFG3:0 AN7/(1) AN6/(1) AN5/(1) AN4/ AN3/ AN2/ AN1/
RE5 RE3 RE2 RE2
RE2
RE1
RE0
0000
A
A
A
A
A
A
A
0001
A
A
A
A
Vref+
A
A
0010
0
0
0
A
A
A
A
0011
0
0
0
A
Vref+
A
A
0100
0
0
0
0
A
0
A
0101
0
0
0
0
Vref+
0
A
011X
0
0
0
0
0
0
0
1000
A
A
A
A
Vref+ VrefA
1001
0
0
A
A
A
A
A
1010
0
0
A
A
Vref+
A
A
1011
0
0
A
A
Vref+ VrefA
1100
0
0
0
A
Vref+ VrefA
1101
0
0
0
0
Vref+ VrefA
1110
0
0
0
0
0
0
0
1111
0
0
0
0
Vref+ Vref0
Configurao da porta A em funo do valor de PCFG3:0.

AN0/
RE0
A
A
A
A
A
A
0
A
A
A
A
A
A
A
A

Vref+
RE2
V00
AA3
V00
AA3
V00
AA3
V00
AA3
V00
AA3
AA3
AA3
AA3
V00
AA3

VrefRE2
VSS
VSS
VSS
VSS
VSS
VSS
VSS
AA2
VSS
VSS
AA2
AA2
AA2
VSS
AA2

CHAN/
Refs
8/0
7/1
5/0
4/1
3/0
2/1
0/0
6/2
6/0
5/1
4/2
3/2
2/2
1/0
1/2

Resumo dos passos a efetuar para realizar uma converso.

Passo
1
2
3
4
5
6

Procedimento
Configurao do CAD
Configurao de interrupo A/D
(opcional)
Esperar o tempo de aquisio
Incio da converso
Esperar o tempo de converso
Leitura do resultado

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

36

CAPTULO 7- Comunicao Serial - O mdulo USART


Outro dos recursos do nosso microcontrolador que vamos analisar, um dos mais
importantes e-potentes, o mdulo de comunicao USART (Universal
Synchronous Asynchronous Receiver Transmitter). Este um dos mdulos de E/S
serial do microcontrolador, tambm conhecido como Interface de Comunicao
Serial ou SCI.
Generalidades
O USART uma interface que permite a comunicao com outros dispositivos. Se
configurado como um sistema assncrono, do tipo full-duplex, poderemos
comunicar o PIC com perifricos tipos terminais CRT e computadores pessoais.
Se configurado como sistema sncrono, do tipo half-duplex, poderemos
comunicarmos-nos com perifricos como circuitos conversores A/D ou D/A,
memrias EEPROM etc. Esta capacidade para comunicar-se com outros
dispositivos imprescindvel em muitos projetos como, por exemplo, o ar
condicionado central de um edifico, onde cada microcontrolador se encarregar de
determinadas zonas, mesmo que todos eles respondam s ordens de um
processador central. Tambm podemos colocar como exemplo as leitoras de
cartes chip, nas quais o PIC deve se comunicar com o chip de memria integrado
no carto.
Configurao do USART
J vimos em funo de como se configure o mdulo USART, poder estabelecer
uma comunicao com diferentes tipos de perifrico. Por isso, veremos as opes
de configurao. O mdulo USART pode ser configurado nos seguintes modos:
Modo
Modo de transmisso
1
Assncrono
2
Sncrono
3
Sncrono
Linhas de transmisso do mo SCI.

Caracterstica
Mestre
Escravo

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Endereo dos dados


Full-Duplex
Half-Duplex
Half-Duplex

37

Configurao detalhada do registro TXSTA.


Bit 7

CSAC
1
0

Bit 6

Bit 3
Bit 2

TX9
1
0
TXEN
1
0
SYNC
1
0
--BRGH

Bit 1

1
0
TRMT

Bit 0

1
0
TX90

Bit 5

Bit 4

Seleo da fonte de relgio


(S tem importncia no modo sncrono)
Modo mestre. O relgio gerado
Internamente desde o BAG
Modo escravo. O sinal de relgio vem
Do exterior
Habilita transmisso de 9 bits
Seleciona transmisso de 9 bits
Seleciona transmisso de 8 bits
Bit de autorizao da transmisso
Transmisso habilitada
Transmisso inabilitada
Seleo do modo de transmisso
Modo sncrono
Modo Assncrono
No implementado. Lido como 0
Bit de seleo de alta velocidade de
Transmisso. (S usado em modo
assncrono)
Alta velocidade
Baixa velocidade
Estado do registro de mudana de
transmisso . (Transmitt Shift Register)
TSA vazio
TSA cheio
Nono bit da transmisso. Pode ser
O bit de paridade

Para configurar este recurso so usados registros especficos: TXSTA e RCSTA.


A comunicao full-duplex uma comunicao bidirecional, pode ser transmitir e
receber ao mesmo tempo. J no o caso da comunicao half-duplex, que
uma comunicao unidirecional, ou seja, s feita em um sentido por vez. O
telefone um exemplo de comunicao full-duplex, j que se pode escutar e falar
ao mesmo tempo, ou seja, transmite e recebe ao mesmo tempo. Porm, um
walkie-talkie no permite isto: s podemos transmitir ou receber, nunca as duas
coisas ao mesmo tempo. um exemplo claro de comunicao half-duplex.
A comunicao pode ser feita de forma assncrona, ou seja, que no responda a
nenhum sinal de relgio, transmitindo os dados quando o transmissor deseje; ou
de forma sncrona, respondendo a um sinal de relgio que sincroniza os envios e
a recepo de dados. Neste ltimo modo, existe diferena entre mestre e escravo:
o mestre ser o dispositivo que estabelecer o sinal de relgio e impor este sinal
ao restante dos dispositivos que faam parte da comunicao, estes recebem o
nome de escravos.
Os registros de configurao
Os registros com os quais o USART trabalha so dois: TXTA e RCSTA. O primeiro
deles o registro de controle que determina o estado de transmisso e encontrase na posio de memria 98h no banco1. O registro RCSTA o registro de
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

38

controle que determina o estado da recepo e encontra-se no banco 0 na


posio 18h.
Como deveria ser configurado o mdulo de
comunicao para efetuar uma transmisso
em modo sncrono de 8 bits, onde nosso
microcontrolador fosse o mestre?
Devemos configurar o registro TXSTA de
forma que os bits a seguir assumam os
valores:
CSAC=TXEN=SYNC=1
TX9=0
O registro ACSPA deve ter o bit SPEN em 1
para habilitar a comunicao.
Que valor assumiria o registro TXSTA para
uma comunicao assncrona de 9 bits com
velocidade rpida?
TX9=TXEN=BRGH=1
SYNC=0

O registro TXSTA
Na imagem da figura, podemos ver a configurao deste junto ao detalhe dos bits
que o formam. O bit mais significativo, CSRC, quem determina a fonte do relgio
(externa ou interna), portanto tambm quem determina se o PIC trabalhar como
escravo (relgio tomado de fonte externa) ou como mestre (interna). O bit 6, TX9,
serve para selecionar a transmisso de 8 ou 9 bits. O prximo bit, o TXEN, o bit
de autorizao que habilita a transmisso. O bit SYNC determina se a transmisso
ser realizada em modo sncrono ou assncrono, portanto de suma importncia
comparar o restante dos bits. O prxima bit no est implementado fisicamente, j
o prximo o bit BRGH, que permite selecionar a velocidade de transmisso em
modo assncrono do gerador de freqncia interna do dispositivo. O prximo bit,
TRMT, utilizado para informar o estado do registro de turno de transmisso. E,
por ltimo, o bit 0 ou bit TX9D, que usado unicamente nas transmisses de 9
bis, o nono bit desta e que pode ser o bit de paridade.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

39

Configurao detalhada do registro RCSTA.


Bit7

SPEN
1

Bit 6

0
RX9

Bit 5

1
0
SREN

Bit 4

Bit 3

1
0
CREN
1
0
ADDEN
1

Bit 2

FERR

Bit 1

1
0
0ERR

Bit 0

1
0
RX90

Bit de habilitao da porta serial


Habilitado (configurao do RC7/RX/0T e
RC6/TX/CK como pinos da porta serial)
Porta serial inabilitada
Bit de habilitao de recepo em
comunicao com 9 bits
Selecionada a recepo de 9 bits
Selecionada recepo de 8 bits
Bit de autorizao para uma nica recepo
(somente usado no modo sncrono e mestre)
Habilita uma nica recepo
Inabilita a opo
Bit de autorizao para recepo contnua
Habilitao
Inabilitao
Bit de autorizao de deteco do endereo
(s em modo assncrono de 9 bits)
Habilita deteco do endereo, habilita
interrupo e o carregamento do dado do
buffer de recepo quando o bit RSR<8> 1
Inabilita a deteco de endereo, todos
os bits so recebidos e o nono bit pode
ser usado como bit de paridade
Bit de deteco de erro no formato
da mensagem recebida
Aconteceu um erro
No aconteceu nenhum erro
Bit de deteco de erro de excesso
de tempo da recepo
Aconteceu um erro
No aconteceu erro
Nono bit da recepo; pode ser
o bit de paridade

Na tabela da figura so descritos cada um destes bits e os valores que assumem


para cada uma de suas funes.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

40

O registro RCSTA
O registro de estado da recepo composto dos bits que podem ser vistos na
imagem da figura e que a seguir vamos explicar. O bit mais significativo, bit SPEN,
um bit de autorizao ou habilitao da comunicao pela porta serial (pinos
RC6 e RC7).
Como configuraramos o modo de
comunicao para efetuar uma recepo
contnua em modo sncrono de9 bits, onde
nosso microcontrolador fosse escravo?
Devemos configurar o registro TXSTA de
forma que SYNC deve ser os seus bits
configuraes da seguinte forma:
SPEN=RX9=CREN=1
SREN=0
O bit RX9 serve para selecionar o nmero de bits que vamos receber, oito ou
nove. O prximo bit, SREN, determina que s ser realizada uma recepo;
utilizado apenas em modo sncrono quanto o dispositivo est em modo mestre e
se foi selecionado; ao finalizar a recepo o bit passa automaticamente para 0. O
prximo, o CREN, similar ao que acabamos de ver: habilita a recepo contnua
de dados ao invs de permitir uma nica recepo mediante este bit, configura-se
a transmisso para que o microcontrolador esteja continuamente preparado para
receber dados.
O bit ADDEN somente usado quando a recepo de 9 bits (RX9=1) e serve
para habilitar a deteco do endereo, uma interrupo e o carregamento do
buffer de recepo. Os dos bits seguintes so bits indicadores de erros na
comunicao: o bit FERR indica se aconteceu um erro no formato do dado
transmitido, e o bit OERR se aconteceu um erro de excesso de tempo na
recepo. O ltimo bit do registro, RX9D, ser o nono bit da recepo quanto a
comunicao for de 9 bits.
Da mesma forma que no registro de transmisso, na tabela da figura podemos
observar os bits anteriormente descritos e a funo que executam, atendendo o
valor que possuem.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

41

CAPTULO 8 Passo a Passo Software MPLAB V 8.15


1- Criando um Projeto.
Clicar no Menu Project Project Wizard..

Passo 1 Escolher o microcontrolador, no nosso caso ser o PIC 16F877A.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

42

Passo 2 Escolher a linguagem de programao, no primeiro momento ser


assembly.

Passo 3- Escolher o caminho onde ser salvo o projeto, clicando em Browse.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

43

Passo 4 Adicionar um programa ao projeto, escolha o programa e adicione-o,


clicando no boto ADD. Caso no possua ainda o programa ele pode ser
adicionado posteriormente.
A letra a lado direito do arquivo adicionado
indica como o processador ira acessar esse
arquivo.
As opo so:
A(auto): O MPLAB define o tipo de
caminho automaticamente.
U (usurio): define o caminho como
relativo.
S (sistema): define o caminho como
absoluto.
C (copiar): copia o arquivo para a pasta de
projeto.

Caminho absoluto quando o arquivo se encontra na mesma pasta que o projeto.


Caminho relativo quando o arquivo se encontra em alguma subpasta.

Pronto! O projeto est finalizado e aparecer uma janela com o resumo das
configuraes.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

44

2- Associar um arquivo fonte ao projeto.


a) Clicar com o boto direito do mouse na pasta Source File e selecionar ADD
Files ou Menu Project ADD New File to Project..

b) Selecionar o arquivo fonte.


c) Para abrir o arquivo fonte, clicar duas vezes no arquivo fonte.
Caso deseje substituir o programa no projeto, voc deve remover o programa
atual Menu: Project -> Remove file from Project e depois associar o novo
projeto.
3- Compilar um projeto.
a) Menu Project Build All ou utilizando o atalho Ctrl + F10

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

45

b) Ao compilar um projeto, estamos transformando o arquivo fonte .asm em um


arquivo . hex, este arquivo est pronto para ser transferido para o
microcontrolador.
Caso no haja nenhum erro de cdigo ou configurao, aparecer a seguinte
mensagem: BUILD SUCCEDED.
Ateno: erro de lgico por sua conta...

Caso contrrio mensagem ser: BUILD FAILED.


Neste caso voc precisa corrigir o erro e compilar o projeto novamente.
Observao: Para corrigir o erro mais facilmente, clicar na mensagem que
identifica o erro e o programa ir para a linha que est com o erro.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

46

4- Gravar o programa no microcontrolador.


a) Selecionar o gravador: O nosso caso o MLAB ICD2

b) Conectar o gravador: Menu Programmer Connect


Aparecer uma nova barra de ferramentas.
1- Gravar Programa no MC
2- Ler o programa do MC
3- Ler a EEPROM
4- Verificar
5- Apagar a memria
1
6- Checar se a memria est vazia.

2 3 4 5

A sequncia para a gravao a seguinte: primeiro voc deve apagar a memria


(5), depois verificar se realmente ela foi apagada (6) e gravar o programa (1 ).

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

47

5- Testando o cdigo no simulador Debugger

a) Habilitar o modo de simulao:


Menu Debugger Select Tool- MPLAB SIM

b) Nova barra de ferramentas


Run o programa fica em modo de execuo.
Halt pausa
Animate o programa em modo de animao.
Step into executando passo a passo.
Step Over executando passo a passo sem entrar
nas subrotinas.
Step Out - sair das subrotinas.
Reset resetar o programa.

c) Ferramenta: Watch utiizada para verificar o contedos dos


registradores
Menu View > Watch
Para adicionar registradores especiais clicar no boto Add SFR e para adicionar
outros registradores clicar no boto Add Symbol.

Para modificar o valor dos registrador, clicar duas vezes na coluna Value e atribuir
o novo valor.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

48

d) Ferramenta Stimulus utilizada para simular uma entrada do MC


Menu Debugger Stimulus New Workbook

Pin / SFR

escolher o pino, exe: RB0

Action - ao:

Set High = nvel 1


Set Low = nvel 0
Toggle = cada pulso muda o estado
Pulse High = borda de subida
Pulse Low = borda de descida

Fire

habilitar a ao

d) Ferramenta Stop Watch utilizada para verificar o tempo gasto para o PIC
executar as instrues.
Menu Debugger Stop Watch

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

49

Configurar o Clock do Stop Watch.


Menu Debugger -> Settings
Modificar a frequncia do processador para 4MHZ.

Executar o programa at a rotina que gostaria de verificar o tempo gasto pelo


microcontrolador, Clicar no boto Zero para iniciar o tempo e executar o programa
at o final da rotina.
Por exemplo o programa gastou 1,004ms para executar a rotina

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

50

CAPTULO 9- Compilador MPLAB C18


O compilador C18 permite gerar cdigo objeto para microcontrolador PIC da
famlia 18 a partir de cdigos fonte escrito em C padro ANSI.
Instalando o Compilador C18.
Passo 1: Clicar no executvel - MPLAB-C18-StudentEdition-v3_20.exe

Figura 1 Bem Vindo

Figura 2 Aceitar os termos do contrato

Passo 2: clicar em Next

Passo 3: clicar em Next

Figura 3 Local onde ser instalado

Figura 4 Selecionar todos os campos


Passo 5: clicar em Next

Passo 4: clicar em Next

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

51

Figura 5 Selecionar todos os campos


Passo 6: clicar em Next

Figura 6 Selecionar todos os campos


Passo 7: clicar em Next

Figura 7 Selecionar todos os campos


Passo 8: clicar em Next a instalao tem incio.

Uma vez terminada a instalao clica em Finish para terminar o processo

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

52

CAPTULO 10 EXEMPLOS
Esquema Eltrico.1 Trabalhando com entradas e sadas

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

53

Incio

Fluxograma Exerccio 1

Configuraes
Iniciais
Portas, Option, etc

Boto 1
Pressionado?

Liga LED

Boto 2
Pressionado?

Desliga
LED

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

54

Exemplo 1: Acionando uma entrada - boto 0 a sada liga e acionado o boto


1 a sada desliga.
;**************************************
;*
CONFIGURAES PARA GRAVAO
;*
;**************************************
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF &
_BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
;**************************************
;*
DEFINIO DAS VARIVEIS
;*
;**************************************
CBLOCK

0X20

; POSIO INICIAL DA RAM

ENDC
;**************************************
;*
DEFINIO DAS VARIVEIS INTERNAS DO PIC
;*
;**************************************
#include <P16F877A.INC>

; MICROCONTROLADOR UTILIZADO

;**************************************
;*
DEFINIO DOS BANCOS DE RAM
;*
*
;**************************************
#DEFINE
#DEFINE

BANK1 BSF
BANK0 BCF

STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM


STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM

;**************************************
;*
VETOR DE RESET DO MICROCONTROLADOR
;*
*
;**************************************
ORG 0x000
GOTO CONFIGURACAO

; ENDEREO DO VETOR DE RESET


; PULA PARA CONFIG

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

55

;**************************************
;*
CONFIGURAES INICIAIS DE HARDWARE E SOFTWARE
;*
;**************************************
CONFIGURACAO
BANK1

; SELECIONA BANCO 1 DA RAM

MOVLW
MOVWF

B'11110011'
TRISB

; CONFIGURA I/O DO PORTB

MOVLW
MOVWF

B'11011111'
OPTION_REG

; CONFIGURA OPTIONS

MOVLW
MOVWF

B'00000000'
INTCON

MOVLW
MOVWF

B'00000111'
ADCON1

; CONFIGURA INTERRUPES
; DESABILITADA TODAS AS INTERRUPES

; CONFIGURA CONVERSOR A/D


; CONFIGURA PORTA COM I/O DIGITAL

BANK0

; SELECIONA BANCO 0 DA RAM

CLRF PORTB

; ZERA TODAS AS SADAS

;**************************************
;*
LOOPING PRINCIPAL
;**************************************

PRINCIPAL
BTFSS PORTB,0
GOTO TRATA_BOTAO_0

; O BOTO 0 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS PORTB,1
GOTO TRATA_BOTAO_1

; O BOTO 1 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_1
; NAO

GOTO PRINCIPAL

; VOLTA PARA VARRER TECLADO

; ************************* TRATAMENTO DO BOTO 0 ***************************


TRATA_BOTAO_0
BSF
PORTB,2
GOTO PRINCIPAL
; VOLTA P/ VARREDURA DOS BOTES
; ************************* TRATAMENTO DO BOTO 1 ***************************
TRATA_BOTAO_1
BCF
PORTB,2
GOTO PRINCIPAL
; VOLTA P/ VARREDURA DOS BOTES
END

; FIM DO PROGRAMA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

56

Exemplo 2: Nesse exemplo foram atribudos nomes para os PORTS, para


facilitar a programao.
;**************************************
;*
ENTRADAS
*
;*
;**************************************
#DEFINE

BOTAO_0

PORTB,0

; ESTADO DO BOTO 0

#DEFINE

BOTAO_1

PORTB,1

; ESTADO DO BOTO 1

;**************************************
;*
SADAS
*
;*
;**************************************
#DEFINE
SAIDA_1
PORTB,2

;**************************************
;*
LOOPING PRINCIPAL
;**************************************

; ESTADO DO BOTO 2

PRINCIPAL
BTFSS BOTAO_0
GOTO TRATA_BOTAO_0

; O BOTO 0 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1
GOTO TRATA_BOTAO_1

; O BOTO 1 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_1
; NAO
; VOLTA PARA VARRER TECLADO

GOTO PRINCIPAL

; ************************* TRATAMENTO DO BOTO 0 ***************************


TRATA_BOTAO_0
BSF
SAIDA_1
GOTO PRINCIPAL

; VOLTA P/ VARREDURA DOS BOTES

; ************************* TRATAMENTO DO BOTO 1 ***************************


TRATA_BOTAO_1
BCF
SAIDA_1
GOTO PRINCIPAL

END

; VOLTA P/ VARREDURA DOS BOTES

; FIM DO PROGRAMA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

57

Incio

Fluxograma Exerccio 3

Configuraes
Iniciais
Portas, Option, etc
Inicia as varieis

Delay

Tempo2 = W
Boto 1
Pressionado?

Sim
W = 200

No
Liga LED

Tempo1 =200

W = 100
NOP
Delay
Desiga LED

NOP

W = 100

Boto 2
Pressionado?

Delay

Tempo1=0

Liga LED

Tempo2=0

Sim

No
W = 100
Delay

Retorna

Desiga LED

W = 100

Delay

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

58

Exemplo 3: Oscilador
Acionando o boto 0 a sada 1 oscila com uma frequncia de 10HZ ( T=100ms) e
acionando ao boto 1 a sada 1 oscila com uma fequncia de 100HZ ( T=10ms)

;**************************************
;*
DEFINIO DAS VARIVEIS
*
;*
*
;**************************************
CBLOCK
TEMPO1
TEMPO2
ENDC

0X20

; POSIO INICIAL DA RAM

;**************************************
;*
DEFINIO DAS VARIVEIS INTERNAS DO PIC
;*
*
;**************************************
#include <P16F877A.INC>

; MICROCONTROLADOR UTILIZADO

;**************************************
;*
DEFINIO DOS BANCOS DE RAM
*
;*
*
;**************************************
#DEFINE
#DEFINE

BANK1 BSF
BANK0 BCF

STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM


STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM

;**************************************
;*
ENTRADAS
*
;*
;**************************************
#DEFINE
#DEFINE

BOTAO_0
BOTAO_1

PORTB,0
PORTB,1

; ESTADO DO BOTO 0
; ESTADO DO BOTO 1

;**************************************
;*
SADAS
*
;*
;**************************************
#DEFINE
SAIDA_1
PORTB,2
#DEFINE
SAIDA_2
PORTB,3
;**************************************
;*
VETOR DE RESET DO MICROCONTROLADOR
;*
*
;**************************************
ORG 0x000
GOTO CONFIGURACAO

; ENDEREO DO VETOR DE RESET


; PULA PARA CONFIG

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

59

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
ROTINA DE DELAY
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA AGUARDA TANTOS MILISEGUNDOS QUANTO O VALOR PASSADO
; POR W. POR EXEMPLO, SE W = .200, ELA AGUARDAR 200 MILISEGUNDOS.
;
; O DELAY PRINCIPAL DURA 1ms, POIS POSSUI 5 INSTRUES (5us) E
; RODADO 200 VEZES (TEMPO1). PORTANTO 200 * 5us = 1ms.
; O DELAY PRINCIPAL RODADO TANTAS VEZES QUANTO FOR O VALOR DE
; TEMPO2, O QUAL INICIADO COM O VALOR PASSADO EM W.

DELAY
MOVWF

TEMPO2

MOVLW
MOVWF

.200
TEMPO1

;INICIA TEMPO 2 COM O VALOR


;PASSADO EM W

DL1

DL2

;ESTE DELAY DURA 1ms (5*200)


NOP
NOP
DECFSZ
GOTO DL2

DECFSZ
GOTO DL1

TEMPO1,F

;DECREMENTA TEMPO1. ACABOU?


;NO, CONTINUA AGUARDANDO
;SIM

TEMPO2,F

;DECREMENTA TEMPO2. ACABOU?


;NO, CONTINUA AGUARDANDO
;SIM

RETURN

;**************************************
;*
CONFIGURAES INICIAIS DE HARDWARE E SOFTWARE
;*
*
;**************************************
CONFIGURACAO
BANK1

; SELECIONA BANCO 1 DA RAM

MOVLW
MOVWF

B'11110011'
TRISB

; CONFIGURA I/O DO PORTB

MOVLW
MOVWF

B'11011111'
OPTION_REG

; CONFIGURA OPTIONS

MOVLW
MOVWF

B'00000000'
INTCON

; DESABILITADA TODAS AS INTERRUPES

MOVLW
MOVWF

B'00000111'
ADCON1

BANK0

; CONFIGURA CONVERSOR A/D


; CONFIGURA PORTA COM I/O DIGITAL
; SELECIONA BANCO 0 DA RAM

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

60

CLRF PORTB

; ZERA TODAS AS SADAS

;**************************************
;*
LOOPING PRINCIPAL
*
;**************************************
VARRE
CLRWDT

; LIMPA WATCHDOG TIMER

BTFSS BOTAO_0
GOTO TRATA_BOTAO_0

; O BOTO 0 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1
GOTO TRATA_BOTAO_1

; O BOTO 1 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_1
; NAO

GOTO VARRE

; VOLTA PARA VARRER TECLADO

; ************************* TRATAMENTO DO BOTO 0 ***************************


TRATA_BOTAO_0
BSF
SAIDA_1
MOVLW
.100
CALL DELAY
BCF
SAIDA_1
MOVLW
.100
CALL DELAY
GOTO VARRE

; LIGA SAIDA 1
; MOVIMENTA 100 PARA W
; CHAMA SUBROTINA DELAY
; DESLIGA SAIDA 1

; VOLTA P/ VARREDURA DOS BOTES

; ************************* TRATAMENTO DO BOTO 1 ***************************


TRATA_BOTAO_1
BSF
SAIDA_2
MOVLW
.10
CALL DELAY
BCF
SAIDA_2
CALL DELAY
GOTO VARRE
END

; VOLTA P/ VARREDURA DOS BOTES


; FIM DO PROGRAMA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

61

Esquema Eltrico 2 Trabalhando com Display de 7 segmentos

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

62

Fluxograma Exerccio 4
Incio

Configuraes
Iniciais
Portas, Option, etc

Sim
Boto 0
Pressionado?

PORTD = Simbolo 0
B00111111'

No

Habilita DS1
RB7 = 1

Sim

Boto 2
Pressionado?
No

PORTD = Simbolo 0
B00111111'

Habilita DS2
RB6 = 1

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

63

Exemplo 4: Trabalhando com Display de 7 segmentos, onde cada boto


acionado carrega um valor no display.
;
;**************************************
; * CONFIGURAES PARA GRAVAO
*
;**************************************
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF &
_BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
;**************************************
;*
DEFINIO DAS VARIVEIS
*
;**************************************
CBLOCK
ENDC

0X20

; POSIO INICIAL DA RAM

;**************************************
; DEFINIO DAS VARIVEIS INTERNAS DO PIC
;**************************************
#include <P16F877A.INC>

; MICROCONTROLADOR UTILIZADO

;**************************************
; * DEFINIO DOS BANCOS DE RAM
*
;**************************************
#DEFINE
#DEFINE

BANK1 BSF
BANK0 BCF

STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM


STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM

;**************************************
;*
ENTRADAS
*
;**************************************
#DEFINE
#DEFINE
#DEFINE
#DEFINE

BOTAO_0
BOTAO_1
BOTAO_2
BOTAO_3

PORTB,0
PORTB,1
PORTB,2
PORTB,3

; ESTADO DO BOTO 0
; ESTADO DO BOTO 1
; ESTADO DO BOTO 2
; ESTADO DO BOTO 3

; 1 -> LIBERADO
; 0 -> PRESSIONADO
;**************************************
;*
SADAS
*
;*
*
;**************************************
#DEFINE
DIS1 PORTB,7
#DEFINE
DIS2 PORTB,6
#DEFINE
DIS3 PORTB,5
#DEFINE
DIS4 PORTB,4

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

64

;**************************************
;*
VETOR DE RESET DO MICROCONTROLADOR
;**************************************
ORG 0x000
GOTO CONFIGURACAO

; ENDEREO DO VETOR DE RESET


; PULA PARA CONFIG

;**************************************
; * CONFIGURAES INICIAIS DE HARDWARE E SOFTWARE
;**************************************

CONFIGURACAO
BANK1

; SELECIONA BANCO 1 DA RAM

MOVLW
MOVWF

B'00001111'
TRISB

; CONFIGURA I/O DO PORTB

MOVLW
MOVWF

B'00000000'
TRISD

; CONFIGURA I/O DO PORTB

MOVLW
MOVWF

B'11011111'
OPTION_REG

; CONFIGURA OPTIONS

MOVLW
MOVWF

B'00000000'
INTCON

MOVLW
MOVWF

B'00000111'
ADCON1

; CONFIGURA INTERRUPES
; DESABILITADA TODAS AS INTERRUPES

; CONFIGURA CONVERSOR A/D


; CONFIGURA PORTA COM I/O DIGITAL

BANK0

; SELECIONA BANCO 0 DA RAM

CLRF PORTB
CLRF PORTD

; ZERA TODAS AS SADAS


; ZERA TODAS AS SADAS

;**************************************
;*
LOOPING PRINCIPAL
;**************************************

PRINCIPAL
BTFSS BOTAO_0
GOTO TRATA_BOTAO_0

; O BOTO 0 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1
GOTO TRATA_BOTAO_1

; O BOTO 1 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_1
; NAO

GOTO PRINCIPAL

; VOLTA PARA VARRER TECLADO

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

65

; ************************* TRATAMENTO DO BOTO 0 ***************************


TRATA_BOTAO_0
MOVLW
B'00111111'
MOVWF
PORTD
MOVLW
B'10000000'
MOVWF
PORTB
GOTO PRINCIPAL

; SMBOLO 0
; DISPLAY 1
; VOLTA P/ VARREDURA DOS BOTES

; ************************* TRATAMENTO DO BOTO 1 ***************************


TRATA_BOTAO_1
MOVLW
B'00000110'
MOVWF
PORTD
MOVLW
B'01000000'
MOVWF
PORTB
GOTO PRINCIPAL

END

; SMBOLO 1
; DISPLAY 2
; VOLTA P/ VARREDURA DOS BOTES

; FIM DO PROGRAMA

; ****************************************************************************************************************

Tabela do Display de 7 segmentos


;
a
; **********
; *
*
; f*
*b
; * g *
; **********
; *
*
; e*
*c
; * d *
; ********** *.
'PGFEDCBA' ; POSIO CORRETA DOS SEGUIMENTOS
B'00111111'
B'00000110'
B'01011011'
B'01001111'
B'01100110'
B'01101101'
B'01111101'
B'00000111'
B'01111111'
B'01101111'
B'01110111'
B'01111100'
B'00111001'
B'01011110'
B'01111001'
B'01110001'

; 00
; 01
; 02
; 03
; 04
; 05
; 06
; 07
; 08
; 09
; 10
; 11
; 12
; 13
; 14
; 15

SMBOLO CORRETO 0
SMBOLO CORRETO 1
SMBOLO CORRETO 2
SMBOLO CORRETO 3
SMBOLO CORRETO 4
SMBOLO CORRETO 5
SMBOLO CORRETO 6
SMBOLO CORRETO 7
SMBOLO CORRETO 8
SMBOLO CORRETO 9
SMBOLO CORRETO A
SMBOLO CORRETO b
SMBOLO CORRETO C
SMBOLO CORRETO d
SMBOLO CORRETO E
SMBOLO CORRETO F

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

66

Incio

Fluxograma Exerccio 5

Configuraes
Iniciais
Portas, Option, etc

Rotao

Habilita DS1
RB7 = 1
Sim

Delay

Boto 0
Pressionado?

PORTD = Simbolo 0
B00111111'

No

Habilita DS2
RB6 = 1

Delay

Rotao
Habilita DS3
RB5 = 1

Delay
Sim

Boto 2
Pressionado?
No

PORTD = Simbolo 0
B00111111'

Habilita DS4
RB4 = 1

Delay

Rotao

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Retorna

67

Exemplo 5: Multiplexao dos Displays de 7 segmentos.


Observao: toda a configurao continua a mesma, portanto, segue abaixo
apenas o programa principal.
PRINCIPAL
BTFSS BOTAO_0
GOTO TRATA_BOTAO_0

; O BOTO 0 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1
GOTO TRATA_BOTAO_1

; O BOTO 1 ESTA PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_1
; NAO
; VOLTA PARA VARRER TECLADO

GOTO PRINCIPAL

; ************************* TRATAMENTO DO BOTO 0 ***************************


TRATA_BOTAO_0
MOVLW
B'00111111'
; SMBOLO 0
MOVWF
PORTD
CALL ROTAO
GOTO PRINCIPAL
; VOLTA P/ VARREDURA DOS BOTES
; ************************* TRATAMENTO DO BOTO 1 ***************************
TRATA_BOTAO_1
MOVLW
B'00000110'
; SMBOLO 1
MOVWF
PORTD
CALL ROTAO
GOTO PRINCIPAL
; VOLTA P/ VARREDURA DOS BOTES
; ************************* MULTIPLEXAO DO DISPLAY ***************************
ROTAO
MOVLW
MOVWF
MOVLW
CALL

B'10000000'
PORTB
.200
DELAY

; DISPLAY 1

MOVLW
MOVWF
MOVLW
CALL

B'01000000'
PORTB
.200
DELAY

; DISPLAY 2

MOVLW
MOVWF
MOVLW
CALL

B'00100000'
PORTB
.200
DELAY

; DISPLAY 3

MOVLW
MOVWF
MOVLW
CALL

B'00010000'
PORTB
.200
DELAY

; DISPLAY 4

RETURN
END

; FIM DO PROGRAMA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

68

Esquema Eltrico 3 Trabalhando com Display LCD e Conversor AD

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

69

Incio

Fluxograma Exerccio 6
Configuraes Iniciais

Inicializa as variveis

Envia comando 0x30 para display

Delay de 3ms

Envia comando 0x30 para display

Envia comando 0x30 para display

Envia comando 0x38 para display

Envia comando 0x01 para display

Delay de 1ms

Envia comando 0x0C para display

Envia comando 0x06 para display

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

70

1
Trata boto 0

Sim
Boto 0
Pressionado?

No
Trata boto 0

Terminou o
Filtro?

No
Sim

Sim
Boto 1
Pressionado?

Trata boto 1

Seleciona Display
para comandos

No
Envia comando p/
limpar display
Sim
Boto 2No
Pressionado?

Trata boto 2

Posiciona o
cursor na linha 0
coluna 0

No

Seleciona Display
para dados

Sim
Boto 3
Pressionado?

Trata boto 3

No
Escreve Botao o
No
Mostrar
tela principal?

Sim
Mostrar tela
principal

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

Seta FLAG p/
mostrar tela
principal

71

Trata boto 1

Trata boto 2

Trata boto 3

Terminou o
Filtro?

Terminou o
Filtro?

Terminou o
Filtro?

Sim

Sim

Sim

Seleciona Display
para comandos

Seleciona Display
para comandos

Seleciona Display
para comandos

Envia comando p/
limpar display

Envia comando p/
limpar display

Envia comando p/
limpar display

Posiciona o
cursor na linha 0
coluna 8

Posiciona o
cursor na linha 1
coluna 0

Posiciona o
cursor na linha 1
coluna 8

Seleciona Display
para dados

Seleciona Display
para dados

Seleciona Display
para dados

Escreve Botao 1

Escreve Botao 2

Escreve Botao 3

Seta FLAG p/
mostrar tela
principal

Seta FLAG p/
mostrar tela
principal

Seta FLAG p/
mostrar tela
principal

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

72

Mostra tela
principal

Escreve

Limpa FLAG
Carrega argumento passado pelo
Work no barramento de dados do
display
Seleciona display p/ comandos

Envia comando p/ limpar display

Envia pulso de ENABLE


ao LCD

Posiciona o cursor na linha 0


coluna 3

Delay 1ms

Selecione display p/ dados


Retorna

Escreve Selecione

Seleciona display p/ comandos

Posiciona o cursor na linha 1


coluna 4

Selecione display p/ dados

Envia comando 0x0C para display

Escreve Um boto

1
AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

73

Exemplo 6: Trabalhando com o Display LCD


;**************************************
;*
DEFINIO DAS VARIVEIS
;**************************************
CBLOCK
0X20
TEMPO1
TEMPO0
FILTRO_BOTOES
FLAG
TEMPO3
SEGA
SEGB
SEGC
ENDC

; POSIO INICIAL DA RAM


; CONTADORES P/ DELAY
; FILTRO PARA RUIDOS
; FLAG DE USO GERAL

;**************************************
;*
DEFINIO DAS VARIVEIS INTERNAS DO PIC
*
;**************************************
#INCLUDE <P16F877A.INC>
; MICROCONTROLADOR UTILIZADO
;**************************************
;*
DEFINIO DOS BANCOS DE RAM
*
;**************************************
#DEFINE
BANK1 BSF
STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM
#DEFINE
BANK0 BCF
STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM
;**************************************
;*
CONSTANTES INTERNAS
*
;**************************************
; A DEFINIO DE CONSTANTES FACILITA A PROGRAMAO E A MANUTENO.
FILTRO_TECLA

EQU

.200

; FILTRO P/ EVITAR RUIDOS DOS BOTES

;**************************************
;*
DECLARAO DOS FLAGs DE SOFTWARE
;**************************************
#DEFINE

TELA_PRINCIPAL

FLAG,0
; FLAG P/ INDICAR QUE DEVE MOSTRAR
; A TELA PRINCIPAL
; 1-> MOSTRA TELA PRINCIPAL
; 0-> TELA PRINCIPAL J FOI MOSTRADA

;**************************************
;*
ENTRADAS
*
;**************************************
#DEFINE
BOTAO_0
PORTB,0
#DEFINE
BOTAO_1
PORTB,1
#DEFINE
BOTAO_2
PORTB,2
#DEFINE
BOTAO_3
PORTB,3
; 1 -> LIBERADO
; 0 -> PRESSIONADO

; ESTADO DO BOTO 0
; ESTADO DO BOTO 1
; ESTADO DO BOTO 2
; ESTADO DO BOTO 3

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

74

;**************************************
;*
SADAS
*
;**************************************
#DEFINE
#DEFINE

DISPLAY
RS

#DEFINE

ENABLE

PORTD
PORTE,0

; BARRAMENTO DE DADOS DO DISPLAY


; Selecionar UM DADO OU COMANDO
; 1 -> DADO
; 0 -> COMANDO

PORTE,1
; SINAL DE ENABLE ,ATIVO NA BORDA DE DESCIDA

;**************************************
;*
VETOR DE RESET DO MICROCONTROLADOR
*
;**************************************
ORG 0X0000
; ENDEREO DO VETOR DE RESET
GOTO CONFIGURACAO
; PULA PARA CONFIG DEVIDO A REGIO
;**************************************
;*
ROTINA DE DELAY (DE 1MS AT 256MS)
*
;**************************************
DELAY_MS
MOVWF
TEMPO1
; CARREGA TEMPO1 (UNIDADES DE MS)
MOVLW
.250
MOVWF
TEMPO0
; CARREGA TEMPO0 (P/ CONTAR 1MS)
CLRWDT
DECFSZ
GOTO $-2
DECFSZ
GOTO $-6

TEMPO0,F

TEMPO1,F

RETURN

; LIMPA WDT (PERDE TEMPO)


; FIM DE TEMPO0 ?
; NO - VOLTA 2 INSTRUES
; SIM - PASSOU-SE 1MS
; FIM DE TEMPO1 ?
; NO - VOLTA 6 INSTRUES
; SIM
; RETORNA

;**************************************
;*
TEMPO 1 segundo
;**************************************
TEMPO_1S
MOVWF

TEMPO3

MOVLW
MOVWF

0X05
SEGA

MOVLW
MOVWF

0XFF
SEGB

MOVLW
MOVWF

0XFF
SEGC

PULO4

PULO3

PULO2

PULO1
DECFSZ
SEGC,F
GOTO PULO1

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

75

DECFSZ
GOTO

SEGB,F
PULO2

DECFSZ
GOTO

SEGA,F
PULO3

DECFSZ
GOTO

TEMPO3
PULO4

RETURN
;**************************************
; * ROTINA DE ESCRITA DE UM CARACTER NO DISPLAY
*
;**************************************
; ESTA ROTINA ENVIA UM CARACTER PARA O MDULO DE LCD. O CARACTER A SER
; ESCRITO DEVE SER COLOCADO EM WORK (W) ANTES DE CHAMAR A ROTINA.
ESCREVE
MOVWF
NOP
BSF
GOTO
BCF
MOVLW
CALL
RETUR

DISPLAY
ENABLE
$+1
ENABLE
.1
DELAY_MS
; RETORNA

; ATUALIZA DISPLAY (PORTD)


; PERDE 1US PARA ESTABILIZAO
; ENVIA UM PULSO DE ENABLE AO DISPLAY
.
.
; DELAY DE 1MS

;**************************************
;*
ROTINA DE ESCRITA DA TELA PRINCIPAL
*
;**************************************
; ESTA ROTINA ESCREVE A TELA PRINCIPAL DO PROGRAMA, COM AS FRASES:
MOSTRA_TELA_PRINCIPAL
BCF

TELA_PRINCIPAL

; LIMPA FLAG DE MOSTRAR TELA PRINCIPAL

BCF
MOVLW
CALL
MOVLW
CALL

RS
0X01
ESCREVE
.1
DELAY_MS

; SELECIONA O DISPLAY P/ COMANDOS


; ESCREVE COMANDO PARA
; LIMPAR A TELA
; DELAY DE 1MS

MOVLW
CALL
BSF

0X83
ESCREVE
RS

; COMANDO PARA POSICIONAR O CURSOR


; LINHA 0 / COLUNA 3
; SELECIONA O DISPLAY P/ DADOS
; COMANDOS PARA ESCREVER AS
; LETRAS DE "Selecione"

MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL

'S'
ESCREVE
'e'
ESCREVE
'l'
ESCREVE
'e'
ESCREVE

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

76

MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL

'c'
ESCREVE
'i'
ESCREVE
'o'
ESCREVE
'n'
ESCREVE
'e'
ESCREVE

BCF
MOVLW
CALL
BSF

RS
0XC4
ESCREVE
RS

; SELECIONA O DISPLAY P/ COMANDOS


; COMANDO PARA POSICIONAR O CURSOR
; LINHA 2 / COLUNA 5
; SELECIONA O DISPLAY P/ DADOS
; COMANDOS PARA ESCREVER AS
; LETRAS DE "um botao"

MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL

'u'
ESCREVE
'm'
ESCREVE
''
ESCREVE
'b
ESCREVE
'o
ESCREVE
't'
ESCREVE
'a'
ESCREVE
'o'
ESCREVE

RETURN
;**************************************
;*
CONFIGURAES INICIAIS DE HARDWARE E SOFTWARE
;**************************************
CONFIGURACAO
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE

; GARANTE AS SADAS EM ZERO

BANK1
MOVLW
MOVWF

; SELECIONA BANCO 1 DA RAM


B'11011111'
TRISA

; CONFIGURA I/O DO PORTA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

77

MOVLW
MOVWF

B'11111111'
TRISB

; CONFIGURA I/O DO PORTB

MOVLW
MOVWF

B'11111111'
TRISC

; CONFIGURA I/O DO PORTC

MOVLW
MOVWF

B'00000000'
TRISD

; CONFIGURA I/O DO PORTD

MOVLW
MOVWF

B'00000100'
TRISE

; CONFIGURA I/O DO PORTE

MOVLW
MOVWF

B'11011111'
OPTION_REG

MOVLW
MOVWF

B'00000000'
INTCON

MOVLW
MOVWF

B'00000111'
ADCON1

BANK0

; CONFIGURA OPTIONS
; PULL-UPs DESABILITADOS
; INTER. NA BORDA DE SUBIDA DO RB0
; TIMER0 INCREM. PELO CICLO DE MQUINA
; WDT - 1:128
; TIMER - 1:1

; CONFIGURA INTERRUPES
; DESABILITADA TODAS AS INTERRUPES

; CONFIGURA CONVERSOR A/D


; CONFIGURA PORTA E PORTE COM I/O DIGITAL
; SELECIONA BANCO 0 DA RAM

;**************************************
;*
INICIALIZAO DA RAM
*
;**************************************
; ESTA ROTINA IR LIMPAR TODA A RAM DO BANCO 0, INDO DE 0X20 A 0X7F.
; EM SEGUIDA, AS VARIVEIS DE RAM DO PROGRAMA SO INICIALIZADAS.
MOVLW
MOVWF
LIMPA_RAM
CLRF
INCF
MOVF
XORLW
BTFSS
GOTO

BSF

0X20
FSR

INDF
FSR,F
FSR,W
0X80
STATUS,Z
LIMPA_RAM

TELA_PRINCIPAL

; APONTA O ENDEREAMENTO INDIRETO PARA


; A PRIMEIRA POSIO DA RAM
; LIMPA A POSIO
; INCREMENTA O PONTEIRO P/ A PRX. POS.
; COMPARA O PONTEIRO COM A LT. POS. +1
; J LIMPOU TODAS AS POSIES?
; NO - LIMPA A PRXIMA POSIO
; SIM
; INICIALIZA MOSTRANDO TELA PRINCIPAL

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

78

;**************************************
;*
CONFIGURAES INICIAIS DO DISPLAY
*
;**************************************
; ESTA ROTINA INICIALIZA O DISPLAY P/ COMUNICAO DE 8 VIAS, DISPLAY PARA 2
; LINHAS, CURSOR APAGADO E DESLOCAMENTO DO CURSOR DIREITA.
INICIALIZACAO_DISPLAY
BCF
RS

; SELECIONA O DISPLAY P/ COMANDOS

MOVLW
CALL

0X30
ESCREVE

; ESCREVE COMANDO 0X30 PARA


; INICIALIZAO

MOVLW
CALL

.3
DELAY_MS

; DELAY DE 3MS (EXIGIDO PELO DISPLAY)

MOVLW
CALL

0X30
ESCREVE

; ESCREVE COMANDO 0X30 PARA


; INICIALIZAO

MOVLW
CALL

0X30
ESCREVE

; ESCREVE COMANDO 0X30 PARA


; INICIALIZAO

MOVLW
CALL

B'00111000'
ESCREVE

; ESCREVE COMANDO PARA


; INTERFACE DE 8 VIAS DE DADOS

MOVLW
CALL

B'00000001'
ESCREVE

; ESCREVE COMANDO PARA


; LIMPAR TODO O DISPLAY

MOVLW
CALL

.1
DELAY_MS

; DELAY DE 1MS

MOVLW
CALL

B'00001100'
ESCREVE

; ESCREVE COMANDO PARA


; LIGAR O DISPLAY SEM CURSOR

MOVLW
CALL

B'00000110'
ESCREVE

; ESCREVE COMANDO PARA INCREM.


; AUTOMTICO DIREITA

BSF

RS

; SELECIONA O DISPLAY P/ DADOS

;**************************************
;*
VARREDURA DOS BOTES
*
;*
LOOP PRINCIPAL
*
;**************************************
; A ROTINA PRINCIPAL FICA CHECANDO O ESTADO DOS BOTES. CASO ALGUM SEJA
; PRESSIONADO, A ROTINA DE TRATAMENTO DO BOTO CHAMADA.
VARRE
CLRWDT

; LIMPA WATCHDOG TIMER

BTFSS
GOTO

BOTAO_0
TRATA_BOTAO_0

; O BOTO 0 EST PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_0
; NO

BTFSS
GOTO

BOTAO_1
TRATA_BOTAO_1

; O BOTO 1 EST PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_1
; NO

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

79

BTFSS
GOTO

BOTAO_2
TRATA_BOTAO_2

; O BOTO 2 EST PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_2
; NO

BTFSS
GOTO

BOTAO_3
TRATA_BOTAO_3

; O BOTO 3 EST PRESSIONADO ?


; SIM - PULA P/ TRATA_BOTAO_3
; NO

MOVLW
MOVWF

FILTRO_TECLA
FILTRO_BOTOES

BTFSS
GOTO

TELA_PRINCIPAL
VARRE

CALL
GOTO

MOSTRA_TELA_PRINCIPAL
VARRE
; VOLTA PARA VARRER TECLADO

; WORK = O VALOR DE FILTRO_TECLA


; SALVA EM FILTRO_BOTOES
; RECARREGA FILTRO P/ EVITAR RUIDOS

; DEVE MOSTRAR TELA PRINCIPAL ?


NO - VOLTA P/ VARRE
; SIM

; ************************* TRATAMENTO DO BOTO 0 ***************************


TRATA_BOTAO_0
MOVF
FILTRO_BOTOES,F
BTFSC
STATUS,Z
; FILTRO J IGUAL A ZERO ?
GOTO VARRE
; SIM - VOLTA P/ VARREDURA DO TECLADO
; NO
DECFSZ
GOTO

FILTRO_BOTOES,F
VARRE

; FIM DO FILTRO ? (RUIDO?)


; NO - VOLTA P/ VARRE
; SIM - BOTO PRESSIONADO

; OS COMANDOS A SEGUIR SO PARA ESCREVER A FRASE RELACIONADA AO BOTO 0


BCF
MOVLW
CALL
MOVLW
CALL

RS
0X01
ESCREVE
.1
DELAY_MS

; SELECIONA O DISPLAY P/ COMANDOS

; DELAY DE 1MS

MOVLW
CALL
BSF

0X80
ESCREVE
RS

; COMANDO PARA POSICIONAR O CURSOR


; LINHA 0 / COLUNA 0
; SELECIONA O DISPLAY P/ DADOS

MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL

'B'
ESCREVE
'o'
ESCREVE
't'
ESCREVE
'a'
ESCREVE
'o'
ESCREVE
''
ESCREVE
'0'
ESCREVE

; COMANDO P/ LIMPAR A TELA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

80

BSF

TELA_PRINCIPAL

GOTO VARRE

; SETA FLAG P/ MOSTRAR TELA PRINCIPAL


; VOLTA P/ VARREDURA DOS BOTES

; ************************* TRATAMENTO DO BOTO 1 ***************************


TRATA_BOTAO_1
MOVF
BTFSC
GOTO

DECFSZ
GOTO

FILTRO_BOTOES,F
STATUS,Z
VARRE

FILTRO_BOTOES,F
VARRE

; FILTRO J IGUAL A ZERO ?


; SIM - VOLTA P/ VARREDURA DO TECLADO
; NO
; FIM DO FILTRO ? (RUIDO?)
; NO - VOLTA P/ VARRE
; SIM - BOTO PRESSIONADO

; OS COMANDOS A SEGUIR SO PARA ESCREVER A FRASE RELACIONADA AO BOTO 1


BCF
MOVLW
CALL
MOVLW
CALL

RS
0X01
ESCREVE
.1
DELAY_MS

; DELAY DE 1MS

MOVLW
CALL
BSF

0X88
ESCREVE
RS

; COMANDO PARA POSICIONAR O CURSOR


; LINHA 0 / COLUNA 8
; SELECIONA O DISPLAY P/ DADOS

MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL

'B'
ESCREVE
'o'
ESCREVE
't'
ESCREVE
'a'
ESCREVE
'o'
ESCREVE
''
ESCREVE
'1'
ESCREVE

BSF

TELA_PRINCIPAL

; SELECIONA O DISPLAY P/ COMANDOS


; COMANDO P/ LIMPAR A TELA

; SETA FLAG P/ MOSTRAR TELA PRINCIPAL

GOTO VARRE

; VOLTA P/ VARREDURA DOS BOTES

END

; FIM DO PROGRAMA

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

81

CAPTUO 11- Linguagem C MPLAB C18


O MPLAB C18 um copilador C destinado aos microcontroladores da famlia
PIC18. Ele possui compatibilidade com o padro ANSI (American National
Standards Institute).
1- Comentrios
// comentrio de uma nica linha.
/* comentrio */ comentrio de mliplas linhas.
2- Identificadores variveis
Em um programa no permitido identifadores com o mesmo nome.
Todo identificador comea com uma letra ou um caractere.
Somente os 31 primeiros caracteres so relevantes.
3- Tipos de dados
Tipos de dados inteiros

Tipos de dados ponto decimal flutuante

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

82

4- Declarao de variveis e constantes


Exemplo
Char
Int
Unsigned
Float pi =

teste, aluno;
temperatura;
int dado = 100;
3.14;

Const unsigned int valor = 10

\\ 2 variveis tipo char


\\ varivel tipo inteiro
\\ varivel tipo inteiro e valor inicial de 100
\\ varivel tipo float e valor inicial de 3,14
\\ constante inteira igual a 10

5- Representao dos dados numricos


Base numrica
0b00001111
0x10
20

Valor
Binrio
Hexadecimal
Decimal

6 Operadores
Aritmticos
Operador
+
*
/
%
++
--

Operao
Adio
Subtrao
Multiplicao
Diviso
Resto da diviso
Incremento
Decremento

Operador
==
!=
>
>=
<
<=

Relacionais
Operao
Igual a
Diferente
Maior que
Maior ou igual a
Menor que
Menor ou igual a

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

83

Lgicos
Operador
&&
||
!

Operador
&
|
^
~
>>
<<

Operao
AND
OR
Not

Bit a Bit
Operao
AND
OR
XOR
NOT (inverte o estado dos bits)
Deslocamento de bit(s) direita
Deslcocamento de bit(s) esquerda

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

84

Projeto Integrador
Lista de Materiais Placa de Desenvolvimento de Microcontrolador PIC
Item Quant

Especificao

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16

01
01
01
01
02
02
01
02
05
10
10
01
01
06
02
01

17
18

01
01

19
20
21
22
23

01
01
08
01
01

PIC 16F877A
CI ULN2003
CI LM358
CI MAX232
Soquete torneado 40 pinos
Soquete torneado 16 pinos
Cristal de 4MHZ
Capacitor cermico de 33pF
Capacitor eletrolitico de 1F x 16V
Resistor de 10K
Resistor de 330R
Resistor de 470R
Resistor de 4K7
Mini botes Conector para PCI de 8 vias
Concector RJ 11 fmea para PCI
Com 6 pinos
Trimpot de 10K
Placa Perfurada universal para
montagem do circuito 100x150mm
LCD 16 X2
7805
LED 3mm
Conector para fonte
Base de fusvel com fusvel de 0,5A

Aplicao no
circuito
Processador
Driver de 500mA
entrada analgica
Comunicao serial

Conexo externa
Gravao in circuit

Procedimento para testar a placa


1. Retirar todos os CIs dos soquetes.
2. Testar a continuidade nas trilhas e verificar possveis curtos.
3. Alimentar a placa (Durante todo o teste o LED de alimentao dever permanecer
aceso).
4. Verificar a tenso nos terminais dos CIs. ( 5V)
5. Colocar um jumper entre o terminal de 5V e o terminal 18, o LED correspondente
dever acender. Repetir o teste para os demais terminais 19, 20, 23, 24.
6. Medir a tenso entre o terminal 5V e o pino 33, ao acionar cada boto a tenso
O multmetro dever indicar uma tenso de 5V. Repetir o teste para os demais
terminais 34, 35, 36 e 37.

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

85

Projeto Integrador : Placa de simulao para microcontrolador PIC 16F877A

Desenho realizado pela aluna Juliana A. Galindo Pereira


AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

86

Tabela de caracteres ASCII imprimveis


Decimal

Caractere

Decimal

Caractere

32

espao

80

33

81

34

"

82

35

83

36

84

37

85

38

&

86

39

'

87

40

88

41

89

42

90

43

91

44

92

45

93

46

94

47

95

48

96

49

97

50

98

51

99

52

100

53

101

54

102

55

103

56

104

57

105

58

106

59

107

60

<

108

61

109

62

>

110

63

111

64

112

65

113

66

114

67

115

68

116

69

117

70

118

71

119

72

120

73

121

74

122

75

123

76

124

77

125

78

126

79

127

DEL

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

87

Simulao utilizando Proteus


1- Abrir o programa proteus ISIS.
2- Abrir um projeto File Open Design Pasta circuito proteus (CD).

3- Clicar 2 vezes no PIC abrir a janela conforme figura abaixo.

4- Em Program File, anexar o arquivo .hex gerado pelo MPLAB. Esse arquivo
est no mesmo diretrio (mesma pasta) que o projeto do MPLAB.
5- Simular clicando no Play

AnotaesdeAulaMicrocontroladoresProfNiltonSerigioli

88

Você também pode gostar