Sei sulla pagina 1di 171

Microcontroladores PIC Mdulo I

Apostila do Curso de Microcontroladores PIC Mdulo I V.2 03/10/2009

FORA MXIMA MACHINE SERVIOS DE AUTOMAO LIMITADA-ME Av. Getlio Vargas, 70 Sala 32 Centro So Bernardo do Campo SP Cep 09.751-250 Fone: 4330-8889 e-mail: fmaxima@fmaxima.com.br

Apostila organizada e elaborada pela Fora Mxima Machine Servios de Automao Ltda ME. Todos os direitos reservados. proibido a reproduo, parcial ou total, por qualquer meio, sem autorizao por escrito da Fora Mxima, sujeitar o infrator, nos termos da Lei No 6.895, de 17/12/1980

_______________________________1 / 171

Microcontroladores PIC Mdulo I

AGRADECIMENTOS A DEUS; Ao Meu salvador Jesus Cristo; Os meus pais; Aos meus filhos; Ao meu amigo e irmo Marco Antnio Baptista; A minha amiga e irmo Elisabet Osti; Aos espritos iluminados a servio de Deus.

DEDICATRIA Dedico minha vida a DEUS.

_______________________________2 / 171

Microcontroladores PIC Mdulo I

AULA 1 OBJETIVOS Capacitar o aluno a desenvolver um programa bsico para controle de leds utilizando o micro controlador PIC 16F648; Capacitar o aluno a utilizar a ferramenta de programao MPLAB. OBJETIVO DO CURSO Capacitar os alunos a vencer desafios exigidos no desenvolvimento de projetos de hardware e software envolvendo o micro controlador PIC (Peripheral Interface Controller). Capacitar os alunos a competirem no mercado de trabalho oferecendo diferenciais significativos para a ascenso profissional. ASPECTO DOS MICRO CONTROLADORES

INTRODUO Analisando-se a palavra micro-controlador, vemos que este elemento um pequeno componente eletrnico aplicado controlar mquinas ou processo. Apesar da designao de pequeno, este componente oferece uma grande quantidade de recursos tecnolgicos exigidos pela automao. Podemos dizer que o micro controlador um computador, placa me, dentro de um nico chip, ou seja, que em um nico chip encontraremos um processador, memria RAM de dados, memria ROM de programao, I\Os, times, etc. Existem diversos fabricantes de micro-controladores sendo a MICROCHIP o fabricante dos micro-controladores da linha PIC (Interface de Controle de Perifricos). A linha de micro-controladores PIC so largamente utilizados no mercado de desenvolvimento de produtos e automao, tendo como vantagens a praticidade, velocidade de processamento, recursos tecnolgicos adequados a cada segmento de mercado, fcil aplicao, set reduzido de instrues, custo baixo e ferramentas de desenvolvimento gratuitas.

_______________________________3 / 171

Microcontroladores PIC Mdulo I

A ferramenta utilizada para a programao dos micro-controladores PIC o software MPLAB, disponvel gratuitamente na pgina inicial do site da MicroChip (WWW.microchip.com). CARACTERSTICAS GERAIS Programao em linguagem Assembler ou C; Potncia dissipada: 800mW; Corrente mxima de sada por pino de 20mA; Velocidade de processamento (clock) de at 20MHz; Trinta e cinco instrues bsicas; Dimenses reduzidas; Grande disponibilidade de recursos tecnolgicos; Fcil aplicao; Ferramenta de programao (MPLAB) gratuita; PINAGEM GERAL DO PIC 16F648

PINO 14 VDD Pino de alimentao positiva de 5 Volts. PINO 5 VSS Pino de alimentao de 0 Volts

_______________________________4 / 171

Microcontroladores PIC Mdulo I

_______________________________5 / 171

Microcontroladores PIC Mdulo I

PINOS DE RA0 A RA7 Este conjunto de pinos chamado de GRUPO A e so utilizados para conectarmos botes, sensores, motores, vlvulas, alarmes, etc. Estes pinos podem ser configurados individualmente como entrada ou sada de sinais dependendo do tipo de elemento que ligamos ao pino. Quando conectamos ao pino elementos como boto, ou sensor, ou chaves de fim de curso ou contatos em geral, o pino deve ser configurado como entrada. Se conectamos ao pino elementos como controlar, motores, vlvulas, lmpadas, etc., configuramos o pino como sada. Para efeito de projeto, a corrente mxima que podemos drenar de um pino de 20mA (0,02 A) e a tenso de sada de 5 Volts. Somente o pino RA5 no pode ser configurado como sada. PINOS DE RB0 A RB7 Este conjunto de pinos pertencem ao GRUPO B e possuem as mesmas caractersticas dos pinos RA0 a RA7. PORTA O PORTA um registrador de oito bits que pertence memria RAM do PIC. Sua funo enviar ou receber sinais dos pinos do GRUPO A, ou seja, possui uma imagem dos pinos. Sendo assim, o bit0 do registrador PORTA uma imagem do pino RA0, o bit1 do PORTA uma imagem do pino RA1 e assim por diante. Quando o pino for configurado como entrada de sinal, o pino envia o sinal que ele recebeu para o bit do PORTA correspondente a ele. Quando configurado como entrada o bit do PORTA que envia o seu contedo para o pino.

_______________________________6 / 171

Microcontroladores PIC Mdulo I

Projeto 1
Objetivo Acender dois leds. Hardware

LIGA LED

O LED

Caracterstica do led Tenso alimentao: 1,7 Volts Corrente nominal: 15 mA

_______________________________7 / 171

Microcontroladores PIC Mdulo I

Clculo do Resistor R = Tenso sobre o resistor (VR) dividido pela corrente do led (R= VR / IL) Tenso no resistor = tenso do pino tenso de alimentao do led VR = 5 1,7 R = 3,3 / 0,015 R = 220 VR = 5 1,7 VR = 3,3 Volts

_______________________________8 / 171

Microcontroladores PIC Mdulo I

ETAPAS DE DESENVOLVIMENTO DE UM PROGRAMA

_______________________________9 / 171

Microcontroladores PIC Mdulo I

ALGORITMO Algoritmo a descrio seqencial da soluo de um problema Para o projeto proposto teremos: 1 Habilitar o modo de configurao; 2 Configurar o pino rb0 como sada; 3 Desabilitar o modo de configurao; 4 Setar o pino rb0 para ligar o led. MNEMNICO Mnemnico a traduo do algoritmo para a linguagem de programao do PIC, a linguagem assembler. UTILIZANDO O MPLAB IDE O software MPLAB IDE a ferramenta de programao do PIC e est disponvel gratuitamente no site WWW.microchip.com. Inicialmente devemos carregar este programa para que possamos digitar nosso programa e grav-lo no PIC. CRIANDO UM NOVO PROJETO 1) Clicar na opo Projet + New

_______________________________10 / 171

Microcontroladores PIC Mdulo I

2) Digitar o nome do projeto (LED01), selecionar a pasta de trabalho atravs do boto Browse e clicar no boto Ok

CONFIGURANDO O AMBIENTE DE TRABALHO 3) Selecionar a opo Configure Select Divice

4) Selecionar a opo PIC16F648A

_______________________________11 / 171

Microcontroladores PIC Mdulo I

5) Selecionar a opo View Project

CRIANDO UM PROGRAMA FONTE 6) Selecionar a opo File New

8) Maximizar a janela de edio de texto e digitar o programa e digitar o programa

_______________________________12 / 171

Microcontroladores PIC Mdulo I

9) Salvar o programa com o nome LED01.ASM

10) Anexar o programa fonte ao projeto clicando com o boto do mouse direito na opo Source Files Add Files...

_______________________________13 / 171

Microcontroladores PIC Mdulo I

11) Selecionar o arquivo LED01.ASM

12) Compilar o programa apertando a tecla <F10> 13) Selecionar a opo

_______________________________14 / 171

Microcontroladores PIC Mdulo I

ENTENDENDO O PROGRAMA

Caractere ( ; ) Funo Indicar ao programa compilador, programa que traduz a linguagem a assembler para os cdigos de mquina, para desprezar a linha.

#INCLUDE <P16F648A.INC> Funo Esta uma diretiva de compilao que faz com que o programa compilador inclua o arquivo P16F648A.INC neste programa. Este arquivo possui as diretivas de configurao do modelo selecionado e indica ao compilador quais recursos esto disponveis.

Instruo BSF STATUS,5 BSF (Bit Set File) Instruo para setar bit STATUS,5 Bit5 do registro Status Quando setado liga o modo de c configurao dos pinos.

_______________________________15 / 171

Microcontroladores PIC Mdulo I

Instruo BCF STATUS,5 Esta instruo reseta o bit5 do registro status, desligando o modo de c configurao.

Instruo BCF TRISB,0 Reseta o bit0 do registro TRISB configurando o pino RB0 como sada BCF (Bit Clear File) Instruo para resetar bit TRISB Registrador de oito bits cuja funo permitir configurar os pinos do grupo B (RB0 a RB7) como entrada ou sada. Setado, o pino ser configurado como entrada e resetado ficar configurado como sada. TRISB,0 Configura o pino RB0 TRISB,1 Configura o pino RB1 TRISB,2 Configura o pino RB2... TRISB,7 Configura o pino RB7 R

Instruo BSF PORTB,0 Seta o bit0 do registro PORTB ligando o led. PORTB Permite acessar os pinos do grupo B, ou seja, de RB0 a RB7. PORTB,0 Seta ou Reseta o pino RB0 PORTB,1 Seta ou Reseta o pino RB1 PORTB,2 Seta ou Reseta o pino RB2 ... PORTB,7 Seta ou Reseta o pino RB7 R

_______________________________16 / 171

Microcontroladores PIC Mdulo I

Instruo NOP E Esta instruo gasta um ciclo de mquina (1us)

Instruo GOTO $ Esta instruo faz o micro-controlador executar a mesma instruo travando a e execuo do programa.

_______________________________17 / 171

Microcontroladores PIC Mdulo I

DESAFIO S 1) Desenvolver um projeto de hardware e software para acendermos quatro leds conectados aos pinos RB0, RB1, RB2 e RB3. Criar o projeto LED02 Criar o fonte LED02.ASM Dados do projeto. Tenso de alimentao do led: 3V. Corrente nominal: 15 mA Usar o seguinte modelo de programa ;------------------------------------------------------------------------------------------------; ; PROGRAMA PARA LIGAR QUATRO LEDS ; ;------------------------------------------------------------------------------------------------;Objetivos: ; Ligar quatro leds ; ;Data ;Autores ; ;Entradas ; RA0 => ; RA1 => ; RA2 => ; RA3 => ; RA4 => ; RA5 => ; RA6 => ; RA7 => ; ;Sadas ; RB0 => Led 1 ; RB1 => Led 2 ; RB2 => ; RB3 => ; RB4 => ; RB5 => ; RB6 => ; RB7 => ; ;Algoritmo ; Configura os I/Os ; Liga os leds ; Fim ;------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

_______________________________18 / 171

Microcontroladores PIC Mdulo I

;------------------------------------------------------------------------------------------------Config_IOs ;------------------------------------------------------------------------------------------------Inicializacao ;------------------------------------------------------------------------------------------------LigaLeds ;------------------------------------------------------------------------------------------------Fim GOTO $ ;------------------------------------------------------------------------------------------------END

_______________________________19 / 171

Microcontroladores PIC Mdulo I

2) Desenvolver um programa para ligar oito leds conectados aos pinos de RB0 a RB7. Salv-lo como LED03.

3) Desenvolver um programa para acender somente os leds conectados aos pinos RB0, RB2, RB4 e RB6. Salv-lo como LED04.

_______________________________20 / 171

Microcontroladores PIC Mdulo I

AULA 2 OBJETIVOS Capacitar o aluno a desenvolver um programa utilizando a tcnica de programao modular e estruturada; Capacitar o aluno a utilizar instrues de movimentao de dados e temporizao por software. INSTRUES DE MOVIMENTAO

Instruo MOVLW (Mov Literal Work) Funo: Carrega um valor (literal) para o registro W. Sintaxe: MOVLW valor Exemplos: MOVLW .10 MOVLW B10001111 ;copia o valor 10 para W (W = 10) ;copia o valor binrio 10001111 ; ;para o registro W (W = 10001111)

Instruo MOVWF (Mov Work to File) Funo: Copia o valor do registro W para um outro registro Sintaxe: MOVWF File Exemplos: MOVWF TRISB ;copia o valor do registro W para o ;registro TRISB (TRISB = W) ;copia o valor do registro W para o ; ;registro PORTB (PORTB = W)

MOVWF PORTB

_______________________________21 / 171

Microcontroladores PIC Mdulo I

INSTRUES DE LIMPESA DE REGISTROS

Instruo CLRW Funo: Zerar o registro W Exemplo: CLRW ;W = 0

Instruo CLRF Funo: Zerar um file Sintaxe: MOVWF File Exemplos: CLRF TRISB ;TRISB = 0

CLRF PORTB

; ;PORTB = 0

DESAFIO 1) Alterar o programa que acende os oito leds conectados ao portb utilizando as instrues movlw, movwf e clrf. Salve o programa como LED05. Modificar o cabealho para ;------------------------------------------------------------------------------------------------; ; PROGRAMA PARA LIGAR OITO LEDS DO PORTB ; ;------------------------------------------------------------------------------------------------;Objetivos: ; Ligar os oito leds conectados ao portb ; Utilizar as instrues movlw, movwf e clrf 2) Alterar o programa que acende os leds pares do portb (rb2,rb4 e rb6) utilizando as instrues movlw, movwf e clrf. Salve o programa como LED06.ASM.

_______________________________22 / 171

Microcontroladores PIC Mdulo I

P Projeto Pisca01

Objetivo Criar um programa para piscar os leds na freqncia de 0,5 Hz, ou seja, meio segundo ligado e meio segundo desligado. Algoritmo Configurar os I/Os Inicializar o sistema Loop Acender os leds Desligar os leds Voltar para o label Loop Mnemnico ;------------------------------------------------------------------------------------------------; ; PROGRAMA PARA PISCAR LEDs ; ;------------------------------------------------------------------------------------------------;Objetivos: ; Piscar dois leds a uma freqncia de 0,5Hz ; ;Data ;Autores ; ;Entradas ; RA0 => ; RA1 => ; RA2 => ; RA3 => ; RA4 => ; RA5 => ; RA6 => ; RA7 => ; ;Sadas ; RB0 => Led 1 ; RB1 => Led 2 ; RB2 => ; RB3 => ; RB4 => ; RB5 => ; RB6 => ; RB7 => ;

_______________________________23 / 171

Microcontroladores PIC Mdulo I

;Algoritmo ; Inicializar o sistema ;Loop ; Acender os leds ; Desligar os leds ; Voltar para o label Loop ;------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------MaskTrisA MaskTrisB EQU EQU B'11111111' B'00000000'

;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

;------------------------------------------------------------------------------------------------Config_IOs BSF MOVLW MOVWF MOVLW MOVWF STATUS,5 MaskTrisA TRISA MaskTrisB TRISB ;liga o modo de configurao ;w ;trisa ;w ;trisb = MaskPortA (11111111) = MaskPortA (11111111) = MakPortB (00000000) = MaskPortb (00000000)

BCF STATUS,5 ;desliga o modo de configurao ;------------------------------------------------------------------------------------------------LigaLeds MOVLW B00000011 ;mascara para ligar os dois leds MOVWF PORTB ;liga os dois leds (rb0 e rb1) ;------------------------------------------------------------------------------------------------DesligaLeds CLRF PORTB ;desliga os leds ;------------------------------------------------------------------------------------------------Fim GOTO LigaLeds ;------------------------------------------------------------------------------------------------END 1) Criar um projeto chamado PISCA01 2) Digitar o programa fonte acima e salv-lo como PISCA01.ASM 3) Rodar o programa e observar se os leds realmente piscam.

_______________________________24 / 171

Microcontroladores PIC Mdulo I

ENTENDENDO O PROGRAMA

Clausula EQU Funo: Atribuir um valor a um label Exemplo: Wtime EQU .20 MOVLW ;nome WTime = .20 Wtime ; ;W = 20

Observando o programa sendo executado vemos que os leds NO piscam. Por que? Porque o micro-controlador executa uma instruo a cada um micro-segundo, ou seja, executa um milho de instrues em segundo. liga o led e 1 milionsimo de segundo depois o apaga e assim sucessivamente. Insto ocorre porque o micro-controlador trabalha a partir de um circuito oscilador que gera um sinal peridico, chamado de clock, com freqncia de 4MHZ, ou seja, quatro milhes de pulsos por segundo. Este sinal sincroniza o funcionamento do microcontrolador. No caso do PIC a freqncia interna de funcionamento quatro vezes menor, ou seja, 1 MHZ. Para resolvermos este problema, devemos ligar os leds e atrasar o micro-controlador em 0,5 segundos para depois deslig-lo. Este atraso ser feito fazendo com que o micro-controlador conte de um determinado valor at zero. Enquanto ele est contando, o tempo est passando. Neste caso, necessitamos criar um contador, inicializ-lo com um determinado valor e fazer com que o micro-controlador o decremente at que o contador chegue a zero. O algoritmo da rotina de tempo ser: Inicializar o contador Loop Decrementa o contador e salta a prxima linha Se contador igual a zero Voltar para o label Loop

_______________________________25 / 171

Microcontroladores PIC Mdulo I

CRIANDO UM CONTADOR

