126
antónio sérgio sena microcontroladores PIC - Exemplos práticos e exercícios

AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

  • Upload
    others

  • View
    43

  • Download
    15

Embed Size (px)

Citation preview

Page 1: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

antó

nio

sérg

io s

ena

microcontroladoresPIC

-Exemplos práticos e exercícios

Page 2: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

antó

nio

sérg

io s

ena

microcontroladoresPIC

-Exemplos práticos e exercícios

Page 3: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 3

Índice de Conteúdos

Registo Temporário W ................................................................................................................3

Confi guração das portas do PIC .................................................................................................5

Activação dos pinos da porta B ...................................................................................................7

Activação dos pinos da porta B, 2 .............................................................................................10

Conversão numérica, Tabelas ....................................................................................................14

Conversão numérica, Tabelas 2 .................................................................................................15

Conversão numérica, Tabelas 3 .................................................................................................17

Endereçamento Indirecto da RAM ..........................................................................................19

Endereçamento Indirecto da RAM, 2 ......................................................................................20

Rotinas de atraso, Temporizadores ...........................................................................................22

Rotinas de atraso, Temporizadores, 2 .......................................................................................24

Rotinas de atraso, Temporizadores, 3 .......................................................................................27

Contador ......................................................................................................................................30

Contador, 2 ..................................................................................................................................34

Contador, 3 ..................................................................................................................................37

Conversão de valores, Tabelas, 7-segmentos ............................................................................40

Conversão de valores, Tabelas, 2 ...............................................................................................43

Conversão de valores, Tabelas, 3 ...............................................................................................47

Conversão de valores, Tabelas, 4 ...............................................................................................50

Conversão de valores, Tabelas, 5 ...............................................................................................55

Conversão de valores, Tabelas, 6 ...............................................................................................61

PWM ...........................................................................................................................................67

PWM, 2 .......................................................................................................................................70

Interrupções .................................................................................................................................73

Interrupções, 2.............................................................................................................................76

Page 4: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 4

LCD .............................................................................................................................................79

LCD, 2 .........................................................................................................................................82

LCD, 3 .........................................................................................................................................86

Biblioteca para o LCD ................................................................................................................91

EUSART - Porta Série ..............................................................................................................95

EUSART - Porta Série, 2 ..........................................................................................................98

EUSART - Porta Série, 3 ....................................................................................................... 102

EUSART - Porta Série, 4 ....................................................................................................... 106

Comparadores .......................................................................................................................... 109

Comparadores, 2 ...................................................................................................................... 112

Conversor A/D ........................................................................................................................ 115

Conversor A/D, 2 .................................................................................................................... 118

Page 5: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 5

Registo Temporário W

Este programa faz o carregamento do Registo Temporário W.

Fluxograma do programa

Exem

plo 1

Page 6: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 6

Código fonte do programa

;#################################################################################

; Este programa faz o carregamento do Registo Temporário W, PIC16F886

; v1.0 01/02/2004

; Autor: António Sérgio Sena, www.senaeng.com

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

;------------------------

inicio ;INICIO do programa

movlw 0x0F ;carrega W com o valor 0x0F

movlw 0x0A ;carrega W com o valor 0x0A

movlw 0x0D ;carrega W com o valor 0x0D

movlw 0x04 ;carrega W com o valor 0x04

movlw 0x33 ;carrega W com o valor 0x33

goto inicio

;------------------------

end

Exem

plo 1

Page 7: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 7

Confi guração das portas do PIC

Este programa faz a confi guração das portas do PIC.É auxiliado fazendo a mudança de bancos de memória, tendo acesso directo aos registos de confi guração.

Fluxograma do programa

Exem

plo 2

Page 8: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 8

Código fonte do programa;#################################################################################

; Este programa faz a confi guração das portas do PIC, fazendo a mudança de

; bancos de memória

; v1.0 01/02/2008 PIC16F886

; Autor: António Sérgio Sena, www.senaeng.com

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

;---------------------------

status equ 0x03 ;defi ne endereco 0x03 com o nome de STATUS

trisb equ 0x86 ;defi ne endereco 0x86 com o nome de TRISB

;---------------------------

inicio ;INICIO do programa

bsf status,5 ;activa bit 5 do registo STATUS, BANCO 1

movlw 0x02 ;carrega W com o 0x02

movwf trisb ;move de W para TRISB

bcf status,5 ;desactiva bit 5 do registo STATUS, BANCO 0

bsf status,5 ;activa bit 5 do registo STATUS , BANCO 1

movlw 0xF0 ;carrega W como 0xF0

movwf trisb ;move de W para TRISB

bcf status,5 ;desactiva bit 5 do registo STATUS, BANCO 0

goto inicio ;retorna ao label INICIO

;---------------------------

end

Exem

plo 2

Page 9: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 9

Activação dos pinos da porta B

Este programa activa os pinos da porta B, consoante o valor que lhe é carregado no registo PORTB.

Fluxograma do programa

Exem

plo 3

Page 10: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 10

Esquema eléctrico

Exem

plo 3

Page 11: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 11

Código fonte do programa;#################################################################################

; Este programa activa os pinos da porta B, consoante o valor que lhe é carregado

; v1.0 01/02/2008 PIC16F886; Autor: António Sérgio Sena, www.senaeng.com;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000 ;aponta para o endereço de memoria 0x0000 principal ;INICIO do programa ;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA movlw 0x00 ;carrega W como 0x00 - 0=output e 1=input movwf TRISA ;move de W para TRISA movlw 0x00 ;carrega W como 0x00 movwf TRISB ;move de W para TRISB movlw 0x00 ;carrega W como 0x00 movwf TRISC ;move de W para TRISC banksel PORTB ;retorna ao banco 0

movlw 0xFF ;carrega W com o 0xFF bin: 1111 1111 movwf PORTB ;move de W para PORTB; movlw 0x44 ;carrega W com o 0x44 bin: 0100 0100; movwf PORTB ;move de W para PORTB

loop goto loop ;retorna ao INICIO ;--------------------------- end

Exem

plo 3

Page 12: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 12

Activação dos pinos da porta B, 2(com pressão de tecla no pino RA0)

Este programa activa os pinos da porta B, consoante o valor que lhe é carregado no registo PORTB, quando a tecla que está ligada no pino RA0 é premida.

Fluxograma do programa

Exem

plo 4

Page 13: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 13

Esquema eléctrico

Exem

plo 4

Page 14: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 14

Código fonte do programa;#################################################################################

; Este programa activa todos os pinos da porta B, quando a tecla da entrada

; RA0 está premida

; v1.0 01/02/2008 PIC16F886

; Autor: António Sérgio Sena, www.senaeng.com

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000 ;aponta para o endereço de memoria 0x0000

principal ;INICIO do programa

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x01 ;carrega W com o 0x01

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W com o 0x00

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com o 0x00

movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

apagar

clrf PORTB ;desliga toda a porta B

inicio

btfsc PORTA, 0 ;testa se a tecla em RA0 está premida

goto apagar ; não

Exem

plo 4

Page 15: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 15

;sim

movlw 0xFF ;carrega W com 0xFF (activa todos os pinos b’11111111’)

movwf PORTB ;move de W para PORTB

goto inicio ;retorna ao INICIO

;---------------------------

end

Exem

plo 4

Page 16: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 16

Conversão numérica, Tabelas

Este programa converte de um valor numérico para outro valor numérico, através do uso de tabelas.

Código fonte do programa;#################################################################################

; Este programa converte de um valor numérico para outro valor numérico,

; através do uso de tabelas

; v1.0 01/02/2008 PIC16F886

; Autor: António Sérgio Sena, www.senaeng.com

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “p16f886.inc”

;---------------------------

inicio

movlw 0x00 ;carrega W com 0

call tabela ;chama a subrotina da tabela, para converter o valor

movlw 0x04 ;carrega W com 4

call tabela ;chama a subrotina da tabela, para converter o valor

goto inicio

;---------------------------

; org 0x00fe ;endereco onde está a TABELA

tabela

addwf PCL, f ;adiciona W ao Program Counter - Contador de Programa

retlw ‘s’ ;caracter ASCII “s”

retlw ‘e’

retlw ‘n’

retlw ‘a’

retlw ‘e’

retlw ‘n’

retlw ‘g’

;---------------------------

end

Exem

plo 5

Page 17: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 17

Conversão numérica, Tabelas 2

Este programa converte de um valor numérico para outro valor numérico, através do uso de tabelas.Resolve o problema de saltos de mais de 8 bits.

Código fonte do programa;#################################################################################

;

; Este programa converte de um valor numérico para outro valor numérico,

; através do uso de tabelas.

; Resolve o problema de saltos de mais de 8 bits.

;

; v1.0 01/02/2008 PIC16F886

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

;---------------------------

pcl equ 0x02 ;defi ne endereco 0x02 com o nome de PCL

pclath equ 0x0a ;defi ne endereco 0x0A com o nome de PCLATH

;---------------------------

inicio

movlw HIGH tabela ;carrega W com byte alto do endereco da TABELA

movwf pclath ;move de W para PCLATH

movlw 0x01 ;carrega W com 0

call tabela ;chama a subrotina da tabela, para converter

fi m goto fi m

;---------------------------

; org 0x01aa ;endereco onde estah a TABELA

org 0x00ff

Exem

plo 6

Page 18: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 18

tabela

addwf PCL, f ;adiciona W ao Program Counter - Contador de Programa

retlw ‘s’ ;caracter ASCII “s”

retlw ‘e’

retlw ‘n’

retlw ‘a’

retlw ‘e’

retlw ‘n’

retlw ‘g’

;---------------------------

end

Exem

plo 6

Page 19: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 19

Conversão numérica, Tabelas 3

Este programa converte de um valor numérico para outro valor numérico, através do uso de tabelas.Resolve o problema de saltos de mais de 8 bits.

Código fonte do programa;#################################################################################

;

; Este programa converte de um valor numérico para outro valor numérico,

; através do uso de tabelas.

; Resolve o problema de saltos de mais de 8 bits.

;

; v1.0 01/02/2008 PIC16F886

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

;---------------------------

offset equ 0x20 ;defi ne endereco 0x20 com o nome de OFFSET

