Você está na página 1de 88

Anotações de Aula

Microcontrolador PIC 16F877

Curso: Tecnólogo em Automação Industrial

Disciplina: Microprocessadores e Microcontroladores

Profº Nilton Serigioli


Sumário

Capítulo 1 – Introdução aos microcontroladores ..................................................3


Microcontroladores versus microprocessadores ..............................3
CISC e RISC.....................................................................................4

Capítulo 2 – O que é um PIC ? ............................................................................5

Capítulo 3 – Conhecendo o PIC 16F877 .............................................................12


Diagrama interno .............................................................................13
Pinagem e características elétricas .................................................14
Descrição dos pinos ........................................................................15
Mapeamento da memória de dados ................................................18

Capítulo 4 – Conjunto de instruções .....................................................................19


Exemplos das instruções...................................................................21
Exercícios .........................................................................................26

Capítulo 5 – Programação ....................................................................................31

Capítulo 6 – Conversor AD....................................................................................33

Capítulo 7 – Comunicação Serial – USART..........................................................37

Capítulo 8 – Software MPLAB


Criar um Projeto.................................................................................42
Gravar um Programa.........................................................................47
Testando o programa – DEBUGGER ...............................................48

Capítulo 9 – Compilador MPLAB C18 ...................................................................51

Capítulo 10 – Exemplos
Esquema Elétrico 1: Botões e LEDs .................................................53
Exemplo 1: Liga e desliga uma saída .............................................. 55
Exemplo 2: Atribuição de nomes para os PORTs ............................57
Exemplo 3: Temporização - Oscilador.............................................. 58
Esquema Elétrico 2: Display de 7 segmentos...................................61
Exemplo 4: Trabalhando com Display de 7 segmentos................... 64
Exemplo 5: Multiplexação de Display de 7 segmentos.....................68
Esquema Elétrico 3: Display LCD e Conversor AD...........................69
Exemplo 5: Trabalhando com Display LCD.......................................74

Capítulo 11 – Linguagem C .................................................................................82

Projeto Integrador ..................................................................................................85


Tabela ASCII ...... ..................................................................................................87
Simulação utilizando Proteus .................................................................................88

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  2   
Página anterior Tabela de conteúdos Página seguinte
CAPÍTULO 1- Introdução aos Microcontroladores

Introdução
As circunstâncias que se nos deparam hoje no campo dos microcontroladores têm
os seus primórdios no desenvolvimento da tecnologia dos circuitos integrados.
Este desenvolvimento tornou possível armazenar centenas de milhares de
transistores num único chip. Isso constituiu um pré-requisito para a produção de
microprocessadores e, os primeiros computadores foram construídos adicionando
periféricos externos tais como memória, linhas de entrada e saída, temporizadores
e outros. Um crescente aumento do nível de integração permitiu o aparecimento
de circuitos integrados contendo simultaneamente processador e periféricos. Foi
assim que o primeiro chip contendo um microcomputador e que mais tarde haveria
de ser designado por microcontrolador.

Aplicações
Microcontroladores são usados com frequência em produtos e dispositivos de
controle automático, tais como sistemas de controle em motores de automóveis,
controles remotos, máquinas de escritório, ferramentas e brinquedos. Ao reduzir o
tamanho, custo e consumo de energia em comparação com um projeto que usa
microprocessador, memória e dispositivos de E/S separados, microcontroladores
tornam viável economicamente o controle eletrônico de muitos processos. Cerca
de 50% dos microcontroladores vendidos são controladores "simples", outros 20%
são processadores de sinais digitais (DSPs) mais especializados.
Os microcontroladores podem ser encontrados em praticamente todos os
dispositivos eletrônicos digitais que nos cercam: cartão de banco, dentro do
monitor, controladores de temperatura, Harddisk, relógio de pulso, rádio relógio,
máquinas de lavar, forno de microondas, telefones, etc. Você está certamente
cercado de dezenas deles agora. Eles permitiram à evolução de equipamentos
que há anos não evoluíam como os motores a combustão, que agora com o novo
controle eletrônico podem funcionar com sistema bicombustível e poluindo menos
e as máquinas fotográficas, que migraram de processos químico/mecânico a
circuitos com microcontroladores. (fonte:www.wikipedia.com.br)

Microcontroladores versus Microprocessadores

Um microcontrolador difere de um microprocessador em vários aspectos. Primeiro


e o mais importante, é a sua funcionalidade. Para que um microprocessador possa
ser usado, outros componentes devem-lhe ser adicionados, tais como memória e
componentes para receber e enviar dados. Em resumo, isso significa que o
microprocessador é o verdadeiro coração do computador. Por outro lado, o
microcontrolador foi projetado para ter tudo num só. Nenhum outro componente
externo é necessário nas aplicações, uma vez que todos os periféricos
necessários já estão contidos nele. Assim, nós poupamos tempo e espaço na
construção dos dispositivos.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  3   
Tecnologia CISC e RISC
Os microcontroladores PIC são fabricados com a tecnologia RISC (Reduced
Instruction Set Computer) que contém um conjunto reduzido de instruções, já os
Microcontroladores da família 8051 são fabricados uma tecnologia CISC
(Complex Instruction Set Computer) que possuem um conjunto de instruções 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 pôr o microcontrolador a trabalhar mais rapidamente.
Na arquitetura de Harvard, a memória de dados está separada da memória de
programa. Assim, é possível uma maior fluência de dados através da unidade
central de processamento e, claro, uma maior velocidade de funcionamento. A
separação da memória de dados da memória de programa faz com que as
instruções possam ser representadas por palavras de mais que 8 bits. O
PIC16F877 usa 14 bits para cada instrução, o que permite que todas as instruções
ocupem uma só palavra de instrução. É também típico da arquitetura Harvard ter
um repertório com menos instruções que a de Von-Neumann's, instruções essas,
geralmente executadas apenas num único ciclo de clock.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  4   
CAPÍTULO 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 contém todos os circuitos necessários para realizar
um completo sistema digital programável.
O PIC pode ser visto externamente como um circuito integrado TTL ou CMOS
normal, mas internamente dispõe de todos os dispositivos típicos de um sistema
microprocessado, ou seja:
• Uma CPU (Central Processor Unit, ou seja, Unidade de Processamento
Central) e sua finalidade é interpretar as instruções de programa.
• Uma memória PROM (Programmable Read Only Memory ou Memória
Programável Somente para Leitura) ou EEPROM (Electrically Erasable
Programmable Read Only Memory) ou FLASH na qual irá memorizar de
maneira permanente as instruções do programa.
• Uma memória RAM (Random Access Memory ou Memória de Acesso
Aleatório) utilizada para memorizar as variáveis 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 presença de todos estes dispositivos em um espaço 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 disponível em uma ampla gama de modelos para melhor adaptar-se as
exigências de projetos específicos, diferenciando-se pelo número de linha de I/O e
pelo conteúdo do dispositivo.
Uma descrição detalhada da tipologia do PIC é disponível no site da Microchip,
onde conseguimos encontrar grandes e variadas quantidades de informações
técnicas, software de apoio, exemplos de aplicações e atualizações disponíveis.
Unidade Central de Processamento
Vamos agora adicionar mais 3 locais de memória a um bloco específico para que
possamos ter as capacidades de multiplicar, dividir, subtrair e mover os seus
conteúdos de um local de memória para outro. A parte que vamos acrescentar é
chamada "central processing unit" (CPU) ou Unidade Central de Processamento.
Os locais de memória nela contidos chamam-se registros. Os registros são,
portanto, locais de memória cujo papel é ajudar a executar várias operações

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  5   
matemáticas ou quaisquer outras operações com dados, quaisquer que sejam os
locais em que estes se encontrem.
Vamos olhar para a situação atual. Nós temos duas entidades independentes
(memória e CPU) que estão interligadas, deste modo, qualquer troca de dados é
retardada bem como a funcionalidade do sistema é diminuída. Se, por exemplo,
nós desejarmos adicionar os conteúdos de dois locais de memória e tornar a
guardar o resultado na memória, nós necessitamos de uma ligação entre a
memória e o CPU. Dito mais simplesmente, nós precisamos obter um "caminho"
através 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 endereço. O
número de linhas do primeiro depende da quantidade de memória que desejamos
endereçar e o número de linhas do outro depende da largura da palavra de dados,
no nosso caso é igual a oito. O primeiro bus serve para transmitir endereços do
CPU para a memória e o segundo para ligar todos os blocos dentro do
microcontrolador. Neste momento, a funcionalidade já aumentou, mas um novo
problema apareceu: nós temos uma unidade capaz de trabalhar sozinha, mas que
não possui nenhum contato com o mundo exterior, ou seja, conosco. De modo a
remover esta deficiência, vamos adicionar um bloco que contém várias
localizações de memória e que, de um lado, está ligado ao bus de dados e do
outro às linhas de saída do microcontrolador que coincidem com pinos do circuito
integrado e que, portanto, nós podemos ver com os nossos próprios olhos.

Entrada/ saída - PORTs


Os PORTs são as entradas e saídas do microcontrolador, existem vários tipos de
ports. Quando trabalhamos com ports primeiro de tudo é necessário 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 memória.
Qualquer coisa de que se lê ou que se escreve é possível identificar facilmente
nos pinos do microcontrolador.

Watchdog Timer (WDT)