Clusula CBLOCK 0X20 Funo: Criar um bloco de variveis na memria RAM de dados. A memria RAM uma rea destinada a guardar valores temporrios, ou seja, uma rea de rascunho. 0x20 Endereo hexadecimal do incio da rea de rascunho Exemplo: CBLOCK 0X20 WContador1 WContador2 ENDC A clusula ENDC define o trmino do bloco de variveis

Instruo DECFSZ (Decrement Skip Zero) Funo: Decrementa um registro e salta a prxima instruo caso o registro seja igual a zero. Sintaxe: DECFSZ Exemplo: DECFSZ GOTO . ... File,F WContador1,F;WContador = WContador - 1 $-1 ;se diferente de zero, volta uma linha

_______________________________26 / 171

Microcontroladores PIC Mdulo I

Contador =

Contador = Contador - 1

Contado r =0?

_______________________________27 / 171

Microcontroladores PIC Mdulo I

INICIALIZANDO O CONTADOR A rea de dados RAM do PIC de oito bits. Isto significa que o definirmos um contador, este contador poder assumir o valor mximo 255.

Delay de 1ms Funo: Causar um atraso de 1ms (um milsimo de segundo) CBLOCK 0X20 WDelay1 ENDC MOVLW MOVWF Delay NOP DECFSZ GOTO WDelay,F $-2 ;not operation (1us) ;WDelay = WDelay 1 (1us) ;se diferente de zero, volta 2 linhas (2us) .250 WDelay1, ;w = 250 ;WDelay = 250

Observe que o loop acima composto por 3 comandos (nop, decfsz e goto) com um total de 4us por decremento, portanto, 250 decrementos teremos um tempo total de 250 * 4us = 1ms. Para obter um tempo de 0,5 segundo, teramos que executar este procedimento 500 vezes. Desta forma temos que criar um outro contador e inicializ-lo com 500, o que no possvel uma vez que o contador pode assumir o nmero mximo de 255. E Ento faremos uma nova estratgia.

_______________________________28 / 171

Microcontroladores PIC Mdulo I

Delay de 0,5s Funo: Causar um atraso de 0,5s CBLOCK 0X20 WDelay1 WDelay2 WDelay3 ENDC Delay05s MOVLW MOVWF Delay01s MOVLW MOVWF Delay1ms MOVLW MOVWF NOP DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO .5 WDelay3 .100 WDelay2 .250 WDelay1 WDelay1,F $-2 WDelay2,F Delay1ms WDelay3,F D Delay01 ;w = 5 ;WDelay = 5 vezes ;w = 100 ;WDelay2 = 100 vezes ;w = 250 ;WDelay = 250 vezes ;1us ;executou 250 vezes? (1ms?) ;no, volta 2 linhas ;executou 100 vezes 1ms? (0,1s?) ;no, execute mais 0,1s ;executou 5 vezes 0,1s? (0,5s?)

_______________________________29 / 171

Microcontroladores PIC Mdulo I

ALTERAR O PROGRAMA E SALV-LO COMO PISCA01_V2.ASM MNEMNICO PARA PISCAR LED A 0,5Hz Altere o programa para piscar led a partir do descritivo abaixo . ;Algoritmo Inicializar o sistema Loop Acender os leds Delay de 0,5 segundos Desligar os leds Delay de 0,5 segundos Voltar para o label Loop ;------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------MaskTrisA MaskTrisB EQU EQU B'11111111' B'00000000'

;------------------------------------------------------------------------------------------------CBLOCK WDelay1 WDelay2 WDelay3 ENDC ;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

0X20

;------------------------------------------------------------------------------------------------Config_IOs BSF MOVLW MOVWF MOVLW MOVWF STATUS,5 MaskTrisA TRISA MaskTrisB TRISB ;liga o modo de configurao ;w ;trisa ;w ;trisb = MaskPortA = MaskPortA = MakPortB = MaskPortb

BCF STATUS,5 ;desliga o modo de configurao ;------------------------------------------------------------------------------------------------LigaLeds MOVLW B00000011 ;mascara para ligar os dois leds MOVWF PORTB ;liga os dois leds (rb0 e rb1) ;-------------------------------------------------------------------------------------------------

_______________________________30 / 171

Microcontroladores PIC Mdulo I

Delay05s MOVLW MOVWF Delay01s MOVLW MOVWF Delay1ms MOVLW MOVWF NOP DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO

.5 WDelay3 .100 WDelay2 .250 WDelay1

;w = 5 ;WDelay = 5 vezes ;w = 100 ;WDelay2 = 100 vezes

;w = 250 ;WDelay = 250 vezes ;1us WDelay1,F ;executou 250 vezes? (1ms?) $-2 ;no, volta 2 linhas WDelay2,F ;executou 100 vezes 1ms? (0,1s?) Delay1ms ;no, execute mais 0,1s WDelay3,F ;executou 5 vezes 0,1s? (0,5s?) Delay01

;------------------------------------------------------------------------------------------------DesligaLeds CLRF PORTB ;desliga os leds ;-------------------------------------------------------------------------------------------------

Delay05s1 MOVLW MOVWF Delay01s1 MOVLW MOVWF Delay1ms1 MOVLW MOVWF NOP DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO

.5 WDelay3 .100 WDelay2 .250 WDelay1

;w = 5 ;WDelay = 5 vezes ;w = 100 ;WDelay2 = 100 vezes

;w = 250 ;WDelay = 250 vezes ;1us WDelay1,F ;executou 250 vezes? (1ms?) $-2 ;no, volta 2 linhas WDelay2,F ;executou 100 vezes 1ms? (0,1s?) Delay1ms1 ;no, execute mais 0,1s WDelay3,F ;executou 5 vezes 0,1s? (0,5s?) Delay011

;------------------------------------------------------------------------------------------------Fim GOTO LigaLeds ;------------------------------------------------------------------------------------------------END

_______________________________31 / 171

Microcontroladores PIC Mdulo I

Observe que aps ligarmos o led demos um atraso de 0,5 segundos e aps deslig-lo tambm. Isto exigiu que escrevssemos, praticamente, o mesmo procedimento. Vamos agora aplicar uma nova tcnica de programao chamada programao modular, e para isto necessitamos entender um novo conceito de programao chamado de rotina. O objetivo escrever o procedimento de tempo somente uma vez e de forma que possamos execut-lo vrias vezes. Vamos ainda criar um rotina cujo tempo de atraso no seja fixo e dessa forma ser til em vrios processos. Para tanto vamos entender o comando CALL.

Instruo CALL e RETURN Funo: Desviar o fluxo normal do programa, executar um procedimento e retornar ao fluxo normal do programa. Exemplo: Piscar um led a cada 0,5s 1 BSF PORTB,0 ;liga o led 2 CALL DELAY05s ;atraso de 0,5s 3 BCF PORTB,0 ;desliga o led 4 CALL DELAY05s ;atraso de 0,5s 5 GOTO $-4 ;volta a piscar ;----------------------------------------------------------------------------------6 DELAY05s . . 20 RETURN ; ;----------------------------------------------------------------------------------

ENTENDENDO O COMANDO CALL E RETURN Quando o micro-controlador encontra a instruo CALL na linha 2, ele salva o endereo de retorno (3) em uma rea de memria especial chamada de rea de pilha e passa a executar os comandos a partir da linha 6, ou seja, a executar a rotina DELAY05s. Ao encontrar a instruo RETURN, o micro-controlador restaura o endereo que havia salvado e passa a executar o programa a partir da linha 3, ou seja, retorna ao programa principal. Da mesma forma ocorre quando o micro-controlador encontra o comando CALL na linha 4. Ele salva o endereo de retorno (5), executa a rotina DELAY05s, linha 6, e retorna ao fluxo normal, linha 5, quando encontra a instruo RETURN, na linha 20. Vamos alterar o programa e velo funcionar. A alterao ser feita depois do procedimento de configurao, no lugar do label LigaLeds.

_______________________________32 / 171

Microcontroladores PIC Mdulo I

. . . ;--------------------------------------------------------------------------------Loop CALL LigaLeds CALL Delay05s CALL DesligaLeds CALL Delay05s GOTO Loop ;--------------------------------------------------------------------------------LigaLeds MOVLW B00000011 MOVLW PORTB RETURN ;--------------------------------------------------------------------------------DesligaLeds CLRF PORTB RETURN ;--------------------------------------------------------------------------------Delay05s . . . RETURN ;--------------------------------------------------------------------------------END ALTERAR O PROGRAMA E SALV-LO COMO PISCA01_V3.ASM

_______________________________33 / 171

Microcontroladores PIC Mdulo I

ESTRUTURANDO A ROTINA DE DELAY Observe que a rotina de delay serve apenas para 0,5 segundos, o que exigiria escrevermos uma rotina para 1 segundo, 2 segundos e assim sucessivamente. Vamos desenvolver uma rotina genrica que aguarda o tempo necessrio. Para isto, o tempo a aguardar deve ser fornecido pelo programa principal como parmetro. Esta rotina ser digitada e salva em um arquivo separado chamado Delay.Inc. MNEMNICO DA ROTINA DELAY ;---------------------------------------------------------------------------------------------------------------; ; ROTINA DE DELAY ; ; ;Esta rotina tem como funo aguardar um tempo de 0,1 a no mximo 25,5 segundos ; ;Entrada ; WDelay => tempo a aguardar ; ;Obs ; Definir as variveis WDelay, WtimeL e WtimeH no programa principal ; ; CBLOCK 0X20 ; ;WDelay ;WtimeL ;WtimeH ; ; ENDC ;---------------------------------------------------------------------------------------------------------------Delayxs ;loop para atraso de 0,1 segundos MOVLW .100 ;w = 100 vezes (100 * 0,001 = 0,1 segundos) MOVWF WtimeH ;--------------------------------------------------------------------------------------------------------------;loop de 1ms MOVLW .250 ;w = 250 vezes MOVWF WtimeL ;WtimeL = 250 vezes NOP DECFSZ WtimeL,F ;decrementa WtimeL e salta se zero GOTO $-2 ;--------------------------------------------------------------------------------------------------------------DECFSZ WtimeH,F ;deu 0,1 segundos? GOTO $-6 ;no, aguarda + 1ms ;--------------------------------------------------------------------------------------------------------------DECFSZ WDelay,F ;terminou o delay? GOTO Delayxs ;no, aguarda + 0,1 segundo ;--------------------------------------------------------------------------------------------------------------RETURN ;sim, retorna ;---------------------------------------------------------------------------------------------------------------

_______________________________34 / 171

Microcontroladores PIC Mdulo I

ALTERAR O PROGRAMA E SALV-LO COMO PISCA01_V4.ASM . . ; ;Algoritmo ; Inicializar o sistema ;Loop ; Acender os leds ; Delay ; Desligar os leds ; Delay ; Voltar para o label Loop ;------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------MaskTrisA MaskTrisB MaskPortB RamIni EQU EQU EQU EQU B'11111111' ;mascara de configurao do porta B'00000000' ;mascara de configurao do portb B'00000011' ;mascara para acender o leds 0x20 ;endereo inicial da rea de dados

V1time EQU 5 ;delay para 0,5s para led ligado V2time EQU 5 ;delay para 0,5s para led desligado ;------------------------------------------------------------------------------------------------CBLOCK WDelay WtimeH WtimeL RamIni ;varivel para delay em dcimos de segundos ;varivel auxiliar da rotina delayxs ;varivel auxiliar da rotina delayxs

ENDC ;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

;------------------------------------------------------------------------------------------------Config_IOs BSF MOVLW MOVWF MOVLW MOVWF BCF STATUS,5 MaskTrisA TRISA MaskTrisB TRISB STATUS,5 ;liga o modo de configurao ;w = MaskPortA ;trisa = MaskPortA ;w = MakPortB ;trisb = MaskPortb ;desliga o modo de configurao

_______________________________35 / 171

Microcontroladores PIC Mdulo I

;------------------------------------------------------------------------------------------------Loop CALL LigaLeds MOVLW V1time ;delay tempo ligado MOVWF WDelay CALL Delayxs ;aguarda x segundos ;------------------------------------------------------------------------------------------------CALL DesligaLeds MOVLW V2time ;delay tempo ligado MOVWF WDelay CALL Delayxs ;aguarda x segundos GOTO Loop ;------------------------------------------------------------------------------------------------LigaLeds MOVLW MaskPortB ;mascara para acender os leds MOVWF PORTB RETURN ;------------------------------------------------------------------------------------------------DesligaLeds CLRF PORTB ;desliga os leds RETURN ;------------------------------------------------------------------------------------------------#INCLUDE <Delay.Inc>

;------------------------------------------------------------------------------------------------END ;------------------------------------------------------------------------------------------------DESAFIOS Altere o programa para piscar quatro leds menos significativos do portb (rb0 a rb3) a cada 1 segundo. Desenvolver um programa para piscar alternadamente o nibble menos significativo e o nible mais significativo do portb. O nibble menos significativo ficar ligado por 0,5 segundo e o nible mais significativo por 2 segundos.

_______________________________36 / 171

Microcontroladores PIC Mdulo I

AULA 3 OBJETIVOS Capacitar o aluno a desenvolver um programa de controle on off. COMANDO DE TESTE DE BIT

Instruo BTFSS
Funo: Testar um bit de um registro e saltar o prximo comando se bit = 1 Exemplo: BTFSSPORTA,0 GOTO $-1 CALL ROTINA1 ;pino RA0 = 1? ;no, volta 1 linha ; ;sim, segue o programa

Instruo BTFSC

Funo: Testar um bit de um registro e saltar o prximo comando se bit = 0 Exemplo: BTFSC PORTA,0 ;pino RA0 = 0? GOTO $-1 ;no, volta 1 linha CALL ROTINA1 ;sim, segue o programa

DESAFIO Criar um projeto para controlar o funcionamento de um pisca-pisca. Ao acionar o boto Start, pino RA0, piscar os nibble menos significativo do portb.

_______________________________37 / 171

Microcontroladores PIC Mdulo I

Projeto Pisca02
HARDWARE

PULL-DOWN Os resistores de 1K no circuito acima servem para aterrar possveis rudos que possam entrar pelos terminais dos botes. Isto evita que o micro-controlador possa entender que o boto foi acionado. O resistor de 1K serve para evitar um curto-circuito quando o boto acionado.

_______________________________38 / 171

Microcontroladores PIC Mdulo I

#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------MaskTrisA MaskTrisB MaskPortB MaskCmcon RamIni EQU EQU EQU EQU EQU B'11111111' B'00000000' B'00000011' B'00000111' 0x20 ;mascara de configurao do porta ;mascara de configurao do portb ;mascara para acender o leds ;desliga comparadores (ra0,ra1,ra2,ra3)

;endereo inicial da rea de dados

V1time EQU 5 ;delay para 0,5s para led ligado V2time EQU 5 ;delay para 0,5s para led desligado ;------------------------------------------------------------------------------------------------CBLOCK WDelay WtimeH WtimeL RamIni ;varivel para delay em dcimos de segundos ;varivel auxiliar da rotina delayxs ;varivel auxiliar da rotina delayxs

ENDC ;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

;------------------------------------------------------------------------------------------------Config_IOs MOVLW MaskCmcon MOVWF CMCON BSF STATUS,5 ;liga o modo de configurao MOVLW MaskTrisA ;w = MaskPortA MOVWF TRISA ;trisa = MaskPortA MOVLW MaskTrisB ;w = MakPortB MOVWF TRISB ;trisb = MaskPortb BCF STATUS,5 ;desliga o modo de configurao ;------------------------------------------------------------------------------------------------CLRF PORTB ;portb = 0 ;aguarda o boto Start ser acionado BTFSS PORTA,0 ;boto Start On? GOTO $-1 ;no, volta a verificar o estado do boto Loop CALL ComplementaPortb MOVLW V1time ;delay tempo ligado MOVWF WDelay CALL Delayxs ;aguarda x segundos GOTO Loop ;-------------------------------------------------------------------------------------------------

_______________________________39 / 171

Microcontroladores PIC Mdulo I

ComplementaPortb MOVLW XORWF B'00001111' ;mascara para complementar o nibble PORTB,F ;inverte os bits do portb cujo bits da mascara ;estiverem setados

RETURN ;------------------------------------------------------------------------------------------------#INCLUDE <Delay.Inc>

;------------------------------------------------------------------------------------------------END ;-------------------------------------------------------------------------------------------------

Registrador CMCON Funo: Habilitar ou desabiliar a entradas de comparadores dos pinos RA0, RA1, RA2 e RA3. Aps um reset, os pinos RA0, RA1, RA2 e RA3, so configurados como entrada de comparadores, portanto, os botes conectados a estes pinos no sero reconhecidos uma vez que o sinal de um boto digital. Para habilitar o reconhecimento do sinal digital, setamos estes bits. No programa acima temos: MaskCmcon EQU B00001111 MOVLW MOVWF MaskCmcon CMCON ;w = 00001111 ;habilita entrada digital

_______________________________40 / 171

Microcontroladores PIC Mdulo I

Instruo XORWF Funo: Fazer uma operao OU EXCLUSIVA entre o registro W e um file A funo OU EXCLUSIVA apresenta a sada em nvel alto quando as entradas forem diferentes. TABELA VERDADE

BAS000011101110

