Você está na página 1de 22

UNIVERSIDADE FEDERAL DE SO JOO DEL-REI - UFSJ

DEPARTAMENTO DE ENGENHARIA ELTRICA - DEPEL

INTRODUO AOS MICROCONTROLADORES PIC

THIAGO VELOSO GOMES JOO MATHEUS DE OLIVEIRA ARANTES

So Joo del-Rei Maro de 2007.

Sumrio
1 Introduo 1.1 Estrutura do microcontrolador PIC 16F628A . . . . . . . . . . . . . . . . . . . . . . 1.2 Arquitetura Havard e Cdigo RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Ciclos de mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O PIC 16F628A Mapas de memria Registradores Especiais 4.1 STATUS . . . . . . 4.2 PCON . . . . . . . 4.3 TRISA e TRISB . . 4.4 PORTA e PORTB . 2 2 3 3 5 7 8 . 8 . 10 . 10 . 10

2 3 4

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

MPlab 10 5.1 Compilando o Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.2 Gravando o projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Criando um Programa 6.1 Arquivos de denio (Include) 6.2 Constantes . . . . . . . . . . . . 6.3 Dene . . . . . . . . . . . . . . 6.4 ORG . . . . . . . . . . . . . . . 6.5 END . . . . . . . . . . . . . . . 6.6 CBLOCK e ENDC . . . . . . . 6.7 Registrador WORK (W) . . . . 6.8 Estruturao bsica . . . . . . . 13 13 13 14 14 14 14 14 14

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

Conjunto de instrues para o PIC 16F628A 15 7.1 Instrues e Argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 7.2 Lista de Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Rotinas 8.1 Acessando o banco de dados . 8.2 Lendo e escrevendo nas portas 8.3 Fazendo contagem de eventos 8.4 Fazendo comparaes . . . . . 8.5 Fazendo contagem de tempo . Exerccios Propostos 17 17 18 18 18 19 19

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Introduo

O desenvolvimento acelerado e o surgimento de novas tecnologias tm trazido nos ltimos anos mais facilidades a vida cotidiana dos seres humanos. Dentre elas esto os dipositivos inteligentes presentes em grande parte dos lares, estabelecimentos comerciais, hospitais, indstrias, etc. Esses dispositivos so ditos inteligentes pois conseguem realizar alguma ao autnoma, ou seja, sem a necessidade de um acionamento humano ou semi-autnoma interagindo assim com o homem. Essas aes esto normalmente relacionadas a um estado de um dispositivo de entrada ou sada (perifrico), a alguma ao previamente determinada ou a um comando externo. Esses estados so ento enviados a um crebro, ou seja, a um controlador que ir processar as informaes vindas dos perifricos e tomar alguma deciso. Dispositivos inteligentes, comumente chamados de sistemas autnomos, podem ser utilizados para diversos ns, tais como sinalizao, controle, segurana, transmisso de dados, etc. Estes sistemas so representados de uma forma genrica na Figura 1.

Dispositivos de entrada

Controlador

Dispositivos de sada

Figura 1: Representao genrica de um sistema autnomo. Existem diversos dispositivos que podem ser utilizados para dar autonomia a um sistema, como por exemplo: um computador, um Controlador Lgico Programvel (CLP) ou um microcontrolador, sendo este ltimo o tema de trabalho desta apostila. O microcontrolador pode ser denido como um dispositivo eletrnico de tamanho reduzido dotado de uma inteligncia programvel utilizado no controle de processos lgicos. Existem diversos tipos e fabricantes de microcontroladores. No entanto, no decorrer desse curso, ser utilizado o microcontrolador PIC 16F628A da Microship.

1.1

Estrutura do microcontrolador PIC 16F628A

A Figura 2 mostra o diagrama interno do PIC 16F628A. No diagrama de blocos retirado do datasheet da Microchip podem ser visualizadas as diversas partes que compem o microcontrolador 16F628A. O mesmo composto pela ULA (Unidade Lgica Aritmtica - do ingls ALU), que est diretamente ligado ao registrador W (Work). No canto superior esquerdo temos a memria de programa e saindo desse bloco temos um barramento de 14 bits (Program Bus 14). Mais ao centro est a memria de dados (RAM). Ela j possui o barramento de 8 bits (Data Bus 8). Do lado direito podemos visualizar as portas com todos os seus pinos de I/O. Na parte inferior se encontram os perifricos, tais como a EEPROM, os Timers, o comparador interno, o mdulo CCP e a porta serial USART. Um pouco mais ao centro temos o registrador STATUS. Na parte superior temos ainda o contador de linha de programa (Program Counter) e a pilha de oito niveis (Stack). Temos ainda os circuitos internos de reset, osciladores, Watchdog Timer (WDT), Power-up e Brown-out internos.