Outra coisa que nos vai interessar é a fluência da execução do programa pelo
microcontrolador durante a sua utilização. Suponha que como resultado de
qualquer interferência (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, nós simplesmente
carregamos no botão de reset e continuamos a trabalhar. Contudo, no caso do
microcontrolador nós não podemos resolver o nosso problema deste modo,
porque não temos botão. Para ultrapassar este obstáculo, precisamos introduzir
no nosso modelo um novo bloco chamado watchdog timer (cão de guarda do
tempo). Este bloco é de fato outro contador que está continuamente a contar e
que o nosso programa põe a zero sempre que é executado corretamente. No caso

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  6   
de o programa "travar", o zero não vai ser escrito e o contador, por si só, irá
resetar o microcontrolador quando alcançar 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
intervenção do ser humano.
O contador do WDT é independente do ciclo de máquina 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 período 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 energização do
microcontrolador. O POR é utilizado para garantir que o microcontrolador opere
corretamente e não sofra problemas durante a energização.

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 alimentação estiver estabilizada. O PWRT
faz com que o PIC permaneça em estado de reset durante um intervalo de 72ms.

Brown-out Reset (BOR)

O Brown-out Reset força um reset no PIC sempre que a tenão de alimentação


estiver abaixo de 4V durante um intervalo de tempo maior que 100μs.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  7   
Gerador de Clock – oscilador
O circuito do oscilador é usado para fornecer um clock, ao microcontrolador. O
clock é necessário para que o microcontrolador possa executar um programa ou
as instruções de um programa.
Oscilador RC: esse é o tipo mais simples e também o mais barato, mas por outro
lado é o menos preciso.
Oscilador Ressonador: o ressonador cerâmico é uma segunda opção, não é tão
barato quanto um RC, mas é bem mais preciso e estável.

Oscilador de Cristal – XT: o cristal está contido num invólucro de metal com dois
pinos onde foi escrita a frequência a que o cristal oscila. Dois capacitores
cerâmicos 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 tão perto quanto possível do
microcontrolador, de modo a evitar qualquer interferência nas linhas que ligam o
oscilador ao microcontrolador.
Os cristais são os osciladores mais precisos que podemos utilizar, mas também
são os mais caros.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  8   
Unidade de Memória
A memória é a parte do microcontrolador cuja função é guardar dados. A maneira
mais fácil de explicar é descrevê-la como uma grande prateleira cheia de gavetas.
Se supusermos que marcamos as gavetas de modo a elas não se confundirem
umas com as outras, então o seu conteúdo será facilmente acessível. Basta saber
a designação da gaveta e o seu conteúdo será conhecido.
A memória é o conjunto de todos os locais de memória (gavetas) e
endereçamento nada mais é que selecionar um deles. Isto significa que
precisamos selecionar o endereço desejado (gaveta) e esperar que o conteúdo
desse endereço nos seja apresentado (abrir a gaveta). Além de ler de um local da
memória (ler o conteúdo da gaveta), também é possível escrever num endereço
da memória (introduzir um conteúdo na gaveta).

O PIC16F877 tem dois blocos de memória separados, um para dados e o outro


para o programa. A memória EEPROM e os registos de uso geral na memória
RAM constituem o bloco para dados e a memória FLASH constitui o bloco de
programa.

A memória de programa é a parte responsável pelo armazenamento do


programa. Para a família do PIC 16F esta memória é do tipo FLASH, o que torna
possível programar o microcontrolador muitas vezes antes de este ser instalado
num dispositivo, e, mesmo depois da sua instalação, podemos alterar o programa
e parâmetros contidos. O tamanho da memória de programa é de 8192 endereços
de palavras (8K words) de 14 bits.
A memória de dados (RAM) serve para guardar as variáveis e os registradores
utilizados pelo programa. Esta memória armazena dados de 8 bits e é volátil, 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 memória de dados (E2PROM) serve para guardar as informações que não


podemos perder quando o PIC é desenergizado. A memória E2PROM é de 8 bits
com 256 bytes de tamanho.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  9   
Registros Especiais (SFR)
Os registradores SFR (Special Function Registers ou Registros de Funções
Especiais) são utilizados pelo microcontrolador para execução do programa e
processamento da ULA. Servem também para configuração de várias funções e
para utilização de todos os periféricos.

Registradores de uso geral

São registradores destinados para armazenamento de variáveis definidas pelo


usuário para serem escritas e lidas pelo programa. O PIC 16F877 possui 368
bytes disponíveis para uso geral.

Contador de Programa

O contador de programa (PC = Program Counter), é um registro de 13 bits que


contém o endereço da instrução que vai ser executada. Ao incrementar ou alterar
(por exemplo, no caso de saltos) o conteúdo do PC, o microcontrolador consegue
executar as todas as instruções do programa, uma após outra.

Pilha

O PIC16F877 tem uma pilha (stack) de 13 bits e 8 níveis de profundidade, o que


corresponde a 8 locais de memória com 13 bits de largura. O seu papel básico é
guardar o valor do contador de programa quando ocorre um salto do programa
principal para o endereço 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 endereço e carregá-lo no contador de programa. Quando nos movemos de
um programa para um subprograma, o conteúdo do contador de programa é
empurrado para o interior da pilha (um exemplo disto é a instrução CALL). Quando
são executadas instruções 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 seqüência foi interrompida.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  10   
Mapeamento da Memória

Vetor Reset: trata-se do primeiro endereço da memória de programa que será


executado após um start-up ou reset. Endereço 0000h

Vetor Interrupção: Quando acontecer uma interrupção o programa será desviado


para o endereço 0004h.

Organização da Memória de Dados: a memória de dados é dividida em bancos


(páginas), para este PIC, existe 4 bancos que são selecionados pelo registrador
especial – STATUS, nos bits RP1 (STATUS<6>) e RP0 (STATUS<5>).

RP1: RP0 BANCO


0 0 0
0 1 1
1 0 2
1 1 3

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  11   
CAPÍTULO 3 - Conhecendo o PIC 16F877A

• Microcontrolador de 40 pinos;
• Via de programação com 14 bits e 35 instruções;
• 33 portas configuráveis como entrada e saída;
• 15 interrupções disponíveis;
• Memória de programação E2PROM FLASH;
• Memória de programa de 8Kwords;
• Memória E2PROM interna com 256 bytes;
• Memória RAM com 368 bytes;
• Três timers;
• Comunicação seriais: SPI, I2C e USART;
• Conversores analógicos de 10 bits (8x) e comparadores analógicos (2x)
• Dois módulos CCP: Capture, Compare e PWM;

Características da família 16F87XX

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  12   
Diagrama interno do PIC 16F877A

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  13   
Pinagem – PIC 16F877

Características Elétricas

Temperatura de trabalho -55º até +125º C


Temperatura de armazenamento -65º até +150º C
Tensão de trabalho 4,0V até 5,5V
Tensão máxima no pino Vdd (em relação ao Vss) -0,3V até 7,5V
Tensão máxima no pino MCRL (em relação ao Vss) 0 até 14V
Tensão máxima no pino RA4 (em relação ao Vss) 0V até 8,5V
Tensão máxima nos demais pinos (em relação ao Vss) -0,3V até Vdd
+0,3V
Dissipação de energia 1,0W
Corrente máxima de saída no pino Vss 300mA
Corrente máxima de entrada no pino Vdd 250mA
Corrente máxima de saída de um pino( quando em Vss) 25mA
Corrente máxima de entrada de um pino( quando em Vdd) 25mA
Corrente máxima de entrada do PORTA, PORTB e PORTE 200mA
combinados
Corrente máxima de saída do PORTA, PORTB e PORTE 200mA
combinados
Corrente máxima de entrada do PORTC e PORTD combinados 200mA
Corrente máxima de saída do PORTC e PORTD combinados 200mA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  14   
Descrição dos pinos

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  15   
Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  16   
Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  17   
Mapamento da Memória de Dados

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  18   
CAPÍTULO 4 - Conjunto de Instruções

O conjunto completo compreende 35 instruções conforme tabela a seguir. Uma


razão para este pequeno número de instruções resulta principalmente do fato de
estarmos a falar de um microcontrolador RISC cujas instruções foram otimizadas
tendo em vista a rapidez de funcionamento, simplicidade de arquitetura e
compacidade de código. O único inconveniente, é que o programador tem que
dominar a técnica “desconfortável” de fazer o programa com apenas 35
instruções.

Período de execução da instrução


Todas as instruções são executadas num único ciclo, exceto as instruções de
ramificação condicional se a condição for verdadeira, ou se o conteúdo do
contador de programa for alterado pela instrução. Nestes casos, a execução
requer dois ciclos de instrução e o segundo ciclo é executado como sendo um
NOP (Nenhuma Operação). Quatro oscilações de clock perfazem um ciclo de
instrução (ciclo de máquina). Se estivermos a usar um oscilador com 4MHz de
freqüência, o tempo normal de execução de uma instrução será de 1μs e, no caso
de uma ramificação condicional de 2µs.
Resumo do Set de instruções

Termos utilizados:
• Work - W: trata-se de um registrador temporário para as operações da
ULA. Também chamado de acumulador.
• File - F: referência de um registrador (posição de memória) propriamente
dito.
• Literal - L: um número qualquer.
• Destino - d : o local onde deve ser armazenado o resultado da operação.
Existem somente dois destinos possíveis: f, que guardará o resultado no
próprio 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 instruções podem gerar desvios se o resultado da
operação for zero.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  19   
Operações com Registradores
Instruções Argumentos Descrição
ADDWF f,d Soma W e f, guardando o resultado em d
ANDWF f,d Lógica E entre W e f, guardando o resultado em d
CLRF f Limpa f.
CLRW - Limpa W
COMF f,d Calcula o complemento de f, guardando o resultado em d
DECF f,d Decrementa f, guardando o resultado em d
DECFSZ f,d Decrementa f, guardando o resultado em d e pula a próxima linha
se o resultado for zero
INCF f,d Incrementa f, guardando o resultado em d
INCFSZ f,d Incrementa f, guardando o resultado em d e pula a próxima linha se
o resultado for zero
IORWF f,d Lógica OU entre W e f, guardando o resultado em d
MOVF f,d Move f para d
MOVWF f,d Move W para f.
RLF f,d Rotaciona f 1 bit para esquerda, guardando o resultado em d
RRF f,d Rotaciona f 1 bit para direita, guardando o resultado em d
SUBWF f,d Subtrai E de f (W-f), guardando o resultado em d
SWAPF f,d Executa a inversão entre as partes alta e baixa de f, guardando o
resultado em d
XORWF f,d Lógica OU exclusivo entre W e f, guardando o resultado em W

Operações com literais


Instruções Argumentos Descrição
ADDLW K Soma k com W, guardando o resultado em W
ANDLW K Lógica E entre k e W, guardando o resultado em W
IORLW K Lógica OU entre k e W, guardando o resultado em W
MOVLW K Move k para W
SUBLW K Subtrai W de k , guardando o resultado em W
XORLW K Lógica OU exclusivo entre k e W, guardando o resultado em W

Operações com Bits 
Instruções Argumentos Descrição
BCF f,b Impõe ZERO no bit do registrador f
BSF f,b Impõe UM no bit do registrador f
BTFSC f,b Testa o bit do registrador f, e pula a próxima linha se ele for ZERO
BTFSS f,b Testa o bit do registrador f, e pula a próxima linha se ele for UM

Controles 
Instruções Argumentos Descrição
NOP - Gasta um ciclo de máquina sem fazer absolutamente nada
CALL R Executa a rotina R
CLRWDT - Limpa o registrador WDT para não ocorrer o reset
GOTO R Desvia para o ponto R, mudando o PC
RETFIE - Retorna de uma interrupção
RETLW K Retorna de uma rotina, com k em W
RETURN - Retorna de uma rotina, sem afetar W
SLEEP - Coloca o PIC em modo sleep

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  20   
Exemplos de utilização das instruções

O microcontrolador só entende o Código Binário, mas o programador pode


entender outros formatos como: Decimal, Hexadecmal e código ASCII e eles
devem ser declarados da seguinte forma:

Decimal D’ ‘ ou .
Exemplo: D’20’ ou .20

Hexadecimal H’ ‘ ou 0X
Exemplo: H’20’ ou 0X20

Binário B’ ‘
Exemplo B’00001111’

ASCII A‘‘
Exemplo A’a’

1- Exemplos de Operações com Bits:

BSF PORTB,1
Antes da instrução: PORTB = B’00000000’
Depois da instrução: PORTB = B’00000010’

BCF PORTB,1
Antes da instrução: PORTB = B’00000010’
Depois da instrução: PORTB = B’00000000’

BTFSC PORTA,6 ; testa a bit 7 do PORTA e se for ZERO pula a instrução


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

BTFSS PORTA,6 ; testa a bit 7 do PORTA e se for UM pula a instrução


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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  21   
2- Exemplos de Manipulação de Registradores:

MOVLW 0x10
Depois da instrução: W = 0x10

MOVWF REG1
Antes da instrução: W = 0x10 REG1 = xx
Depois da instrução: W = 0x10 REG1 = 0x10

MOVF REG1,W
Antes da instrução: W = 0x10 REG1 = 0x20
Depois da instrução: W = 0x20 REG1 = 0x20

CLRF REG1
Depois da instrução: REG1 = 0x00

CLRW
Depois da instrução: W = 0x00

INCF REG1,F
Antes da instrução: REG1 = 0x09
Depois da instrução: REG1 = 0x10

INCF REG1,W
Antes da instrução: REG1 = 0x06 W= 0x02
Depois da instrução: REG1 = 0x06 W= 0x07

DECF REG1,F
Antes da instrução: REG1 = 0x09
Depois da instrução: REG1 = 0x08

DECF REG1,W
Antes da instrução: REG1 = 0x10 W= 0x02
Depois da instrução: REG1 = 0x10 W= 0x0F

SWAPF REG1,F
Antes da instrução: REG1 = B’00001111’
Depois da instrução: REG1 = B’11110000’

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  22   
3-Exemplos de Operações Aritméticas:

ADDLW 0x13
Antes da instrução: W = 0x10
Depois da instrução: W = 0x23

ADDWF REG1,W
Antes da instrução: W = 0x17 REG1 = 0x11
Depois da instrução: W = 0x28 REG1 = 0x11

ADDWF REG1,F
Antes da instrução: W = 0x17 REG1 = 0x17
Depois da instrução: W = 0x17 REG1 = 0x28

SUBLW 0x07 SUBLW 0x00 SUBLW 0x10

Antes da inst: W = 0x08 Antes da inst: W = 0x02 Antes da inst: W = 0x10


Depois da inst: W = 0x01 Depois da inst: W = 0xFE Depois da inst: W = 0x00
Carry C = 1 resultado (254) Carry C = 1 resultado
positivo Carry C = 0 resultado positivo ou zero
Z=0 negativo Z=1
Z=0

SUBWF REG1,W
Antes da instrução: W = 0x17 REG1 = 0x11
Depois da instrução: W = 0x06 REG1 = 0x11

Usando instruções aritméticas para comparar valores

MOVF A,W
SUBWF B,W
BTFSC STATUS,C
GOTO MAIOR (Caso A seja maior que B)
GOTO MENOR (Caso A seja menor que B)

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  23   
4- Exemplos de operações lógicas

ANDLW 0x B’00001111’
Antes da instrução: W= B’10010101’
Depois da instrução: W= B’00000101’

ANDWF PORTA,W
Antes da instrução: PORTA= B’11111111’ W= B’01110111’
Depois da instrução: PORTA= B’11111111’ W= B’01110111’

IORLW 0x B’00001111’
Antes da instrução: W= B’10010101’
Depois da instrução: W= B’10011111’

IORWF PORTA,W
Antes da instrução: PORTA= B’11111111’ W= B’01110111’
Depois da instrução: PORTA= B’11111111’ W= B’01110111’

XORLW B’00010010’
Antes da instrução: W= B’00000100’
Depois da instrução:W= B’00010110’

XORWF PORTA,W
Antes da instrução: PORTA = B’00100010’ W= B’00100010’
Depois da instrução: PORTA = B’00100010’ W= B’00000000’

Usando a instrução XORWF para comparar valores

MOVF A,W ; Movimenta o conteúdo de A para W


XORWF B,W ; Ou exclusivo entre W e B
BTFSS STATUS,Z ; Testa o flag de ZERO
GOTO DIFERENTE ; Quando o resultado lógico for um o flag Z =0
GOTO IGUAL ; Quando o resultado lógico for zero o flag Z =1

COMF PORTA,W
Antes da instrução: PORTA = B’00100010’
Depois da instrução: PORTA = B’00100010’ W= B’11011101’

RRF REG1,F
Antes da instrução: REG1= B’11100110’ C= 0
Depois da instrução: REG1 = B’01110011’ C= 0

RLF REG1,F
Antes da instrução: REG1= B’11100110’ C= 0
Depois da instrução: REG1 = B’11001100’ C= 1

DECFSZ CONTADOR,F

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  24   
GOTO CONTINUA
GOTO ACABOU

Depois da instrução: decrementa o registrador CONTADOR e testa, se diferente


de zero executa a instrução GOTO CONTINUA. Se o CONTADOR for zero pula e
executa a instrução GOTO ACABOU.

INCFSZ CONTADOR,F
GOTO CONTINUA
GOTO ACABOU

Depois da instrução: incrementa o registrador CONTADOR e testa, se diferente de


zero executa a instrução GOTO CONTINUA. Se o CONTADOR for zero pula e
executa a instrução GOTO ACABOU.

Escrita e compilação de um programa em Assembly

O código fonte em assembly possui a extensão .ASM e é adicionado um arquivo


.INC que é um arquivo de texto onde estão declarados todos os registradores e
outras definições necessárias.
Durante a compilação do código, o compilador assembler gera uma série de
arquivos com nome identido ao código, mas com extensões diferentes:
• HEX é um arquivo que contém o código de operação 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 tradução em opcode. Não é utilizado na
programação do PIC.
• ERR contém uma lista de erros de compilação que mostra o número da
linha do código na qual está com erro

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  25   
Exercícios

Exercício 1: Instruções de movimentação

Instruções Descrição das Instruções Conteúdo dos


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

Exercício 2: Instruções de movimentação

Instruções Descrição das Instruções Conteúdo dos


Registradores
MOVLW  0X0F
MOVWF  REGA 
MOVWF  REGB 
SWAPF              REGB,F 
INCF             REGB,W 
MOVWF           REGA 
INCF                  REGA 
CLRWF 

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  26   
Exercício 3: Instruções Lógicas

Instruções Descrição das Instruções Conteúdo dos


Registradores
MOVLW  .200 
MOVWF  REGA
MOVLW  .100 
MOVWF  REGB
 
MOVF            REGA,W 
ANDLW         0X0F 
MOVWF        REGC 
 
MOVF            REGA,W 
ANDWF         REGB,W 
MOVWF        REGD 
 
MOVF            REGA,W 
IORLW           0X0F 
MOVWF        REGE 
 
MOVF            REGA,W 
XORWF         REGB,W 
MOVWF        REGF 
COMF            REGF,F

Exercício 4: Utilizando as instruções estudas, faça um programa que atenda a


seguinte situação lógica. REGE = (REGA.REGB) + (REGC.REGD)

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  27   
Exercício 5: Comparação de valores utilizando XOR
Instruções Descrição das Instruções Conteúdo dos
Registradores
MOVLW  .10 
MOVWF  REGA 
MOVLW  .5 
MOVWF  REGB 
MOVLW  .1 
MOVWF  REGC 
CONTINUA 
MOVF  REGA,W 
XORWF  REGB,W 
BTFSS  STATUS,Z 
GOTO  DIFERENTE 
GOTO  IGUAL 
 
DIFERENTE 
INCF  REGB,F 
RLF        REGC,F 
GOTO  CONTINUA 
 
IGUAL 
CLRF  REGB 
GOTO  CONTINUA 

Exercício 6: Utilizando as instruções estudas, faça um programa que atenda a


seguinte situação:
Contador de 0 a 99 - a cada varredura do programa o registrador UNIDADE deve
ser incrementado até que seu conteúdo seja igual a 10, após isso a UNIDADE
deve ser zerada e incrementar um no registrador DEZENA.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  28   
Exercício 7: Comparação de valores
Instruções Descrição das Instruções Conteúdo dos
Registradores
MOVLW  .128 
MOVWF  REGA 
MOVLW  .1 
MOVWF  REGB 
MOVLW  .10 
MOVWF   CONTADOR 
FICA 
DECFSZ         CONTADOR 
GOTO  CONTINUA 
GOTO  ACABOU 
 
CONTINUA 
RLF        REGB,F 
RRF        REGA,F 
GOTO  FICA 
 
ACABOU 
CLRF  CONTADOR 
GOTO  FICA 

Exercício 8: Faça o mesmo programa do exercício 6 utilizando como comparação


a instrução DECFSZ .

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  29   
Exercício 9: Instruções Aritméticas

Instruções Descrição das Instruções Conteúdo dos


Registradores
MOVLW  .10 
MOVWF  REGA 
MOVLW  .20 
MOVWF  REGB 
MOVF             REGB,W 
ADDLW             .5 
MOVWF         REGB 
 
MOVF           REGA,W 
ADDWF             
REGB,W 
MOVWF         REGC 
 
TESTE 
MOVF           REGA,W
SUBWF       REGC,W 
BTFSC        STATUS,C 
GOTO        MAIOR 
GOTO        MENOR 
 
MAIOR 
DECF      REGC 
GOTO     TESTE 
MENOR 
INCF      REGC  
GOTO     TESTE 

Exercício 10: Utilizando as instruções estudas, faça um programa que atenda a


seguinte situação: REGD= (REGA+REGB+REGC), se REGD for maior que 15 o
nible alto do REGD deve ser limpo.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  30   
CAPÍTULO 5 - Programação

Arquivo de Definição: INCLUDES

A fim de padronizar e agilizar mais a programação, existe a possibilidade de


criarmos e utilizarmos arquivos de definição, que foram chamados pela Microchip
de arquivo “Includes”. Esses arquivos nada mais são do que arquivos de texto,
ou mesmo código fonte, que serão inclusos no seu programa. Desta forma, a
própria Microchip criou um arquivo include para cada tipo de microcontrolador, em
que estão definidos os nomes e endereços de todos os SFRs e uma série de
outras definições necessárias para a utilização dos microcontroladores.

#INCLUDE <P16F877A.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F877A

Constantes e Definições: EQU e DEFINES

A diretriz EQU associa um nome a um número.

Nome da variável EQU endereço da memória. (CONTADOR EQU 0X0E)


Nome da constante EQU valor da constante. (TEMPO EQU .100 )

A diretriz # DEFINE substitui os nomes por uma expressão inteira. Por exemplo
podemos dar um nome a uma saída, substituindo PORTB,1 por LED

# DEFINE LED PORTB,1

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  31   
Configurando as opções 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 detecção automática de baixa


tensão. Isso significa que, se a tensão de alimentação for menor que 4V por mais
de 100μs, 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 programação em baixa tensão ativado.

_WRT_ON: habilitado a escrita na memória FLASH

_BODEN_ON: BOR (Brown Out Detect) trata de um sistema de detecção


automática de baixa tensão. Isso significa que, se a tensão de alimentação for
menor que 4V por mais de 100μs, o sistema será reiniciado.

_PWRTE_ON: Para Power Up ligado - esta opção irá fazer com que o PIC só
comece a operar cerca de 72ms após o pino MCLR ser colocado em nível alto.

_WDT_ON: Para WatchDog ligado.

_XT_OSC: oscilador tipo cristal ou ressonadores

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  32   
CAPÍTULO 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 silício nos PIC16F87X. Trata-se
de um conversor de aproximações sucessivas e com 10 bits de resolução.O
modelo de 28 terminais dispõe de cinco canais de entrada, e os 40 terminais de
oito canais. Nos PIC16F870/3/6 os cinco canais de entradas são suportados pelos
terminais da porta A.
Para seu funcionamento são necessárias duas voltagens de referência, chamadas
Vref+ e Vref-, que devem ser selecionadas por software e que podem utilizar
tensões internas (VDD e Vss) do próprio microcontrolador ou tensões 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 são usados para selecionar a frequência
de clock empregada na conversão (Tosc=1/Fosc). Na tabela podemos ver a
correspondência de cada combinação de bits com um tempo de conversão. Este
tempo é chamado de TAD e, trabalhando com um CAD de 10 bits de resolução,
necessidades um mínimo de 12TAD para finalizar a conversão. A duração mínima
de um TAD nos PIC16F87X é de 1,6_s.
Os bits CHS2:0 selecionam o canal por onde se introduzir o sinal analógico a ser
convertido. Na tabela mostra-se a correspondência.
O bit GO/DONE serve para iniciar a conversão. Uma vez colocada em 1
permanecerá nesse estado enquanto dure a conversão e passará
automaticamente para 0 quanto finalize. O bit ADON é o bit de habilitação do
conversor. Se o seu valor for 1 permite o funcionamento do conversor, porém se o
seu valor for 0 proíbe ou inabilita o funcionamento deste.
O bit ADCON0<1> não está implementado, não possui nenhuma função.

ADCON0(ENDEREÇOS:1Fh)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DON E - ADON
bit7 bit0

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  33   
O registro ADCON1
O bit mais significativo do registro ADCON1 é o ADFM e serve para selecionar o
formato do resultado da conversão. Se o seu valor for 1 o resultado será
justificado à direita. Portanto, tendo em conta que a resolução

ADCON1 (ENDEREÇOS:9Fh)
U-0 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0
bit7 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
Seleção da freqüência de trabalho do CAD.

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


serão interpretados como 0.
Quanto o bit ADFM possui o valor 0, o resultado da conversão será justificado à
esquerda.
Portanto, os seis bits menos significativos do registro ADRESL terão o valor 0. No
gráfico da figura podemos observar como se realiza a justificação do resultado. Os
bits seguintes ADCON1<6:4> não estão implementados e os quatro bits menos
significativos do registro PCFG3:0 são usados para configurar os pinos do
microcontrolador. Assim, poderemos definir quais pinos desejamos que sejam
entradas analógicas e quais serão linhas de E/S (digitais), se quisermos utilizar
tensões de referências, etc. Na tabela da figura são mostradas todas as
combinações possíveis. A primeira coluna contém os bits PCFG3:0, as três
colunas seguintes pertencem aos canais não- implementados no PIC16F870; as
próximas cinco colunas são os canais da porta A; as duas seguintes indicam de
onde tomamos as tensões de referência e a última indica o número de canais
analógicos e disponíveis e o número de canais usados como tensões de
referência.
A letra A assinala que o canal será usado como canal analógico e a letra D que
será usado como E/S digital.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  34   
Os registros de trabalho
Os registros de trabalho são aqueles onde se armazenará o resultado da
conversão. 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
serão preenchidos com zeros em função do bit ADFM.
Seleção TAD
TAD ADCS1:ADCS0 20 MHz 5 MHz 1.25mHZ 333,3kHz
2.Tosc 00 100 ns 400 ns 1,6 ns 6 us
8.Tosc 01 400 ns 1.6 ns 6,4 us 24 us
32.Tosc 10 1,6 us 6,4 us 2,6us 96 us
AC 11 2-6 us 2-6 us 2-6 us 2-6 us
Valores assumidos por TAD para diferentes freqüências de trabalho.

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) Não implementados nos PICI6F87X de 28 terminais
Seleção do canal a converter.