DESAFIOS 1) Criar um projeto para controlar o funcionamento de um pisca-pisca. Ao acionar o boto Start,pino RA0, piscar os nibble menos significativo do portb. Ao acionar o boto Stop, pino RA1, parar de piscar e aguardar o boto Start. 2) Criar um programa para piscar os leds do portb sequencialmente. Ao acionar o boto do Start, pino RA0, os leds devem piscar at que o boto Stop seja acionado. Primeiramente, o led RB0 deve acender por 0,5 segundos. Logo aps, o led RB1 deve acender e o led RB0 deve apagar por 0,5 segundos e assim sucessivamente. Veja a sequencia: RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0

_______________________________41 / 171

Flag Cary (STATUS,0) Funo: Indicar quando houve estouro do oitavo para o nono bit.
Microcontroladores PIC Mdulo I

Instruo RLF Funo: Rotacionar os bits de um determinado file para a esquerda Exemplo: BCF STATUS,0 ;flag cary = 0 MOVLW B10000001 MOVWF PORTB ;portb = 10000001 RLF PORTB,F ;portb = 00000010 ;flag cary = 1

CaryBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0

Instruo RRF Funo: Rotacionar os bits de um determinado file para a direita Exemplo: BSF STATUS,0 ;flag cary = 1 MOVLW B00000010 MOVWF PORTB ;portb = 00000010 RRF PORTB,F ;portb = 10000001 ;flag cary = 0

CaryBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0

_______________________________42 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------------; PROGRAMA ROTACIONA O PORTB PARA ESQUERDA A CADA 0,1s ; ;00000001 ;00000010 ;00000100 ;00001000 ;00010000 ;00100000 ;01000000 ;10000000 ;00000001 ;---------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------MaskTrisA MaskTrisB MaskPortB MaskCmcon RamIni EQU EQU EQU EQU EQU B'11111111' B'00000000' B'00000011' B'00000111' 0x20 ;mascara de configurao do porta ;mascara de configurao do portb ;mascara para acender o leds ;desliga comparadores (ra0,ra1,ra2,ra3)

;endereo inicial da rea de dados

V1time EQU 1 ;delay de 0,1s para rotacionar ;------------------------------------------------------------------------------------------------CBLOCK WDelay WtimeH WtimeL RamIni ;varivel para delay em dcimos de segundos ;varivel auxiliar da rotina delayxs ;varivel auxiliar da rotina delayxs

ENDC ;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

;------------------------------------------------------------------------------------------------Config_IOs MOVLW MaskCmcon MOVWF CMCON BSF STATUS,5 ;liga o modo de configurao MOVLW MaskTrisA ;w = MaskPortA MOVWF TRISA ;trisa = MaskPortA MOVLW MaskTrisB ;w = MakPortB MOVWF TRISB ;trisb = MaskPortb BCF STATUS,5 ;desliga o modo de configurao ;-----------------------------------------------------------------------------------------------CLRF PORTB ;portb = 0 BSF PORTB ;portb = 00000001 BSF STATUS,0 ;flag cary = 1

_______________________________43 / 171

Microcontroladores PIC Mdulo I

Loop MOVLW V1time ;delay tempo ligado MOVWF WDelay CALL Delayxs ;aguarda x segundos RLF PORTB,F ;rotate left portb BTFSC STATUS,0 ;cary = 1? RLF PORTB,F ;sim GOTO Loop ;no ;------------------------------------------------------------------------------------------------DESAFIO Criar um programa para rotacionar os bits do portb para a esquerda a cada 0,1 segundos at o oitavo bit. A seguir retornar at o bit0 e repetir a sequncia. 00000001 00000010 . . 10000000 01000000 00100000 00010000 . . 00000001

_______________________________44 / 171

Microcontroladores PIC Mdulo I

Controle de Motor Verso 1


Objetivo Controlar o acionamento de um motor. Descrio Ao acionar o boto Ajuste, pino RA0, o motor dever ser ligado e manter-se ligado enquanto o boto estiver acionado. HARDWARE

D1 = 1N4148 R1 = 330 R2 = 102

_______________________________45 / 171

Microcontroladores PIC Mdulo I

;------------------------------------------------------------------------------------------------; ; CONTROLE ON OFF DE MOTOR ; ;------------------------------------------------------------------------------------------------;Objetivos: ; Controlar o acionamento de um motor ; ;Data ;Autores ; ;Entradas ; RA0 => Boto Liga (=1, acionado) ; RA1 => ; RA2 => ; RA3 => ; RA4 => ; RA5 => ; RA6 => ; RA7 => ; ;Sadas ; RB0 => ; RB1 => ; RB2 => ; RB3 => ; RB4 => ; RB5 => ; RB6 => Acionamento do motor (=1, liga) ; RB7 => ; ;Descrio ; Liga o motor ao acionar o boto Liga e o mantm assim enquanto o boto ; estiver acionado. ; ;Algoritmo ; Configura os I/Os ; Desliga o motor ;Loop ; Aguarda o boto Liga ser acionado ; Liga o motor ; Aguarda o boto Liga ser desacionado ; Desliga o motor ; Loop ;------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;------------------------------------------------------------------------------------------------__CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT

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

_______________________________46 / 171

Microcontroladores PIC Mdulo I

;------------------------------------------------------------------------------------------------#Define Liga Bsf #Define Desliga Bcf #Define Configuracao STATUS,5 #Define BotaoLiga PORTA,0 #Define Motor PORTB,6 ;------------------------------------------------------------------------------------------------MaskTrisA EQU B'11111111' ;mascara de configurao do porta MaskTrisB EQU B'00000000' ;mascara de configurao do portb MaskPortB EQU B'00000011' ;mascara para acender o leds MaskCmcon EQU B'00000111' ;desliga comparadores (ra0,ra1,ra2,ra3) ;------------------------------------------------------------------------------------------------AguardaLigar Macro Btfss BotaoLiga ;boto Liga acionado? Goto $-1 ;no, volta Endm ;----------------------------------------------------------------------------------------------------------Config_IOs Macro Movlw MaskCmcon Movwf CMCON Liga Configuracao Movlw MaskTrisA Movwf TRISA Movlw MaskTrisB Movwf TRISB Desliga Configuracao Endm ;----------------------------------------------------------------------------------------------------------AguardaDesligar Macro Btfsc BotaoLiga ;boto Liga acionado? Goto $-1 ;no, volta Endm ;----------------------------------------------------------------------------------------------------------Inicio Config_IOs Desliga Loop AguardaLigar Liga Motor AguardaDesligar ;aguarda o operador acionar o boto Liga ;aguarda o operador desacionar ;o boto Liga Motor

Desliga Motor Goto Loop ;----------------------------------------------------------------------------------------------------------End

_______________________________47 / 171

Clusula #Define Funo: Atribuir nome Exemplo: #Define Liga Bsf


Microcontroladores PIC Mdulo I

Neste caso, atribuimos o nome Liga ao commando Bsf. Dessa forma, quando o compilador encontrar o nome Liga no programa, ele o substituir pelo comando Bsf

Macro Instruo Funo: Criar uma instruo a partir de um conjunto de instrues Exemplo: AguardaLigar Macro Btfss PORTA,0 Goto $-1 Endm Quando o compilador encontra a macro instruo AguardaLigar, ele substitui a macro pelos comandos especificados na macro.

DESAFIO Implementar ao projeto anterior, um boto Desliga ao pino RA1. O programa dever ligar o motor ao acionar o boto Liga e somente deslig-lo quando o operador acionar o boto Desliga Luy vieira xamanica

_______________________________48 / 171

Microcontroladores PIC Mdulo I

ARQUITETURA BSICA DO MICROCONTROLADOR

Unidade Central de Processamento (CPU) Funciona como o crebro do computador. Suas funes so: Executar o ciclo de busca de instruo; Executar as instrues de lgica e aritmtica; Controlar todos os mdulos perifricos a ela;

_______________________________49 / 171

Microcontroladores PIC Mdulo I

Memria de Programa Flash

Analogamente, uma memria corresponde a um arquivo contendo diversas gavetas. Em se tratando de memria, a gaveta chamada de local. Cada local identificado por um endereo expresso em um nmero ou por um nome. A funo do local de armazenar uma instruo sendo o conjunto das instrues guardadas nas gavetas, chamado de programa. Caractersticas Memria NO voltil, ou seja, no perde suas informaes quando desligamos sua alimentao; Memria Flash, ou seja, de acesso rpido.

_______________________________50 / 171

Microcontroladores PIC Mdulo I

Memria de Dados RAM Memria voltil cuja finalidade armazenar dados temporrios tais como nmero de peas produzidas, nmero de peas refugadas, etc. Memria de Dados Eprom Memria NO voltil cuja finalidade armazenar dados temporrios por um determinado perodo de tempo. Contador Temporizador Mdulo especfico para contagem de tempo real ou contagem de eventos. Pode-se executar um determinado processo a cada x tempo, por exemplo. PINOS RA0 a RA7 Estes pinos so utilizados para conectarmos elementos tais como botes, sensores, chaves de fim de curso, motores, vlvulas, alarmes, lmpadas, etc.

_______________________________51 / 171

Microcontroladores PIC Mdulo I

PORTA O PORTA um registro de oito bits da memria RAM que possui uma imagem dos sinais dos pinos RA0 a RA7. Sua funo enviar ou receber sinais dos pinos RA0 a RA7 dependendo da configurao imposta pelo programador. O bit0 do PORTA manipula diretamente o pino RA0; O bit1 do PORTA manipula diretamente o pino RA1, e assim sucessivamente.

Neste exemplo temos: Pinos RA0, RA2, RA3, RA4 e RA5 configurados como entrada de sinal, ou seja, os elementos ligados a estes pinos enviam sinais aos bits0, 2, 3, 4 3 e 5 do PORTA. Estes elementos podem ser botes ou sensores. Os pinos RA1, RA6 e RA7 recebem sinais dos bits1, 6 e 7 do PORTA e os enviam aos elementos de sada, que podem ser leds, motores, vlvulas, etc.

_______________________________52 / 171

Microcontroladores PIC Mdulo I

Pinos RB0 a RB7 Estes pinos so utilizados para conectarmos elementos tais como botes, sensores, chaves de fim de curso, motores, vlvulas, alarmes, lmpadas, etc. PORTB O PORTB um registro de oito bits da memria RAM que possui uma imagem dos sinais dos pinos RB0 a RB7. Sua funo enviar ou receber sinais dos pinos RB0 a RB7 dependendo da configurao imposta pelo programador. O bit0 do PORTB manipula diretamente o pino RB0; O bit1 do PORTB manipula diretamente o pino RB1, e assim sucessivamente.

_______________________________53 / 171

Microcontroladores PIC Mdulo I

_______________________________54 / 171

Microcontroladores PIC Mdulo I

EXERCCIOS 1) Defina o que um microcontrolador 2) Explique o que potncia dissipada. 3) A potncia dissipada pelo PIC 16F648 de 800 mW. Qual a importncia dessa informao no projeto de uma automao? 4) A corrente mxima que podemos drenar de um pino de sada do microcontrolador PIC 16F648 20mA. O que isto significa? 5) Qual a funo do clock no microcontrolador PIC. 6) O PIC 16F648 pode trabalhar com uma freqncia de clock de at 20 MHz. Neste caso, qual a conseqncia se ligarmos o PIC ao um circuito oscilador de 4 MHz? 7) Qual a vantagem da arquitetura Harvard? 8) Qual a caracterstica da arquitetura Pipe-Line? 9) A arquitetura bsica de um microcontrolador composta dos mdulos de CPU, Memria Flash de Programa, Memria de dados RAM, Memria de dados EPROM, Mdulo de Contador Temporizador e Mdulo de I/Os (PORTA e PORTB). Explique a funo de cada um desses mdulos.

_______________________________55 / 171

Microcontroladores PIC Mdulo I

AULA 2 OBJETIVOS Conhecer a arquitetura bsica de uma memria. Conhecer a organizao da memria RAM do PIC. Conhecer alguns registradores especiais do PIC; Criar habilidade para manipular os bancos de memria; Criar habilidade para configurar os ports A e B do PIC; Criar habilidade para ligar leds conectados aos pinos do PIC; Conhecer os princpios bsicos da linguagem Assembler; Conhecer os comandos bsicos de manipulao de bits; Criar habilidade para programar o PIC para acender leds conectados em sua sada

AQUITETURA BSICA DE UMA MEMRIA Analogamente, a memria pode ser comparada a um arquivo contendo muitas gavetas, tambm chamadas de local. Vamos imaginar de termos uma pessoa, um estoquista, responsvel pela organizao deste arquivo. Para acessar o contedo de uma gaveta, necessitamos informar ao estoquista, o endereo (nmero) da gaveta a qual desejamos manipular. Informado o endereo da gaveta, necessitamos inform-lo se desejamos que ele guarde alguma coisa nesta gaveta ou se ele deve nos fornecer o contedo da gaveta. A operao de guardar alguma coisa na gaveta denominada gravao (write) e o fornecimento de seu contedo chamado de leitura (read). O meio pelo qual informamos o nmero da gaveta, endereo, chamado de barra de endereo e o meio pelo

_______________________________56 / 171

Microcontroladores PIC Mdulo I

qual o contedo da gaveta fornecido ou transferido para a gaveta denominado de barra de dados. Veja a figura abaixo

Local a posio de memria onde podemos gravar, ou ler, um dado ou uma instruo. Barra de Endereos formada por um conjunto de pinos que informa o endereo binrio da posio de memria, local, a ser lido ou gravado. Barra de Dados formado por um conjunto de pinos cuja funo permitir a transferncia de dados entre a CPU e a memria ou entre a memria e a CPU.

_______________________________57 / 171

Microcontroladores PIC Mdulo I

Barra de Controle composta pelos pinos Enable, Read e Write. O pino Enable habilita o funcionamento da memria. O pino Read habilita a leitura da memria, ou seja, habilita a transferncia do dado presente no local acessado para a barra de dados. O pino write habilita a escrita na memria, ou seja, transferncia do dado presente na barra de dados para o local acessado pela CPU. ORGANIZAO DA MEMRIA RAM DO PIC Organizada em quatro bancos de memria; Possui registros de funes especiais (SFR) prdefinidas pelo fabricante; Possui registros de uso geral; Os registros SFR so inicializados com valores padres quando ocorre um reset no PIC; Os registros de uso geral no so inicializados quando ocorre um reset no PIC;

_______________________________58 / 171

Microcontroladores PIC Mdulo I

SELEO DOS BANCOS DE MEMRIA RAM A seleo dos bancos de memria feita atravs do bit5 e bit6 do registro especial (SFR) chamado STATUS. Sendo assim temos: Bit6 Bit5 Banco 0 0 0 0 1 1 1 0 2 1 1 3 Na figura abaixo temos os bits 5 e 6 ligados entrada de um circuito eletrnico chamado de Demux. Este circuito habilita uma das suas entradas, desabilitando as outras, conforme o cdigo binrio recebido em sua entrada, conforme mostrado na tabela acima.

IMPORTANTE SALIENTAR QUE AO RESEBER UM PULSO DE RESET, O PIC AUTOMATICAMENTE HABILITAR O BANCO ZERO COMO PADRO.

_______________________________59 / 171

Microcontroladores PIC Mdulo I

CONFIGURAO DOS PINOS DE SADA DO PIC A configurao dos pinos do PIC feita atravs de dois registros especiais chamados de TRISA e TRISB presentes no banco de dados 1. OBS: Ao receber um pulso de Reset, o PIC configura, automaticamente, todos os pinos do PORTA e PORTB como ENTRADA de sinal.

REGISTRO TRISA Este registro, ou file, possui 8 bits de comprimento e est diretamente relacionado com a configurao dos pinos de RA0 a RA7. O bit0 do registro TRISA configura o pino RA0 para se comportar como entrada ou sada. O bit1 do registro do TRISA configura o pino RA1, e assim sucessivamente. Para configurar um pino como sada de sinal, foramos o bit, correspondente ao pino configurado, do registro TRISA para nvel lgico baixo (0), ou seja, resetamos este bit. Para configurar um pino como entrada de sinal, foramos o bit, correspondente ao pino configurado, do registro TRISA para nvel lgico alto (1), ou seja, setamos este bit. Quando configuramos um pino como entrada de sinal, o hardware do PIC enviar o sinal recebido neste pino para o bit do PORTA correspondente a este pino. Se configurado como sada de sinal, o hardware do PIC enviar o contedo do bit do PORTA para o pino. Para melhor entendimento veja a figura abaixo.

_______________________________60 / 171

Microcontroladores PIC Mdulo I

TRISA

PORTA

PINOS RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7

Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7

0 0 1 1 1 1 0 0

Na figura acima, o pino RA0 est configurado como sada de sinal, portanto, o sistema enviar, constantemente, o contedo do bit0 do registro PORTA para o pino RA0. O pino RA2 est configurado como entrada de sinal, portanto, o sistema enviar, constantemente, o sinal recebido no pino para o bit2 do registro PORTA. Desta forma, configuramos um pino como entrada de sinal quando a ele conectamos um boto ou sensor. De outra forma, configuramos um pino como sada de sinal quando conectamos a este pino qualquer elemento que devemos controlar seu funcionamento, ou seja, elementos que desejamos ligar ou desligar conforme a situao momentnea do processo, elementos tais como motor, lmpadas de sinalizao, vlvulas, etc.

_______________________________61 / 171

Microcontroladores PIC Mdulo I

REGISTRO TRISB Este registro configura os pinos RB0 a RB7 como entrada ou sada de sinal. Neste caso, todas as consideraes feitas para o registro TRISA so aqui aplicadas, considerando apenas o registro configurado ser o PORTB.
TRISB

PORTB

PINOS RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7

Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7

0 0 1 1 1 1 0 0