;---------------------------

clrf offset ;limpa registo OFFSET

inicio

movlw 0x03 ;carrega W com valor que se pretende retirar da TABELA

movwf offset ;move valor de W para registo OFFSET

movlw LOW tabela ;carrega W com byte baixo do endereco da TABELA

addwf offset, w ;adiciona ao registo OFFSET e coloca o resultado em W,

; para verifi car se a aritmetica de adicao infl uenciou

; o bit de CARRY no registo STATUS

movlw HIGH tabela ;carrega W com byte alto do endereco da TABELA

btfsc STATUS, 0 ;testa o bit de Carry, no STATUS, para verifi car se

; houve salto de Ex.: 0xFF para 0x100

addlw 1 ;Carry activo, entao incrementa W em uma unidade

Exem

plo 7

Page 20: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 20

movwf PCLATH ;move valor de W para PCLATH

movf offset, w ;move valor de OFFSET para o W

call tabela ;chama a subrotina da tabela, para converter

fi m goto fi m

;---------------------------

org 0x02fd ;endereco onde estah a TABELA

; org 0x01fe

tabela

addwf PCL, f ;adiciona W ao Program Counter - Contador de Programa

retlw ‘s’ ;caracter ASCII “s”

retlw ‘e’

retlw ‘n’

retlw ‘a’

retlw ‘e’

retlw ‘n’

retlw ‘g’

;---------------------------

end

Exem

plo 7

Page 21: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 21

Endereçamento Indirecto da RAM

Este programa faz a exemplifi cação do endereçamento indirecto da memória RAM.

Código fonte do programa;#################################################################################

;

; Este programa faz a exemplifi cação do endereçamento indirecto da memória RAM

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

;---------------------------

inicio ;INICIO do programa

movlw 0x20 ;carrega W com 0x20

movwf FSR ;coloca ponteiro na primeira posicao de RAM

volta

movlw 0x01 ;carrega W com 0x01

movwf INDF ;move de W para INDF

incf FSR, f ;incrementa ponteiro de posicao de RAM

goto volta ;retorna ao INICIO

;---------------------------

end ;fi m de programa

Exem

plo 8

Page 22: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 22

Endereçamento Indirecto da RAM, 2

Este programa faz a limpeza da RAM, através do endereçamento indirecto

Código fonte do programa;#################################################################################

;

; Este programa faz a limpeza da RAM, através do endereçamento indirecto

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

;---------------------------

inicio ;INICIO do programa

movlw 0x20 ;carrega W com 0x20

movwf FSR ;coloca ponteiro na primeira posição de RAM a ser usada

volta

clrf INDF ;limpa registo INDF, registo na RAM endereçado pelo FSR

incf FSR, f ;incrementa ponteiro de posição na RAM

;As quatro linhas seguintes, verifi cam se chegou ao fi m do banco de RAM.

;Subtrai o número correspondente à ultima posicao de RAM, e verifi ca se

; o bit Z (zero) do registo de STATUS foi alterado

movlw 0x70 ;carrega W com 0x70

subwf FSR, w ;subtrai valor em W ao FSR

btfss STATUS, Z ;testa se o resultado é igual a 0

goto volta ;ainda não

Exem

plo 9

Page 23: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 23

;sim, é igual a 0

fi m goto fi m ;ciclo infi nito...

;---------------------------

end ;fi m de programa

Exem

plo 9

Page 24: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 24

Rotinas de atraso, Temporizadores

Este programa faz um atraso de 1ms por rotinas de software.

Código fonte do programa;#################################################################################

;

; Este programa faz um atraso de 1ms por software

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMP

;---------------------------

inicio

call atraso_500u ;chama rotina de atraso

call atraso_500u ;chama rotina de atraso

goto inicio ;faz temporizacao de novo

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA5

movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1

Exem

plo 10

Page 25: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 25

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 10

Page 26: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 26

Rotinas de atraso, Temporizadores, 2

Este programa inverte todos os pinos da porta B, a cada 100ms. Faz o uso de temporizações por rotinas de software.

Esquema eléctrico

Exem

plo 11

Page 27: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 27

Código fonte do programa;#################################################################################;; Este programa inverte todos os pinos da porta B, a cada 100ms;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMPtemp2 equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP2

;---------------------------

inicio

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W com 0x00, todos pinos porta A como saida movwf TRISA ;move de W para TRISA movlw 0x00 ;carrega W com 0x00, todos pinos porta A como saida movwf TRISB ;move de W para TRISB movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTB ;desactiva todos os drivers de saída da porta B

Exem

plo 11

Page 28: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 28

repete

movlw 0xFF ;carrega W com valor de 0xFF

xorwf PORTB, f ;inverte porta B (XOR, OU Exclusivo com o W)

call atraso_100m ;chama rotina de atraso

goto repete ;faz temporizacao de novo

;---------------------------

atraso_100m

movlw 0xC7 ;carrega W com o valor 0xC7

movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-2 ; salta para duas instrucoes anteriores

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA5 f8

movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1 ;salta para uma instrucao anterior

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 11

Page 29: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 29

Rotinas de atraso, Temporizadores, 3

Este programa inverte todos os pinos da porta B, a cada 100ms.Fas uso do TMR0 para gerar as temporizações.

Esquema eléctrico

Exem

plo 12

Page 30: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 30

Código fonte do programa;#################################################################################

;

; Este programa inverte todos os pinos da porta B, a cada 100ms controlados

; pelo TMR0

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMP

temp2 equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP2

;---------------------------

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W como 0x00, todos pinos porta A como saida

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos pinos porta A como saida

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

movlw b’00000111’ ;carrega valor para W

movwf OPTION_REG ;move de W para registo OPTION

Exem

plo 12

Page 31: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 31

clrf OSCCON ;comuta oscilador interno para 31kHz

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTB ;desactiva todos os drivers de saída da porta B

inicio

;implementar ~250ms de temporizacao com o TMR0, com 256 de pre-divisao

movlw 0xF8 ;valor de contagem para fazer os ~250ms

movwf TMR0 ;carrega esse valor para o TMRO

btfss INTCON, 2 ;verifi ca se TMR0 chegou ao fi m, pelo bit 2 do INTCON, TMR0 overfl ow

goto $-1 ;ciclo até TMR0 chegar ao fi m

bcf INTCON, 2 ;limpa fl ag de TMR0 overfl ow

movlw 0xFF ;carrega W com 0xFF

xorwf PORTB, f ;inverte porta B (XOR, OU Exclusivo com o W)

goto inicio ;faz temporização de novo

;---------------------------

end

Exem

plo 12

Page 32: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 32

Contador

Este programa faz contagem binária na porta B, incrementando a cada 500ms.Fas uso de rotinas de software, para gerar as temporizações.

Fluxograma do programa

Exem

plo 13

Page 33: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 33

Esquema eléctrico

Exem

plo 13

Page 34: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 34

Código fonte do programa;#################################################################################;; Este programa faz contagem binária na porta B, incrementando a cada 500ms;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMPtemp2 equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP2temp3 equ 0x22 ;defi ne endereco 0x22 com o nome de TEMP3

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W como 0x00 movwf TRISA ;move de W para TRISA movlw 0x00 ;carrega W como 0x00 movwf TRISB ;move de W para TRISB movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

clrf temp3 ;limpa registo contador

Exem

plo 13

Page 35: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 35

inicio movf temp3, w ;carrega W com valor de TEMP3 movwf PORTB ;move valor de W para porta B ;incrementa e mostra a cada 500ms call atraso_100m ;faz atraso de 100ms call atraso_100m ;faz atraso de 100ms call atraso_100m ;faz atraso de 100ms call atraso_100m ;faz atraso de 100ms call atraso_100m ;faz atraso de 100ms incf temp3, f ;incrementa TEMP3 em uma unidade, e coloca o resultado em TEMP3

goto inicio ;faz temporizacao de novo

;---------------------------

atraso_100m movlw 0xC3 ;carrega W com o valor 0xC3 movwf temp2 ;move valor em W para TEMP

call atraso_500u ; decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u movlw 0x28 ;carrega W com o valor 0x28 movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 13

Page 36: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 36

Contador, 2

Este programa faz contagem binária na porta B, incrementando a cada pulso externo que chega ao TMR0 pelo pino RA4.

Esquema eléctrico

Exem

plo 14

Page 37: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 37

Código fonte do programa;#################################################################################

;

; Este programa faz contagem binária na porta B, incrementando a cada pulso

; externo que chega ao TMR0 pelo pino RA4.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x10 ;carrega W como 0x10, RA4 como entrada

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos os pinos como saida

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

movlw b’00111000’ ;carrega valor para W

movwf OPTION_REG ;move de W para registo OPTION

banksel PORTA ;muda para banco onde está o registo PORTA

clrf TMR0 ;limpa contador do TMR0

Exem

plo 14

Page 38: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 38

inicio

movf TMR0, w ;carrega W com valor de TMR0

movwf PORTB ;move valor de W para porta B

goto inicio ;faz temporizacao de novo

;---------------------------

end

Exem

plo 14

Page 39: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 39

Contador, 3

Este programa faz contagem binária na porta B, incrementando a cada pulso externo que chega ao TMR0 pelo pino RA4.Quando atinge o valor de 100, limpa o contador TMR0, e começa do início (zero).

Fluxograma do programa

Exem

plo 15

Page 40: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 40

Código fonte do programa;#################################################################################

;

; Este programa faz contagem binária na porta B, incrementando a cada pulso

; externo que chega ao TMR0 pelo pino RA4.

; Quando atinge o valor de 100, limpa o contador TMR0, e começa de novo.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x10 ;carrega W como 0x10, RA4 como entrada

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos os pinos como saida

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

movlw b’00111000’ ;carrega valor para W

movwf OPTION_REG ;move de W para registo OPTION

Exem

plo 15

Page 41: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 41

banksel PORTA ;muda para banco onde está o registo PORTA

limpar

clrf TMR0 ;limpa contador do TMR0

inicio

movf TMR0, w ;carrega W com valor do TMR0

movwf PORTB ;move valor de W para porta B