Funcionamento em modo SLEEP


Pode-se programar uma conversão enquanto o microcontrolador estiver no modo
SLEEP, porém neste caso torna-se necessário utilizar como relógio de conversão
o modo RC, já que o relógio normal do PIC parado neste modo.
Quando selecionados este relógio o CAD espera um ciclo de instrução antes de
começar a conversão, o que permite executar a instrução SLEEP. Ao Finalizar a
conversão , o resultado é colocado nos registros ADRESH:ADRESL; o bit
GO/DONE coloca-se em 0 e se gera uma interrupção (se estiver autorizada), o
que faz com que o PIC saia do modo SLEEP. Caso a interrupção não 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 válidos.

Realizando uma conversão


Para realizar uma conversão existem seis fases diferentes:
1º Fase – Configuração do conversor A/D: Configuração dos canais de entrada e
das tensões de referências com ADCON1. Seleção do canal de entrada a
converter, seleção do relógio para conversão e habilitação ou autorização do
funcionamento no ADCON0.
2º Fase – Configuração da interrupção A/D: Se desejamos provocar uma
interrupção, ao finalizar uma conversão devemos apagar o sinalizador ADIF e
habilitar ou colocar em 1 os bits de autorização ADIE, PEIE e GIE.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  35   
3º Fase – Esperar o tempo de aquisição da amostra a converter.
4º Fase – Início da conversão: Devemos colocar em 1 o bit GO/DONE do registro
ADCON0.
5º Fase – Esperar até que se complete a conversão: Testamos o bit GO/DONE
até que seja 0, ou esperamos até que aconteça uma interrupção e seja ativado o
bit sinalizador ADIF.
6º Fase – Leitura do resultado de ADRESH:ADRESL e colocamos o bit ADI em 0.
Para começarmos uma nova conversão devemos esperar no mínimo um tempo de
2.TAD para realizar a seguinte aquisição, repetindo todos os passos desde a
terceira fase.