_______________________________62 / 171

Microcontroladores PIC Mdulo I

SEQUENCIA PARA CONFIGURAR OS PORTA E PORTB 1) Habilitar o Banco 1; 2) Configurar o file, registro, TRISA; 3) Configurar o file, registro, TRISB; 4) Habilitar o Banco 0. EXERCCIOS 1) Explique qual a funo de uma memria. 2) Desenhe a arquitetura bsica de uma memria explicando a funo de seus elementos. 3) Explique como organizada a memria ram do PIC. 4) Explique a funo dos bits5 e bit6 do file STATUS. 5) Explique a funo do file TRISA. 6) Explique a funo do file TRISB. 7) Explique a funo do file PORTA. 8) Explique a funo do file PORTB. 9) Descreva a seqncia para configurar os pinos RA3, RA4 como entrada e os pinos RB0 e RB1 como sada. 10) Descreva a seqncia para configurar os pinos RA6 e RA7 como entrada e os pinos RB3 e RB7 como sada.

_______________________________63 / 171

Microcontroladores PIC Mdulo I

_______________________________64 / 171

Microcontroladores PIC Mdulo I

EXERCCIOS 1) Escreva um programa para configurar os pinos RA3 como entrada e o pino RB0 como sada. 2) Escreva um programa para configurar os pinos RA0 e RA1 como sada e os pinos RB0 e RB3 como entrada. 3) Escreva um programa para configurar os pinos de RA0 a RA7 como sada e os pinos de RB0 a RB7 como sada. 4) Em um projeto, temos um boto conectado ao pino RA4, um sensor ao pino RA6, um motor ao pino RB0, um led ao pino RB2 e um alarme ao pino RB5. Escreva um programa que permita configurar estes pinos adequadamente.

_______________________________65 / 171

Microcontroladores PIC Mdulo I

5) AULA 3 OBJETIVOS Demonstrar o desenvolvimento de um projeto de hardware com microcontrolador PIC para acionamento de leds; Demonstrar o desenvolvimento de um projeto de software para microcontrolador PIC; Conhecer as instrues bsicas de manipulao de bit; Conhecer o software de programao MPLAB; Desenvolver competncias e habilidades para projetar hardware e software com microcontrolador PIC aplicando-o no acionamento de leds.

_______________________________66 / 171

Microcontroladores PIC Mdulo I

Projeto 1

LIGA LEDS

Objetivo Acender os 4 leds conectados ao PORTB Hardware

Caractersticas do Led Tenso de alimentao = 1,5V Corrente nominal = 15mA

_______________________________67 / 171

Microcontroladores PIC Mdulo I

Clculo dos resistores Problema: Atravs da programao, podemos ligar ou desligar a tenso de sada do pino do PIC conforme a necessidade da automao. Quando utilizamos a instruo para desligar o pino, este pino apresenta uma tenso de zero volts. Quando utilizamos a instruo para ligar o pino, a tenso apresentada no pino de cinco volts. Neste caso, ao ligarmos um led a um pino de sada do PIC, a tenso de cinco volts ir danificar o led uma vez que esta tenso ir produzir uma corrente muito superior a que o led suporta. A soluo para este tipo de problema conectarmos um resistor em srie com o led. Sabendo-se que uma ligao em srie um divisor de tenso, criaremos um divisor de tenso de forma que a tenso de sada (5 Volts) do pino seja dividida de forma que o led receba apenas a tenso necessria para o seu funcionamento e o restante da tenso recaia sobre o resistor, portanto: Tenso no resistor = tenso do pino (5V) - tenso no led (1,5V) VR = 5 1,5 VR = 3,5V Utilizando-se da lei de ohm, temos: R = VR / I do led R = 3.5V / 15 mA R = 220

_______________________________68 / 171

Microcontroladores PIC Mdulo I

Etapas do desenvolvimento de um programa 1) Criar o algoritmo do programa; 2) Editar o mnemnico; 3) Compilar o mnemnico; 4) Gravar o programa executvel no PIC.

_______________________________69 / 171

Microcontroladores PIC Mdulo I

Algoritmo a descrio sequencial e detalhada da soluo de um problema. Mnemnico Mnemnico a codificao do algoritmo para linguagem de programao que neste caso a linguagem assembler. Programa Editor o programa que nos permite digitar o mnemnico, como por exemplo, o programa de bloco de notas do windows. Existem outros editores tais como o CCS e o MPLAB que o nosso caso. Programa Compilador o programa que converte o programa mnemnico na linguagem de mquina, ou seja, em cdigos de mquina. Isto feito em duas etapas, sendo a primeira a verificao se no erro de sintaxe, ou seja, se no h erro de escrita e na segunda a gerao dos cdigos de mquina. Neste caso o compilador ir criar um arquivo com a extenso .EXE que ser gravado no microcontrolador.

_______________________________70 / 171

Microcontroladores PIC Mdulo I

Algoritmo para o Projeto 1 Configurar o PORTB como sada; Ligar o Led conectado ao pino RB0; Ligar o Led conectado ao pino RB1; Ligar o Led conectado ao pino RB2; Ligar o Led conectado ao pino RB3; Fim O SOFWARE MPLAB Este software disponibilizado gratuitamente pelo seu fabricante atravs do site www.microchip.com. Esta a ferramenta que nos permite desenvolver o software que ir controlar os leds.

_______________________________71 / 171

Microcontroladores PIC Mdulo I

UTILIZANDO O MPLAB 1) Carregar o programa MPLAB; 2) Criar o projeto LED01 e configurar o ambiente de trabalho; 3) Editar o programa fonte de controle dos leds; 4) Anexar o programa fonte ao projeto; 5) Compilar o programa fonte; 7) Corrigir os erros de sintaxe; 8) Gravar o programa de controle no microcontrolador PIC; 9) Realizar os testes de lgica; 10) Corrigir os erros de lgica; Criando um Projeto Clicar na opo Projet na barra de menu; Clicar na opo New; Digitar o nome do projeto (LED01); Clicar no boto Browse; Selecionar a pasta de trabalho, ou cria-la com a opo Nova Pasta Clicar no boto Ok Configurando o Ambiente de Trabalho Clicar na opo Configure da barra de menu; Clicar na opo Select Device Selecionar o modelo de microcontrolador PIC 16F628 Clicar Ok Clicar na opo Configure Clicar na opo Configuration Bits Desligar a opo Configuration Bits Set in Cd Na opo FOSC, selecionar a opo a quarta opo INTOSC Oscillator: I/O function on RA6... Na opo WDTE, selecionar a opo WDT Disabled

_______________________________72 / 171

Microcontroladores PIC Mdulo I

Na opo MCLRE, selecionar a opo RA5/MCLR/VPP pin function is digital input... Na opo BOREN, selecionar a opo BOD disabled Na opo LVP, selecionar RB4/PGM pin has digital I/O function... A seguir fechar esta janela e abrir a janela Programmer e selecionar a opo Select Programmer; Selecionar a opo PICKit2 Editando um Programa Fonte Selecionar a opo File e a seguir Open; Selecionar o arquivo Modelo; Digitar o programa; Clicar na opo File na barra de menu; Digitar o nome do arquivo fonte com a extenso .asm; Na janela Projet clicar com o boto direito do mouse sobre a opo Source File; Selecionar a opo Add Files; Selecionar o arquivo fonte. Compilando e Gravando o Programa Aps digitar o programa acionar a tecla <F10>

_______________________________73 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------; ; ACENDE OS LEDs DOS PINOS RB ; ;---------------------------------------------------------;Objetivos ; acender os quatro leds dos pinos RB0,RB1,RB2 e RB3; ; aplicar as instrues de manipulao de bits ; ;Descrio ; ligar os leds e parar ;---------------------------------------------------------#Include <P16F628.INC> #Include <START.INC> #Include <DEFINES.INC> ;---------------------------------------------------------; ; INICIO DO PROGRAMA ; ;---------------------------------------------------------Start ;ligando os leds conectados aos pinos RB LigarPRB0 LigarPRB1 LigarPRB2 LigarPRB3 Fim ;---------------------------------------------------------END ;comando para o programa compilador ;encerrar a compilao

_______________________________74 / 171

Microcontroladores PIC Mdulo I

Digitar o arquivo abaixo e salva-lo como START.INC ;-------------------------------------------------------------------; ; MACRO INSTRUES ; ;-------------------------------------------------------------------Start Macro Org .0 Goto RStart Org .4 nop nop nop ;-----------------------------------;Configurao dos Ports RStart Movlw Movwf Bsf Clrf Bcf Clrf 0x3 ;desligando os comparadores CMCON ;dos pinos RA0, RA1 e RA2 STATUS,5 ;setando o banco 1 TRISB ;configurando portb como sada STATUS,5 ;setando o banco zero PORTB ;resetando o portb

Endm ;--------------------------------------------------------------------

_______________________________75 / 171

Microcontroladores PIC Mdulo I

Digitar o fonte abaixo e salva-lo como DEFINES.INC ;-----------------------------------------------------------------------------; ; DEFINES ; ;-----------------------------------------------------------------------------#Define #Define #Define Ligar Bsf Desligar Bcf Fim Goto$ PORTB,0 PORTB,1 PORTB,2 PORTB,3 PORTB,4 PORTB,5 PORTB,6 PORTB,7

#Define PRB0 #Define PRB1 #Define PRB2 #Define PRB3 #Define PRB4 #Define PRB5 #Define PRB6 #Define PRB7

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

_______________________________76 / 171

Microcontroladores PIC Mdulo I

AULA 3 OBJETIVOS Desenvolver habilidades para o desenvolvimento de hardware e software para microcontrolador PIC com manipulao de leds. Exerccios 1) Desenvolver um projeto para ligar quatro leds conectados aos pinos RB4,RB5,RB6 e RB7. Dados para o projeto: Tenso de alimentao do led igual a 2,0 Volts Corrente de consumo: 10mA Calcular os resistores de limitao dos leds 2) Desenvolver um programa para acender oito leds conectados ao PORTB.

_______________________________77 / 171

Microcontroladores PIC Mdulo I

Montando o primeiro projeto

_______________________________78 / 171

Microcontroladores PIC Mdulo I

MEMRIA Funo A memria um chip eletrnico que tem como funo armazenar dados ou instrues. Arquitetura Bsica

Local O local uma posio de memria onde podemos gravar, ou ler, um dado ou uma instruo. Barra de Endereos A funo da barra de endereos receber um cdigo binrio e selecionar o local correspondente ao endereo fornecido. Barra de Dados A funo da barra de dados transferir o contedo do local selecionado para a barra de dados ou transferir o contedo da barra de dados para o endereo de memria selecionado. Barra de Controle composta pelos pinos Enable, Read e Write. O pino Enable tem como funo habilitar o funcionamento do chip. O pino Read habilita a leitura do contedo do local selecionado e o pino Write habilita a escrita do local selecionado.

_______________________________79 / 171

Microcontroladores PIC Mdulo I

TIPOS DE MEMRIA

MEMRIAS

FAMLIA ROM

FAMLIA RAM

ROM

DINMICA

PROM ou OTP EEPROM E2PROM UVPROM ou EPROM

ESTTICA

FLASH ROM

_______________________________80 / 171

Microcontroladores PIC Mdulo I

CARACTERSTICAS DAS MEMRIAS DA FAMLIA ROM

No perdem seu contedo aps retirarmos sua alimentao; Memria somente de leitura;

CARACTERSTICAS DAS MEMRIAS DA FAMLIA RAM


Perdem seu contedo aps retirarmos sua alimentao; Memria de leitura e gravao

CARACTERSTICAS DA MEMRIA ROM


Baixo custo de aquisio; Vem com o programa gravado em seu contedo, ou seja, necessitamos fornecer a listagem do programa para que o fabricante produza estas memrias (fabricao por encomenda);

CARACTERSTICAS DA MEMRIA PROM Programable Read Only Memory


Baixo custo de aquisio; Pode ser gravada pelo usurio somente uma vez;

CARACTERSTICAS DA MEMRIA EEPROM Erasable Eletrical Programmable Read Only Memory Custo alto; Apagada eletricamente; Utilizada para desenvolvimento;

CARACTERSTICAS DA MEMRIA UVPROM Ultraviolet Programmable Read Only Memory

Custo alto; Apagada por raios ultra-violeta; Utilizada para desenvolvimento;

CARACTERSTICAS DA MEMRIA FLASH ROM Possui as caractersticas da memria EEPROM, mas com uma tecnologia mais avanada que reproduz uma alta velocidade de gravao.

_______________________________81 / 171

Microcontroladores PIC Mdulo I

CARACTERSTICAS DA MEMRIA RAM DINMICA Dinamic Randon Access Memory Baseada no princpio de capacitncia; Baixo custo; Memria regravvel; Necessita de circuito de refresh; Alta capacidade.

O circuito de refresh um circuito destinado a carregar o contedo da memria enquanto a CPU no a estiver utilizando. Isto se faz necessrio porque os capacitores, presentes internamente na memria, se descarregam lentamente quando a CPU no a estiver lendo. CARACTERSTICAS DA MEMRIA RAM STATIC Static Randon Access Memory Baseada em flip-flop; Baixo custo; Memria regravvel; No necessita de circuito de refresh;

_______________________________82 / 171

Microcontroladores PIC Mdulo I

PINAGEM

Para identificar os pinos do chip, identificamos primeiramente o pino nmero 1 que sempre ser a esquerda do chanfro ou esta identificado pelo ponto no chip.

DESCRIO DA PINAGEM Pino 14 VDD. Pino de alimentao positiva a ser conectado a uma fonte de 5 Volts. Pino 5 VSS. Pino de referncia de alimentao a ser conectado a uma fonte de alimentao 0 Volts.

_______________________________83 / 171

Microcontroladores PIC Mdulo I

Pinos de RA0 a RA7 e RB0 a RB7 Estes pinos foram projetados para assumir a funo de I/O ou assumir outras funes especiais, portanto, estes pinos podem ser configurados conforme a necessidade da automao. O pino ser configurado como I/O quando conectamos a ele elementos como botes, sensores digitais, motores, vlvulas digitais, etc.
Pino 17 18 1 Funo RA0 AN0 RA1 AN1 RA2 AN2 Vref 2 RA3 AN3 3 CMP1 RA4 T0CKI 4 CMP2 RA5 MCLR 15 Vpp RA6 OSC2 CLKOUT 16 RA7 OSC1 CLKIN 6 7 RB0 INT RB1 RX 8 DT RB2 TX CK Tipo de Entrada ST AN ST NA ST AN * ST AN * ST ST * ST ST * ST * * ST XTAL ST TTL ST TTL ST ST TTK * ST Tipo de Sada Descrio CMOS I/O digital bidirecional * CMOS * CMOS * AN CMOS * CMOS OD * OD * * * CMOS XTAL CMOS CMOS * * CMOS * CMOS * CMOS CMOS CMOS CMOS Entrada analgica para os comparadores I/O digital bidirecional Entrada analgica para os comparadores I/O digital bidirecional Entrada analgica para os comparadores Sada de tenso de referncia programvel 16 nveis diferentes I/O digital bidirecional Entrada analgica para os comparadores Sada do comparador 1 I/O digital bidirecional Entrada externa do contador TMR0 Sada do comparador 2 Entrada digital Master Clear Reset externo Entrada de tenso de programao (13V) I/O digital bidirecional Sada para cristal externo Sada de onda quadrada em da freqncia De OSC1 quando em modo RC I/O digital bidirecional Entrada para cristal externo Entrada para osciladores externos (hbridos ou RC) I/O digital bidirecional com pull-up interno Entrada de interrupo externa I/O digital bidirecional com pull-up interno Recepo comunicao USART assncrona Via de dados comunicao USART sncrona I/O digital bidirecional com pull-up interno Transmisso comunicao USART assncr. Clock comunicao USART sncrona

_______________________________84 / 171

Microcontroladores PIC Mdulo I

9 10 11 12

RB3 CCP1 RB4 PGM RB5 RB6 T1OSO T1CKI PGC RB7 T1OSI

TTL ST TTL ST TTL TTL * ST ST TTL XTAL ST P P

CMOS CMOS CMOS * CMOS CMOS XTAL * * CMOS * CMOS * *

I/O digital bidirecional com pull-up interno I/O p/ captura, compare e PWM I/O digital bidirecional com pull-up interno Entrada p/ programao em baixa tenso (5V) I/O digital bidirecional com pull-up interno Interrupo por mudana de estado I/O digital bidirecional com pull-up interno Interrupo por mudana de estado Sada p/ cristal externo para TMR1 Clock da programao serial (ICSP) I/O digital bidirecional com pull-up interno Interrupo por mudana de estado Entrada p/ cristal externo para TMR1 Data da programao serial (ICSP) GND Alimentao Positiva

13

5 14

PGD Vss VDD

Legenda P * TTL ST CMOS OD AN = Power (alimentao) = No utilizado = Entrada tipo TTL = Entrada tipo Schimitt Trigger = Sada do tipo CMOS = Sada tipo Dreno Aberto (Open Drain) = Entrada/Sada analgica

_______________________________85 / 171

Microcontroladores PIC Mdulo I

EXERCCIOS 1) Explique a importncia do estudo do microcontrolador. 2) Qual a funo da memria 3) Qual a funo da barra de endereos. 4) Qual a funo da barra de dados. 5) Qual a funo do pino Read da memria 6) Qual a funo do pino Write da memria. 7) As memrias so classificadas em duas famlias. Quais so essas famlias e suas caractersticas. 8) Quais so as funes da Unidade Central de Processamento (CPU). 9) Qual a funo da memria de programa flash 10) Qual a funo da memria de dados RAM 11) Qual a funo da memria de dados EPROM 12) Qual a funo do PORTA e PORTB 13) Qual a funo dos pinos VDD e VSS do PIC.