;com o resultado do carregamento do W, o bit Z do STATUS poderá ser alterado,

; que indica se a operação foi resultado ZERO, ou não

sublw .100 ;testar se é maior que 100

btfsc STATUS, 2 ;o resultado foi 0 ?

goto limpar ; sim

goto inicio ;nao, continua a visualização e testes

;---------------------------

end

Exem

plo 15

Page 42: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 42

Conversão de valores, Tabelas, 7-segmentos

Este programa faz a conversão de um número binário, para o mesmo poder ser visualisado num mostrador de 7-segmentos.

Esquema eléctrico

Exem

plo 16

Page 43: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 43

Código fonte do programa;#################################################################################

;

; Este programa faz a conversão de um número binário, para o mesmo poder

; ser visualisado num mostrador de 7-segmentos

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x10 ;carrega W como 0x10, RA4 como entrada

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos os pinos como saida

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

inicio

Exem

plo 16

Page 44: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 44

bsf PORTA, 0 ;activa RA0, 7-segmento 1

movlw 0x0b ;carrega valor numerico

call tabela ;chama tabela com o valor a ler

movwf PORTB ;carrega na porta B

goto inicio ;ciclo infi nito

;---------------------------

tabela

addwf PCL,f ;tabela de conversao para 7-segmentos

retlw b’00111111’ ;0

retlw b’00000110’ ;1

retlw b’01011011’ ;2

retlw b’01001111’ ;3

retlw b’01100110’ ;4

retlw b’01101101’ ;5

retlw b’01111101’ ;6

retlw b’00000111’ ;7

retlw b’01111111’ ;8

retlw b’01101111’ ;9

retlw b’01110111’ ;a

retlw b’01111100’ ;b

retlw b’01011000’ ;c

retlw b’01011110’ ;d

retlw b’01111001’ ;e

retlw b’01110001’ ;f

retlw 0

;---------------------------

end

Exem

plo 16

Page 45: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 45

Conversão de valores, Tabelas, 2

Este programa faz a conversão de um número binário, para o mesmo poder ser visualisado num mostrador de 7-segmentos.

Faz contagem crescente de 0 a F, retornando a 0.

Esquema eléctrico

Exem

plo 17

Page 46: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 46

Código fonte do programa;#################################################################################

;

; Este programa faz a conversão de um número binário, para o mesmo poder

; ser visualisado num mostrador de 7-segmentos

; Faz contagem crescente de 0 a F, retornando a 0.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20

temp2 equ 0x21

contador equ 0x22

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W como 0x10

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos os pinos como saida

movwf TRISB ;move de W para TRISB

Exem

plo 17

Page 47: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 47

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTA ;desactiva todos os drivers da porta A

;---------------------------

inicio

bsf PORTA, 0 ;activa RA0, 7-segmento 1

clrf contador ;limpa registos temporarios

loop

movf contador, w ;carrega Contador para W

call tabela ;chama Tabela

iorlw 0

btfss STATUS, 2 ;testa se chegou ao fi m

goto mostra_no_display ;nao, mostra a conversao no mostrador 7segmentos

clrf contador ;limpa registos temporarios

goto loop ;faz contagem desde o inicio

mostra_no_display

movwf PORTB ;mostra no display

call atraso_100m ;faz um pequeno atraso

call atraso_100m ;faz um pequeno atraso

call atraso_100m ;faz um pequeno atraso

call atraso_100m ;faz um pequeno atraso

call atraso_100m ;faz um pequeno atraso

incf contador, f ;incrementa Contador

goto loop ;ciclo de amostragem

;---------------------------

tabela

addwf PCL,f ;tabela de conversao para 7-segmentos

retlw b’00111111’ ;0

retlw b’00000110’ ;1

Exem

plo 17

Page 48: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 48

retlw b’01011011’ ;2

retlw b’01001111’ ;3

retlw b’01100110’ ;4

retlw b’01101101’ ;5

retlw b’01111101’ ;6

retlw b’00000111’ ;7

retlw b’01111111’ ;8

retlw b’01101111’ ;9

retlw b’01110111’ ;a

retlw b’01111100’ ;b

retlw b’01011000’ ;c

retlw b’01011110’ ;d

retlw b’01111001’ ;e

retlw b’01110001’ ;f

retlw 0

;---------------------------

atraso_100m

movlw 0xc5 ;carrega W com o valor 0xC5

movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA0

movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1 ;

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 17

Page 49: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 49

Conversão de valores, Tabelas, 3

Este programa faz a conversão de um número binário, para o mesmo poder ser visualisado num mostrador de 7-segmentos.Faz contagem crescente de 0 a F, retornando a 0.A contagem é feita com o TMR0 a receber pulsos externos por RA4.

Esquema eléctrico

Exem

plo 18

Page 50: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 50

Código fonte do programa;#################################################################################

;

; Este programa faz a conversão de um número binário, para o mesmo poder

; ser visualisado num mostrador de 7-segmentos

; Faz contagem crescente de 0 a F, retornando a 0.

; A contagem é feita com o TMR0 a receber pulsos externos por RA4.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x10 ;carrega W como 0x10, RA4 entrada

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos os pinos como saida

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

movlw b’00111000’ ;carrega valor para W

movwf OPTION_REG ;move de W para registo OPTION

banksel PORTA ;muda para banco onde está o registo PORTA

Exem

plo 18

Page 51: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 51

clrf PORTA ;desactiva todos os drivers da porta A

;---------------------------

inicio

bsf PORTA, 0 ;activa RA0, 7-segmento 1

clrf TMR0 ;limpa contador do TMR0

loop

movf TMR0, w ;carrega TMR0 para W

call tabela ;chama Tabela para converter

iorlw 0 ; OR de W com 0 (zero)

btfss STATUS, 2 ;testa se chegou ao fi m (testando a fl ag Z)

goto mostra_no_display ;nao, mostra no 7-segmentos

clrf TMR0 ;limpa contador do TMR0

goto loop ;faz contagem desde o inicio

mostra_no_display

movf TMR0, w ;carrega W com valor de TMR0

call tabela ;converte o valor na tabela

movwf PORTB ;move valor de W para porta B

goto loop ;ciclo de amostragem

;---------------------------

tabela

addwf PCL,f ;tabela de conversao para 7-segmentos

retlw b’00111111’ ;0

retlw b’00000110’ ;1

retlw b’01011011’ ;2

retlw b’01001111’ ;3

retlw b’01100110’ ;4

retlw b’01101101’ ;5

retlw b’01111101’ ;6

retlw b’00000111’ ;7

retlw b’01111111’ ;8

retlw b’01101111’ ;9

retlw 0

;---------------------------

end

Exem

plo 18

Page 52: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 52

Conversão de valores, Tabelas, 4

Este programa faz a conversão de um número binário, para o mesmo poder ser visualisado num mostrador de 7-segmentos.São ligados quatro mostradores de 7-segmentos em paralelo, onde será usada a multiplexagem no tempo.Mostra quatro algarismos diferentes e estáticos.

Fluxograma do programa

Exem

plo 19

Page 53: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 53

Esquema eléctrico

Exem

plo 19

Page 54: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 54

Código fonte do programa;#################################################################################

;

; Este programa faz a conversão de um número binário, para o mesmo poder

; ser visualisado num mostrador de 7-segmentos

; São ligados quatro mostradores de 7-segmentos, onde será usada a

; multiplexagem no tempo.

; Mostra quatro algarismos diferentes e estáticos.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP

temp2 equ 0x22 ;defi ne endereco 0x22 com o nome de TEMP2

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W como 0x00

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00, todos os pinos como saida

movwf TRISB ;move de W para TRISB

Exem

plo 19

Page 55: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 55

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

inicio

;digito 1

clrf PORTA ;desliga displays

movlw 0x04 ;chama 4a posicao da tabela

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 0 ;liga display 1

call atraso_5m

;digito 2

clrf PORTA ;desliga displays

movlw 0x03 ;chama 3a posicao da tabela

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 1 ;liga display 2

call atraso_5m

;digito 3

clrf PORTA ;desliga disblays

movlw 0x02 ;chama 2a posicao da tabela

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 2 ;liga display 1

call atraso_5m

;digito 4

clrf PORTA ;desliga disblays

movlw 0x01 ;chama 1a posicao da tabela

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 3 ;liga display 2

call atraso_5m

goto inicio ;ciclo infi nito

;---------------------------

tabela

Exem

plo 19

Page 56: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 56

addwf PCL,f ;tabela de conversao para 7-segmentos

retlw b’00111111’ ;0

retlw b’00000110’ ;1

retlw b’01011011’ ;2

retlw b’01001111’ ;3

retlw b’01100110’ ;4

retlw b’01101101’ ;5

retlw b’01111101’ ;6

retlw b’00000111’ ;7

retlw b’01111111’ ;8

retlw b’01101111’ ;9

retlw b’01110111’ ;a

retlw b’01111100’ ;b

retlw b’01011000’ ;c

retlw b’01011110’ ;d

retlw b’01111001’ ;e

retlw b’01110001’ ;f

retlw 0

;---------------------------

atraso_5m

movlw 0x0A ;carrega W com o valor 0x0A

movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA5

movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1 ;

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 19

Page 57: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 57

Conversão de valores, Tabelas, 5

Este programa faz a conversão de um número binário, para o mesmo poder ser visualisado num mostrador de 7-segmentos.São ligados quatro mostradores de 7-segmentos em paralelo, onde será usada a multiplexagem no tempo.Mostra contagem crescente de 0000 a 9999, retornando a 0000.

Esquema eléctrico

Exem

plo 20

Page 58: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 58

Código fonte do programa;#################################################################################

;

; Este programa faz a conversão de um número binário, para o mesmo poder

; ser visualisado num mostrador de 7-segmentos.

; São ligados quatro mostradores de 7-segmentos, onde será usada a

; multiplexagem no tempo.

; Mostra contagem crescente de 0000 a 9999, retornando a 0000.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

CBLOCK 0x20

temp, temp2 ;variaveis usadas nos temporizadores

unidades, dezenas, centenas, milhares ;variaveis usadas para contador do digito

ENDC

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga tristates da porta A