Exemplo
Desejamos configurar os terminais RA0, RA1 e RA3 como entradas analógicas
para o CAD e os pinos RA2 e RA5 como E/S digitais.
Como devemos programar p PIC16F870?
A solução consiste em gravar nos quatro bits menos significativos do registro
ADCON1 (PCFG3:0) o valor 0100. A tensão de referência neste caso seria de
VDD.

PCFG3:0 AN7/(1) AN6/(1) AN5/(1) AN4/ AN3/ AN2/ AN1/ AN0/ Vref+ Vref- CHAN/
RE2 RE1 RE0 RE5 RE3 RE2 RE2 RE0 RE2 RE2 Refs
0000 A A A A A A A A V00 VSS 8/0
0001 A A A A Vref+ A A A AA3 VSS 7/1
0010 0 0 0 A A A A A V00 VSS 5/0
0011 0 0 0 A Vref+ A A A AA3 VSS 4/1
0100 0 0 0 0 A 0 A A V00 VSS 3/0
0101 0 0 0 0 Vref+ 0 A A AA3 VSS 2/1
011X 0 0 0 0 0 0 0 0 V00 VSS 0/0
1000 A A A A Vref+ Vref- A A AA3 AA2 6/2
1001 0 0 A A A A A A V00 VSS 6/0
1010 0 0 A A Vref+ A A A AA3 VSS 5/1
1011 0 0 A A Vref+ Vref- A A AA3 AA2 4/2
1100 0 0 0 A Vref+ Vref- A A AA3 AA2 3/2
1101 0 0 0 0 Vref+ Vref- A A AA3 AA2 2/2
1110 0 0 0 0 0 0 0 A V00 VSS 1/0
1111 0 0 0 0 Vref+ Vref- 0 A AA3 AA2 1/2
Configuração da porta A em função do valor de PCFG3:0.

Resumo dos passos a efetuar para realizar uma conversão.

Passo Procedimento
1 Configuração do CAD
2 Configuração de interrupção A/D
(opcional)
3 Esperar o tempo de aquisição
4 Início da conversão
5 Esperar o tempo de conversão
6 Leitura do resultado

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  36   
CAPÍTULO 7- Comunicação Serial - O módulo USART

Outro dos recursos do nosso microcontrolador que vamos analisar, um dos mais
importantes e-potentes, é o módulo de comunicação USART (Universal
Synchronous Asynchronous Receiver Transmitter). Este é um dos módulos de E/S
serial do microcontrolador, também conhecido como Interface de Comunicação
Serial ou SCI.

Generalidades
O USART é uma interface que permite a comunicação com outros dispositivos. Se
configurado como um sistema assíncrono, do tipo full-duplex, poderemos
comunicar o PIC com periféricos tipos terminais CRT e computadores pessoais.
Se configurado como sistema síncrono, do tipo half-duplex, poderemos
comunicarmos-nos com periféricos como circuitos conversores A/D ou D/A,
memórias EEPROM etc. Esta capacidade para comunicar-se com outros
dispositivos é imprescindível 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. Também podemos colocar como exemplo as leitoras de
cartões chip, nas quais o PIC deve se comunicar com o chip de memória integrado
no cartão.

Configuração do USART
Já vimos em função de como se configure o módulo USART, poderá estabelecer
uma comunicação com diferentes tipos de periférico. Por isso, veremos as opções
de configuração. O módulo USART pode ser configurado nos seguintes modos:

Modo Modo de transmissão Característica Endereço dos dados


1 Assíncrono Full-Duplex
2 Síncrono Mestre Half-Duplex
3 Síncrono Escravo Half-Duplex
Linhas de transmissão do mo SCI.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  37   
Configuração detalhada do registro TXSTA.

Bit 7 CSAC Seleção da fonte de relógio