_______________________________86 / 171

Microcontroladores PIC Mdulo I

CIRCUITOS OSCILADORES Este circuito produz um sinal eltrico peridico em forma de onda quadrada que determina a velocidade de processamento da CPU. O microcontrolador 16F628 permite selecionarmos seis tipos de osciladores como: LP XT HS ER INTRC EC Low Power Crystal (32 kHz a 200 kHz) Crystal / Resonator (455 kHz ou 2.0 MHz ou 4.0 MHz) High Speed Crystal / Resonator (8.0 MHz ou 10.0 MHz ou 20.0 MHz) External Resistor Internal Resistor / Capacitor (37 kHz ou 4 MHz) External Clock In

Cristal

Ressonador

Ressonador

_______________________________87 / 171

Microcontroladores PIC Mdulo I

Oscilador XT O oscilador de cristal est contido num invlucro de metal com dois pinos onde foi escrita a freqncia na qual o cristal oscila. Dois condensadores cermicos devem ligar cada um dos pinos do cristal massa. H casos em que cristal e condensadores esto contidos no mesmo encapsulamento, como o caso do ressonador cermico abaixo representado. Este elemento tem trs pinos com o pino central ligado massa e os outros dois pinos ligados aos pinos OSC1 e OSC2 do microcontrolador. Quando projetamos um dispositivo, a regra colocar o oscilador to perto quanto possvel do microcontrolador, de modo a evitar qualquer interferncia nas linhas que ligam o oscilador ao microcontrolador.

Clock de um microcontrolador a partir de um cristal de quartzo

Clock de um microcontrolador com um ressonador

Para um oscilador de 4MHz, os valores de C1 e C2 devem ser de 15 a 30 pF

_______________________________88 / 171

Microcontroladores PIC Mdulo I

OSCILADOR RC Em aplicaes em que a preciso da temporizao no um fator crtico, o oscilador RC torna-se mais econmico. A freqncia de ressonncia do oscilador RC depende da tenso de alimentao, da resistncia R, capacitncia C e da temperatura de funcionamento.

O diagrama acima mostra como um oscilador RC deve ser ligado a um PIC16F84. Com um valor para a resistncia R abaixo de 2,2 K, o oscilador pode tornar-se instvel ou pode mesmo parar de oscilar. Para um valor muito grande R (1M por exemplo), o oscilador torna-se muito sensvel umidade e ao rudo. recomendado que o valor da resistncia R esteja compreendido entre 3K e 100K. Apesar do oscilador trabalhar sem condensador externo (C = 0 pF), conveniente, ainda assim, usar um condensador acima de 20 pF para evitar o rudo e aumentar a estabilidade. Qualquer que seja o oscilador que se est utilizando, a freqncia de trabalho do microcontrolador a do oscilador dividida por 4. A freqncia de oscilao dividida por 4 tambm fornecida no pino OSC2/CLKOUT e, pode ser usada, para testar ou sincronizar outros circuitos lgicos pertencentes ao sistema.

Relao entre o sinal de clock e os ciclos de instruo Ao ligar a alimentao do circuito, o oscilador comea a oscilar. Primeiro com um perodo de oscilao e uma amplitude instvel, mas, depois de algum tempo, tudo estabiliza.

Sinal de clock do oscilador do microcontrolador depois de ser ligada a alimentao

_______________________________89 / 171

Microcontroladores PIC Mdulo I

Para evitar que esta instabilidade inicial do clock afete o funcionamento do microcontrolador, necessitamos manter o microcontrolador no estado de reset enquanto o clock do oscilador no estabiliza. O diagrama acima, mostra uma forma tpica do sinal fornecido por um oscilador de cristal de quartzo ao microcontrolador quando se liga a alimentao.

RESET O reset usado quando o microcontrolador submetido a uma condio inadequada para seu funcionamento normal. Ao receber este sinal no pino Master Clear Reset (MCLR), a CPU zera o registrador Program Counter (PC) reiniciando a busca de instruo a partir da primeira posio de memria. Ao receber o reset, os registros internos da CPU sero iniciados com valores pr-definidos (default).

A figura acima no permite que o usurio aplique um sinal de reset externo uma vez que o pino MCLR/ est sempre em nvel alto. O resistor da ligado alimentao positiva chamado de pull-up e seu valor de 10k. O microcontrolador PIC16F628 admite vrias formas de reset: a) Reset quando se liga a alimentao, POR (Power-On Reset) b) Reset durante o funcionamento normal, quando recebe nvel lgico baixo no pino MCLR do microcontrolador. c) Reset durante o regime de SLEEP (dormir). d) Reset quando o temporizador do watchdog (WDT) transborda (passa para 0 depois de atingir o valor mximo). e) Reset quando o temporizador do watchdog (WDT) transborda estando no regime de SLEEP. O contedo da RAM no alterada quando aplicado um reset. J os registros SFR (registros com funes especiais) assumem valores padres (defaluts).

_______________________________90 / 171

Microcontroladores PIC Mdulo I

Reset quando o valor da alimentao desce abaixo do limite permitido (Brown-out Reset). Ao ligar a alimentao do microcontrolador (power-up), o microcontrolador aplica um pulso de reset automaticamente quando a alimentao Vdd atinge uma faixa de 1,2 a 1,8V. Esse pulso dura 72ms, tempo suficiente para que o oscilador se estabilize. Este tempo determinado por um temporizador interno chamdo PWRT. Outra forma de gerar um reset interno quando a alimentao do microcontrolador atinge um valor muito baixo para o seu funcionamento normal.

Exemplos de quedas na alimentao abaixo do limite

_______________________________91 / 171

Microcontroladores PIC Mdulo I

O CICLO DE BUSCA DE INSTRUO (Fetch) OU CICLO DE MQUINA O ciclo de busca de instruo consiste em uma seqncia que o hardware da cpu executa para ler uma instruo da memria de programa. O ciclo de busca de instruo, tambm chamado de Fetch de instruo, sincronizado pelo clock de entrada do processador (pino OSC1/CLKIN). Para realizar a busca de instruo o microcontrolador utiliza quatro pulsos de clock, portanto, uma instruo lida e executada a cada quatro pulsos de clock. Isto determina um clock interno de execuo de instrues 4 vezes menor que o clock externo que define um tempo fixo de execuo para todas as instrues. Para um clock de entrada de 4MHz, temos um clock interno de 1MHz, isto , 4MHz / 4. Sendo o perodo de uma onda definido pelo inverso de sua frequncia temos ento uma instruo executada a cada 1 s. T = 1 / f => T = 1 / 4 * 10^6 => T = 250ns. Tempo de execuo = 4 * 250 ns = 1s. conveniente saber que as instrues de desvio utilizam dois ciclos, portanto, gastam 2s.

A TCNICA PIPELINE Essa tcnica consiste em buscar uma instruo e execut-la somente no outro ciclo de busca o que permite buscar uma instruo e executar a instruo anterior simultaneamente.

_______________________________92 / 171

Microcontroladores PIC Mdulo I

CARACTERSTICAS DO PIC16F628 Estudaremos o microcontrolador PIC16F628, por ser um microcontrolador verstil, barato e de fcil manuseio. Alm do mais, muito utilizado em projetos para quem est pela primeira vez, tendo contato com estes chips to poderosos.

A figura ao lado o PIC16F628 , este chip possui :


18 pinos 16 portas configurveis como sada ou entrada Memria EEPROM interna (128 bytes ) Memria Flash para a programao

(2.048x14bits ) 10 interrupes disponveis Via de programao com 14 bits e 35 instrues Memria RAM (80 bytes ) Dois osciladores internos (4MHz e 37MHz) 20mA para cada I/O Tenso de alimentao 2V at 6V (5V) Mdulo CCP, Comparador interno e USART

_______________________________93 / 171

Microcontroladores PIC Mdulo I

PRINCPIO DE FUNCIONAMENTO Para entendermos bem o princpio de funcionamento do microcontrolador vamos analisar o diagrama abaixo.

Basicamente, o microcontrolador possui dois elementos principais chamados CPU e Memria. Analogamente, a memria como um arquivo com diversas gavetas chamadas de locais. Cada local identificado por um endereo binrio fornecido pela CPU atravs da barra de endereo. O demux interno tem a funo de receber o endereo e selecionar o local correspondente ao endereo fornecido. Para que o programa funcione corretamente, a primeira instruo dever ser gravada na primeira posio de memria, ou seja, no endereo zero que seleciona o local zero da memria. A segunda instruo ser gravada no endereo 1 e assim sucessivamente. A instruo gravada em cada local da memria transferida para a CPU atravs de um canal de comunicao chamado de barra de dados. A CPU o crebro de um computador, ou seja, um circuito eletrnico digital cujas funes so as de buscar instrues na memria, decodifica-las e executa-las. Para que isto seja possvel, o microcontrolador possui um circuito eletrnico chamado de circuito oscilador que responsvel por gerar um sinal eltrico peridico na forma de onda quadrada.

O princpio bsico de funcionamento do microcontrolador consiste em buscar uma instruo na memria, decodifica-la e executa-la. Para realizar este processo, a CPU utiliza quatro pulsos de clock, ou seja, a cada quatro pulsos de clock uma instruo lida e executada. Portanto, o sinal de clock responsvel para sincronizar todo o funcionamento do sistema.

_______________________________94 / 171

Microcontroladores PIC Mdulo I

Para ler as instrues, a CPU possui um contador interno chamado de Program Counter (PC) cuja funo indicar o endereo de memria a ser lido. O circuito Master Clear Reset tem como finalidade zerar o registrador PC para que a CPU busque a primeira instruo na posio zero de memria. A instruo fornecida pela memria atravs da barra de dados transferida para o registrador de instruo (RI) que nada mais do que um demux. O cdigo binrio, instruo, recebida na entrada do demux RI faz com que este demux selecione um circuito que executa a instruo recebida.

_______________________________95 / 171

Microcontroladores PIC Mdulo I

CICLO DE BUSCA DE INSTRUO

RESET

REGISTRADOR PC = 0

CPU FORNECE PARA A MEMRIA O ENDEREO A SER LIDO, OU SEJA, TRANSFERE O CONTEDO DO PC PARA A MEMRIA

CPU INCREMENTA O CONTADOR PC PARA APONTAR PARA A PRXIMA INSTRUO A SER LIDA NA MEMRIA PC = PC + 1

A CPU L A INSTRUO FORNECIDA PELA MEMRIA

A CPU DECODIFICA E EXECUTA A INSTRUO

_______________________________96 / 171

Microcontroladores PIC Mdulo I

EXERCCIOS 1) Explique a funo do circuito oscilador 2) Explique a funo do circuito Mster Clear Reset 3) Explique a funo file PC (Program Counter) 4) Explique a funo do file RI (Registrador de Instruo) 5) Calcule o ciclo de mquina para um PIC com oscilador de 10MHz. 6) Explique a funo do circuito oscilador 7) Explique a funo do circuito mster clear reset 8) Explique o que a tcnica Pipeline.

_______________________________97 / 171

Microcontroladores PIC Mdulo I

A ORGANIZAO DA MEMRIA DE DADOS DO PIC Este um tipo de memria eletrnica voltil, ou seja, uma memria que perde seu contedo ao ser desligada sua alimentao. Analogamente, a memria pode ser entendida como um armrio cheio de gavetas onde podemos guardar uma informao em cada gaveta. No PIC chamamos o armrio de banco e as gavetas de files, sendo os files de 8 bits de tamanho. A organizao da memria RAM do PIC feita em quatro bancos de dados de forma que somente um dos bancos poder estar ativo de cada vez. Em cada banco de dados temos arquivos (FILES) com funes especiais (SFR Special Files Registers) e uma determinada rea de utilizao geral. O programador utiliza esta rea para guardar dados temporrios tais como: quantidade de peas produzidas at o momento, tempo produtivo, tempo de mquina parada, quantidade de acionamentos do motor, etc. A seleo dos bancos feita atravs dos bits 5 e 6 do SFR chamado STATUS da seguinte forma: Bit6 0 0 1 1 Bit5 0 1 0 1 Seleciona o banco Seleciona o banco Seleciona o banco Seleciona o banco 0 1 2 3

Desta forma, o PIC dispe de instrues que nos permite setar ou resetar bit de um determinado file.

_______________________________98 / 171

Microcontroladores PIC Mdulo I

O MAPA DE MEMRIA DE DADOS DO PIC16F628

_______________________________99 / 171

Microcontroladores PIC Mdulo I

DESCRIO DOS PRINCIPAIS FILES FILE W Este o nico file que no pertence a nenhum banco de dados. Ele especial porque grande parte das operaes de lgica realizada entre ele e um file do banco de dados qualquer. SFR PCL Este file, que esta presente em todos os bancos de dados, um contator seqencial cuja funo indicar qual o endereo de memria que a CPU ir buscar a prxima instruo a ser executada. Seu contedo binrio ser transferido para a barra de endereos da memria para selecionar a posio de memria a ser acessada. SFR STATUS Este file, tambm presente em todos os bancos de dados, tem como funo sinalizar o estado da ltima operao de lgica e aritmtica executada pela CPU, ou seja, se a ltima operao resultou em zero, se o resultado positivo ou negativo, etc. Alm disso os bits 5 e 6 possuem a funo de selecionar um banco dos quatro banco de dados de RAM.

Bit 7 R/W IRP 0

Registrador STATUS Endereos: 03h, 83h, 103h, 183h Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 R/W R/W R R R/W R/W R/W RP1 RP0 /T0 /PD Z DC C CONDIO EM POWER-ON RESET (POR) 0 0 1 1 X X X

IRP: Seleciona o Banco de Memria de dados usado para o endereamento indireto: 0 = Banco 0 e 1 (00h FFh). 1 = Banco 2 e 3 (100h- 1FFh). RP1 e RP0: Seleciona o Banco de Memria de dados usado para o endereamento direto: 00 = Banco 0 (000h 07Fh). 01 = Banco 1 (080h 0FFh). 10 = Banco 2 (100h 17Fh). 11 = Banco 3 (180h 1FFh). /TO: Indica Time-Out: 0 = indica que ocorreu um estouro do Watchdog Timer (WDT) 1 = indica que ocorreu um power-up ou as instrues CLRWDT ou SLEEP foram executadas.

_______________________________100 / 171

Microcontroladores PIC Mdulo I

/PD:

Indica Power-down: 0 = indica que a instruo SLEEP foi executada. 1 = indica que foi executada a instruo CLRWDT ou ocorreu um power-up. Indicao de Zero: 0 = indica que o resultado da ultima operao efetuada (lgica ou aritmtica) no resultou em zero. 1 = indica que resultou em zero a ultima operao. Digit Carry/Borrow: 0 = indica que no ocorreu estouro de digito na ltima operao da ULA. 1 = indica que na ltima operao da ULA ocorreu um estouro de digito, ou seja, o resultado ultrapassou os 4 bits menos significativos. (Quando se trabalha com nmeros de 4 bits). Carry/Borrow: 0 = a ltima operao da ULA no ocasionou um estouro (carry) 1 = a ltima operao da ULA ocasionou um estouro (carry) no bit mais significativo, ou seja, ultrapassou os oito bits disponveis.

Z:

DC:

C:

CMCON Registrador CMCON Endereo: 1Fh Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 R/W R/W R/W R/W R/W R/W R/W C2OUT C1OUT C2INV C1INV CIS CM2 COM1 CONDIO EM POWER-ON RESET (POR) 0 0 0 0 0 0 0

Bit 0 R/W CM0 0

Bit2:Bit0 - CM2:CM0 Estes bits, quando em nvel lgico alto, configuram os pinos RA2:RA0 como IOs. Quando em nvel lgico baixo, configuram estes pinos para atuar como comparadores. PORTA Este file possui ligao direta com os pinos RA0 a RA7 do encapsulamento do PIC. Desta forma o bit0 do PORTA esta diretamente ligado ao pino RA0, o bit1 do PORTA est diretamente ligado ao pino RA1 e assim em diante. Estes pinos podem ser configurados como entrada ou sada de sinais eltricos dependendo da necessidade do projeto. O pino ser configurado como entrada quando conectamos ao pino um boto ou sensor digital ou chave de fim de curso. Neste caso, o boto envia um sinal eltrico ao pino que ser transferido para o bit do PORTA correspondente ao pino. Quando desejamos controlar o acionamento de algum elemento, como uma lmpada, ou um motor, ou uma vlvula, etc. configuramos o bit do PORTA como sada. Dessa forma, setando-se o bit, estaremos setando o pino correspondente ao bit do PORTA. Resetando-se o bit estamos resetando o pino correspondente ao bit.

_______________________________101 / 171

Microcontroladores PIC Mdulo I

PORTA Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7

PINOS RA0 RA11 RA2 RA3 RA4 RA5 RA6 RA7