clrf PORTB ;desliga tristates da porta B

Exem

plo 20

Page 59: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 59

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W com 0x00

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W com 0x00

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida

movwf TRISC ;move de W para TRISC

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTA ;desliga porta A

clrf PORTB ;desliga porta B

clrf unidades ;limpa variaveis

clrf dezenas

clrf centenas

clrf milhares

inicio

call mostra_digitos ;mostra contador nos digitos de 7-segmentos

incrementa_unidades

incf unidades, f ;incrementa a variavel das unidades

movf unidades, w ;carrega UNIDADES para o W

sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas

btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico

goto inicio

clrf unidades

incrementa_dezenas

incf dezenas, f ;incrementa a variavel das dezenas

movf dezenas, w ;carrega DEZENAS para o W

sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas

btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico

goto inicio

clrf dezenas

incrementa_centenas

incf centenas, f ;incrementa a variavel das centenas

movf centenas, w ;carrega CENTENAS para o W

sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas

Exem

plo 20

Page 60: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 60

btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico

goto inicio

clrf centenasincrementa_milhares

incf milhares, f ;incrementa a variavel dos milhares

movf milhares, w ;carrega MILHARES para o W

sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas

btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico

goto inicio

clrf milhares

goto inicio ;ciclo infi nito

;---------------------------

tabela

addwf PCL,f ;tabela de conversao para 7-segmentos

retlw b’00111111’ ;0

retlw b’00000110’ ;1

retlw b’01011011’ ;2

retlw b’01001111’ ;3

retlw b’01100110’ ;4

retlw b’01101101’ ;5

retlw b’01111101’ ;6

retlw b’00000111’ ;7

retlw b’01111111’ ;8

retlw b’01101111’ ;9

retlw b’01110111’ ;a

retlw b’01111100’ ;b

retlw b’01011000’ ;c

retlw b’01011110’ ;d

retlw b’01111001’ ;e

retlw b’01110001’ ;f

retlw 0

;---------------------------

mostra_digitos ;mostra contador nos digitos de 7-segmentos

digito_1

clrf PORTA ;desliga dislays

movf unidades, w ;carrega valor das unidades

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 0 ;liga display 1

Exem

plo 20

Page 61: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 61

call atraso_5mdigito_2

clrf PORTA ;desliga dislays

movf dezenas, w ;carrega valor das dezenas

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 1 ;liga display 2

call atraso_5m

digito_3

clrf PORTA ;desliga dislays

movf centenas, w ;carrega valor das centenas

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 2 ;liga display 1

call atraso_5m

digito_4

clrf PORTA ;desliga dislays

movf milhares, w ;carrega valor dos milhares

call tabela

movwf PORTB ;carrega barramento porta B

bsf PORTA, 3 ;liga display 2

call atraso_5m

return

;---------------------------

atraso_5m

movlw 0x0A ;carrega W com o valor 0x0A

movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-2

Exem

plo 20

Page 62: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 62

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA5 movwf temp ;move valor

em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1 ;

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 20

Page 63: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 63

Conversão de valores, Tabelas, 6

Este programa faz a conversão de um número binário, para o mesmo poder ser visualisado num mostrador de 7-segmentos.São ligados quatro mostradores de 7-segmentos, onde será usada a multiplexagem no tempo.Mostra contagem crescente de 0000 a 9999, retornando a 0000.A incrementação é feita com a ajuda de interrupções do TMR0.

Esquema eléctrico

Exem

plo 21

Page 64: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 64

Código fonte do programa;#################################################################################;; Este programa faz a conversão de um número binário, para o mesmo poder; ser visualisado num mostrador de 7-segmentos.; São ligados quatro mostradores de 7-segmentos, onde será usada a ; multiplexagem no tempo.; Mostra contagem crescente de 0000 a 9999, retornando a 0000.; A incrementação é feita com a ajuda de interrupções do TMR0.;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

CBLOCK 0x20 temp, temp2 ;variaveis usadas nos temporizadores w_temp, status_temp ;variaveis usadas para salvaguardar STATUS e W, ; quando se executa uma interrupcao unidades, dezenas, centenas, milhares ;variaveis usadas para contador do digito ENDC

;---------------------------

org 0x0000 ;vector de RESET

goto principal org 0x0004 ;vector de INTERRUPCAO

movwf w_temp ;guarda conteudo do W swapf STATUS, w ;guarda registo STATUS movwf status_temp ;

Exem

plo 21

Page 65: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 65

call incrementa_contadores ;incrementa contadores em uma unidade movlw 0xFF ;carrega TMR0 com o valor maximo. Um impulso ; vai causar overfl ow e interrupcao movwf TMR0

swapf status_temp, w ;recarrega registo STATUS movwf STATUS swapf w_temp, f swapf w_temp, w ;recarrega W

bcf INTCON, 2 ;limpa fl ag de interrupcao por TMR0 retfi e ;sai da interrupcao ;--------------------------- org 0x0020

principal ;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga tristates da porta A clrf PORTB ;desliga tristates da porta B ;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x10 ;carrega W com 0x10, RA4 movwf TRISA ;move de W para TRISA movlw 0x00 ;carrega W com 0x00 movwf TRISB ;move de W para TRISB movlw 0x00 ;carrega W com 0x00, todos pinos porta C como saida movwf TRISC ;move de W para TRISC

movlw b’00111000’ ;carrega valor para W movwf OPTION_REG ;move de W para registo OPTION

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTA ;desliga porta A clrf PORTB ;desliga porta B movlw b’10100000’ ;Interrupcoes Gerais activas, interrupcao TMR0 activa movwf INTCON

clrf unidades ;limpa variaveis clrf dezenas clrf centenas

Exem

plo 21

Page 66: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 66

clrf milhares

movlw 0xFF ;carrega TMR0 com o valor maximo. Um impulso vai causar ; overfl ow e interrupcao movwf TMR0

inicio call mostra_digitos ;mostra contador nos digitos de 7-segmentos

goto inicio ;ciclo infi nito

;---------------------------

tabela addwf PCL,f ;tabela de conversao para 7-segmentos retlw b’00111111’ ;0 retlw b’00000110’ ;1 retlw b’01011011’ ;2 retlw b’01001111’ ;3 retlw b’01100110’ ;4 retlw b’01101101’ ;5 retlw b’01111101’ ;6 retlw b’00000111’ ;7 retlw b’01111111’ ;8 retlw b’01101111’ ;9 retlw b’01110111’ ;a retlw b’01111100’ ;b retlw b’01011000’ ;c retlw b’01011110’ ;d retlw b’01111001’ ;e retlw b’01110001’ ;f retlw 0

;---------------------------

mostra_digitos ;mostra contador nos digitos de 7-segmentos

digito_1 clrf PORTA ;desliga displays movf unidades, w ;carrega valor das unidades call tabela movwf PORTB ;carrega barramento porta B bsf PORTA, 0 ;liga display 1

call atraso_5m

digito_2 clrf PORTA ;desliga displays movf dezenas, w ;carrega valor das dezenas call tabela movwf PORTB ;carrega barramento porta B

Exem

plo 21

Page 67: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 67

bsf PORTA, 1 ;liga display 2

call atraso_5m

digito_3 clrf PORTA ;desliga displays movf centenas, w ;carrega valor das centenas call tabela movwf PORTB ;carrega barramento porta B bsf PORTA, 2 ;liga display 1

call atraso_5m

digito_4 clrf PORTA ;desliga displays movf milhares, w ;carrega valor dos milhares call tabela movwf PORTB ;carrega barramento porta B bsf PORTA, 3 ;liga display 2

call atraso_5m

return ;---------------------------

incrementa_contadoresincrementa_unidades incf unidades, f ;incrementa a variavel das unidades movf unidades, w ;carrega UNIDADES para o W sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico return clrf unidades incrementa_dezenas incf dezenas, f ;incrementa a variavel das dezenas movf dezenas, w ;carrega DEZENAS para o W sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para ; as dezenas btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico return clrf dezenas incrementa_centenas incf centenas, f ;incrementa a variavel das centenas movf centenas, w ;carrega CENTENAS para o W sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas

btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico return clrf centenas

Exem

plo 21

Page 68: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 68

incrementa_milhares incf milhares, f ;incrementa a variavel dos milhares movf milhares, w ;carrega MILHARES para o W sublw .10 ;subtrai 10 ao W, para verifi car se incrementou para as dezenas

btfss STATUS, 2 ;testa a fl ag Z, verifi cando se houve resultado 0 aritmetico return clrf milhares

return ;---------------------------

atraso_5m movlw 0x0A ;carrega W com o valor 0x0A movwf temp2 ;move valor em W para TEMP

call atraso_500u ; decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u movlw 0xA5 ;carrega W com o valor 0xA5 movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 21

Page 69: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 69

PWM

Este programa usa o módulo de PWM, e exemplifi ca o mesmo com variação manual do duty-cycle.

Esquema eléctrico

Exem

plo 22

Page 70: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 70

Código fonte do programa;#################################################################################

;

; Este programa usa o módulo de PWM, e exemplifi ca o mesmo com variação

; manual do duty-cycle

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga tristates da porta A

clrf PORTB ;desliga tristates da porta B

clrf PORTC ;desliga tristates da porta C

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W com 0x00

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W com 0x00

movwf TRISB ;move de W para TRISB

movlw 0b00000100 ;RC2 como pino do PWM

movwf TRISC ;move de W para TRISC

movlw 0xFF ;periodo do PWM

movwf PR2

Exem

plo 22

Page 71: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 71

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTA ;desliga buffers da porta A

clrf PORTB ;desliga buffers da porta B

;confi gura modulo CCP para trabalhar em PWM

movlw 0x0F

movwf CCP1CON

;duty-cycle do PWM (periodo activo)

; movlw 0 ;100% activo

; movlw 0x33 ;80% activo

; movlw 0x7F ;50% activo

movlw 0xCC ;20% activo

; movlw 0xFF ;0% activo

movwf CCPR1L

;implementar ~240Hz de frequencia de PWM, com 16 de pré-divisão

movlw 0x07

movwf T2CON

programa_principal