Figura 2: Diagrama interno do PIC16F628A.

1.2

Arquitetura Havard e Cdigo RISC

Na arquitetura tradicional tipo Von Neuman, existe apenas um barramento interno utilizado para instrues e dados. Na arquitetura Havard existe um barramento para instrues e outro para dados. O barramento dos microcontroladores PIC do tipo Havard sendo que o barramento de dados de 8 bits e o barramento de instrues pode ser de 12, 14 ou 16. Os PICs utilizam a tecnologia RISC (Reduced Instruction Set Computer) e possuem em torno de 35 instrues, o que torna o aprendizado mais fcil e dinmico.

1.3

Ciclos de mquina

O sinal do clock internamente dividido por quatro nos microcontroladores PIC. Assim, para um clock externo de 4 MHz, temos um clock interno de 1 MHz e, consequentemente, cada ciclo de mquina dura 1 s. A diviso do clock por quatro forma as fases Q1, Q2, Q3, e Q4. O program counter incrementado automaticamente na fase Q1 do ciclo de mquina e a instruo seguinte buscada da memria de programa e armazenada no registrador de instrues no ciclo Q4. Ela decodicada e executada no prximo ciclo, no intervalo de Q1 at Q4. Essa caracterstica de buscar a informao num 3

Figura 3: Ciclos de mquina do PIC16F628A.

Figura 4: Exemplo de ciclo de mquina do PIC16F628A. ciclo de mquina e execut-la no prximo conhecida como PIPELINE. Ela permite que quase todas as instrues sejam executadas em apenas um ciclo, gastando assim 1 s (para um clock de 4 MHz) e tornando o sistema muito mais rpido. As nicas excees referem-se s instrues que geram "saltos"no program counter, como chamadas de rotinas e retornos. Ao executar essas in-

strues, o PIPELINE deve ser primeiramente limpo para depois poder ser carregado novamente com o endereo correto, consumindo para isso dois ciclos de mquina. Esse PIPELINE facilmente implementado devido arquitetura Havard. Os diagramas das Figuras 3 e 4 foram retirados do manual da Microchip e demonstram claramente as divises do ciclo nas quatro fases (Q1 a Q4) e o conceito de PIPELINE.

O PIC 16F628A
O PIC 16F628A possui as seguintes caractersticas: Microcontrolador de 8 bits; 2 osciladores internos 37 KHz e 4 MHz; 16 portas de I/O congurveis como entrada ou sada; 10 interrupes disponveis; Memria de programao Flash de 2048 Bytes; Memria EEPRON interna de 128 Bytes; Programao com 14 bits e 35 instrues. Legenda:

Figura 5: Pinagem do PIC16F628A. A funo de cada pino do microcontrolado mostrada na Tabelas 1 e 2. A posio dos mesmos mostrada na Figura 5.