Observe que todos os pinos so bidirecionais, ou seja, admitem enviar dados do registro PORTA para o pino e consequentemente para o hardware externo como tabem receber sinais do hardware externo e envia-lo ao bit do registro PORTA. Agora, no h como o pino ser entrada e sada ao mesmo tempo. O programador, atravs de seu programa, ir configurar o pino para funcionar como entrada ou sada de dados conforme a necessidade de seu projeto. Observe tambm que pino RA5 o nico que no admite ser configurado como sada de dados funcionando apenas como entrada. Finalmente, o pino RA4 quando configurado como sada de dados necessita de um resistor externo ligado a 5V, chamado de pull-up. Isto porque este pino do tipo open-collector e caso no haja um pull-up externo o hardware externo no ser ligado quando setarmos o pino. Para configurarmos quais pinos sero entradas e quais sero sadas, utilizamos o registro TRISA e TRISB.

REGISTRADOR TRISA Este registrador utilizado para configurar como o PORTA deve se comportar, ou seja, quais bits do PORTA ser entrada e quais bits do PORTA ser sada. Dessa forma, o bit0 do registrador TRISA configura o comportamento do pino RA0, o bit1 do registrador TRISA configura o comportamento do pino RA1 e assim por diante at o bit7 do registrador TRISA. Um pino ser configurado como entrada quando conectamos ao pino elementos como botes, sensores, chaves de fim de curso, etc. Um pino ser configurado como sada quando conectamos ao pino elementos que desejamos controlar seu funcionamento tais como rels, contatores, leds, lmpadas, vlvulas, etc. Para configurar um pino como entrada, devemos colocar nvel lgico 1 no bit do registrador TRISA correspondente ao pino a configurar. Para configurar um pino como sada, colocamos nvel lgico 0 no bit do registrador TRISA correspondente ao pino. Resumindo, para entrada, setar o bit do TRISA e para sada reset-lo.

_______________________________102 / 171

Microcontroladores PIC Mdulo I

Tristate
S C E

Bit0 do PORTA

E S C

Pino RA0

C 1 0 0 Bit0 do TRISA

E X 0 1

S Alta Impedncia 0 1

O file TRISA pertence ao banco1 sendo necessrio habilitar este banco antes de manipular o file TRISA, ou seja, devemos manter o bit6 do file STATUS em zero e o bit5 do file STATUS em 1.
Aps um power-on-reset, esse registrador iniciado com todos os seus bits em nvel lgico 1, isto , programa o PORTA como entrada. Dessa forma h uma segurana, pois ao comear como sada poderia acionar algum elemento.

_______________________________103 / 171

Microcontroladores PIC Mdulo I

Exemplo: Pinos RA0, RA1, RA5 e RA7 configurados como sada de dados. Pinos RA2, RA3, RA4 e RA5 configurados como entrada de dados.
TRISA Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 0 0 1 1 1 1 0 0 PORTA PINOS RA0 RA11 RA2 RA3 RA4 RA5 RA6 RA7

Setando o bit0 do file PORTA enviaremos 5V ao pino RA0 ligando o elemento conectado a ele. Resetando este bit enviaremos 0V ao pino RA0, desligando o elemento conectado a ele. Isto tambm vlido para os outros bits at o pino RA7. REGISTRADOR PORTB Este file possui ligao direta com os pinos RB0 a RB7 e todas as consideraes feitas para o PORTA so aplicadas ao PORTB. A configurao do PORTB feita atravs do registrador TRISB. REGISTRADOR TRISB Este file tem como funo configurar os bits do PORTB como entrada ou sada. As consideraes feitas para o TRISA so aplicveis ao file TRISB.

_______________________________104 / 171

Microcontroladores PIC Mdulo I

TCNICAS DE PROGRAMAO Fluxograma O fluxograma um diagrama grfico utilizado para representar o fluxo de um determinado processo. Simbologia
Utilizado para representar Inicio ou Fim de um procedimento

Utilizado para descrever uma instruo de memria

Utilizado para indicar um procedimento, isto , uma rotina

Indica uma deciso

Entrada de dados

Conector; v para

_______________________________105 / 171

Microcontroladores PIC Mdulo I

Indica exibio de dados em tela

Impresso de documento

Indica uma entrada de dados via teclado

Conector de pgina Utilizado para indicar que o fluxograma continua na pgina x

Representa armazenamento em disco magntico

_______________________________106 / 171

Microcontroladores PIC Mdulo I

ALGORTMO O algortmo uma proposta de soluo para um determinado problema descrito em forma de procedimento, assim como uma receita de bolo. A importncia do algortmo na programao o fato de podermos analisar claramente se a lgica da programao realmente soluciona o problema proposto. A forma com que descrevemos o algoritmo chamada de portugus estruturado ou portugol que uma mistura das palavras: portugus e algoritmo. O exemplo mais comum uma receita qualquer de bolo ou qualquer outro produto, veja o exemplo: Algoritmo de um programa de computador para calcular a diviso de dois nmeros 1) 2) 3) 4) 5) Limpar a memria da calculadora (N1 e N2) Digitar o valor do dividendo Se tecla igual a Esc, ento Finalizar o programa Digitar o divisor 6) Se o divisor for diferente de zero, ento 7) V para o item 10 8) Emitir a mensagem Denominador no pode ser igual a zero 9) V para o passo nmero 5 10) Efetuar a diviso entre N1 e N2 11) Mostrar o resultado 12) Voltar ao passo nmero 1 Veja a estrutura da instruo condicional das linhas 3 e 6. Caso a afirmao seja verdadeira, a prxima linha ser executada, caso contrrio a prxima linha ser desprezada. Portanto, caso a condio da linha 3 seja verdadeira, a instruo da linha 4 ser executada, caso contrrio a linha 4 ser desprezada. Observe o mesmo algoritmo representado em fluxograma. Fluxograma do sistema

N1 e N2

PROGRAMA DE DIVISO

Resultad o da Diviso

_______________________________107 / 171

Microcontroladores PIC Mdulo I

Fluxograma do Programa

INCIO

N1 = 0 N2 = 0

Digitar o Dividendo

Input N1

Esc

FIM

Digitar o Divisor

Input N2

Denominador deve ser diferente de zero

N2 = 0? No 2

Sim

_______________________________108 / 171

Microcontroladores PIC Mdulo I

Resultado = N1 / N2

Resultado

INCI O

_______________________________109 / 171

Microcontroladores PIC Mdulo I

No algoritmo apresentado as instrues de desvio, v para, relaciona o nmero da linha o que nos causa grande transtorno pois se alterarmos o programa e incluirmos uma nova linha, temos que modificar todas as instrues de desvio pois os nmeros das linhas sero modificados. Para facilitar nosso trabalho atribumos nomes para a linha que desejamos desviar, sendo assim temos: Inicio
Limpar a memria da calculadora (N1 e N2) Digitar o valor do dividendo (N1) Se tecla igual a Esc, ento Finalizar o programa Digitar_Divisor Digitar o divisor Se o divisor for diferente de zero, ento V para Fazer_Divisao Emitir a mensagem Denominador no pode ser igual a zero V para Digitar_Divisor Fazer_Divisao Efetuar a diviso entre N1 e N2 Imprimir o resultado Voltar para Inicio

_______________________________110 / 171

Microcontroladores PIC Mdulo I

SET DE INSTRUES

O PIC16F84 possui 35 instrues . Estas instrues podero ser divididas em :

Operao com registradores Operao com literais Operao com bits Controles
Controles

Instru o CLRW NOP CALL CLRWDT GOTO RETFIE RETLW RETURN SLEEP

Argument o --------R ----R ----K ---------

Ciclo 1 1 2 1 2 2 2 2 1
Limpa o registrador W

Descrio

Gasta um ciclo sem realizar operao alguma Executa a rotina R Zera o registrador WDT para que no acontea o reset Vai para o ponto R Retorna de uma interrupo Retorna de uma rotina , com um valor K armazenado no registrador W Retorna de uma rotina , sem alterar o valor que est no registrador W Este comando far com que o PIC entre em baixo consumo de energia

_______________________________111 / 171

Microcontroladores PIC Mdulo I

Operao com bits

Instruo BCF BSF BTFSC BTFSS

Argumento f,b f,b f,b f,b

Ciclo 1 1 1 ou 2 1 ou 2

Descrio
Fora zero ao bit b do registrador f. Fora um ao bit b do registrador f Testa o bit b do registrador f e pula a prxima linha se o bit b for zero , caso contrrio, l prxima linha. Testa o bit b do registrador f e pula a prxima linha se o bit b for um, caso contrrio, l prxima linha.

Operao com literais

Instruo ADDLW ANDLW IORLW XORLW MOVLW SUBLW

Argument o K K K K K K

Cicl o 1 1 1 1 1 1

Descrio
Soma um valor K com com o valor que est no registrador W , guardando o resultado da operao no prprio registrador W Lgica E entre W e F , guardando o resultado no prprio registrador W. Lgica OU entre W e F , guardando o resultado no prprio registrador W. Lgica OU entre W e F , guardando o resultado no prprio registrador W. Movimenta um valor K para o registrador W Subtrai um valor que est no registrador W de um valor K ( K-W )

_______________________________112 / 171

Microcontroladores PIC Mdulo I

Operao com registradores

Instru o ADDWF SUBWF ANDWF IORWF XORWF COMF CLRF DECF DECFSZ INCF INCFSZ MOVF MOVWF RLF RRF SWAPF

Argumento Ciclo

Definio
Soma W com F e o resultado guardado num local definido por D Subtrai F de W e o resultado guardado num local definido por D Lgica E entre W e F e o resultado guardado num local definido por D Lgica OU entre W e F e o resultado guardado num local definido por D Lgica OU EXCLUSIVO entre W e F e o resultado guardado num local definido por D Calcula o complemento d F , guardando o resultado em D. Limpa o registrador F Decrementa uma unidade em F , guardando o resultado em D Decrementa uma unidade em F , guardando o resultado em D e pula a prxima linha se o resultado for zero Incrementa uma unidade em F , guardando o resultado em D Incrementa uma unidade em F , guardando o resultado em D e pula a prxima linha se o resultado for zero Movimenta o valor de F para D Movimenta o valor de W para F

F,D F,D F,D F,D F,D F,D F F,D F,D F,D F,D F,D F

Rotaciona um bit de F para a esquerda

F,D
Rotaciona um bit de F para a direita

F,D F,D
Realiza a inverso da parte alta com a parte baixa de F e o resultado guardado em D

_______________________________113 / 171

Microcontroladores PIC Mdulo I

ETAPAS DO DESENVOLVIMENTO DE UM PROGRAMA

Definir as necessidades da automao, isto , objetivos e metas; Utilizar uma tcnica de desenvolvimento. Modularizao, Fluxogramas, etc.; Editar o programa; Compila-lo at que no haja erros de sintaxe; Transferir o programa para o microcontrolador; Testes e depurao.

_______________________________114 / 171

Microcontroladores PIC Mdulo I

A primeira operao a ser efetuada a escrita do cdigo assembler e a sua gravao em um arquivo de texto com a extenso .ASM. Para isto utilizar-se- o programa da microchip chamado MPLAB, porm, possvel utilizar-se o editor um editor ASCII como o NOTEPAD.EXE do Windows ou o EDIT.EXE do MS/DOS. O proximo passo a compilao do codigo, ou seja a transformao em opcode do codigo mnemonico ou instrues assembler deste conteudo. A ferramenta de trabalho MPLAB permite, atravs de um recurso, executar a compilao do fonte gerado. O compilador assembler, MPASMWIN.EXE utiliza-se do fonte .ASM e dos fontes .INC para transformar o cdigo assembler em linguagem de mquina, gerando os seguintes arquivos: .HEX o arquivo que contm o cdigo de operao o qual sera enviado ao PIC via programador. .LST um arquivo de texto na qual vem reportado por inteiro o codigo assembler e a correspondente traduo em opcode. No utilizavel pela programao do PIC mas extremamente util para verificar o processo de compilao que o compilador fez. .ERR contm uma lista de erro de compilao que mostra o numero da linha do codigo na qual esta com erro no codigo assembler. O arquivo .LST, .ERR utilizado somente para controle da compilao. Somente o arquivo .HEX sera utilizado realmente para programar o PIC. Vejamos como. O arquivo.HEX no um arquivo no formato binrio e no reflete diretamante o contedo que dever ter a EEPROM do PIC. Mas os formatos refletiro diretamente quando forem transferidos ao PIC em uma forma legivel e com algumas instrues a mais.

_______________________________115 / 171

Microcontroladores PIC Mdulo I

Projeto 2 LIGA LEDS


Objetivo Acender os 8 leds conectados ao PORTB Hardware

Caractersticas do Led Tenso de alimentao = 3V Corrente nominal = 15mA

_______________________________116 / 171

Microcontroladores PIC Mdulo I

Fluxograma

_______________________________117 / 171

Microcontroladores PIC Mdulo I

CLUSULA #DEFINE A clausula #DEFINE chamada de pseudo-comando uma vez que este no um comando do set de instrues do PIC. Esta clausula utilizada pelo programa compilador para atribuir um nome a um determinado elemento ou a um determinado comando. Sua finalidade tornar o programa bastante legvel de forma a reduzir seus comentrios. Exemplo #DEFINE #DEFINE #DEFINE NOP #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE INICIO HABILITAR_BANCO_1 SET_RB0_SAIDA NOP SET_RB1_SAIDA HABILITAR_BANCO_0 LIGAR DESLIGAR LIGAR . . . EXERCCIO RB0_LED RB1_MOTOR RB2_ALARME HABILITAR_BANCO_0 HABILITAR_BANCO_1 SET_RB0_SAIDA SET_RB1_SAIDA RB0_LED RB1_MOTOR RB2_ALARME LIGAR DESLIGAR BCF STATUS,5 BSF STATUS,5 BCF BCF TRISB,0 TRISB,1

PORTB,0 PORTB,1 PORTB,2 BSF BCF

Alterar o programa do projeto 2 para utilizar a clausula #DEFINE

_______________________________118 / 171

Microcontroladores PIC Mdulo I

PROGRAMAO MODULAR A programao modular consiste em analisar o problema dividindo-o em partes especficas, chamadas de mdulos. Dessa forma a soluo tambm ser modular. Veja o exemplo para um programa que acende os quatro leds conectados ao niblle menos significativos do PORTB.

INICIO CONFIGURAR_PORTB LIGAR_LEDS FIM CONFIGURAR_PORTB Habilitar o banco 1 Resetar bit0 do trisb Nop Resetar bit1 do trisb Nop Resetar bit2 do trisb Nop Resetar bit3 do trisb Nop Habilitar o banco 0 Retornar LIGAR_LEDS Setar o bit0 do portb Setar o bit1 do portb Setar o bit2 do portb Setar o bit3 do portb Retornar A INSTRUO CALL E RETURN A instruo call provoca um desvio no fluxo normal do programa. Ao encontrar esta instruo, o sistema guarda o endereo da prxima instruo em uma memria especial chamada de pilha e desvia para a rotina chamada. Ao encontrar a instruo return, o endereo de retorno restabelecido no PC e o programa volta para o fluxo normal.

_______________________________119 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; Projeto..............: LED ; Programa..........: LED03.ASM ; Objetivo............: Acender os led conectados ao portb ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; Ao iniciar o programa, os leds conectados ao portb e parar ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> ;arquivo de parmetros do PIC16F628

;---------------------------------------------------------------------------------------------; ; DEFINE ; ;---------------------------------------------------------------------------------------------#DEFINE HABILITAR_BANCO_0 BCF STATUS,5 #DEFINE HABILITAR_BANCO_1 BSF STATUS,5 #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE RB0_LED RB1_LED RB2_LED RB3_LED LIGAR DESLIGAR PORTB,0 PORTB,1 PORTB,2 PORTB,3 BSF BCF

#DEFINE SET_RB0_SAIDA BCF TRISB,0 #DEFINE SET_RB1_SAIDA BCF TRISB,1 #DEFINE SET_RB2_SAIDA BCF TRISB,2 #DEFINE SET_RB3_SAIDA BCF TRISB,3 ;---------------------------------------------------------------------------------------------; ; INCIO DO PROGRAMA ; ;---------------------------------------------------------------------------------------------INICIO CALL CONFIG_IOS CALL LIGAR_LEDS FIM: GOTOFIM ;----------------------------------------------------------------------------------------------

_______________________________120 / 171

Microcontroladores PIC Mdulo I

CONFIG_IOS HABILITAR_BANCO_1 SET_RB0_SAIDA NOP SET_RB1_SAIDA NOP SET_RB2_SAIDA NOP SET_RB3_SAIDA NOP HABILITAR_BANCO_0 RETURN ;---------------------------------------------------------------------------------------------LIGAR_LEDS LIGAR LIGAR LIGAR LIGAR RB0_LED RB1_LED RB2_LED RB3_LED

RETURN ;---------------------------------------------------------------------------------------------END

EXERCCIO Alterar o projeto 2 aplicando a tcnica de programao modular.

_______________________________121 / 171

Microcontroladores PIC Mdulo I

INSTRUES CLRF MOVLW E MOVWF A instruo CLRF nos permite zerar um file qualquer. Se desejamos zerar o file TRISB faremos: CLRF TRISB A instruo MOVLW permite carregarmos o file W com um valor qualquer como carregar o file W com nmero 10. MOVLW .10 A instruo MOVWF permite carregarmos um file qualquer com o valor contido no file W. Exemplo MOVLW B00001111 MOVWF PORTB ;carrega o nmero binrio 00001111 no file W ;carrega o file PORTB com valor em W

_______________________________122 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; Projeto..............: LED ; Programa..........: LED04.ASM ; Objetivo............: Acender os led conectados ao portb ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; Ao iniciar o programa, os leds conectados ao portb e parar ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> ;arquivo de parmetros do PIC16F628