goto $ ;ciclo infi nito, não sai daqui

;---------------------------

end

Exem

plo 22

Page 72: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 72

PWM, 2

Este programa usa o módulo de PWM, e exemplifi ca o mesmo com variação automática e crescente do duty-cycle.

Esquema eléctrico

Exem

plo 23

Page 73: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 73

Código fonte do programa;#################################################################################;; Este programa usa o módulo de PWM, e exemplifi ca o mesmo com variação; automática e crescente do duty-cycle;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20temp2 equ 0x21

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga tristates da porta A clrf PORTB ;desliga tristates da porta B clrf PORTC ;desliga tristates da porta C ;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W com 0x00 movwf TRISA ;move de W para TRISA movlw 0x00 ;carrega W com 0x00 movwf TRISB ;move de W para TRISB movlw 0b00000100 ;RC2 como pino do PWM movwf TRISC ;move de W para TRISC

movlw 0xFF ;periodo do PWM movwf PR2

banksel PORTA ;muda para banco onde está o registo PORTA

Exem

plo 23

Page 74: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 74

;confi gura modulo CCP para trabalhar em PWM movlw 0x0F movwf CCP1CON ;duty-cycle do PWM (periodo activo) movlw 0 ;100% activo; movlw 0x33 ;80% activo; movlw 0x7F ;50% activo; movlw 0xCC ;20% activo; movlw 0xFF ;0% activo movwf CCPR1L

;implementar ~240Hz de frequencia de PWM, com 16 de pré-divisão movlw 0x07 movwf T2CON

repete call atraso_20m ;faz atraso de 20ms

incf CCPR1L, f ;aumenta dutycycle do PWM, faz variar brilho do LED

goto repete ;ciclo infi nito

;---------------------------atraso_20m movlw 0x28 ;carrega W com o valor 0x20 movwf temp2 ;move valor em W para TEMP

call atraso_500u ; decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------atraso_500u movlw 0xA5 ;carrega W com o valor 0xA5 movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 23

Page 75: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 75

Interrupções

Este programa inverte os quatro pinos superiores da porta B, a cada pressão do interruptor no pino RB0. A função de inversão, é feita dentro da rotina de interrupção.

Esquema eléctrico

Exem

plo 24

Page 76: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 76

Código fonte do programa;#################################################################################

;

; Este programa inverte os quatro pinos superiores da porta B, a cada pressão do

; interruptor no pino RB0.

; A função de inversão, é feita dentro da rotina de interrupção.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000 ;vector de RESET

goto inicio

;---------

org 0x0004 ;vector de INTERRUPCAO

movlw 0xF0 ;carrega W com valor de 0xF0

xorwf PORTB, f ;inverte pinos da porta B com um OU-EXCLUSIVO

bcf INTCON, 1 ;limpa fl ag de interrupcao causada por RB0/INT

retfi e ;sai da interrupcao

;---------------------------

org 0x0020 ;inicio do programa

inicio

;confi gura toda a porta A para entrada/saida DIGITAL

Exem

plo 24

Page 77: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 77

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL, todas as portas digitais

clrf ANSELH ;limpa o registo ANSELH, todas as portas digitais

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W com 0x00

movwf TRISA ;move de W para TRISA

movlw 0x01 ;carrega W com 0x01, RB0 como entrada

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W com 0x00

movwf TRISC ;move de W para TRISC

movlw b’10001110’ ;confi gura o oscilador interno para 31KHz

andwf OSCCON

clrf OPTION_REG ;pull-ups na porta B activos, interrupcao no fl anco-descendente do RB0/INT

banksel PORTA ;muda para banco onde está o registo PORTA

movlw b’10010000’ ;Interrupcoes Gerais activas, interrupcao RB0/INT activa

movwf INTCON

repete

goto repete ;ciclo infi nito

;---------------------------

end

Exem

plo 24

Page 78: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 78

Interrupções, 2

Este programa inverte os pinos da porta B, a cada interrupção do TMR0. O TMR0 está programado para contar 250ms, e a cada overfl ow, gera uma interrupção.

Esquema eléctrico

Exem

plo 25

Page 79: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 79

Código fonte do programa;#################################################################################

;

; Este programa inverte os pinos da porta B, a cada interrupção do TMR0.

; O TMR0 está programado para contar 250ms, e a cada overfl ow, gera uma interrupção.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000 ;vector de RESET

goto inicio

;---------

org 0x0004 ;vector de INTERRUPCAO

movlw 0xFF ;carrega W com valor de 0xFF

xorwf PORTB, f ;inverte porta B bit-a-bit com o OU-EXCLUSIVO (XOR)

;implementar ~250ms de temporizacao com o TMR0 (com 256 de pre-divisao)

movlw 0xF6 ;valor de contagem para fazer os ~250ms

movwf TMR0 ;carrega esse valor para o TMRO

bcf INTCON, 2 ;limpa fl ag de interrupcao por TMR0

retfi e ;sai da interrupcao

;---------------------------

org 0x0020 ;inicio do programa

Exem

plo 25

Page 80: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 80

inicio

clrf PORTA ;limpa tristate da porta A

clrf PORTB ;limpa tristate da porta B

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

clrf TRISA ;TRISA toda como saida

clrf TRISB ;TRISB toda como saida

clrf TRISC ;TRISC toda como saida

movlw b’10000111’ ;TMR0 com 1:256 e incrementado pelo clock interno

movwf OPTION_REG

movlw b’10001110’ ;confi gura o oscilador interno para 31KHz

andwf OSCCON

banksel PORTA ;muda para banco onde está o registo PORTA

clrf PORTA ;desliga porta A

clrf PORTB ;desliga porta B

movlw b’10100000’ ;Interrupcoes Gerais activas, interrupcao TMR0 activa

movwf INTCON

;implementar ~250ms de temporizacao com o TMR0, com 256 de pre-divisao

movlw 0xF8 ;valor de contagem para fazer os ~250ms

movwf TMR0 ;carrega esse valor para o TMRO

repete

goto repete ;ciclo infi nito

;---------------------------

end

Exem

plo 25

Page 81: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 81

LCD

Este programa escreve um caracter no mostrador LCD

Esquema eléctrico

Exem

plo 26

Page 82: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 82

Código fonte do programa;*************************************************************

;

; Este programa escreve um caracter no LCD

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

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

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

goto start

org 0x0020 ;inicio do programa

start

clrf PORTA ;limpa tristate da porta A

clrf PORTB ;limpa tristate da porta B

clrf PORTC ;limpa tristate da porta C

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

clrf TRISA ;porta A toda como saida

clrf TRISB ;porta B toda como saida

clrf TRISC ;porta C toda como saida

Exem

plo 26

Page 83: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 83

clrf OPTION_REG ;limpa registo OPTION

banksel PORTA ;muda para banco onde está o registo PORTA

inicio

call setup ;inicializa LCD

movlw ‘a’ ;carrega W com valor ASCII “a”

call lcdout ;envia dados para o LCD

goto $ ;ciclo infi nito na mesma linha

;---------------------------

include “usar_lcd.asm” ;inclui biblioteca do LCD

;---------------------------

end

Exem

plo 26

Page 84: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 84

LCD, 2

Este programa escreve duas frases diferentes, em cada linha do LCD.

Esquema eléctrico

Exem

plo 27

Page 85: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 85

Código fonte do programa;*************************************************************;; Este programa escreve uma frase diferente, em cada linha do LCD;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;*************************************************************

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMPtemp2 equ 0x21temp3 equ 0x22

;---------------------------

org 0x0000

goto principal

tabela addwf PCL, F ;tabela com frase para escrever no LCD dt “Primeira frase”, 0

tabela2 addwf PCL, F ;tabela com frase para escrever no LCD dt “Segunda frase”, 0

org 0x0030

principal clrf PORTA ;limpa tristate da porta A clrf PORTB ;limpa tristate da porta B clrf PORTC ;limpa tristate da porta C

Exem

plo 27

Page 86: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 86

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA clrf TRISA ;porta A toda como saida clrf TRISB ;porta B toda como saida clrf TRISC ;porta C toda como saida

clrf OPTION_REG ;limpa registo OPTION banksel PORTA ;muda para banco onde está o registo PORTA

inicio call setup ;inicializa e limpa LCD

clrf temp ;limpa registo de contagem

linha1 movf temp, w ;carrega registo Temp para W call tabela ;chama tabela iorlw 0 btfss STATUS, 2 ;testa se chegou ao fi m da tabela goto out ;envia byte para LCD goto linha2 ;escreve a segunda linhaout call lcdout ;envia dados para o LCD incf temp, f ;incrementa para nova posicao goto linha1 ;salta para carregamento de Temp para W

linha2 call atraso_100m ;espera meio-segundo call atraso_100m call atraso_100m call atraso_100m call atraso_100m

; call del_lcd ;limpa LCD; call atraso_100m call lcd201 ;posiciona cursor na linha 2, primeira coluna call atraso_100m

Exem

plo 27

Page 87: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 87

clrf temp ;limpa registo de contagem

repete2 movf temp, w ;carrega registo Temp para W call tabela2 ;chama tabela iorlw 0 btfss STATUS, 2 ;testa se chegou ao fi m da mesma goto out2 ;envia byte para LCD goto $ ;ciclo infi nito, fi ca nesta posicaoout2 call lcdout ;envia dados para o LCD incf temp, f ;incrementa para nova posicao goto repete2 ;salta para carregamento de Temp para W

;---------------------------

include “usar_lcd.asm” ;inclui fi cheiro de uso e confi guracao do LCD

;---------------------------

atraso_100m movlw 0xc7 ;carrega W com o valor 0xFF movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2 ;

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u movlw 0xa5 ;carrega W com o valor 0xFF movwf temp3 ;move valor em W para TEMP

decfsz temp3, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 27

Page 88: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 88

LCD, 3

Este programa testa três entradas, e escreve no LCD qual das entradas está activa.

Esquema eléctrico

Exem

plo 28

Page 89: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 89

Código fonte do programa;*************************************************************;; Este programa testa três entradas, e escreve no LCD; qual das entradas está activa;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;*************************************************************

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMPtemp2 equ 0x21temp3 equ 0x22