(Só tem importância no modo síncrono)
1 Modo mestre. O relógio é gerado
Internamente desde o BAG
0 Modo escravo. O sinal de relógio vem
Do exterior
Bit 6 TX9 Habilita transmissão de 9 bits
1 Seleciona transmissão de 9 bits
0 Seleciona transmissão de 8 bits
Bit 5 TXEN Bit de autorização da transmissão
1 Transmissão habilitada
0 Transmissão inabilitada
Bit 4 SYNC Seleção do modo de transmissão
1 Modo síncrono
0 Modo Assíncrono
Bit 3 --- Não implementado. Lido como 0
Bit 2 BRGH Bit de seleção de alta velocidade de
Transmissão. (Só é usado em modo
assíncrono)
1 Alta velocidade
0 Baixa velocidade
Bit 1 TRMT Estado do registro de mudança de
transmissão . (Transmitt Shift Register)
1 TSA vazio
0 TSA cheio
Bit 0 TX90 Nono bit da transmissão. Pode ser
O bit de paridade

Para configurar este recurso são usados registros específicos: TXSTA e RCSTA.
A comunicação full-duplex é uma comunicação bidirecional, pode ser transmitir e
receber ao mesmo tempo. Já não é o caso da comunicação half-duplex, que é
uma comunicação unidirecional, ou seja, só é feita em um sentido por vez. O
telefone é um exemplo de comunicação full-duplex, já que se pode escutar e falar
ao mesmo tempo, ou seja, transmite e recebe ao mesmo tempo. Porém, um
walkie-talkie não permite isto: só podemos transmitir ou receber, nunca as duas
coisas ao mesmo tempo. È um exemplo claro de comunicação half-duplex.
A comunicação pode ser feita de forma assíncrona, ou seja, que não responda a
nenhum sinal de relógio, transmitindo os dados quando o transmissor deseje; ou
de forma síncrona, respondendo a um sinal de relógio que sincroniza os envios e
a recepção de dados. Neste último modo, existe diferença entre mestre e escravo:
o mestre será o dispositivo que estabelecerá o sinal de relógio e imporá este sinal
ao restante dos dispositivos que façam parte da comunicação, estes recebem o
nome de escravos.

Os registros de configuração
Os registros com os quais o USART trabalha são dois: TXTA e RCSTA. O primeiro
deles é o registro de controle que determina o estado de transmissão e encontra-
se na posição de memória 98h no banco1. O registro RCSTA é o registro de

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  38   
controle que determina o estado da recepção e encontra-se no banco 0 na
posição 18h.

Como deveria ser configurado o módulo de


comunicação para efetuar uma transmissão
em modo síncrono 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 comunicação.

Que valor assumiria o registro TXSTA para


uma comunicação assíncrona de 9 bits com
velocidade rápida?

TX9=TXEN=BRGH=1
SYNC=0

O registro TXSTA
Na imagem da figura, podemos ver a configuração deste junto ao detalhe dos bits
que o formam. O bit mais significativo, CSRC, é quem determina a fonte do relógio
(externa ou interna), portanto também é quem determina se o PIC trabalhará como
escravo (relógio tomado de fonte externa) ou como mestre (interna). O bit 6, TX9,
serve para selecionar a transmissão de 8 ou 9 bits. O próximo bit, o TXEN, é o bit
de autorização que habilita a transmissão. O bit SYNC determina se a transmissão
será realizada em modo síncrono ou assíncrono, portanto é de suma importância
comparar o restante dos bits. O próxima bit não está implementado fisicamente, já
o próximo é o bit BRGH, que permite selecionar a velocidade de transmissão em
modo assíncrono do gerador de freqüência interna do dispositivo. O próximo bit,
TRMT, é utilizado para informar o estado do registro de turno de transmissão. E,
por último, o bit 0 ou bit TX9D, que é usado unicamente nas transmissões de 9
bis, é o nono bit desta e que pode ser o bit de paridade.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  39   
Configuração detalhada do registro RCSTA.

Bit7 SPEN Bit de habilitação da porta serial


1 Habilitado (configuração do RC7/RX/0T e
RC6/TX/CK como pinos da porta serial)
0 Porta serial inabilitada
Bit 6 RX9 Bit de habilitação de recepção em
comunicação com 9 bits
1 Selecionada a recepção de 9 bits
0 Selecionada recepção de 8 bits
Bit 5 SREN Bit de autorização para uma única recepção
(somente usado no modo síncrono e mestre)
1 Habilita uma única recepção
0 Inabilita a opção
Bit 4 CREN Bit de autorização para recepção contínua
1 Habilitação
0 Inabilitação
Bit 3 ADDEN Bit de autorização de detecção do endereço
(só em modo assíncrono de 9 bits)
1 Habilita detecção do endereço, habilita
interrupção e o carregamento do dado do
buffer de recepção quando o bit RSR<8> é 1
0 Inabilita a detecção de endereço, todos
os bits são recebidos e o nono bit pode
ser usado como bit de paridade
Bit 2 FERR Bit de detecção de erro no formato
da mensagem recebida
1 Aconteceu um erro
0 Não aconteceu nenhum erro
Bit 1 0ERR Bit de detecção de erro de excesso
de tempo da recepção
1 Aconteceu um erro
0 Não aconteceu erro
Bit 0 RX90 Nono bit da recepção; pode ser
o bit de paridade

Na tabela da figura são descritos cada um destes bits e os valores que assumem
para cada uma de suas funções.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  40   
O registro RCSTA
O registro de estado da recepção é 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 autorização ou habilitação da comunicação pela porta serial (pinos
RC6 e RC7).

Como configuraríamos o modo de


comunicação para efetuar uma recepção
contínua em modo síncrono de9 bits, onde
nosso microcontrolador fosse “escravo”?
Devemos configurar o registro TXSTA de
forma que SYNC deve ser os seus bits
configurações da seguinte forma:
SPEN=RX9=CREN=1
SREN=0

O bit RX9 serve para selecionar o número de bits que vamos receber, oito ou
nove. O próximo bit, SREN, determina que só será realizada uma recepção; é
utilizado apenas em modo síncrono quanto o dispositivo está em modo mestre e
se foi selecionado; ao finalizar a recepção o bit passa automaticamente para 0. O
próximo, o CREN, é similar ao que acabamos de ver: habilita a recepção contínua
de dados ao invés de permitir uma única recepção mediante este bit, configura-se
a transmissão para que o microcontrolador esteja continuamente preparado para
receber dados.
O bit ADDEN somente é usado quando a recepção é de 9 bits (RX9=1) e serve
para habilitar a detecção do endereço, uma interrupção e o carregamento do
buffer de recepção. Os dos bits seguintes são bits indicadores de erros na
comunicação: 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
recepção. O último bit do registro, RX9D, será o nono bit da recepção quanto a
comunicação for de 9 bits.
Da mesma forma que no registro de transmissão, na tabela da figura podemos
observar os bits anteriormente descritos e a função que executam, atendendo o
valor que possuem.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  41   
CAPÍTULO 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.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  42   
Passo 2 – Escolher a linguagem de programação, no primeiro momento será
assembly.

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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  43   
Passo 4 – Adicionar um programa ao projeto, escolha o programa e adicione-o,
clicando no botão ADD. Caso não 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 opção são:
A(auto): O MPLAB define o tipo de
caminho automaticamente.
U (usuário): 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
configurações.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  44   
2- Associar um arquivo fonte ao projeto.

a) Clicar com o botão 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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  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 não haja nenhum erro de código ou configuração, aparecerá a seguinte


mensagem: BUILD SUCCEDED.
Atenção: erro de lógico é por sua conta...

Caso contrário à mensagem será: BUILD FAILED.

Neste caso você precisa corrigir o erro e compilar o projeto novamente.

Observação: 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.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  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 memória
1 2 3 4 5 6
6- Checar se a memória está vazia.

A sequência para a gravação é a seguinte: primeiro você deve apagar a memória


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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  47   
5- Testando o código no simulador – Debugger

a) Habilitar o modo de simulação:


Menu Debugger – Select Tool- MPLAB SIM

b) Nova barra de ferramentas

Run – o programa fica em modo de execução.


Halt – pausa
Animate – o programa em modo de animação.
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 conteúdos dos


registradores

Menu View –> Watch


Para adicionar registradores especiais clicar no botão Add SFR e para adicionar
outros registradores clicar no botão Add Symbol.

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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  48   
d) Ferramenta Stimulus – é utilizada para simular uma entrada do MC
Menu – Debugger – Stimulus – New Workbook

Pin / SFR escolher o pino, exe: RB0

Action - ação: Set High = nível 1


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

Fire habilitar a ação

d) Ferramenta Stop Watch é utilizada para verificar o tempo gasto para o PIC
executar as instruções.

Menu – Debugger – Stop Watch

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  49   
Configurar o Clock do Stop Watch.
Menu – Debugger -> Settings
Modificar a frequência do processador para 4MHZ.

Executar o programa até a rotina que gostaria de verificar o tempo gasto pelo
microcontrolador, Clicar no botão 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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  50   
CAPÍTULO 9- Compilador MPLAB C18

O compilador C18 permite gerar código objeto para microcontrolador PIC da


família 18 a partir de códigos fonte escrito em C padrão ANSI.

Instalando o Compilador C18.


Passo 1: Clicar no executável - 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 4: clicar em Next Passo 5: clicar em Next

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  51   
Figura 5 – Selecionar todos os campos Figura 6 – Selecionar todos os campos
Passo 6: clicar em Next Passo 7: clicar em Next

Figura 7 – Selecionar todos os campos


Passo 8: clicar em Next a instalação tem início.

Uma vez terminada a instalação clica em Finish para terminar o processo

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  52   
CAPÍTULO 10 – EXEMPLOS

Esquema Elétrico.1 – Trabalhando com entradas e saídas

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli      53
Início Fluxograma Exercício 1

Configurações
Iniciais
Portas, Option, etc

Botão 1
Pressionado?

Liga LED

Botão 2
Pressionado?

Desliga
LED

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  54   
Exemplo 1: Acionando uma entrada - botão 0 a saída liga e acionado o botão
1 a saída desliga.

;**************************************
;* CONFIGURAÇÕES PARA GRAVAÇÃO
;*
;**************************************

__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF &
_BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC

;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS
;*
;**************************************

CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM

ENDC

;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC *
;*
;**************************************

#include <P16F877A.INC> ; MICROCONTROLADOR UTILIZADO

;**************************************
;* DEFINIÇÃO DOS BANCOS DE RAM *
;* *
;**************************************

#DEFINE BANK1 BSF STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM


#DEFINE BANK0 BCF STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM

;**************************************
;* VETOR DE RESET DO MICROCONTROLADOR *
;* *
;**************************************

ORG 0x000 ; ENDEREÇO DO VETOR DE RESET


GOTO CONFIGURACAO ; PULA PARA CONFIG

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  55   
;**************************************
;* CONFIGURAÇÕES INICIAIS DE HARDWARE E SOFTWARE *
;*
;**************************************