;---------------------------------------------------------------------------------------------; ; EQUATES ; ;---------------------------------------------------------------------------------------------MASK_TRISA EQU B'11111111' MASK_TRISB EQU B'11110000' MASK_LIGA_LEDSEQU B'00001111' ;---------------------------------------------------------------------------------------------; ; DEFINE ; ;---------------------------------------------------------------------------------------------#DEFINE HABILITAR_BANCO_0 BCF STATUS,5 #DEFINE HABILITAR_BANCO_1 BSF STATUS,5 ;---------------------------------------------------------------------------------------------; ; INCIO DO PROGRAMA ; ;---------------------------------------------------------------------------------------------INICIO CALL CONFIG_IOS CALL LIGAR_LEDS FIM: GOTO FIM ;----------------------------------------------------------------------------------------------

_______________________________123 / 171

Microcontroladores PIC Mdulo I

CONFIG_IOS HABILITAR_BANCO_1 MOVLW MOVWF MOVLW MOVWF MASK_TRISA TRISA MASK_TRISB TRISB

HABILITAR_BANCO_0 RETURN ;---------------------------------------------------------------------------------------------LIGAR_LEDS MOVLW MOVWF MASK_LIGA_LEDS PORTB

RETURN ;---------------------------------------------------------------------------------------------END

EXERCCIO Alterar o programa do projeto 2 utilizando as instrues MOVLW e MOVWF.

_______________________________124 / 171

Microcontroladores PIC Mdulo I

TCNICA DE MASCARAMENTO DE BIT. INSTRUES AND E OR Observe que no programa LED01 utilizamos apenas 4 leds concectados ao niblle menos significativo do PORTB. Neste caso se utilizamos a instruo MOVLW e MOVWF estragamos o valor do niblle mais significativo do PORTB. Para evitar isto utilizamos as instrues ANDWF e IORWF. MOVLW B11110000 ;carrega o file W com uma mscara cuja finalidade ;zerar o niblle menos significativo o PORTB e manter o ;niblle mais significativo do PORTB com o seu contedo ;atual ;multiplica o valor do file W com o file PORTB zerando ;o niblle menos significativo do PORTB e mantendo o ;valor do niblle do PORTB intacto, ou seja, apaga ;apenas os quatro leds dos pinos RB0 a RB3 ;mascara para setar o niblle menos significativo ;seta apenas o niblle menos signif. do PORTB.

ANDWF PORTB,F

MOVLW B00001111 IORWF PORTB,F

_______________________________125 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; Projeto..............: LED ; Programa..........: LED05.ASM ; Objetivo............: Acender os led conectados ao portb ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; Ao iniciar o programa, os leds conectados ao portb e parar ; ;Entradas ; ;Sadas ; RB0, RB1, RB2, RB3 ; ; UTILIZAO DOS COMANDOS MOVLW e MOVWF ; UTILIZAO DA CLUSULA EQU ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> ;arquivo de parmetros do PIC16F628 ;---------------------------------------------------------------------------------------------MASK_TRISA MASK_TRISB EQU EQU B'11111111' B'00000000'

MASK_DESLIGA_LEDS EQU B'11110000' MASK_LIGA_LEDS EQU B'00001111' ;---------------------------------------------------------------------------------------------#DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE HABILITAR_BANCO_0 HABILITAR_BANCO_1 SET_RB0_SAIDA SET_RB1_SAIDA SET_RB2_SAIDA SET_RB3_SAIDA LIGAR BCF BSF BCF BCF BCF BCF BSF STATUS,5 STATUS,5 TRISB,0 TRISB,1 TRISB,2 TRISB,3

#DEFINE LED1 PORTB,0 #DEFINE LED2 PORTB,1 #DEFINE LED3 PORTB,2 #DEFINE LED4 PORTB,3 ;---------------------------------------------------------------------------------------------; ; INCIO DO PROGRAMA ; ;---------------------------------------------------------------------------------------------INICIO CALL CONFIG_IOS CALL LIGA_LEDS FIM: GOTO FIM

_______________________________126 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; CONFIG_IOS ; ;---------------------------------------------------------------------------------------------CONFIG_IOS HABILITAR_BANCO_1 MOVLW MOVWF MOVLW MOVWF MASK_TRISA TRISA MASK_TRISB TRISB

HABILITAR_BANCO_0 RETURN ;---------------------------------------------------------------------------------------------; ; LIGA LEDS ; ;---------------------------------------------------------------------------------------------LIGA_LEDS MOVLW ANDWF MASK_DESLIGA_LEDS PORTB,F

MOVLW MASK_LIGA_LEDS IORWF PORTB,F RETURN ;---------------------------------------------------------------------------------------------END EXERCCIOS Alterar o programa do exerccio anterior utilizando a tcnica de mascaramento. Fazer um programa para ligar os leds conectados aos rb0, rb2, rb4 e rb6.

_______________________________127 / 171

Microcontroladores PIC Mdulo I

Projeto 3

Boto e Led

Objetivo Controlar o acionamento de quatro leds Hardware

Descrio O programa dever manter o led aceso enquanto o boto estiver acionado.
Consideraes Gerais A tcnica utilizada para conectarmos o boto ao pino RA2 chamada de pull-up. Esta tcnica envia 5V, isto , nvel lgico 1 ao pino RA2 quando o boto no estiver acionado e envia 0V, nvel lgico 0, quando o boto estiver acionado. Se retirarmos o resistor e a ligao a fonte de 5V, quando o boto estiver aberto, o pino RA2 ficar instvel, uma vez que o pino estar em nvel flutuante e o circuito interno do PIC ser muito sensvel ao rudo. Quando acionamos o boto, o resistor evitar que a fonte entre em curto. Esta configurao interessante pois quando o boto estiver aberto, um possvel rudo tem que baixar a tenso de 5V do pino para menos de 1V para que o programa entenda que o boto foi acionado e evite o acionamento indevido do led.

_______________________________128 / 171

Microcontroladores PIC Mdulo I

INSTRUES BTFSS E BTFSC As instrues BTFSS e BTFSC so instrues que realizam teste de um bit de qualquer file. A instruo BTFSS uma instruo que realiza um teste no bit de um file desejado e salta o prximo comando caso o bit testado esteja em nvel lgico 1. Caso este bit esteja em nvel lgico zero, a prxima instruo ser executada. A instruo BTFSC faz um teste no bit desejado e salta a prxima linha caso o bit esteja em nvel lgico zero. Caso o bit esteja em nvel lgico 1, a prxima instruo ser executada.

_______________________________129 / 171

Microcontroladores PIC Mdulo I

Fluxograma
Inicio

Configurar o hardware do pic

Desligar o Led (RA7 = 0)

Boto Acionado ?

No (=1)

Sim (=0)

Ligar o Led (RA7 = 1)

_______________________________130 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; Projeto..............: LED ; Programa..........: LED06.ASM ; Objetivo............: Controlar o acionamento de quatro leds ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; Ligar os quatro leds conectados ao portb enquanto o boto "Liga" estiver acionado ; ;Entradas ; RA2 => Boto "Liga" ; ;Sadas ; RB0, RB1, RB2, RB3 => leds ; ; UTILIZAO DO COMANDO BTFSC ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> ;arquivo de parmetros do PIC16F628

;---------------------------------------------------------------------------------------------MASK_CMCON MASK_TRISA MASK_TRISB EQU B'00000000' EQU B'11111111' EQU B'00000000'

MASK_DESLIGA_LEDS EQU B'11110000' MASK_LIGA_LEDS EQU B'00001111' ;---------------------------------------------------------------------------------------------#DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE HABILITAR_BANCO_0 HABILITAR_BANCO_1 SET_RB0_SAIDA SET_RB1_SAIDA SET_RB2_SAIDA SET_RB3_SAIDA BOTAO_LIGA BCF STATUS,5 BSF STATUS,5 BCF BCF BCF BCF TRISB,0 TRISB,1 TRISB,2 TRISB,3 PORTA,2

_______________________________131 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; INCIO DO PROGRAMA ; ;---------------------------------------------------------------------------------------------INICIO CALL CONFIG_IOS LOOP CALL DESLIGA_LEDS BTFSC GOTO$-1 BOTAO_LIGA ;boto liga acionado ;no, volta ao comando anterior

CALL LIGA_LEDS BTFSS GOTO$-1 BOTAO_LIGA ;boto liga acionado ;sim, volta ao comando anterior

GOTOLOOP ;---------------------------------------------------------------------------------------------; ; CONFIG_IOS ; ;---------------------------------------------------------------------------------------------CONFIG_IOS MOVLW dos pinos MOVWF MASK_CMCON CMCON ;desliga a entrada de comparadores ;ra0, ra1 e ra2

HABILITAR_BANCO_1 MOVLW MOVWF MOVLW MOVWF MASK_TRISA TRISA MASK_TRISB TRISB

HABILITAR_BANCO_0 RETURN

_______________________________132 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; LIGA LEDS ; ;---------------------------------------------------------------------------------------------LIGA_LEDS MOVLW MASK_LIGA_LEDS IORWF PORTB,F RETURN ;---------------------------------------------------------------------------------------------; ; DESLIGA LEDS ; ;---------------------------------------------------------------------------------------------DESLIGA_LEDS MOVLW MASK_DESLIGA_LEDS MOVWF PORTB RETURN ;---------------------------------------------------------------------------------------------END

EXERCCIOS Altere o programa para controlar os leds conectados aos pinos rb0, rb2, rb4 e rb6.

_______________________________133 / 171

Microcontroladores PIC Mdulo I

Altere o programa para aceitar a tcnica de pull-dow conforme o diagrama eltrico abaixo.

_______________________________134 / 171

Microcontroladores PIC Mdulo I

Projeto 4

Boto e Lmpada

Objetivo Controlar o acionamento de uma lmpada Aplicar o estudo da pseudo instruo chamada Macro Instruo Hardware

Descrio Ao acionar o boto do pino RA0, a lmpada dever acender e permanecer assim at que o boto do pino RA1 seja acionado. Base tecnolgica A utilizao do transistor para chavear o rel se deve pelo fato de que a corrente mxima fornecida por um pino do PIC 25mA. Neste caso no podemos conectar o rel diretamente ao pino porque a corrente solicitada pela bobina do rel em torno de 40mA. Para definir o valor do resistor de base podemos considerar o pior ganho em um transistor (HFE ou Beta) que 10. Neste caso a corrente de base ser 10 vezes menor que a corrente de coletor que neste caso ser de 4mA. Dessa forma o valor do resistor ser dado por U / IB. A tenso no resistor ser a tenso da fonte subtrada da tenso de saturao (5 0,7V).. Finalizando, R = 4.3 / 4 mA, R = 1K. O diodo em paralelo com a bobina do rel tem como finalidade evitar a corrente reversa para a fonte quando o transistor entra em corte.

_______________________________135 / 171

Microcontroladores PIC Mdulo I

Uma ltima considerao verificar a corrente mxima admitida nos contatos do rel. A lmpada no poder solicitar uma corrente bem maior que a suportada pelo contato do rel sobre o risco de fundir os contatos.

_______________________________136 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; Projeto..............: LED ; Programa..........: LED07.ASM ; Objetivo............: Controlar o acionamento de uma lmpada ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; Ao acionar o boto do pino RA0, ligar a lmpada e mant-la acesa at que o boto do pino RA1 ; seja acionado. ; ;Entradas ; RA0 => Boto "Liga" ; RA1 => Boto "Desliga" ; ;Sadas ; RB7 => Lmpada ; ; UTILIZAO DE MACRO INSTRUO ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> ;arquivo de parmetros do PIC16F628

;---------------------------------------------------------------------------------------------MASK_CMCON MASK_TRISA MASK_TRISB EQU B'00000000' EQU B'11111111' EQU B'01111111'

MASK_DESLIGA_LEDS EQU B'11110000' MASK_LIGA_LEDS EQU B'00001111' ;---------------------------------------------------------------------------------------------#DEFINE #DEFINE #DEFINE #DEFINE HABILITAR_BANCO_0 HABILITAR_BANCO_1 BOTAO_LIGA BOTAO_DESLIGA BCF STATUS,5 BSF STATUS,5 PORTA,0 PORTA,1

_______________________________137 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; MACRO INSTRUES ; ;---------------------------------------------------------------------------------------------CONFIG_IOS MACRO MOVLW dos pinos MOVWF MASK_CMCON CMCON ;desliga a entrada de comparadores ;ra0, ra1 e ra2

HABILITAR_BANCO_1 MOVLW MOVWF MOVLW MOVWF MASK_TRISA TRISA MASK_TRISB TRISB

HABILITAR_BANCO_0 ENDM ;---------------------------------------------------------------------------------------------; ; INCIO DO PROGRAMA ; ;---------------------------------------------------------------------------------------------INICIO CONFIG_IOS LOOP CALL DESLIGA_LEDS BTFSC GOTO$-1 anterior CALL LIGA_LEDS BTFSC GOTO$-1 GOTOLOOP BOTAO_DESLIGA ;boto liga acionado ;no ;sim BOTAO_LIGA ;boto liga acionado ;no, volta ao comando

_______________________________138 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; LIGA LEDS ; ;---------------------------------------------------------------------------------------------LIGA_LEDS MOVLW MASK_LIGA_LEDS IORWF PORTB,F RETURN ;---------------------------------------------------------------------------------------------; ; DESLIGA LEDS ; ;---------------------------------------------------------------------------------------------DESLIGA_LEDS MOVLW MASK_DESLIGA_LEDS MOVWF PORTB RETURN ;---------------------------------------------------------------------------------------------END

_______________________________139 / 171

Microcontroladores PIC Mdulo I

Projeto 5

Boto e Led

Objetivo Controlar o acionamento de 4 leds Hardware

Descrio Ao iniciar, ligar o LED1. Quando o boto B1 for acionado, o LED2 dever acender e o LED1 apagar e permanecer assim at que o boto B3 seja acionado. Neste caso desligar o LED2 e ligar somente o LED1. Quando o boto B2 for acionado e o LED1 estiver aceso, ligar o LED3 e desligar o LED1 e permanecer neste estado at que o boto B3 seja acionado. Neste caso ligar o LED1 e desligar o LED3 at que o boto B1 ou B2 seja acionado.

_______________________________140 / 171

Microcontroladores PIC Mdulo I

Projeto 6

Circuito Monitor de Temperatura

Este circuito ir monitorar a temperatura de um sistema. Quando a temperatura do sensor estiver abaixo de 100 graus Celcius um led verde dever permanecer ligado, indicando que o sistema est em perfeitas condies. Quando a temperatura ultrapassar 100 graus, um led vermelho dever acender e um ventilador dever ligar.

Esquema Eltrico

_______________________________141 / 171

Microcontroladores PIC Mdulo I

Comentrios O chip LM324 formado por quatro comparadores, iremos utilizar somente um. Os resistores de 1K formam um divisor resistivo para a entrada negativa, mantendo uma tenso fixa de 2,5V. Na entrada positiva teremos o mesmo princpio com o divisor resistivo, porm, o NTC um resistor varivel com a temperatura. Na medida em que a temperatura for aumentando teremos a reduo no valor da resistncia do NTC. Quando a resistncia do NTC for maior que a resistncia do potencimetro o comparador mandar nvel 1 na entrada RA3, caso contrrio, permanecer nvel 0 na mesma. O potencimetro ter o papel de ajuste de temperatura (temperatura de acionamento do led vermelho e ventilador). Ajuste o potencimetro de forma que se a temperatura estiver abaixo de 100 graus a entrada RB3 dever estar em nvel 0 e se estiver acima, dever estar em nvel 1. O transistor BC337 necessrio porque o rel consome em torno de 40mA e o PIC somente poder fornecer no mximo 20mA.

_______________________________142 / 171

Microcontroladores PIC Mdulo I

Projeto 7

Pisca Pisca

Objetivos Piscar um led com intervalo de 0,1 segundos Conhecer o processo de temporizao por software (Delay) Descrio Ao ligar o PIC o led conectado ao pino RB0 dever piscar com intervalo de 0,1 segundos.

Algoritmo Configurar o hardware do PIC Ligar o led conectado ao pino RB0 Desligar o led conectado ao pino RB0 Voltar duas linhas acima Comentrio Este algoritmo no soluciona o problema porque o microcontrolador possui um ciclo de mquina de 1us para cada instruo, com exceo das instrues de desvio como goto, call, etc. Isto significa que o led ser acesso e apagado com intervalo de 4us e assim o led no acender. Dessa forma necessitamos criar uma rotina chamada DELAY cujo objetivo provocar um atraso de 0,1 segundos como desejado. Algoritmo Configurar o hardware do PIC Ligar o led conectado ao pino RB0 Executar a rotina DELAY Desligar o led conectado ao pino RB0 Executar a rotina DELAY Voltar 4 linhas acima

_______________________________143 / 171

Microcontroladores PIC Mdulo I

Algoritmo para a rotina DELAY Contador = Numero de vezes a subtrair Contador = Contador 1 Nada Se Contador diferente de zero Voltar 2 linhas Fim A rotina acima gasta 4us para cada decremento. Sendo assim ser necessrio carregar o contador com 25.000 para obtermos 0,1 segundo. Como os files de uso geral da memria de dados ram so de oito bits, o nmero mximo que podemos carregar em um file ser 255. Dessa forma utilizaremos dois files de forma a carregar um file com 100 e outro com 250. 1 - Carregar a varivel WT1AUX com 100 2 - Carregar a varivel WT2AUX com 250 ;-----------------------------;este loop ser executado 250 vezes e o tempo gasto para isto ser de ;1ms ou seja 250 vezes * 4us 3 - Decrementar a varivel WT2AUX 4 - Se a varivel WT2AUX for diferente de zero 5Voltar duas linhas acima ;-----------------------------6 - Decrementar a varivel WT1AUX 7 - Se a varivel WT1AUX for diferente de zero 8Fim Voltar ao item 2 ;1us ;1us ;2us 2us 1us 1us

