ALGORITMO E PROGRAMAÇÃO- Apostila Básica PIC V4

Embed Size (px)

Citation preview

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: [email protected]

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.

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

_______________________________6 / 171

Microcontroladores PIC Mdulo I

Projeto 1Objetivo 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 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 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 ;------------------------------------------------------------------------------------------------__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 ;------------------------------------------------------------------------------------------------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 ;------------------------------------------------------------------------------------------------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 ;------------------------------------------------------------------------------------------------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

;------------------------------------------------------------------------------------------------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 BTFSSFuno: 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 Pisca02HARDWARE

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 ;------------------------------------------------------------------------------------------------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

;------------------------------------------------------------------------------------------------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 ;------------------------------------------------------------------------------------------------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 1Objetivo 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 ;------------------------------------------------------------------------------------------------__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 BsfMicrocontroladores 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

_______________________________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 #Include #Include ;---------------------------------------------------------; ; 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

TristateS 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. SimbologiaUtilizado 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

Re