CONFIGURACAO
BANK1 ; SELECIONA BANCO 1 DA RAM

MOVLW B'11110011'
MOVWF TRISB ; CONFIGURA I/O DO PORTB

MOVLW B'11011111'
MOVWF OPTION_REG ; CONFIGURA OPTIONS

MOVLW B'00000000'
MOVWF INTCON ; CONFIGURA INTERRUPÇÕES
; DESABILITADA TODAS AS INTERRUPÇÕES

MOVLW B'00000111'
MOVWF ADCON1 ; CONFIGURA CONVERSOR A/D
; CONFIGURA PORTA COM I/O DIGITAL

BANK0 ; SELECIONA BANCO 0 DA RAM

CLRF PORTB ; ZERA TODAS AS SAÍDAS

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

PRINCIPAL

BTFSS PORTB,0 ; O BOTÃO 0 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_0 ; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS PORTB,1 ; O BOTÃO 1 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_1 ; SIM - PULA P/ TRATA_BOTAO_1
; NAO

GOTO PRINCIPAL ; VOLTA PARA VARRER TECLADO

; ************************* TRATAMENTO DO BOTÃO 0 ***************************


TRATA_BOTAO_0
BSF PORTB,2
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************


TRATA_BOTAO_1
BCF PORTB,2
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

END ; FIM DO PROGRAMA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  56   
Exemplo 2: Nesse exemplo foram atribuídos nomes para os PORT’S, para
facilitar a programação.

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

#DEFINE BOTAO_0 PORTB,0 ; ESTADO DO BOTÃO 0

#DEFINE BOTAO_1 PORTB,1 ; ESTADO DO BOTÃO 1

;**************************************
;* SAÍDAS *
;*
;**************************************
#DEFINE SAIDA_1 PORTB,2 ; ESTADO DO BOTÃO 2

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

PRINCIPAL

BTFSS BOTAO_0 ; O BOTÃO 0 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_0 ; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1 ; O BOTÃO 1 ESTA PRESSIONADO ?


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

; ************************* TRATAMENTO DO BOTÃO 0 ***************************

TRATA_BOTAO_0
BSF SAIDA_1
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************

TRATA_BOTAO_1
BCF SAIDA_1
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

END ; FIM DO PROGRAMA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  57   
Início

Configurações
Fluxograma Exercício 3
Iniciais
Portas, Option, etc

Inicia as variáeis Delay

Tempo2 = W
Sim
Botão 1
Pressionado?
W = 200
Não

Liga LED Tempo1 =200

W = 100

NOP
Delay

Desiga LED NOP

W = 100

Delay Tempo1=0

Sim
Botão 2
Pressionado?
Liga LED Tempo2=0
Não
W = 100

Delay Retorna

Desiga LED

W = 100

Delay

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  58   
Exemplo 3: Oscilador
Acionando o botão 0 a saída 1 oscila com uma frequência de 10HZ ( T=100ms) e
acionando ao botão 1 a saída 1 oscila com uma fequência de 100HZ ( T=10ms)

;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS *
;* *
;**************************************

CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM


TEMPO1
TEMPO2
ENDC

;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC
;* *
;**************************************

#include <P16F877A.INC> ; MICROCONTROLADOR UTILIZADO

;**************************************
;* DEFINIÇÃO DOS BANCOS DE RAM *
;* *
;**************************************

#DEFINE BANK1 BSF STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM


#DEFINE BANK0 BCF STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM

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

#DEFINE BOTAO_0 PORTB,0 ; ESTADO DO BOTÃO 0


#DEFINE BOTAO_1 PORTB,1 ; ESTADO DO BOTÃO 1

;**************************************
;* SAÍDAS *
;*
;**************************************
#DEFINE SAIDA_1 PORTB,2
#DEFINE SAIDA_2 PORTB,3

;**************************************
;* VETOR DE RESET DO MICROCONTROLADOR *
;* *
;**************************************

ORG 0x000 ; ENDEREÇO DO VETOR DE RESET