Tabela 1: Nomenclatura de identicao dos pinos do PIC 16F628A. Nmero Funo Tipo Tipo Descrio do Pino EnSada trada 17 RA0 ST CMOS I/O digital bidirecional. AN0 AN Entrada analgica para os comparadores. 18 RA1 ST CMOS I/O digital bidirecional. AN1 AN Entrada analgica para os comparadores. 1 RA2 ST CMOS I/O digital bidirecional. AN2 AN Entrada analgica para os comparadores. VREF AN Sada da tenso de referncia programvel. 2 RA3 ST CMOS I/O digital bidirecional. AN3 AN Entrada analgica para os comparadores. CMP1 CMOS Sada do comparador 1. 3 RA4 ST OD I/O digital bidirecional. T0CKI ST Entrada externa do contador TMR0. CMP2 OD Sada do comparador 2. 4 RA5 ST entrada digital. MCLR ST Master Clear (reset externo. O PIC s funciona quando este pino encontra-se em nvel alto. VP P Entrada para tenso de programao (13V). 15 RA6 ST CMOS I/O digital bidirecional. OSC2 XTAL Sada para cristal externo. CLKOUT CMOS Sada com onda quadrada em 1 da fre4 quncia imposta em OSC1 quando em modo RC. Essa frequncia equivale aos ciclos de mquina internos. 16 RA7 ST CMOS I/O digital bidirecional. OSC1 XTAL Entrada para cristal externo. CLKIN ST Entrada para osciladores externos (hbridos ou RC). 6 RB0 TTL CMOS I/O digital bidirecional com pull-up interno. INT ST Entrada para interrupo externa. 7 RB1 TTL CMOS I/O digital bidirecional com pull-up interno. RX ST Recepo para comunicao USART assncrona. DT ST CMOS Via de dados para comunicao USART sncrona.

Tabela 2: Continuao: Nomenclatura de identicao dos pinos do PIC 16F628A. 8 RB2 TTL CMOS I/O digital bidirecional com pull-up interno. TX CMOS Transmisso para comunicao USART assncrona. CK ST CMOS Via de clock para comunicao USART sncrona. 9 RB3 TTR CMOS I/O digital bidirecional com pull-up interno. CCP1 ST CMOS I/O para o Capture, Compare e PWM. 10 RB4 TTL CMOS I/O digital bidirecional com pull-up interno. Interrupo por mudana de estado. PGM ST Entrada para programao em baixa tenso (5 V). 11 RB5 TTL CMOS I/O digital bidirecional com pull-up interno. Interrupo por mudana de estado. 12 RB6 TTL CMOS I/O digital bidirecional com pull-up interno. Interrupo por mudana de estado. T1OSO XTAL Sada para cristal externo para TMR1. PGC ST Clock da programao serial (ICSP). 13 RB7 TTL CMOS I/O digital bidirecional com pull-up interno. Interrupo por mudana de estado. T1OSI XTAL Entrada para cristal externo para TMR1. PGD ST CMOS Data da programao Serial (ICSP). 5 VSS P GND. 14 VDD P Alimentao positiva.

Tabela 3: Continuao: Nomenclatura de identicao dos pinos do PIC 16F628A. P Power (alimentao) No utilizado TTL Entrada tipo TTL ST Entrada tipo Schmitt Trigger CMOS Sada do tipo CMOS OD Sada tipo dreno aberto (open drain) NA Entrada/Sada analgica

Mapas de memria

Como mencionado anteriormente, o PIC 16F628A possui trs memrias. Na memria de Programa ca armazenado o cdigo desenvolvido pelo usurio. Na mmoria de dados cam armazane7

nados os valores dos registradores especiais e das variveis denidas pelo usurio. Na memria EEPRON podem ser armazenados resultados de clculos e medidas de determinadas grandezas feitas pelo PIC. A Figura 6 e a Figura 7 mostram como so organizadas a memria de programa e a memria de dados, respectivamente.

Figura 6: Mapa da memria de programa.

4 Registradores Especiais
O PIC possui registradores especiais denominados SFR (Special Function Registers). Estes registradores tem a funo de armazenar a congurao e o estado de funcionamento atual da mquina. A seguir sero apresentados os principais registradores.

4.1

STATUS

As principais funes deste registrador esto relacionadas s operaes matemticas realizadas na ULA do PIC. Ele indica estouros de registradores (C-Carry e DC-Digt Carry) e os resultados iguais a zero. importante ressaltar que para o caso da subtrao, o Carry trabalha com lgica invertida.

Figura 7: Mapa da memria de dados.

4.2

PCON

A principal funo do PCON a escolha da frequncia do oscilador interno (37 KHz ou 4 MHz).

4.3

TRISA e TRISB

Os registradores TRISA e TRISB servem para congurar como entrada ou sada os pinos das portas PORTA e PORTB, respectivamente. Para congurar como entrada basta escrever 1 no bit correspondente e como sada basta escrever 0 no bit correspondente. Os bits podem ser selecionados como entrada e sada da forma que se desejar. Por exemlo, para o PORTB, se a sequncia 10010111 for utilizada para congurar o registrador TRISB, isto signica que as portas RB0, RB1, RB2, RB4 e RB7 foram conguradas como entrada (1) e que RB3, RB5 e RB6 foram conguradas como sada (0). Lembrado que RB0 representa o bit menos signicativo (LSB - direita) e RB7 o bit mais signicativo (MSB - esquerda).

4.4

PORTA e PORTB

Os registradores PORTA e PORTB so utilizados para modicar diretamente o estado (0 ou 1) das portas. Quando o bit congurado como entrada, o estado da porta armazenado diretamente no bit correspondente a porta nestes registradores. Quando o bit congurado como sada o seu estado pode ser modicado escrevendo-se diretamente no bit correspondente destes registradores. Por exemplo se o bit 3 do PORTA estiver congurado como entrada (bit 3 do TRISA em 1) basta ler o estado do bit 3 do registrador PORTA para conhecer o estado da entrada.

MPlab

O MPlab o software desenvolvido pela Microchip, distribudo gratuitamente, utilizado como ambiente de desenvolvimento de projetos para PICs. Com ele possvel desenvolver, compilar e debbugar o cdigo desenvolvido. A Figura 8 mostra o ambiente de trabalho do Mplab. Ao iniciar o desenvolvimento de uma aplicao utilizando o MPlab necessrio primeiramente salvar o novo Workspace criado quando inicia-se o MPlab. O Workspace armazena todas as informaes necessrias ao desenvolvimento da aplicao. Para salv-lo clique no menu File > save workspace. O MPlab trabalha tambm com o conceito de projeto. O projeto abrange o cdigo-fonte e muitas outras informaes necessrias para a compilao e execuo da aplicao. Para criar um novo projeto clique em Project > new, a tela mostrada na Figura 9 aparecer. Basta ento escolher o nome para o projeto e o local onde o mesmo ser armazenado. Caso j existe um arquivo fonte em seu HD basta ento adicion-lo ao projeto clicando com o boto direito em Source Files e em seguida em Add Files... conforme mostrado na Figura 10. Este arquivos so do tipo asm que se refere a um arquivo Assembly, sendo esta a linguagem de programao adotada neste curso. Caso voc no possua um arquivo fonte basta cri-lo clicando no boto New abaixo do menu File.

5.1

Compilando o Projeto

As conguraes que sero mostradas a seguir so necessrias para que o projeto seja compilado de forma correta. Os passos so os seguintes: 10

Figura 8: Ambiente de trabalho do MPlab.

Figura 9: Criando um novo projeto. Selecionar o microcontrolador a ser utilizado. Para isto, clique em Congure > Select device. Em seguida basta selecionar o modelo do PIC na opo Device. Compilar o projeto clicando no menu Project > Make ou na tecla F 10. Em seguida a tela Output aparecer mostrando o resultado da compilao.

5.2

Gravando o projeto

Antes de gravar o projeto importante congurar algumas opes do PIC. Para realizar estas conguraes clique em Congure > Conguration Bits, em seguida a tela mostrada na Figura 11 aparecer. A nica opo que deve ser escolhida obrigatoriamente a opo Oscillator. Pois esta opo dene o tipo de oscilador a ser utilizado pelo PIC. Os principais tipos de oscilador e suas montagens eltricas so mostrada a seguir: Oscilador interno - Oscilador de 37 KHz ou 4 MHz. Oscilador a cristal - Diversas frequncias disponveis no mercado. Oscilador RC - a frequncia depende dos valores do resitor e do capacitor utilizados. 11

Figura 10: Adicionando um arquivo fonte.

Figura 11: Congurando as opes do PIC.

Figura 12: Montagem eltrica do PIC com oscilador a cristal. Para gravar o programa no PIC basta ento clicar no menu Programmer > Select Programmer > Picstar Plus. Em seguida ser aberta a janela Output. Com o gravador ligado e conectado a porta serial selecione o menu Programmer > Enable Programmer. Aps o gravador ser habilitado, as opes de gravao tambm sero habilitadas no menu Programmer. So elas: 12

Figura 13: Montagem eltrica do PIC com oscilador RC. Verify - permite vericar se o programa que est na memria do PIC corresponde ao programa que est aberto no computador, ou seja, procura divergncia entre os programas; Read - permite que o cdigo contido no PIC seja lido se o mesmo no estiver protegido; Blank - verica se o PIC est vazio; Program - grava o programa no PIC.

Criando um Programa

Em uma programao Assembly como em todas as outras linguagens de programo necessrio que as instrues sejam colocadas na ordem correta para garantir que o programa funcione corretamente. Nesta seo ser mostrada os principais elementos que compem um cdigo-fonte em Assembly para a programao do PIC.

6.1

Arquivos de denio (Include)

Arquivos de denies podem ser utilizados para padronizar e agilizar a programao. Para isto podemos utilizar os arquivos denominados pela Microchip de Includes. A Microchip desenvolveu arquivos Includes para cada tipo de microncontrolador, sendo que neles esto denidos os nomes e endereos dos SFRs e outras denies que so necessrias para o uso do microcontrolador. Estes arquivos j esto disponveis aps a instalao do MPlab e para o PIC 16F628A o arquivo o P16F628A.INC. O nome da instruo para incluir o arquivo : #INCLUDE <P16F628A.INC>. Este arquivo encontra-se geralmente na pasta C: > Arquivos de programas > MPLAB IDE > MCHIP Tools

6.2

Constantes

Para associar um nome ou varivel a um nmero utiliza-se a diretriz EQU. Por exemplo, em alguns projetos so necessrios denir-se valores de referncia para alarmes ou pontos de operao de uma determinada varivel, o denominado Set Point. Isto pode ser feito da seguinte forma: Set_Point EQU .100 13

Neste caso o valor decimal (.X) 100 foi atribudo a varivel Set Point atribuindo a mesma um valor constante. Isto tambm pode ser feito quando deseja atribuir um nome a um posio de memria. Por exemplo: Idade EQU H0005 Isto signica que a posio de memria H0005 pode ser chamado durante o cdigo pela string Idade.

6.3

Dene

A diretriz #DEFINE tambm utilizada para este tipo de aplicao. Porm ela no substitui nomes somente por nmeros mas por expresses inteiras. Esta diretriz muito utilizada para denir nomes para os pinos de I/O do PIC. Por exemplo: #DEFINE BOTAO PORTB,1 Esta diretriz signica que toda vez que for necessrio acessar o pino 1 da PORTB basta utilizar o nome BOTAO.

6.4

ORG

A diretriz ORG dene o direcionamento da posio de memria de programao. Ela deve ser colocada no incio do programa e refere-se ao vetor RESET e ao vetor de interrupes. O vetor de RESET iniciado na posio 0x00 e o vetor de interrupo na posio 0x04. Esta instruo colocada no incio do programa faz com que ele comece neste ponto.

6.5

END

Esta diretriz deve ser colocada no nal do programa.

6.6

CBLOCK e ENDC

Estas diretrizes servem para denir um grupo sequncial de EQUs, precisando informar apenas o endereo inicial da primeira varivel. Isto facilita a converso de um programa de um modelo de PIC para outro quando a RAM inicia em um endereo diferente.

6.7

Registrador WORK (W)

O registrador WORK um registrador temporrio utiliado pela ULA. Ele extremamente utilizado pois no possvel ler e escrever diretamente na memria sem utiliz-lo.

6.8

Estruturao bsica

A sequncia bsica do programa no segue uma estrutura totalmente rgida. Uma sequncia sugerida : 1. Cabealho - feito com comentrio utilizando ;. 2. Inserir arquivo Include. 14

3. Declarar variveis. 4. Denir constantes. 5. Denir Entradas e sadas. 6. Denir endereo inicial de processamento - Vetor RESET. 7. Denir endereo inicial do vetor de interrupes. 8. Denir rotinas de interrupo. 9. Denir rotinas e subrotinas. 10. Desenvolver programa.

Conjunto de instrues para o PIC 16F628A

Na Tabela 4 so apresentadas as instrues disponveis para o PIC 16F628A. Porm para facilitar o entendimento sero apresentadas as terminologias utilizadas para a formao das instrues e nas prximas subsees sero apresentadas as principais instrues divididas em subconjuntos.

7.1

Instrues e Argumentos

A seguir ser apresentada a forma de construo dos nomes das instrues para facilitar o entendimento da mesma e seus argumentos. So eles: Work (W) - Registrador temporrio para as operaes da ULA; File (F) - Referncia a um registrador, ou seja, uma posio de memria. representado por F nos nomes das instrues e por f nos argumentos; Literal (L) - Um nmero qualquer pode ser escrito na forma decimal (.), hexadecimal (H) e binria (B). representado por L nos nomes das instrues e por k nos argumentos; Destino - O local onde deve ser armazenado o resultado da operao. Este destino pode ser somente: F, que guardar o resultado no prprio registrador passado como argumento ou W; Bit - refere-se a um bit especco dentro de um Byte. representado por B nos nomes das instrues e por b nos argumentos; Skip - utilizado para criar desvios para a prxima linha; Set - Ato de setar um bit (nvel lgico 1); Clear - Ato de limpar um bir (nvel lgico 0); Zero - Gera desvios em algumas instrues quando o resultado da operao zero.

15

7.2

Lista de Instrues

A seguir apresentado o conjunto de instrues para o PIC 16F628A. Tabela 4: Operaes com registradores Argumento Descrio f,d Soma W e f, guardando o resultado em d. f,d Lgica "E"entre W e f, guardando o resultado em d. f Limpa f. f,d Calcula o complemento de f, iguardando o resultado em d. f,d Decrementa f, guardando o resultado em d. f,d Decrementa f, guardando o resultado em d e pula a prxima linha se o resultado for zero. f,d Incrementa f, guardando o resultado em d. f,d Incrementa f, guardando o resultado em d, e pula a prxima linha se o resultado for zero. f,d Lgica "OU"entre W e f, guardando o resultado em d. f,d Move f para d (cpia). f Move W para f (cpia). f,d Rotaciona f 1 bit para a esquerda. f,d Rotaciona f 1 bit para a direita. f,d Subtrai W de f (f - W), guardando o resultado em d. f,d Executa uma inverso entre as partes alta e baixa de f, guardando o resultado em d. f,d Lgica "OU exclusivo"entre W e f, guardando o resultado em d.

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

Instruo ADDLW ANDLW IORLW MOVLW SUBLW XORLW

Tabela 5: Operaes com literais Argumentos Descrio k Soma k com W, guardando o resultado em W. k Lgica "E"entre k e W, guardando o resultado em W. k Lgica "OU"entre k e W, guardando o resultado em W. k Move k para W. k Subtrai W de k (k - W), guardando o resultado em W. k Lgica "OU exclusivo"entre k e W, guardando o resultado em W.

16

Instruo BCF BSF BTFSC BTFSS

Tabela 6: Operaes com bits Argumentos Descrio f,b Impe 0 (zero) ao bit b do registrador f. f,b Impe 1 (um) ao bit b do registrador f. f,b Testa o bit b do registrador f, e pula a prxima linha se ele for 0 (zero). f,b Testa o bit b do registrador f, e pula a prxima linha se ele for 1 (um).

Instruo CLRW NOP CALL CLRWDT GOTO RETFIE RETLW RETURN SLEEP

Tabela 7: Controles Argumentos Descrio Limpa W. Gasta um ciclo de mquina sem fazer absolutamente nada. R Executa a rotina R. Limpa o registrador WDT para no acontecer o reset. R Desvia para o ponto R, mudando o PC. Retorna de uma interrupo. k Retorna de uma rotina, com k em W. Retorna de uma rotina, sem afetar W. Coloca o PIC em modo sleep (dormindo) para economia de energia.

Rotinas

Nesta seo sero apresentadas algumas rotinas que sero bastante utilizadas para o desenvolvimento de programas mais complexos.

8.1 Acessando o banco de dados


A memria do PIC possui quatro banco de dados de memria para os registradores especiais (SFR) e para a memria de variveis do sistema. Para acessar o banco de dados que se deseja utilizar necessrio alterar os valores dos bits RP0 e RP1 do registrador STATUS. A Tabela 7 mostra a combinao dos bits RP0 e RP1 necessria para acessar os diferentes bancos de memria. Tabela 8: Banco Banco RP1 RP0 0 0 0 1 0 1 2 1 0 3 1 1

17

Para acessar um banco basta setar os valores do bits conforme a tabela. Por exemplo, a rotina utilizada para acessar o banco 1 : BSF STATUS,RP0 Coloca o estado do bit RP0 do registrador STATUS em 1.

8.2

Lendo e escrevendo nas portas

Uma porta pode ser lida ou escrita de duas maneiras: em conjunto, ou seja, todos os 8 bits simultaneamente ou bit a bit. A leitura de uma porta em conjunto pode ser feita da seguinte maneira: MOVF PORTB,W MOVWF DADO A rotina acima escreve o valor contido na PORTB em W (work) e depois escreve valor de W em DADO (varivel criada para armazenar valor de PORTB). A escrita de uma porta em conjunto pode ser feita utilizando a seguinte instruo: MOVLW B00010100 MOVWF PORTA A rotina acima escreve o valor literal em W (work) e depois escreve valor de W em PORTA. A escrita bit a bit de uma porta pode ser feita da seguinte maneira: BSF PORTB,2 A rotina acima escreve 1 no bit 2 do PORTB.

8.3

Fazendo contagem de eventos

AS instrues DECFSZ e INCFSZ podem ser utilizadas para efetuar contagens. A seguir apresentada uma rotina de contagem decrescente implementada com a instruo DECFSZ. MOVLW .20 MOVWF CONTAGEM LOOP DECFSZ CONTAGEM,F GOTO LOOP FIM Na rotina acima o contador iniciado com o valor 20 que decrementado de 1 unidade a cada loop do sistema at chegar ao valor 0 quando a instruo GOTO saltada nalizando o processo.

8.4

Fazendo comparaes

A instruo SUB afeta diretamente o ag (carry) do registrador STATUS . Quando o resultado da subtrao positivo o carry (C) assume nvel lgico 1. Assim, possvel durante uma subtrao saber se um nmero maior ou menor que outro. Quando o resultado da subtrao negativo, o carry (C) assumi nvel lgico 0. Por exemplo se subtrairmos Num1 = 20 de Num2 = 10 o resultado da subtrao - 10 (negativo) e o carry estar em nvel lgico 0. Se subtrairmos Num1 = 20 de Num2 = 30 o resultado ser 10 (positivo) e o carry estar em nvel lgico 1. 18

A seguir mostrado a rotina para implementao de uma comparao: COMPARA1 MOVF NUM1,W SUBWF NUM2,W BTFSS STATUS,C GOTO RESP1 GOTO RESP2 FIM Primeiramente, o valor de NUM1 movido para W. Em seguida o valor de W (NUM1) subtrado de NUM2 guardando o resultado em W. Logo em seguida feito um teste no carry. Se o resultado negativo NUM2 < NUM1. Se o resultado positivo NUM2 > NUM1.

8.5

Fazendo contagem de tempo

Existem trs formas de contar tempo no PIC: contar os ciclos de mquina por meio de loopings; contando os ciclos de mquina por meio do contador TIMER (0, 1 ,2); contando pulsos externos utilizando a entrada T0CKI e do TMR0 ou da entrada T1CKI e do TMR1. A seguir ser mostrada a rotina de implementao da contagem de ciclos por meio de loopings. DELAY MOVLW .250 MOVWF TEMP1 DL1 NOP DECFSZ TEMP1,F GOTO DL1 RETURN Assim, a rotina dura 1ms visto que, alm de o contador TEMP1 ser decrementado 250 vezes, cada looping (DL1) gasta quatro ciclos o que equivale a 1 s.

Exerccios Propostos

Na gura 14 est representada a bancada utilizada para realizao de testes dos programas desenvolvidos, bem como a pinagem utilizada pelos seus leds, push-bottons e botoeiras. Sendo assim, nessa seo sero propostos alguns exerccios, tendo em vista as primeiras noes de programao apresentadas at aqui.

19

Figura 14: Representao da bancada didtica e pinagem utilizada 1. Elaborar um programa utilizando uma chave que: com a chave desligada, acenda os dois leds centrais; com a chave ligada, apague os leds centrais e acenda os outros dois das laterais, realizando assim uma alternncia entre pares de leds. 2. Elaborar um programa que controle o nvel de lquido dentro de um tanque como o representado na gura 15

Figura 15: Planta de um reservatrio 3. Suponha que h um estacionamento para automveis com vagas para 15 carros. Deseja-se fazer o controle de quantas vagas esto ocupadas. Elabore um programa que faa isso automaticamente. 4. Na indstria h a necessidade de no ligar vrios motores simultaneamente devido alta potncia requerida na partida de cada motor. Atravs de uma botoeira, ligue 4 motores com um atraso no acionamento de um para o outro. 20

5. Elaborar um programa para dar partida em um motor trifsico estrela-tringulo, utilizando trs contatores.

21

Você também pode gostar