;---------------------------

org 0x0000

goto principal

tabela_RA4 addwf PCL, F ;tabela com frase para escrever no LCD dt “RA4”, 0tabela_RA6 addwf PCL, F ;tabela com frase para escrever no LCD dt “RA6”, 0tabela_RA7 addwf PCL, F ;tabela com frase para escrever no LCD dt “RA7”, 0

org 0x0020

Exem

plo 28

Page 90: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 90

principal

principal clrf PORTA ;limpa tristate da porta A clrf PORTB ;limpa tristate da porta B clrf PORTC ;limpa tristate da porta C

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL clrf ANSEL ;limpa o registo ANSEL clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA movlw 0xD0 ;carrega W com 0xD0 movwf TRISA ;move de W para TRISA clrf TRISB ;porta B toda como saida clrf TRISC ;porta C toda como saida

clrf OPTION_REG ;limpa registo OPTION banksel PORTA ;muda para banco onde está o registo PORTA

inicio

call setup ;inicializa LCD

testes

testa_RA4 btfss PORTA, 4 ;testa se a tecla foi premida goto mostra_RA4testa_RA6 btfss PORTA, 6 ;testa se a tecla foi premida goto mostra_RA6testa_RA7 btfss PORTA, 7 ;testa se a tecla foi premida goto mostra_RA7

goto testes ;faz novo ciclo de testes nas teclas

;---------------------------

Exem

plo 28

Page 91: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 91

mostra_RA4 btfss PORTA, 4 ;espera ate que a tecla seja largada goto $-1

call del_lcd ;limpa LCD antes de mostrar algo call atraso_5m clrf temp ;limpa registo de contagemrepete movf temp, w ;carrega registo Temp para W call tabela_RA4 ;chama tabela iorlw 0 btfss STATUS, 2 ;testa se chegou ao fi m da mesma goto mostra ;envia byte para LCD goto testes ;volta para o ciclo de testes das teclasmostra call lcdout ;envia dados para o LCD incf temp, f ;incrementa para nova posicao goto repete ;salta para carregamento de Temp para W

;mostra_RA6 btfss PORTA, 6 ;espera ate que a tecla seja largada goto $-1

call del_lcd ;limpa LCD antes de mostrar algo call atraso_5m clrf temp ;limpa registo de contagemrepete2 movf temp, w ;carrega registo Temp para W call tabela_RA6 ;chama tabela iorlw 0 btfss STATUS,2 ;testa se chegou ao fi m da mesma goto mostra2 ;envia byte para LCD goto testes ;volta para o ciclo de testes das teclasmostra2 call lcdout ;envia dados para o LCD incf temp, f ;incrementa para nova posicao goto repete2 ;salta para carregamento de Temp para W

;mostra_RA7 btfss PORTA, 7 ;espera ate que a tecla seja largada goto $-1

call del_lcd ;limpa LCD antes de mostrar algo call atraso_5m clrf temp ;limpa registo de contagemrepete3 movf temp, w ;carrega registo Temp para W

Exem

plo 28

Page 92: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 92

call tabela_RA7 ;chama tabela iorlw 0 btfss STATUS, 2 ;testa se chegou ao fi m da mesma goto mostra3 ;envia byte para LCD goto testes ;volta para o ciclo de testes das teclasmostra3 call lcdout ;envia dados para o LCD incf temp, f ;incrementa para nova posicao goto repete3 ;salta para carregamento de Temp para W

;---------------------------

include “usar_lcd.asm” ;inclui fi cheiro de uso e confi guracao do LCD

;---------------------------

atraso_5m movlw 0x0a movwf temp2 ;move valor em W para TEMP

call atraso_500u ; decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u movlw 0x28 ;carrega W com o valor 0xFF movwf temp3 ;move valor em W para TEMP

decfsz temp3, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 28

Page 93: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 93

Biblioteca para o LCD

Este programa tem todas as confi gurações e funçoes de trabalho do mostrador LCD.

Código fonte do programa;*************************************************************;; Este programa é a biblioteca para o uso de LCD.;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;*************************************************************

;*************************************************************;; Rotina de confi guracao, e uso, de LCD com controlador; HD44780 da Hitachi.;; Confi gurada para correr com oscilador de 4MHz.; Defi nicoes incluidas no programa.; Ambas as portas de dados e comandos podem ser defi nidas,; bem como os bits de RS e E.; ; Declarar registo de OPTION e INTCON.; Dentro do banco 1, limpar o registo OPTION.; O registo INTCON eh apenas usado pela rotina de LCD. Ignorar. ;; Funções usadas pelo programa:;; * setup -> confi gura o LCD, usando modo de 4-bits;; * lcd101 -> posiciona cursor na 1a linha, 1a posicao; Restantes rotinas sao iguais, apenas muda; a linha e a posicao;; * lcdout -> transfere para o LCD, o byte que se encontra; no acumulador;; * del_lcd -> limpa o LCD, e retorna ao inicio;;*************************************************************

Page 94: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 94

;*************************************************************; defi nicoes;*************************************************************

e equ 1 ;linha E do LCDrs equ 0 ;linha RS do LCDporta_comando equ PORTA ;porta de comandosporta_dados equ PORTB ;porta de dados

loopa equ 0x60loopb equ 0x61store equ 0x62rsline equ 0x63clkcnt equ 0x64

;*************************************************************; rotinas de actualizacao do LCD;*************************************************************

del_lcd movlw 0x01 ;limpa LCD e retorna ao inicio goto lcdcmdlcd208 movlw b’11000111’ ;posiciona 2a linha, 8a posicao goto lcdcmdlcd204 movlw b’11000011’ ;posiciona 2a linha, 4a posicao goto lcdcmdlcd202 movlw b’11000001’ ;posiciona 2a linha, 2a posicao goto lcdcmdlcd201 movlw b’11000000’ ;posiciona 2a linha, 1a posicao goto lcdcmdlcd104 movlw b’10000011’ ;posiciona 1a linha, 4a posicao goto lcdcmdlcd101 movlw b’10000000’ ;posiciona 1a linha, 1a posicao

lcdcmd bcf porta_comando, rs ;limpa pino RS - activa comandos do LCD lcdout movwf store ;guarda dados em registo temporario

movlw d’40’ ;atraso entre bytes enviados para o LCD movwf loopadelay decfsz loopa, f ;atraso goto delay

call mandar ;manda 4bits altos swapf store, f call mandar ;manda 4bits baixos bsf porta_comando, rs ;activa pino RS - activa dados para o LCD

Page 95: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 95

return mandar ;carrega e manda 4bits movf store, w andlw 0xF0 ;AND com 0xF0, 4bits altos da porta B movwf porta_dados ;carrega o byte na porta B bsf porta_comando, e bcf porta_comando, e ;envia

return

;*************************************************************; rotina de confi guracao do LCD;*************************************************************

setup call pausit ;rotina de atraso

clrf loopb ;limpa registo de looplcdset movf loopb, w ;carrega offset para o acumulador call tablcd ;busca instrucao call lcdcmd ;envia instrucao para o LCD

incf loopb, f ;incrementa loop btfss loopb, 3 ;ultima instrucao enviada ?? goto lcdset ;nao

call pausit ;atraso

return ;fi m da rotina de confi guracao

pausit movlw d’20’ ;confi guracao de atraso movwf clkcnt

bcf INTCON, 2 ;limpa fl ag de interrupcaopause btfss INTCON, 2 ;temporizador chegou ao fi m ?? goto pause ;nao bcf INTCON, 2 ;sim

decfsz clkcnt, f ;decrementa loop, = 0 ?? goto pause ;nao

return ;sim, sai

Page 96: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 96

;*************************************************************; tabela para confi guracao do LCD;*************************************************************tablcd addwf PCL,f ;adiciona offset ao Program Counter retlw b’00110011’ ;inicializa LCD - 1o byte retlw b’00110011’ ;2o byte (4x no total) retlw b’00101100’ ;confi gura para operacao 4-bit & 2 linhas retlw b’00101100’ ;confi gura para operacao 4-bit & 2 linhas retlw b’00000110’ ;incrementa endereco, a cada byte recebido retlw b’00001100’ ;display on, cursor off, pisca off retlw b’00000001’ ;limpa LCD retlw b’00000010’ ;volta a 1a posicao, cursor & ram a zero ;fi m de tabela de confi guracao

Exem

plo 28

Page 97: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 97

EUSART - Porta Série

Este programa envia pela USART do PIC, a cada ~200ms, um caracter “a”.

Esquema eléctrico

Exem

plo 29

Page 98: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 98

Código fonte do programa;#################################################################################

;

; Este programa envia pela USART do PIC, a cada ~200ms, um caracter “a”.

;

; v1.0 01/10/2003

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMP

temp2 equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP2

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W como 0x00

movwf TRISA ;move de W para TRISA

movlw 0x06 ;carrega W como 0x06

movwf TRISB ;move de W para TRISB

clrf TRISC

movlw b’00100100’ ;liga TX da USART, liga alta velocidade

movwf TXSTA ;

Exem

plo 29

Page 99: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 99

movlw .25 ;gerador de velocidade :: 9600bps - 25 ; 19k2bps - 12 movwf SPBRG

banksel PORTA ;muda para banco onde está o registo PORTA

bsf RCSTA, 7 ;LIGA USART

inicio movlw ‘a’ ;carrega W com ASCII “a” movwf TXREG ;manda para porta serie nop ;1 ciclo de espera

btfss PIR1, 4 ;testa se acabou de mandar byte goto $-1

call atraso_100m ;atrasa durante ~200ms call atraso_100m ;

goto inicio ;faz novo ciclo

;---------------------------

atraso_100m movlw 0xC6 ;carrega W com o valor 0xC6 movwf temp2 ;move valor em W para TEMP

call atraso_500u ; decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u movlw 0xA5 ;carrega W com o valor 0xA5 movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 29

Page 100: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 100

EUSART - Porta Série, 2

Este programa envia pela USART do PIC, a cada ~200ms, uma frase completa.

Esquema eléctrico

Exem

plo 30

Page 101: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 101

Código fonte do programa;#################################################################################

;