_______________________________144 / 171

Microcontroladores PIC Mdulo I ;---------------------------------------------------------------------------------------------; Projeto..............: LED ; Programa..........: PISCA01.ASM ; Objetivo............: Piscar um led a cada 0,1s ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; Ao executar o programa, o led dever piscar periodicamente ;a cada 0,1 segundos ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> ;arquivo de parmetros do PIC16F628 ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------#DEFINE #DEFINE #DEFINE ; ; ; ;---------------------------------------------------------------------------------------------MASK_CMCON MASK_TRISA MASK_TRISB EQU EQU EQU B'00000000' B'11111111' B'11111110' EQUATES LIGAR DESLIGAR RB0_LED BSF BCF PORTB,0 DEFINE

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

_______________________________145 / 171

Microcontroladores PIC Mdulo I ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------CBLOCK WT1AUX WT2AUX ENDC ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------CONFIG_IOS MOVLW MOVWF MACRO MASK_CMCON CMCON MACRO INSTRUES 0X20 ;varivel utilizada na rotina delay_01 ;varivel utilizada na rotina delay_01 DECLARAO DE VARIVEIS

HABILITAR_BANCO_1 MOVLW MOVWF MOVLW MOVWF MASK_TRISA TRISA MASK_TRISB TRISB

HABILITAR_BANCO_0 ENDM

_______________________________146 / 171

Microcontroladores PIC Mdulo I ;---------------------------------------------------------------------------------------------HABILITAR_BANCO_0 BCF BCF ENDM ;---------------------------------------------------------------------------------------------HABILITAR_BANCO_1 BSF BCF ENDM ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------INICIO CONFIG_IOS LOOP LIGAR CALL DESLIGAR CALL GOTO RB0_LED DELAY_01S RB0_LED DELAY_01S LOOP INCIO DO PROGRAMA STATUS,5 STATUS,6 MACRO STATUS,5 STATUS,6 MACRO

_______________________________147 / 171

Microcontroladores PIC Mdulo I ;---------------------------------------------------------------------------------------------; ; ; ;aguarda 0,1 segundos e retorna ; DELAY_01S MOVLW MOVWF MOVLW MOVWF NOP DECFSZ GOTO $-1 DECFSZ GOTO $-6 RETURN ;---------------------------------------------------------------------------------------------END WT1AUX,F WT2AUX,F ; ;=====/ .100 WT1AUX .250 WT2AUX ;=====\ 4us * 250 = 1ms ;base de tempo 100 * 1ms = 0,1s DELAY_01

_______________________________148 / 171

Microcontroladores PIC Mdulo I EXERCCIO

1)

Desenvolver um projeto para piscar os leds conectados aos pinos RB0, RB1, RB2 e RB3 em intervalos de 0,2 segundos controlados por dois botes. O boto conectado ao pino RA0 dispara o processo de piscar. O boto conectado ao pino RA1 para o processo de piscar. Gravar o programa como PISCA02.ASM

_______________________________149 / 171

Microcontroladores PIC Mdulo I

Projeto 8
Objetivos

Pisca Pisca

Piscar 8 leds com intervalo de tempo de 0,5 segundos. Utilizar clusulas Include Utilizar programao estruturada Descrio Ao acionar o boto B1, piscar os 8 leds com intervalo de 0,5 segundos at que o boto B2 seja acionado. Base tecnolgica Para estruturar um programa devemos criar rotinas flexveis. Tomaremos como exemplo a rotina Delay que no ter mais um valor fixo, ou seja, aguarda 0,1 segundos ou 0,2 segundos, etc. O valor do tempo ser definido pelo programa principal, dessa forma teremos a seguinte estruturao: Desenvolveremos uma rotina de delay com um ncleo com tempo fixo de 0,1 segundos. A partir da a rotina flexvel executar N vezes o ncleo de 0,1 segundos. O programa principal definir a quantidade de vezes a executar o ncleo, ou seja, a quantidade de 0,1 segundos a executar. O tempo mximo ser de 1h e 50 minutos e ser fornecido em dcimos de segundos, isto , tempo mximo de 6.553,6 dcimos de segundos.

_______________________________150 / 171

Microcontroladores PIC Mdulo I

DELAY

TAUX = 250

NOP

TAUX = TAUX - 1

TAUX = 0?

T0L = T0L - 1

T0L = 0?

T0H = T0H - 1

T0H = 0?

RETURN

_______________________________151 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------;. ; Projeto..............: LED ; Programa..........: PISCA02.ASM ; Objetivo............: Controlar o acionamento de quatro leds ; Data..................: ; Autor(es)...........: ; Microcontrolador: PIC16F628 ; Descrio Geral: ; ; ;Entradas ; ; ; ;Sadas ; RB0, RB1, RB2 e RB3 = leds ;---------------------------------------------------------------------------------------------#INCLUDE <P16F628.INC> #Include Equates.Inc #Include Defines.Inc #Include Macro.Inc #Include Cblock.Inc ;arquivo de parmetros do PIC16F628 RA0 = boto liga (pull-up; = 0 boto acionado) RA1 = boto desliga (pull-up; = 0 boto acionado) Ao acionar o boto liga, os quatros leds piscaro com intervalo de ;0,5 segundos at que o boto desliga seja acionado.

_______________________________152 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------Org Inicio ConfigIOs DesligaLeds Loop: Call Btfsc BotaoStart PiscaPisca ;boto start acionado? Goto $-1 Goto Loop ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------;pisca os leds at que o boto desliga seja acionado ; PiscaPisca LigaLeds MovPreset1Timer Delay DesligaLeds Btfss BotaoStop Return MovPreset2Timer Delay ;boto stop acionado? ;sim, retornar PISCA_PISCA ;no, voltar para linha anterior 0 INCIO DO PROGRAMA

_______________________________153 / 171

Microcontroladores PIC Mdulo I

Btfsc BotaoStop Goto PiscaPisca Return

;boto stop acionado? ;no, repetir o processo

;---------------------------------------------------------------------------------------------#Include Delay.Inc ;---------------------------------------------------------------------------------------------End Arquivo EQUATES.INC ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------MaskCmcon MaskTrisA MaskTrisB RamIni MaskLedsOn MaskLedsOff Preset1TimerL Preset1TimerH Preset2TimerL Preset2TimerH equ equ equ equ equ equ equ equ equ equ 0X20 B'00001111' B'11110000' .4 .0 .4 .0 B'00000000' B'11111111' B'11110000' EQUATES

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

_______________________________154 / 171

Microcontroladores PIC Mdulo I

Arquivo DEFINE.INC ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------#Define #Define #Define #Define SetBit ResetBit BotaoStart BotaoStop Bsf Bcf PORTA,0 PORTA,1 DEFINE

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

_______________________________155 / 171

Microcontroladores PIC Mdulo I

Arquivo MACRO.INC ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------MovPreset1Timer Macro MACRO INSTRUES

Movlw Preset1TimerL MovwfWTimer0Low Movlw Preset1TimerH MovwfWTimer0High Endm ;---------------------------------------------------------------------------------------------MovPreset2Timer Macro

Movlw Preset2TimerL MovwfWTimer0Low Movlw Preset2TimerH MovwfWTimer0High Endm ;---------------------------------------------------------------------------------------------Delay Call Endm ;---------------------------------------------------------------------------------------------Macro RotinaDelay

_______________________________156 / 171

Microcontroladores PIC Mdulo I

HabilitarBanco0 Macro ResetBit ResetBit Endm ;---------------------------------------------------------------------------------------------HabilitarBanco1 Macro SetBit STATUS,5 SetBit STATUS,6 Endm ;---------------------------------------------------------------------------------------------ConfigIOs Macro STATUS,5 STATUS,6

Movlw MaskCmcon MovwfCMCON HabilitarBanco1 Movlw MaskTrisA MovwfTRISA Movlw MaskTrisB MovwfTRISB HabilitarBanco0 Endm ;----------------------------------------------------------------------------------------------

_______________________________157 / 171

Microcontroladores PIC Mdulo I

DesligaLeds

Macro

Movlw MaskLedsOff Andwf PORTB,f Endm ;---------------------------------------------------------------------------------------------LigaLeds DesligaLeds Movlw MaskLedsOn Iorwf PORTB,f Endm ;---------------------------------------------------------------------------------------------Arquivo CBLOCK.INC ;---------------------------------------------------------------------------------------------; ; ; ;---------------------------------------------------------------------------------------------Cblock RamIni DECLARAO DE VARIVEIS Macro

WTimer0Low WTimer0High WTimerAux0 WTimerAux1 Endc ;----------------------------------------------------------------------------------------------

_______________________________158 / 171

Microcontroladores PIC Mdulo I

Projeto 9
Programa: Objetivos Controlar um pisca-pisca. Descrio Ao acionar o boto B1, pino RA0, os quatro leds menos significativos do portb dever acender e permanecer assim por 0,5 segundos. Logo aps estes leds devem se apagarem e os 4 leds mais significativos do portb acender por 0,2 segundos. Permanecer com o pisca-pisca at que o boto 2, pino RA1, seja acionado. Pisca03.asm

Projeto 10
Programa: Objetivos Alterar o projeto 9 para utilizar a tcnica de complementao de bit. Pisca04.asm

Base Tecnolgica A instruo XORWF, Ou exclusiva, permite complementar bits, ou seja, inverter o estado dos bits desejados. Esta tcnica consiste em realizar uma operao lgica OU Exclusiva entre o file que se deseja complementar e uma mascara de bit indicando quais bits sero complementados. O bit da mascara correspondente ao bit do file que se deseja inverter deve estar em nvel lgico 1 e os bits que no desejamos inverter em nvel lgico baixo. Contedo do Mascara File 00110110 11110000 1100001 1 1100110 0 11110101 00111100 Resultado

_______________________________159 / 171

Microcontroladores PIC Mdulo I

Projeto 11
Programa: Objetivos Produzir um efeito luminoso seqencial dos leds. Descrio Ao acionar o boto Liga, os leds devero piscar sequencialmente com intervalo de 0,1 segundos. Ao acionar o boto Desliga parar o efeito luminoso. Entradas RA0 RA1 => => Boto Liga Boto Desliga Pisca05.asm

Base Tecnolgica Neste programa poderemos utilizar a instruo de rotao de bit. Temos dois tipos desta instruo: rotao para esquerda RLF e a rotao para a direita RRF. Estas instrues se utilizam de um bit especial chamado de Flag Cary que um bit do file STATUS. Instruo RLF Transfere o contedo do bit0 para o bit1, bit1 para bit2 bit7 para o cary e cary para bit0

Instruo RRF

_______________________________160 / 171

Microcontroladores PIC Mdulo I

Projeto 12
Programa: Objetivos Produzir efeitos luminosos nos leds. Descrio Ao acionar o boto Liga, os leds devero piscar intermitentemente com intervalo de 0,2 segundos por 10 vezes. Entradas RA0 => Boto Liga Pisca06.asm

Base Tecnolgica Para fazer um contator, utilizaremos a rea de memria ram chamada de registradores de uso geral. No caso do modelo 16F628 esta rea comea no endereo 20H e possui um total de 96 registradores que o programador poder utilizar conforme sua necessidade. O programador definir um nome para o registro livre que deseja utilizar. No nosso caso vamos atribuir o nome de contador para o endereo 20H. Isto definido na clusula CBLOCK. Como nosso contador crescente, temos a necessidade de comparar o valor atual do contador com o valor mximo que desejamos. Como o PIC no possui instruo de comparao teremos que nos valer da instruo XORWF, ou seja, executaremos uma OU Exclusiva entre o valor do file W e o nosso contador. Neste caso, o file W conter o valor mximo da contagem. Nesta operao teremos como resultado igual a zero se somente se o valor do file W for igual ao valor do contador. A Flag Zero um bit responsvel em dizer se o resultado da operao deu ou no zero. Esta flag esta localizada no bit2 do file STATUS. Quando o resultado da operao for igual a zero, esta flag ser setada, ou seja, ir para nvel lgico alto. Caso contrrio esta flag ser mantida em nvel lgico baixo. Exemplo: W=5 File = 9 => => 00000101 00001001

_______________________________161 / 171

Microcontroladores PIC Mdulo I

Resultado Flag Zero W=5 File = 5 Resultado Flag Zero

=> = => => => =

00001100 0 00000101 00000101 00000000 1

_______________________________162 / 171

Microcontroladores PIC Mdulo I

Desenvolver um projeto para incluir as duas funes anteriores sendo acionada por dois botes sendo: Pino RA0 = boto pisca seqencial Pino RA1 = boto pisca alternadamente Pino RA2 = boto desliga Programa: PISCA_V06.ASM 2) Desenvolva um programa para controlar os efeitos luminosos de 8 leds conectados ao portb da seguinte forma. Se o boto Liga, pino RA0, for acionado os leds devero piscar na seguinte seqncia: 1 da direita para esquerda e da esquerda para direita 5 vezes. Bit0=>bit1=>bit2=>bit3=>bit4=>bit5=>bit6=>bit7=>bit6=>bit5.... 2 dos extremos para o centro e do centro para os extremos 10 vezes. Bit0 e 7; Bit1 e 6; Bit2 e 5; Bit3 e 4; Bit2 e 5; Bit1 e 6; Bit0 e 7.. 3 Piscar intermitentemente 10 segundos. Bits 0, 1, 2 e 3 e depois Bits 4,5,6 e 7 O intervalo entre piscar um bit e outro de 0,2 segundos. Repetir o processo at que o boto desliga, pino RA1, seja acionado. Programa: PISCA_V07.ASM

_______________________________163 / 171

Microcontroladores PIC Mdulo I

Projeto 7

Controle para Motor CC

RA0 => Boto Stop, desliga o motor RA1 => Boto Start, liga o motor RA2 => Sentido de giro do motor. 0 = horrio; 1 = Anti-horrio RB1 => Sinalizao de motor desligado RB2 => Sinalizao de motor girando no sentido horrio RB3 => Sinalizao de motor girando no sentido anti-horrio RB6 => Gira o motor no sentido horrio RB7 => Gira o motor no sentido anti-horrio

_______________________________164 / 171

Microcontroladores PIC Mdulo I

Projeto 8

Controle para Motor de Passo

O circuito a seguir um circuito de excitao para movimentar motores de passo. Neste circuito, poderemos controlar via software a velocidade do motor.

Esquema Eltrico

_______________________________165 / 171

Microcontroladores PIC Mdulo I

Ful Step

Full Step

O motor ir mover-se de 1,8 em 1,8 graus por passo

RB3

RB2

RB 1

RB0

1 Half Step O motor ir mover-se de 0,9 em 0,9 graus por passo 1 0 0

0 0 1 1

1 0 0 1

0 1 1 0

_______________________________166 / 171

Microcontroladores PIC Mdulo I

Projeto 9

Controle para Motor de Passo II

Alterar o projeto anterior para admitir o controle de giro no sentido horrio e anti-horrio

_______________________________167 / 171

Microcontroladores PIC Mdulo I

SET DE INSTRUES DO PIC16F628

_______________________________168 / 171

Microcontroladores PIC Mdulo I

O MAPA DE MEMRIA DE DADOS DO PIC16F628

_______________________________169 / 171

Microcontroladores PIC Mdulo I

Operadores aritmticos de assembler

_______________________________170 / 171

Microcontroladores PIC Mdulo I

;---------------------------------------------------------------------------------------------------; ; PROGRAMA PARA LIGAR UM LED CONECTADO AO PINO RB0 ; ;---------------------------------------------------------------------------------------------------#INCLUDE <P16F648A.INC> ;esta diretiva de compilao inclui os ;parmetros do modelo do pic utilizado ;no projeto

;---------------------------------------------------------------------------------------------------; ;CONFIGURAES PARA GRAVAO DO PIC ; ; ;BODEN_OFF Reset se alimentao < 4V por + de 100us off ;CP_OFF Proteo contra leitura do programa desligada ;PWRTE_ON Delay de 72ms apos um reset (MCLR = 1) ;WDT_OFF Watch Dog Timer desligado ;LVP_OFF Gravao em baixa tenso desligada ;MCLRE_OFF Master Clear desligado. RA5 como I/O ;INTOSC_OSC_NOCLKOUT Oscilador interno ligado, RA6 e RA7 como I/O __CONFIG _BODEN_OFF&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_MCLRE_OFF& _INTOSC_OSC_NOCLKOUT ;---------------------------------------------------------------------------------------------------INICIO BSF BCF STATUS,5 TRISB,0 ;esta instruo seta o bit5 do registro status ;ligando o modo de configurao

;reseta o bit0 do registro trisb configurando ;o pino rb0 como sada BCF STATUS,5 ;reseta o bit5 do registro status desabilitando ;o modo de configurao ;---------------------------------------------------------------------------------------------------;seta o bit0 do portb ligando o led conectado ;ao pino rb0 ;---------------------------------------------------------------------------------------------------GOTO $ ;esta instruo trava a execuo do programa ;---------------------------------------------------------------------------------------------------END ;esta diretiva termina a compilao ;---------------------------------------------------------------------------------------------------BSF PORTB,0

_______________________________171 / 171