GOTO CONFIGURACAO ; PULA PARA CONFIG

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  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 INSTRUÇÕES (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 ;INICIA TEMPO 2 COM O VALOR
;PASSADO EM W
DL1
MOVLW .200
MOVWF TEMPO1

DL2 ;ESTE DELAY DURA 1ms (5*200)


NOP
NOP
DECFSZ TEMPO1,F ;DECREMENTA TEMPO1. ACABOU?
GOTO DL2 ;NÃO, CONTINUA AGUARDANDO
;SIM

DECFSZ TEMPO2,F ;DECREMENTA TEMPO2. ACABOU?


GOTO DL1 ;NÃO, CONTINUA AGUARDANDO
;SIM
RETURN

;**************************************
;* CONFIGURAÇÕES INICIAIS DE HARDWARE E SOFTWARE *
;* *
;**************************************

CONFIGURACAO
BANK1 ; SELECIONA BANCO 1 DA RAM

MOVLW B'11110011'
MOVWF TRISB ; CONFIGURA I/O DO PORTB

MOVLW B'11011111'
MOVWF OPTION_REG ; CONFIGURA OPTIONS

MOVLW B'00000000'
MOVWF INTCON ; DESABILITADA TODAS AS INTERRUPÇÕES

MOVLW B'00000111'
MOVWF ADCON1 ; CONFIGURA CONVERSOR A/D
; CONFIGURA PORTA COM I/O DIGITAL

BANK0 ; SELECIONA BANCO 0 DA RAM

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  60   
CLRF PORTB ; ZERA TODAS AS SAÍDAS

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

VARRE
CLRWDT ; LIMPA WATCHDOG TIMER

BTFSS BOTAO_0 ; O BOTÃO 0 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_0 ; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1 ; O BOTÃO 1 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_1 ; SIM - PULA P/ TRATA_BOTAO_1
; NAO

GOTO VARRE ; VOLTA PARA VARRER TECLADO

; ************************* TRATAMENTO DO BOTÃO 0 ***************************

TRATA_BOTAO_0
BSF SAIDA_1 ; LIGA SAIDA 1
MOVLW .100 ; MOVIMENTA 100 PARA W
CALL DELAY ; CHAMA SUBROTINA DELAY
BCF SAIDA_1 ; DESLIGA SAIDA 1
MOVLW .100
CALL DELAY
GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************

TRATA_BOTAO_1
BSF SAIDA_2
MOVLW .10
CALL DELAY
BCF SAIDA_2
CALL DELAY
GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

END ; FIM DO PROGRAMA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  61   
Esquema Elétrico 2 – Trabalhando com Display de 7 segmentos

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli      62
Fluxograma Exercício 4
Início

Configurações
Iniciais
Portas, Option, etc

Sim
Botão 0
Pressionado?

Não PORTD = Simbolo 0


B’00111111'

Habilita DS1
RB7 = 1

Sim
Botão 2
Pressionado?

Não PORTD = Simbolo 0


B’00111111'

Habilita DS2
RB6 = 1

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  63   
Exemplo 4: Trabalhando com Display de 7 segmentos, onde cada botão
acionado carrega um valor no display.

;
;**************************************
; * CONFIGURAÇÕES PARA GRAVAÇÃO *
;**************************************

__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF &
_BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC

;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS *
;**************************************

CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM


ENDC

;**************************************
; DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC *
;**************************************

#include <P16F877A.INC> ; MICROCONTROLADOR UTILIZADO

;**************************************
; * DEFINIÇÃO DOS BANCOS DE RAM *
;**************************************

#DEFINE BANK1 BSF STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM


#DEFINE BANK0 BCF STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM

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

#DEFINE BOTAO_0 PORTB,0 ; ESTADO DO BOTÃO 0


#DEFINE BOTAO_1 PORTB,1 ; ESTADO DO BOTÃO 1
#DEFINE BOTAO_2 PORTB,2 ; ESTADO DO BOTÃO 2
#DEFINE BOTAO_3 PORTB,3 ; ESTADO DO BOTÃO 3

; 1 -> LIBERADO
; 0 -> PRESSIONADO

;**************************************
;* SAÍDAS *
;* *
;**************************************
#DEFINE DIS1 PORTB,7
#DEFINE DIS2 PORTB,6
#DEFINE DIS3 PORTB,5
#DEFINE DIS4 PORTB,4

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  64   
;**************************************
;* VETOR DE RESET DO MICROCONTROLADOR *
;**************************************

ORG 0x000 ; ENDEREÇO DO VETOR DE RESET


GOTO CONFIGURACAO ; PULA PARA CONFIG

;**************************************
; * CONFIGURAÇÕES INICIAIS DE HARDWARE E SOFTWARE *
;**************************************

CONFIGURACAO
BANK1 ; SELECIONA BANCO 1 DA RAM

MOVLW B'00001111'
MOVWF TRISB ; CONFIGURA I/O DO PORTB

MOVLW B'00000000'
MOVWF TRISD ; CONFIGURA I/O DO PORTB

MOVLW B'11011111'
MOVWF OPTION_REG ; CONFIGURA OPTIONS

MOVLW B'00000000'
MOVWF INTCON ; CONFIGURA INTERRUPÇÕES
; DESABILITADA TODAS AS INTERRUPÇÕES

MOVLW B'00000111'
MOVWF ADCON1 ; CONFIGURA CONVERSOR A/D
; CONFIGURA PORTA COM I/O DIGITAL

BANK0 ; SELECIONA BANCO 0 DA RAM

CLRF PORTB ; ZERA TODAS AS SAÍDAS


CLRF PORTD ; ZERA TODAS AS SAÍDAS

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

PRINCIPAL

BTFSS BOTAO_0 ; O BOTÃO 0 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_0 ; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1 ; O BOTÃO 1 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_1 ; SIM - PULA P/ TRATA_BOTAO_1
; NAO

GOTO PRINCIPAL ; VOLTA PARA VARRER TECLADO

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  65   
; ************************* TRATAMENTO DO BOTÃO 0 ***************************

TRATA_BOTAO_0
MOVLW B'00111111' ; SÍMBOLO 0
MOVWF PORTD
MOVLW B'10000000' ; DISPLAY 1
MOVWF PORTB
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************

TRATA_BOTAO_1
MOVLW B'00000110' ; SÍMBOLO 1
MOVWF PORTD
MOVLW B'01000000' ; DISPLAY 2
MOVWF PORTB
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

END ; FIM DO PROGRAMA

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

Tabela do Display de 7 segmentos


; a
; **********
; * *
; f* *b
; * g *
; **********
; * *
; e* *c
; * d *
; ********** *.

'PGFEDCBA' ; POSIÇÃO CORRETA DOS SEGUIMENTOS

B'00111111' ; 00 SÍMBOLO CORRETO 0


B'00000110' ; 01 SÍMBOLO CORRETO 1
B'01011011' ; 02 SÍMBOLO CORRETO 2
B'01001111' ; 03 SÍMBOLO CORRETO 3
B'01100110' ; 04 SÍMBOLO CORRETO 4
B'01101101' ; 05 SÍMBOLO CORRETO 5
B'01111101' ; 06 SÍMBOLO CORRETO 6
B'00000111' ; 07 SÍMBOLO CORRETO 7
B'01111111' ; 08 SÍMBOLO CORRETO 8
B'01101111' ; 09 SÍMBOLO CORRETO 9
B'01110111' ; 10 SÍMBOLO CORRETO A
B'01111100' ; 11 SÍMBOLO CORRETO b
B'00111001' ; 12 SÍMBOLO CORRETO C
B'01011110' ; 13 SÍMBOLO CORRETO d
B'01111001' ; 14 SÍMBOLO CORRETO E
B'01110001' ; 15 SÍMBOLO CORRETO F

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  66   
Início

Fluxograma Exercício 5

Configurações
Iniciais Rotação
Portas, Option, etc

Habilita DS1
RB7 = 1

Sim
Delay
Botão 0
Pressionado?

Habilita DS2
Não PORTD = Simbolo 0 RB6 = 1
B’00111111'

Delay

Rotação
Habilita DS3
RB5 = 1

Delay

Sim
Botão 2
Pressionado? Habilita DS4
RB4 = 1
Não PORTD = Simbolo 0
B’00111111'
Delay

Rotação Retorna

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  67   
Exemplo 5: Multiplexação dos Displays de 7 segmentos.

Observação: toda a configuração continua a mesma, portanto, segue abaixo


apenas o programa principal.

PRINCIPAL

BTFSS BOTAO_0 ; O BOTÃO 0 ESTA PRESSIONADO ?


GOTO TRATA_BOTAO_0 ; SIM - PULA P/ TRATA_BOTAO_0
; NAO

BTFSS BOTAO_1 ; O BOTÃO 1 ESTA PRESSIONADO ?


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

; ************************* TRATAMENTO DO BOTÃO 0 ***************************


TRATA_BOTAO_0
MOVLW B'00111111' ; SÍMBOLO 0
MOVWF PORTD
CALL ROTAÇÃO
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************


TRATA_BOTAO_1
MOVLW B'00000110' ; SÍMBOLO 1
MOVWF PORTD
CALL ROTAÇÃO
GOTO PRINCIPAL ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* MULTIPLEXAÇÃO DO DISPLAY ***************************


ROTAÇÃO

MOVLW B'10000000' ; DISPLAY 1


MOVWF PORTB
MOVLW .200
CALL DELAY

MOVLW B'01000000' ; DISPLAY 2


MOVWF PORTB
MOVLW .200
CALL DELAY

MOVLW B'00100000' ; DISPLAY 3


MOVWF PORTB
MOVLW .200
CALL DELAY

MOVLW B'00010000' ; DISPLAY 4


MOVWF PORTB
MOVLW .200
CALL DELAY

RETURN
END ; FIM DO PROGRAMA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  68   
Esquema Elétrico 3 – Trabalhando com Display LCD e Conversor AD

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli      69
Início
Fluxograma Exercício 6

Configurações Iniciais

Inicializa as variáveis

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

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  70   
1

Trata botão 0

Sim
Não
Botão 0
Trata botão 0
Pressionado? Terminou o
Filtro?
Não
Sim 1

Sim
Botão 1 Seleciona Display
Trata botão 1
Pressionado? para comandos

Não

Envia comando p/
limpar display
Sim
Botão 2Não
Trata botão 2
Pressionado? Posiciona o
cursor na linha 0
coluna 0
Não

Sim Seleciona Display


para dados
Botão 3
Trata botão 3
Pressionado?

Não
Escreve “Botao o”

Não
Mostrar
tela principal?

Seta FLAG p/
Sim mostrar tela
principal

Mostrar tela
principal
1

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  71   
Trata botão 1 Trata botão 2 Trata botão 3

Terminou o Terminou o Terminou o


Filtro? Filtro? Filtro?

Sim 1 Sim 1 Sim 1

Seleciona Display Seleciona Display Seleciona Display


para comandos para comandos para comandos

Envia comando p/ Envia comando p/ Envia comando p/


limpar display limpar display limpar display

Posiciona o Posiciona o Posiciona o


cursor na linha 0 cursor na linha 1 cursor na linha 1
coluna 8 coluna 0 coluna 8

Seleciona Display Seleciona Display Seleciona Display


para dados para dados para dados

Escreve “Botao 1” Escreve “Botao 2” Escreve “Botao 3”

Seta FLAG p/ Seta FLAG p/ Seta FLAG p/


mostrar tela mostrar tela mostrar tela
principal principal principal

1 1 1

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  72   
Mostra tela
Escreve
principal

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

Envia pulso de ENABLE


Envia comando p/ limpar display
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 botão”

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  73   
Exemplo 6: Trabalhando com o Display LCD
;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS *
;**************************************

CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM


TEMPO1
TEMPO0 ; CONTADORES P/ DELAY
FILTRO_BOTOES ; FILTRO PARA RUIDOS
FLAG ; FLAG DE USO GERAL
TEMPO3
SEGA
SEGB
SEGC
ENDC

;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC *
;**************************************
#INCLUDE <P16F877A.INC> ; MICROCONTROLADOR UTILIZADO

;**************************************
;* DEFINIÇÃO 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 DEFINIÇÃO DE CONSTANTES FACILITA A PROGRAMAÇÃO E A MANUTENÇÃO.

FILTRO_TECLA EQU .200 ; FILTRO P/ EVITAR RUIDOS DOS BOTÕES

;**************************************
;* DECLARAÇÃO 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 ; ESTADO DO BOTÃO 0
#DEFINE BOTAO_1 PORTB,1 ; ESTADO DO BOTÃO 1
#DEFINE BOTAO_2 PORTB,2 ; ESTADO DO BOTÃO 2
#DEFINE BOTAO_3 PORTB,3 ; ESTADO DO BOTÃO 3
; 1 -> LIBERADO
; 0 -> PRESSIONADO

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  74   
;**************************************
;* SAÍDAS *
;**************************************

#DEFINE DISPLAY PORTD ; BARRAMENTO DE DADOS DO DISPLAY


#DEFINE RS PORTE,0 ; Selecionar UM DADO OU COMANDO
; 1 -> DADO ; 0 -> COMANDO

#DEFINE ENABLE PORTE,1


; SINAL DE ENABLE ,ATIVO NA BORDA DE DESCIDA

;**************************************
;* VETOR DE RESET DO MICROCONTROLADOR *
;**************************************
ORG 0X0000 ; ENDEREÇO DO VETOR DE RESET
GOTO CONFIGURACAO ; PULA PARA CONFIG DEVIDO A REGIÃO

;**************************************
;* 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 ; LIMPA WDT (PERDE TEMPO)


DECFSZ TEMPO0,F ; FIM DE TEMPO0 ?
GOTO $-2 ; NÃO - VOLTA 2 INSTRUÇÕES
; SIM - PASSOU-SE 1MS
DECFSZ TEMPO1,F ; FIM DE TEMPO1 ?
GOTO $-6 ; NÃO - VOLTA 6 INSTRUÇÕES
; SIM
RETURN ; RETORNA

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

MOVWF TEMPO3
PULO4
MOVLW 0X05
MOVWF SEGA
PULO3
MOVLW 0XFF
MOVWF SEGB
PULO2
MOVLW 0XFF
MOVWF SEGC
PULO1
DECFSZ SEGC,F
GOTO PULO1

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  75   
DECFSZ SEGB,F
GOTO PULO2

DECFSZ SEGA,F
GOTO PULO3

DECFSZ TEMPO3
GOTO PULO4

RETURN

;**************************************
; * ROTINA DE ESCRITA DE UM CARACTER NO DISPLAY *
;**************************************
; ESTA ROTINA ENVIA UM CARACTER PARA O MÓDULO DE LCD. O CARACTER A SER
; ESCRITO DEVE SER COLOCADO EM WORK (W) ANTES DE CHAMAR A ROTINA.

ESCREVE
MOVWF DISPLAY ; ATUALIZA DISPLAY (PORTD)
NOP ; PERDE 1US PARA ESTABILIZAÇÃO
BSF ENABLE ; ENVIA UM PULSO DE ENABLE AO DISPLAY
GOTO $+1 .
BCF ENABLE .
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS
RETUR ; RETORNA

;**************************************
;* 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 RS ; SELECIONA O DISPLAY P/ COMANDOS


MOVLW 0X01 ; ESCREVE COMANDO PARA
CALL ESCREVE ; LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0X83 ; COMANDO PARA POSICIONAR O CURSOR


CALL ESCREVE ; LINHA 0 / COLUNA 3
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS


; LETRAS DE "Selecione"
MOVLW 'S'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW 'l'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  76   
MOVLW 'c'
CALL ESCREVE
MOVLW 'i'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'n'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS


MOVLW 0XC4 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 2 / COLUNA 5
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS


; LETRAS DE "um botao"
MOVLW 'u'
CALL ESCREVE
MOVLW 'm'
CALL ESCREVE
MOVLW ''
CALL ESCREVE
MOVLW 'b
CALL ESCREVE
MOVLW 'o
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'a'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE

RETURN

;**************************************
;* CONFIGURAÇÕES INICIAIS DE HARDWARE E SOFTWARE *
;**************************************

CONFIGURACAO
CLRF PORTA ; GARANTE AS SAÍDAS EM ZERO
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE

BANK1 ; SELECIONA BANCO 1 DA RAM

MOVLW B'11011111'
MOVWF TRISA ; CONFIGURA I/O DO PORTA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  77   
MOVLW B'11111111'
MOVWF TRISB ; CONFIGURA I/O DO PORTB

MOVLW B'11111111'
MOVWF TRISC ; CONFIGURA I/O DO PORTC

MOVLW B'00000000'
MOVWF TRISD ; CONFIGURA I/O DO PORTD

MOVLW B'00000100'
MOVWF TRISE ; CONFIGURA I/O DO PORTE

MOVLW B'11011111'
MOVWF OPTION_REG ; CONFIGURA OPTIONS
; PULL-UPs DESABILITADOS
; INTER. NA BORDA DE SUBIDA DO RB0
; TIMER0 INCREM. PELO CICLO DE MÁQUINA
; WDT - 1:128
; TIMER - 1:1

MOVLW B'00000000'
MOVWF INTCON ; CONFIGURA INTERRUPÇÕES
; DESABILITADA TODAS AS INTERRUPÇÕES

MOVLW B'00000111'
MOVWF ADCON1 ; CONFIGURA CONVERSOR A/D
; CONFIGURA PORTA E PORTE COM I/O DIGITAL

BANK0 ; SELECIONA BANCO 0 DA RAM

;**************************************
;* INICIALIZAÇÃO DA RAM *
;**************************************
; ESTA ROTINA IRÁ LIMPAR TODA A RAM DO BANCO 0, INDO DE 0X20 A 0X7F.
; EM SEGUIDA, AS VARIÁVEIS DE RAM DO PROGRAMA SÃO INICIALIZADAS.

MOVLW 0X20
MOVWF FSR ; APONTA O ENDEREÇAMENTO INDIRETO PARA
; A PRIMEIRA POSIÇÃO DA RAM
LIMPA_RAM
CLRF INDF ; LIMPA A POSIÇÃO
INCF FSR,F ; INCREMENTA O PONTEIRO P/ A PRÓX. POS.
MOVF FSR,W
XORLW 0X80 ; COMPARA O PONTEIRO COM A ÚLT. POS. +1
BTFSS STATUS,Z ; JÁ LIMPOU TODAS AS POSIÇÕES?
GOTO LIMPA_RAM ; NÃO - LIMPA A PRÓXIMA POSIÇÃO
; SIM

BSF TELA_PRINCIPAL ; INICIALIZA MOSTRANDO TELA PRINCIPAL

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  78   
;**************************************
;* CONFIGURAÇÕES INICIAIS DO DISPLAY *
;**************************************
; ESTA ROTINA INICIALIZA O DISPLAY P/ COMUNICAÇÃO DE 8 VIAS, DISPLAY PARA 2
; LINHAS, CURSOR APAGADO E DESLOCAMENTO DO CURSOR À DIREITA.

INICIALIZACAO_DISPLAY
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS

MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA


CALL ESCREVE ; INICIALIZAÇÃO

MOVLW .3
CALL DELAY_MS ; DELAY DE 3MS (EXIGIDO PELO DISPLAY)

MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA


CALL ESCREVE ; INICIALIZAÇÃO

MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA


CALL ESCREVE ; INICIALIZAÇÃO

MOVLW B'00111000' ; ESCREVE COMANDO PARA


CALL ESCREVE ; INTERFACE DE 8 VIAS DE DADOS

MOVLW B'00000001' ; ESCREVE COMANDO PARA


CALL ESCREVE ; LIMPAR TODO O DISPLAY

MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW B'00001100' ; ESCREVE COMANDO PARA


CALL ESCREVE ; LIGAR O DISPLAY SEM CURSOR

MOVLW B'00000110' ; ESCREVE COMANDO PARA INCREM.


CALL ESCREVE ; AUTOMÁTICO À DIREITA

BSF RS ; SELECIONA O DISPLAY P/ DADOS

;**************************************
;* VARREDURA DOS BOTÕES *
;* LOOP PRINCIPAL *
;**************************************
; A ROTINA PRINCIPAL FICA CHECANDO O ESTADO DOS BOTÕES. CASO ALGUM SEJA
; PRESSIONADO, A ROTINA DE TRATAMENTO DO BOTÃO É CHAMADA.

VARRE
CLRWDT ; LIMPA WATCHDOG TIMER

BTFSS BOTAO_0 ; O BOTÃO 0 ESTÁ PRESSIONADO ?


GOTO TRATA_BOTAO_0 ; SIM - PULA P/ TRATA_BOTAO_0
; NÃO

BTFSS BOTAO_1 ; O BOTÃO 1 ESTÁ PRESSIONADO ?


GOTO TRATA_BOTAO_1 ; SIM - PULA P/ TRATA_BOTAO_1
; NÃO

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  79   
BTFSS BOTAO_2 ; O BOTÃO 2 ESTÁ PRESSIONADO ?
GOTO TRATA_BOTAO_2 ; SIM - PULA P/ TRATA_BOTAO_2
; NÃO

BTFSS BOTAO_3 ; O BOTÃO 3 ESTÁ PRESSIONADO ?


GOTO TRATA_BOTAO_3 ; SIM - PULA P/ TRATA_BOTAO_3
; NÃO

MOVLW FILTRO_TECLA ; WORK = O VALOR DE FILTRO_TECLA


MOVWF FILTRO_BOTOES ; SALVA EM FILTRO_BOTOES
; RECARREGA FILTRO P/ EVITAR RUIDOS

BTFSS TELA_PRINCIPAL ; DEVE MOSTRAR TELA PRINCIPAL ?


GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM
CALL MOSTRA_TELA_PRINCIPAL
GOTO VARRE ; VOLTA PARA VARRER TECLADO

; ************************* TRATAMENTO DO BOTÃO 0 ***************************


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

DECFSZ FILTRO_BOTOES,F ; FIM DO FILTRO ? (RUIDO?)


GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 0

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS


MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0X80 ; COMANDO PARA POSICIONAR O CURSOR


CALL ESCREVE ; LINHA 0 / COLUNA 0
BSF RS ; SELECIONA O DISPLAY P/ DADOS

MOVLW 'B'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'a'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW ''
CALL ESCREVE
MOVLW '0'
CALL ESCREVE

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  80   
BSF TELA_PRINCIPAL ; SETA FLAG P/ MOSTRAR TELA PRINCIPAL

GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************

TRATA_BOTAO_1
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z ; FILTRO JÁ IGUAL A ZERO ?
GOTO VARRE ; SIM - VOLTA P/ VARREDURA DO TECLADO
; NÃO

DECFSZ FILTRO_BOTOES,F ; FIM DO FILTRO ? (RUIDO?)


GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 1

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS


MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0X88 ; COMANDO PARA POSICIONAR O CURSOR


CALL ESCREVE ; LINHA 0 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

MOVLW 'B'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'a'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW ''
CALL ESCREVE
MOVLW '1'
CALL ESCREVE

BSF TELA_PRINCIPAL ; SETA FLAG P/ MOSTRAR TELA PRINCIPAL

GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

END ; FIM DO PROGRAMA

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  81   
CAPÍTUO 11- Linguagem C MPLAB C18

O MPLAB C18 é um copilador C destinado aos microcontroladores da família


PIC18. Ele possui compatibilidade com o padrão ANSI (American National
Standards Institute).

1- Comentários
// comentário de uma única linha.
/* comentário */ comentário de múliplas linhas.

2- Identificadores – variáveis

Em um programa não é permitido identifadores com o mesmo nome.


Todo identificador começa com uma letra ou um caractere.
Somente os 31 primeiros caracteres são relevantes.

3- Tipos de dados

Tipos de dados inteiros

Tipos de dados ponto decimal flutuante

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  82   
4- Declaração de variáveis e constantes

Exemplo
Char teste, aluno; \\ 2 variáveis tipo char
Int temperatura; \\ variável tipo inteiro
Unsigned int dado = 100; \\ variável tipo inteiro e valor inicial de 100
Float pi = 3.14; \\ variável tipo float e valor inicial de 3,14

Const unsigned int valor = 10 \\ constante inteira igual a 10

5- Representação dos dados numéricos

Base numérica Valor


0b00001111 Binário
0x10 Hexadecimal
20 Decimal

6 Operadores
Aritméticos

Operador Operação
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão
++ Incremento
-- Decremento

Relacionais
Operador Operação
== Igual a
!= Diferente
> Maior que
>= Maior ou igual a
< Menor que
<= Menor ou igual a

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  83   
Lógicos

Operador Operação
&& AND
|| OR
! Not

Bit a Bit
Operador Operação
& AND
| OR
^ XOR
~ NOT (inverte o estado dos bits)
>> Deslocamento de bit(s) à direita
<< Deslcocamento de bit(s) à esquerda

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  84   
Projeto Integrador

Lista de Materiais – Placa de Desenvolvimento de Microcontrolador PIC

Item Quant Especificação Aplicação no


circuito
01 01 PIC 16F877A Processador
02 01 CI ULN2003 Driver de 500mA
03 01 CI LM358 entrada analógica
04 01 CI MAX232 Comunicação serial
05 02 Soquete torneado 40 pinos
06 02 Soquete torneado 16 pinos
07 01 Cristal de 4MHZ
08 02 Capacitor cerâmico de 33pF
09 05 Capacitor eletrolitico de 1μF x 16V
10 10 Resistor de 10K
11 10 Resistor de 330R
12 01 Resistor de 470R
13 01 Resistor de 4K7
14 06 Mini botões -
15 02 Conector para PCI de 8 vias Conexão externa
16 01 Concector RJ 11 fêmea para PCI Gravação in circuit
Com 6 pinos
17 01 Trimpot de 10K
18 01 Placa Perfurada universal para
montagem do circuito 100x150mm
19 01 LCD 16 X2
20 01 7805
21 08 LED – 3mm
22 01 Conector para fonte
23 01 Base de fusível com fusível de 0,5A

Procedimento para testar a placa

1. Retirar todos os CI’s dos soquetes.


2. Testar a continuidade nas trilhas e verificar possíveis curtos.
3. Alimentar a placa (Durante todo o teste o LED de alimentação deverá permanecer
aceso).
4. Verificar a tensão nos terminais dos CI’s. ( 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 tensão entre o terminal 5V e o pino 33, ao acionar cada botão a tensão
O multímetro deverá indicar uma tensão de 5V. Repetir o teste para os demais
terminais 34, 35, 36 e 37.

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  85   
Projeto Integrador : Placa de simulação para microcontrolador PIC 16F877A

Desenho realizado pela aluna Juliana A. Galindo Pereira

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli      86
Tabela de caracteres ASCII imprimíveis
Decimal Caractere Decimal Caractere

32 espaço 80 P
59 ; 107 k
33 ! 81 Q
60 < 108 l
34 " 82 R
61 = 109 m
35 # 83 S
62 > 110 n
36 $ 84 T
63 ? 111 o
37 % 85 U
64 @ 112 p
38 & 86 V
65 A 113 q
39 ' 87 w
66 B 114 r
40 ( 88 X
67 C 115 s
41 ) 89 Y
68 D 116 t
42 * 90 Z

69 E 117 u
43 + 91 [
70 F 118 v
44 , 92 \
71 G 119 w
45 - 93 ]
72 H 120 x
46 . 94 ^
73 I 121 y
47 / 95 _
74 J 122 z
48 0 96 `
75 K 123 {
49 1 97 A
76 L 124 |
50 2 98 b
77 M 125 }
51 3 99 c
78 N 126 ~
52 4 100 d
79 O 127 DEL
53 5 101 e

54 6 102 f

55 7 103 g

56 8 104 h

57 9 105 i

58 : 106 j

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  87   
Simulação 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 diretório (mesma pasta) que o projeto do MPLAB.

5- Simular clicando no Play

Anotações de Aula – Microcontroladores                  Prof Nilton Serigioli  88   

Você também pode gostar