; Este programa envia pela USART do PIC, a cada ~500ms, uma frase completa.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMP

temp2 equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP2

temp3 equ 0x22 ;defi ne endereco 0x22 com o nome de TEMP3

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga porta antes de confi gurar

clrf PORTB ;desliga porta antes de confi gurar

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x00 ;carrega W como 0x00

movwf TRISA ;move de W para TRISA

movlw 0x06 ;carrega W como 0x06 0000 0110

movwf TRISB ;move de W para TRISB

Exem

plo 30

Page 102: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 102

clrf TRISC

movlw b’00100100’ ;liga TX da USART, liga alta velocidade

movwf TXSTA ;

movlw .25 ;gerador de velocidade :: 9600bps - 25 ; 19k2bps - 12

movwf SPBRG

banksel PORTA ;muda para banco onde está o registo PORTA

bsf RCSTA, 7 ;LIGA USART

inicio

clrf temp3 ;limpa contador para tabela

call atraso_100m ;faz um atraso de ~500ms

call atraso_100m ;

call atraso_100m ;

call atraso_100m ;

call atraso_100m ;

volta

movf temp3, w ;carrega W com valor de TEMP3

call tabela ;chama tabela

iorlw 0 ;testa se chegou ao fi m da mesma

btfsc STATUS, 2

goto inicio ;acaba programa, faz ciclo infi nito

movwf TXREG ;manda para porta serie

nop ; aguarda um momento

btfss PIR1, 4 ;testa se acabou de mandar byte

goto $-1 ;nao

incf temp3, f ;incrementa contador para tabela

goto volta ;manda outro caracter

;---------------------------

tabela

addwf PCL, f

dt “Experiencia PIC e USART” ;frase a mandar pela porta serie

dt 0x0A, 0x0D, 0 ;comandos ASCII equivalentes de: nova linha

;---------------------------

Exem

plo 30

Page 103: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 103

atraso_100m

movlw 0xC6 ;carrega W com o valor 0xC6

movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA5

movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1 ;

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 30

Page 104: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 104

EUSART - Porta Série, 3

Este programa envia pela USART do PIC, uma frase completa, de cada vez que se carrega no botão no pino RA0.Após carregar no botão, há uma espera de ~500ms, e depois é feito o envio.

Esquema eléctrico

Exem

plo 31

Page 105: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 105

Código fonte do programa;#################################################################################

;

; Este programa envia pela USART do PIC, uma frase completa, de cada vez que

; se carrega no botão no pino RA0.

; Após carregar no botão, há uma espera de ~500ms, e depois é feito o envio.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMP

temp2 equ 0x21 ;defi ne endereco 0x21 com o nome de TEMP2

temp3 equ 0x22 ;defi ne endereco 0x22 com o nome de TEMP3

;---------------------------

org 0x0000

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga porta antes de confi gurar

clrf PORTB ;desliga porta antes de confi gurar

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0x01 ;carrega W como 0x01, RA0 como entrada

movwf TRISA ;move de W para TRISA

Exem

plo 31

Page 106: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 106

movlw 0x06 ;carrega W como 0x06 0b0000.0110

movwf TRISB ;move de W para TRISB

clrf TRISC

movlw b’00100100’ ;liga TX da USART, liga alta velocidade

movwf TXSTA ;

movlw .25 ;gerador de velocidade :: 9600bps - 25 ; 19k2bps - 12

movwf SPBRG

banksel PORTA ;muda para banco onde está o registo PORTA

bsf RCSTA, 7 ;LIGA USART

inicio

btfsc PORTA, 0 ;testa se RA0 estah premido

goto inicio ;nao

;sim

clrf temp3 ;limpa contador para tabela

call atraso_100m ;faz um atraso de ~500ms

call atraso_100m ;

call atraso_100m ;

call atraso_100m ;

call atraso_100m ;

volta

movf temp3, w ;carrega W com valor de TEMP3

call tabela ;chama tabela

iorlw 0 ;testa se chegou ao fi m da mesma

btfsc STATUS, 2

goto inicio ;acaba programa, faz ciclo infi nito

movwf TXREG ;manda para porta serie

nop ; aguarda um momento

btfss PIR1, 4 ;testa se acabou de mandar byte

goto $-1 ;nao

incf temp3, f ;incrementa contador para tabela

goto volta ;manda outro caracter

Exem

plo 31

Page 107: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 107

;---------------------------

tabela

addwf PCL, f ;frase a mandar pela porta serie

dt “Experiencia com tecla RA0 do PIC, e USART”

dt 0x0A, 0x0D, 0 ;ASCII equivalente de nova linha

;---------------------------

atraso_100m

movlw 0xC6 ;carrega W com o valor 0xC6

movwf temp2 ;move valor em W para TEMP

call atraso_500u ;

decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-2

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u

movlw 0xA5 ;carrega W com o valor 0xA5

movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP

;e salta a instrucao seguinte, se o resultado for zero

goto $-1 ;

return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 31

Page 108: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 108

EUSART - Porta Série, 4

Este programa mostra no LCD, os bytes que são recebidos pela USART.

Esquema eléctrico

Exem

plo 32

Page 109: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 109

Código fonte do programa;;#################################################################################

;

; Este programa mostra no LCD, os bytes que são recebidos pela USART.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

temp equ 0x20 ;defi ne endereco 0x20 com o nome de TEMP

;---------------------------

org 0x0000

goto principal

org 0x0030

principal

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

clrf ANSEL ;limpa o registo ANSEL

clrf ANSELH ;limpa o registo ANSELH

clrf PORTA ;desliga porta antes de confi gurar

clrf PORTB ;desliga porta antes de confi gurar

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

Exem

plo 32

Page 110: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 110

clrf TRISA ;porta A toda como saida

movlw 0x06 ;carrega W com 0x06, RB1/RB2 para a porta serie

movwf TRISB ;move de W para TRISB

clrf OPTION_REG ;limpa registo OPTION

bsf TXSTA, 2 ;liga gerador de timing da USART para alta velocidade

movlw .25 ;gerador de velocidade :: 9k6bps - 25 ; 19k2bps - 12

movwf SPBRG

banksel PORTA ;muda para banco onde está o registo PORTA

movlw b’10010000’ ;liga USART, liga RX da USART,

movwf RCSTA ; liga alta velocidade do gerador baud rate

inicio

call setup ;inicializa e limpa LCD

movf RCREG, w ;carrega W com byte recebido pela porta serie, limpeza antes de iniciar recepcao

repete

btfss PIR1, 5 ;testa se recebeu byte pela porta serie

goto $-1 ;nao

nop ;compasso de espera, um ciclo de relógio

movf RCREG, w ;carrega W com byte recebido pela porta serie

call lcdout ;envia dados para o LCD

goto repete ;volta ao inicio do programa

;---------------------------

include “usar_lcd.asm” ;inclui fi cheiro de uso e confi guracao do LCD

;---------------------------

end

Exem

plo 32

Page 111: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 111

Comparadores

Este programa activa/desactiva os pinos da porta B, consoante a saída do Comparador.O comparador tem uma entrada de sinal externo, e uma entrada de Tensão de Referência.A saída está disponivel apenas internamente.

Esquema eléctrico

Exem

plo 33

Page 112: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 112

Código fonte do programa;#################################################################################

;

; Este programa activa/desactiva os pinos da porta B, consoante a saída

; do Comparador.

; O comparador tem uma entrada de sinal, e uma entrada de Tensão de Referência.

; A saída está disponivel apenas internamente.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

banksel PORTA ;muda para o banco onde está o registo PORTA

clrf PORTA ;desliga buffers da porta antes de confi gurar

clrf PORTB ;desliga buffers da porta antes de confi gurar

clrf PORTC ;desliga buffers da porta antes de confi gurar

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

movlw b’00001001’

movwf ANSEL ;Confi gura os pinos RA0 e RA3 como entradas do comparador

clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas

banksel TRISA ;muda para banco onde está o registo TRISA

movlw 0b00001001 ;carrega W como 0x06

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00

Exem

plo 33

Page 113: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 113

movwf TRISB ;move de W para TRISB

movlw 0x00 ;

movwf TRISC ;porta C só com saídas

banksel CM1CON0 ;muda para o banco onde está o registo CM1CON0, confi guração do Comparador

movlw b’1000000’ ;Confi gura comparador 1 com duas entradas externas, e com a saída

movwf CM1CON0 ; disponivel apenas internamente

inicio

banksel CM1CON0 ;muda para banco onde está o registo CM1CON0

btfss CM1CON0, C1OUT ;verifi ca se o Comparador tem saida activa

goto limpar_portb ;limpa porta B

btfss CM1CON0, C1OUT ; re-verifi ca se o Comparador tem saida activa

goto inicio

banksel PORTB ;muda para banco onde está o registo PORTB

movlw 0xFF

movwf PORTB ;liga porta B por completo

goto inicio ;ciclo infi nito

limpar_portb

banksel PORTB ;muda para banco onde está o registo PORTB

clrf PORTB ;limpa porta B

goto inicio ;ciclo infi nito

;---------------------------

end

Exem

plo 33

Page 114: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 114

Comparadores, 2

Este programa activa/desactiva os pinos da porta B, consoante a saída do Comparador.O comparador tem uma entrada de sinal, e a Tensão de Referência é interna.A saída está disponivel apenas internamente.

Esquema eléctrico

Exem

plo 34

Page 115: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 115

Código fonte do programa;#################################################################################

;

; Este programa activa/desactiva os pinos da porta B, consoante a saída

; do Comparador.

; O comparador tem uma entrada de sinal, e a Tensão de Referência é interna.

; A saída do comparador está disponivel apenas internamente.

;

; v1.0 01/02/2008 PIC16F886

;

; Autor: António Sérgio Sena, www.senaeng.com

;

;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado

radix hex ;pre-defi nicao do tipo de valores numericos usados

include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF &

_CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000

banksel PORTA ;muda para o banco onde está o registo PORTA

clrf PORTA ;desliga buffers da porta antes de confi gurar

clrf PORTB ;desliga buffers da porta antes de confi gurar

clrf PORTC ;desliga buffers da porta antes de confi gurar

;confi gura toda a porta A para entrada/saida DIGITAL

banksel ANSEL ;muda para o banco onde está o registo ANSEL

movlw b’00000001’

movwf ANSEL ;Confi gura os pinos RA0 e RA3 como entradas do comparador

clrf ANSELH ;limpa o registo ANSELH

banksel CM1CON0 ;muda para o banco onde está o registo CM1CON0, confi guração do Comparador

movlw b’1000000’ ;Confi gura comparador 1 com duas entradas externas, e com a saída

movwf CM1CON0 ; disponivel apenas internamente

movlw b’0010000’ ;Confi gura comparador 1 para usar a Fonte de Tensão de Referência Interna

movwf CM2CON1

;confi gura portas A e B como entradas/saidas

Exem

plo 34

Page 116: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 116

banksel TRISA ;muda para banco onde está o registo TRISA

movlw b’00000001’ ;carrega W como 0x06, pin RA0 entrada

movwf TRISA ;move de W para TRISA

movlw 0x00 ;carrega W como 0x00

movwf TRISB ;move de W para TRISB

movlw 0x00 ;carrega W como 0x00

movwf TRISC ;move de W para TRISC

movlw b’10100110’ ;Tensao de Referencia a ~1.25V, apenas disponivel internamente

movwf VRCON

banksel PORTA ;muda para banco onde está o registo PORTA

inicio

banksel CM1CON0 ;muda para banco onde está o registo CM1CON0

btfss CM1CON0, C1OUT ;verifi ca se o Comparador tem saida activa

goto limpar_portb ;limpa porta B

btfss CM1CON0, C1OUT ; re-verifi ca se o Comparador tem saida activa

goto inicio

banksel PORTB ;muda para banco onde está o registo PORTB

movlw 0xFF

movwf PORTB ;liga porta B por completo

goto inicio ;ciclo infi nito

limpar_portb

banksel PORTB ;muda para banco onde está o registo PORTB

clrf PORTB ;limpa porta B

goto inicio ;ciclo infi nito

;---------------------------

end

Exem

plo 34

Page 117: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 117

Conversor A/D

Este programa disponibiliza o resultado da conversão Analógica/Digital, na porta B.

Esquema eléctrico

Exem

plo 35

Page 118: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 118

Código fonte do programa;#################################################################################;; Este programa disponibiliza o resultado da conversão A/D, na porta B;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

org 0x0000 goto start

org 0x0020start

banksel PORTA ;muda para o banco onde está o registo PORTA clrf PORTA ;desliga buffers da porta antes de confi gurar clrf PORTB ;desliga buffers da porta antes de confi gurar clrf PORTC ;desliga buffers da porta antes de confi gurar

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL movlw b’00000001’ movwf ANSEL ;Confi gura os pinos RA0 e RA3 como entradas do comparador clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA movlw b’00000001’ ;RA0 como entrada, restantes como saídas

Exem

plo 35

Page 119: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 119

movwf TRISA ;move de W para TRISA clrf TRISB ;porta B toda como saida clrf TRISC ;porta C toda como saida

movlw b’00000000’ ;resultado justifi cado à esquerda, e movwf ADCON1 ; usadas tensões de referência internas

banksel ADCON0 ;muda para o banco onde está o registo ADCON0 movlw b’11000001’ ;usa clock de conversão RC, escolhe canal AN0, e liga o ADC movwf ADCON0

inicio

bsf ADCON0, GO ;dá inicio à conversão AD

btfsc ADCON0, GO ;já terminou a conversão? goto $-1 ; não

movf ADRESH, w ; sim, coloca resultado no W movwf PORTB ;mostra resultado ADC na porta B

goto inicio ;ciclo infi nito

;---------------------------

end

Exem

plo 35

Page 120: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 120

Conversor A/D, 2

Este programa disponibiliza o resultado da conversão Analógica/Digital, no mostrador de 7-segmentos.

Esquema eléctrico

Exem

plo 36

Page 121: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 121

Código fonte do programa;#################################################################################;; Este programa mostra o resultado da conversão A/D, no display de 7-segmentos;; v1.0 01/02/2008 PIC16F886;; Autor: António Sérgio Sena, www.senaeng.com;;#################################################################################

processor 16F886 ;confi gura o tipo de CPU usado radix hex ;pre-defi nicao do tipo de valores numericos usados include “P16F886.inc” ;inclui pre-defi nicoes do processador

__confi g _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __confi g _CONFIG2, _WRT_OFF & _BOR40V

;---------------------------

CBLOCK 0x20 temp, temp2 ;variaveis usadas nos temporizadores unidades, dezenas, centenas, milhares ;variaveis usadas para contador do digito

resultado ;para o conversor BCD ENDC

;---------------------------

org 0x0000 goto start

org 0x0020start

banksel PORTA ;muda para o banco onde está o registo PORTA clrf PORTA ;desliga buffers da porta antes de confi gurar clrf PORTB ;desliga buffers da porta antes de confi gurar clrf PORTC ;desliga buffers da porta antes de confi gurar

Exem

plo 36

Page 122: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 122

;confi gura toda a porta A para entrada/saida DIGITAL banksel ANSEL ;muda para o banco onde está o registo ANSEL movlw b’00000001’ movwf ANSEL ;Confi gura os pinos RA0 e RA3 como entradas do comparador clrf ANSELH ;limpa o registo ANSELH

;confi gura portas A e B como entradas/saidas banksel TRISA ;muda para banco onde está o registo TRISA movlw b’00000001’ ;RA0 como entrada, restantes como saídas movwf TRISA ;move de W para TRISA clrf TRISB ;porta B toda como saida clrf TRISC ;porta C toda como saida

movlw b’00000000’ ;resultado justifi cado à esquerda, e movwf ADCON1 ; usadas tensões de referência internas

banksel ADCON0 ;muda para o banco onde está o registo ADCON0 movlw b’11000001’ ;usa clock de conversão RC, escolhe canal AN0, e liga o ADC movwf ADCON0

inicio

bsf ADCON0, GO ;dá inicio à conversão AD btfsc ADCON0, GO ;já terminou a conversão? goto $-1 ; não movf ADRESH, w ; sim, coloca resultado no W call converte_para_BCD ;converte o valor do ADC, para um número BCD ; que se possa visualizar nos 7-segmentos

call mostra_digitos ;mostra contador nos digitos de 7-segmentos

goto inicio ;ciclo infi nito

;---------------------------

tabela addwf PCL,f ;tabela de conversao para 7-segmentos retlw b’00111111’ ;0 retlw b’00000110’ ;1 retlw b’01011011’ ;2 retlw b’01001111’ ;3 retlw b’01100110’ ;4 retlw b’01101101’ ;5 retlw b’01111101’ ;6 retlw b’00000111’ ;7 retlw b’01111111’ ;8

Exem

plo 36

Page 123: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 123

retlw b’01101111’ ;9 retlw b’01110111’ ;a retlw b’01111100’ ;b retlw b’01011000’ ;c retlw b’01011110’ ;d retlw b’01111001’ ;e retlw b’01110001’ ;f retlw 0

;---------------------------

mostra_digitos ;mostra contador nos digitos de 7-segmentos

digito_1 clrf PORTC ;desliga displays movf unidades, w ;carrega valor das unidades call tabela movwf PORTB ;carrega barramento porta B bsf PORTC, 0 ;liga display 1

call atraso_5m

digito_2 clrf PORTC ;desliga displays movf dezenas, w ;carrega valor das dezenas call tabela movwf PORTB ;carrega barramento porta B bsf PORTC, 1 ;liga display 2

call atraso_5m

digito_3 clrf PORTC ;desliga displays movf centenas, w ;carrega valor das centenas call tabela movwf PORTB ;carrega barramento porta B bsf PORTC, 2 ;liga display 1

call atraso_5m

return ;---------------------------

converte_para_BCD ;função que converte um número binário, para três registos BCD

movwf resultado ;guarda o valor a ser convertido

clrf unidades ;limpa registos fi nais clrf dezenas clrf centenas

Exem

plo 36

Page 124: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 124

clrf milhares

sub100 movlw d’100’ subwf resultado, f ;subtrai 100 btfss STATUS, C ;menor que 0? goto outsub100 ; não incf centenas, f ; sim, incrementa uma centena goto sub100 ;volta a fazeroutsub100 movlw d’100’ addwf resultado, f ;soma 100 bcf STATUS, C

sub10 movlw d’10’ subwf resultado, f ;subtrai 10 btfss STATUS, C ;menor que 0? goto outsub10 ; não incf dezenas, f ; sim, incrementa uma dezena goto sub10 ;volta a fazeroutsub10 movlw d’10’ addwf resultado, f ;soma 10 bcf STATUS, C

sub1 movlw 0x01 subwf resultado, f ;subtrai 1 btfss STATUS, C ;menor que 0? goto outsub1 ; não incf unidades, f ; sim, incrementa uma unidade goto sub1 ;volta a fazeroutsub1 incf resultado, f ;soma 1 bcf STATUS, C

return

;---------------------------

atraso_5m movlw 0x0A ;carrega W com o valor 0x0A movwf temp2 ;move valor em W para TEMP

call atraso_500u ; decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-2

Exem

plo 36

Page 125: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 125

return ;sai fora da rotina de ATRASO

;---------------------------

atraso_500u movlw 0xA5 ;carrega W com o valor 0xA5 movwf temp ;move valor em W para TEMP

decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP ;e salta a instrucao seguinte, se o resultado for zero goto $-1 ; return ;sai fora da rotina de ATRASO

;---------------------------

end

Exem

plo 36

Page 126: AA EXEMPLOS senaeng.com microcontroladores PICederterceiro.weebly.com/uploads/2/4/2/7/24278436/micro...microcontroladores PIC Exemplos Práticos antónio sérgio sena :: soluções

microcontroladores PIC Exemplos Práticos

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 126

antónio sérgio sena

www.senaeng.com : : soluções em electrónica

+351.967033209

CONTACTOS

António Sérgio Sena, B.Eng.

[email protected]

www.senaeng.com :: soluções em electrónica e microcontroladores

[email protected]

+351.967033209+351.236215256 (fax)