of 84/84
CENTRO FEDERAL DE EDUAÇÃO TECNOLÓGICA DE GOIÁS COORDENAÇÃO DE MECÂNICA CURSO DE TECNOLOGIA ELETROMECÂNICA MICROCONTROLADOR PIC16F628 Prof. Eider Lúcio de Oliveira Prof. Éderson Lacerda Fideles

Apostila Microcontrolador PIC 16F628

  • View
    29.249

  • Download
    28

Embed Size (px)

Text of Apostila Microcontrolador PIC 16F628

CENTRO FEDERAL DE EDUAO TECNOLGICA DE GOIS COORDENAO DE MECNICA CURSO DE TECNOLOGIA ELETROMECNICA

MICROCONTROLADOR PIC16F628

Prof. Eider Lcio de Oliveira Prof. derson Lacerda Fideles

SUMRIOINTRODUO ................................................................................................................................................ 3 CAPTULO I - O QUE O PIC16F628 ........................................................................................................ 5 PINAGEM DO PIC16F628........................................................................................................................... 5 DESCRIO DOS PINOS ................................................................................................................................... 5 CARACTERSTICAS DOS PINOS......................................................................................................................... 8 CAPTULO II - CARACTERSTICAS DO PIC16F628.............................................................................. 9 CAPTULO III - MEMRIA DE PROGRAMA (FLASH EPROM), MEMRIA DE DADOS (RAM) E MEMRIA DE DADOS PERMANENTES (EEPROM) ........................................................................... 11 MEMRIA DE PROGRAMA (FLASH EPROM) ..................................................................................... 11 MEMRIA DE DADOS (RAM) ................................................................................................................ 12 CAPTULO IV - REGISTRADORES DE FUNES ESPECIAIS ......................................................... 15 CAPTULO V - CONJUNTO DE INSTRUES DO PIC16F628........................................................... 26 EXPLICAO DETALHADA DO CONJUNTO DE INSTRUES DO PIC................................................................ 29 CAPTULO VI - AS INTERRUPES DO PIC16F628 ........................................................................... 39 CAPTULO VII - O CONTADOR/TEMPORIZADOR (TMR0).............................................................. 43 CAPTULO VIII MODO POWER DOWN, MODO SLEEP E O WDT............................................... 47 CAPTULO IX - ESCRITA E LEITURA NA EEPROM DO PIC16F628 ............................................... 50 BIBLIOGRAFIA ............................................................................................................................................ 52 APNDICE A - INTRODUO AO MPLAB............................................................................................ 53 APNDICE B DETALHES DOS PORTS ................................................................................................ 67 APNDICE C DISPLAY DE CRISTAL LQUIDO - LCD .................................................................... 72

INTRODUOUm microprocessador um componente eletrnico, que devido s suas modernas tcnicas de fabricao, consegue efetuar com rapidez, vrias funes e operaes lgicas e aritmticas, sob controle de um programa externo, que dita para a mquina a seqncia das funes e os operandos a serem utilizados. A diferena bsica entre um microcontrolador e um microprocessador que o microcontrolador j possui internamente vrios circuitos eletrnicos que o microprocessador precisa usar externamente para ser funcional, tais como: memria de programa, memria de dados, portas de entrada e sada de sinais (portas de I/O, Input/Output), circuito de reset, circuito oscilador, contador/temporizador, portas lgicas para selecionar endereos, circuito de comunicao serial e paralela, conversor A/D, etc. Ao escolher um projeto microcontrolado em relao aos projetos digitais tradicionais, visa entre outras coisas: reduo de custo; reduo do consumo de energia; reduo do tamanho do equipamento; aumento da confiabilidade; proteo de software que vai gravado internamente e a facilidade de implementao e de suas possveis modificaes atravs de programao. Atualmente muitos equipamentos de nosso uso dirio, tais como: eletrodomsticos, videocassetes, alarmes, celulares e brinquedos, entre outros, utilizam microcontroladores para execuo de suas funes bsicas. Muitos microcontroladores so conhecidos pelos desenvolvedores de projetos no Brasil, podemos citar os seguintes: Microcontroladores da famlia 8051 (INTEL e outros fabricantes) Microcontroladores da famlia PIC (MICROCHIP) Microcontroladores da famlia COP8 (NATIONAL SEMICONDUTORES) Microcontroladores da TEXAS, exemplo: MSP430F13x/14x Microcontroladores da HOLTEK, exemplo: HT48500 Microcontroladores da MOTOROLA.

O PIC pode ser visto externamente como um circuito integrado TTL ou CMOS normal, mas internamente dispe de todos os dispositivos tpicos de um sistema microprocessado, ou seja:

Uma CPU (Central Processor Unit = Unidade de Processamento Central) cuja

finalidade interpretar as instrues de programa. Uma memria de programa Flash EPROM (2048 words) que possibilita a gravao cerca de 1000 vezes sem a necessidade de apagamento com ultravioleta. Uma memria RAM (Random Access Memory - Memria de Acesso Aleatrio) 224 bytes, utilizada para memorizar as variveis utilizadas pelo programa. Uma srie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, etc. Uma memria EEPROM de 128 bytes para gravar dados permanentes. Cada posio pode ser gravada cerca de um milho de vezes. Uma srie de dispositivos auxiliares ao funcionamento, ou seja, gerador de clock, barramento de dados e controle, contador/temporizador, etc.

A presena de todos estes dispositivos em um espao extremamente pequeno, d ao projetista ampla gama de trabalho e enorme vantagem em usar um sistema microprocessado, onde em pouco tempo e com poucos componentes externos podemos fazer o que seria oneroso fazer com circuitos tradicionais. O PIC est disponvel em uma ampla gama de modelos para melhor se adaptar as exigncias de projetos especficos, diferenciando-se pelo nmero de linha de I/O e pelo contedo do dispositivo. Inicia-se com modelos pequenos identificados pela sigla PIC12Cxx dotados de 8 pinos, at chegar a modelos maiores com sigla PIC17Cxx dotados de 40 ou mais pinos. Como foi dito na introduo, uma descrio detalhada do PIC est disponvel no site da microchip www.microchip.com , onde se pode encontrar grandes e variadas quantidades de informaes tcnicas, manuais, software de apoio, exemplos de aplicaes e atualizaes disponveis. Mas, qual microcontrolador escolher? Ao escolher um microcontrolador devemos analisar o seguinte: facilidade de uso; disponibilidade de ferramentas de programao, teste e depurao; suporte tcnico; custo e disponibilidade no mercado; e principalmente, se a famlia de microcontroladores possui vrias opes de modelos e perifricos, possibilitando assim o reaproveitamento de cdigo para outros projetos. A famlia de microcontroladores PIC uma das que atende os requisitos do pargrafo anterior. O escolha do microcontrador fica a cargo do projetista, mas tenho certeza que uma escolha muito boa, para comear os estudos, a Famlia PIC da Microchip. Nesta apostila feito um estudo detalhado do PIC16F628 e colocado em Apndice alguns tpicos sobre o PIC16F874.

Captulo I - O QUE O PIC16F628

O PIC16F628 um circuito integrado produzido pela Microchip, que pertence a categoria dos microcontroladores, ou seja, um componente integrado, que em um nico dispositivo, contm todos os circuitos necessrios para realizar um completo sistema digital programvel. A Figura 1, a seguir, mostra o encapsulamento DIP (DIP = dual in line) e os nomes descritivos dos pinos do PIC16F628. PINAGEM DO PIC16F628

Figura 1 Pinagem do PIC16F628 Descrio dos pinos Tabela 1 - Descrio da pinagem do PIC16F628 NOME RA0/AN0 AN0 RA1 RA1/AN1 AN1 RA3 AN3 RA3/AN3/CMP1 Sada do comparador 1 CMP1 Entrada para comparador analgico Porta de I/O bidirecional Entrada para comparador analgico Entrada para comparador analgico Porta de I/O bidirecional FUNO RA0 DESCRIO Porta de I/O bidirecional

RA4 RA4/T0CKI/CMP2 T0CKI CMP2 RA5 RA5/ MCLR /VPPMCLR

Porta de I/O bidirecional Entrada de clock do TIMER 0 Sada do comparador 2 Porta de entrada Master Clear. Quando configurado como master clear esse pino um RESET ativo quando baixo. A tenso no master clear no pode exceder de VDD. Entrada de tenso de programao. Porta de I/O bidirecional Entrada para oscilador a cristal. No modo RC/INTOSC esse pino fornece sinal de clock1 4

VPP RA6 OSC2 RA6/OSC2/CLKOUT CLKOUT RA7 RA7/OSC1/CLKIN OSC1 CLKIN RB0 RB0/INT INT RB1 RB1/RX/DT RX DT RB2 TX RB2/TX/CK CK

com

da freqncia de OSC1.

Porta de I/O bidirecional Entrada para oscilador a cristal Entrada para fonte do clock externa. Porta de I/O bidirecional. Pode ter Pull-up interno habilitado por software. Interrupo externa. Porta de I/O bidirecional. Pode ter Pull-up interno habilitado por software. Pino receptor de USART (comunicao serial) Porta de I/O de Dados Sincronos (comunicao serial) Porta de I/O bidirecional. Pode ter Pull-up interno habilitado por software. Pino transmissor de USART (comunicao serial) Porta de I/O de Clock de sincronismo (comunicao serial).

RB3 RB3/CCP1 CCP1

Porta de I/O bidirecional. Pode ter Pull-up interno habilitado por software. Captura/Compara/PWM I/O

RB4 RB4/PGM PGM RB5 RB5

Porta de I/O bidirecional. Interrupo na mudana do estado do pino. Pode ter Pull-up interno habilitado por software. Pino de entrada para programao em baixa tenso. Porta de I/O bidirecional. Interrupo na mudana do estado do pino. Pode ter Pull-up interno habilitado por software. Porta de I/O bidirecional. Interrupo na mudana do estado do pino. Pode ter Pull-up interno habilitado por software. Sada do oscilador do TIMER 1 Entrada de CLOCK para TIMER 1 ICSP programming clock. Porta de I/O bidirecional. Interrupo na mudana do estado do pino. Pode ter Pull-up interno habilitado por software. Entrada do oscilador do TIMER 1. ICSP Data I/O. Pino de terra (0V) Pino de tenso positiva (5V)

RB6 RB6/T1OSO/T1CKI/ PGC T1OSO T1CKI PGC RB7 RB7/T1OSI/PGD TIOSI PGD VSS VDD VSS VDD

Como possvel ver na figura acima, o PIC16F628 dotado de um total de 18 pinos dispostos em duas fileiras paralelas de 9 pinos cada uma (DIP = dual in line). So 13 pinos de linhas de entrada e sada de sinais (linhas de I/O) para a nossa aplicao (pode ser expandido para dezesseis), um pino de alimentao, um de terra (referncia), um de reset (MCLR) e dois de clock (OSC1/CLKIN e OSC2/CLKOUT).

Caractersticas dos pinos RA0 a RA4, so pinos de linhas de entrada e sada de sinais (linhas de I/O). No entanto, o pino RA4/TOCKI tambm pode ser programado para ser a entrada de clock para o TMR0 (timer 0 interno ao PIC). RB0 a RB7, tambm so pinos de linhas de entrada e sada de sinais (linhas de I/O). Mas eles tem outras funes: o pino RB0/INT tambm pode ser programado para ser um pino de entrada de interrupo externa; os pinos RB4 a RB7 podem ser programados para gerar interrupo quando houver mudana de nvel lgico em um deles e os pinos RB6 e RB7 tambm so usados na programao do PIC, o primeiro serve como clock serial e o segundo serve como data serial. VDD e VSS, so pinos de alimentao. O VSS conectado ao TERRA (GND) e o VDD tenso contnua de +5V. A tenso de alimentao nominal dos PICs de 5 Vcc, mas a faixa de variao desta tenso depende do modelo estudado. No caso do PIC16F628, ela vai de 2.0 a 6.0 Vcc. /MCLR, o pino de reset. Este se refere ao Master Clear externo. Sempre que esse pino for colocado em nvel lgico baixo (GND), o programa ser resetado e o processamento paralisado. Ao ser colocado em nvel alto (+5V), a execuo do programa ser retomada do ponto inicial (ORG 00H). OSC1/CLKIN e OSC2/CLKOUT, so pinos de clock. Nestes pinos ligado o oscilador.

Captulo II - Caractersticas do PIC16F628

Para o PIC16F628, podemos citar, entre outras, as seguintes caractersticas: Microcontrolador de 18 pinos; 13 portas configurveis como entrada ou sada, podendo chegar a 16 pinos; Cada porta, pode drenar no mximo 25 mA e fornecer no mximo 20 mA; Freqncia mxima de operao de 4 a 20 MHz, depende das especificaes do chip; Possui 4 fontes de interrupo, que so a interrupo externa RB0/INT, interrupo por

overflow do timer TMR0, interrupo por mudana de nvel nos pinos da porta B (pinos RB7 a RB4) e interrupo por escrita completa na EEPROM. Memria de programao FLASH EPROM de 2 Kbytes. Pode-se escrever nessa

memria cerca de 1000 vezes sem danific-la. Memria de dados temporrios, RAM separada em bancos de memria. As primeiras

posies de cada banco so reservadas para registradores de funes especiais (SFR Special Function Registers). O restantes de cada banco so reservadas aos registradores de propsitos gerais (GPR - General Purpose Registers). Todos os registradores da RAM so programveis bit a bit; Memria de dados permanentes, EEPROM de 128 Bytes. Pode-se escrever em cada bit

dessa memria cerca de 1 milho de vezes sem danific-la; Via de programao com 14 bits e 35 instrues;

3 Mdulos de timer/counter ;

A faixa de tenso de trabalho est na faixa de 3 a 5,5 volts; Baixa potncia de consumo - menos de 2 mA para 5 V, 4Mhz; cerca de 15 A para 2 V,

32 KHz e menos de 1A para 2 V (modo Standby); Os microcontroladores PIC apresentam uma estrutura de mquina interna do tipo Havard, enquanto grande parte dos microcontradores tradicionais apresenta uma arquitetura tipo Von-Neumann. A diferena est na forma como os dados e o programa so processados pelo microcontrolador. Na arquitetura tradicional, tipo Von-Neumann, existe apenas um barramento (bus) interno (geralmente de 8 bits), por onde passam as instrues e os dados. J na arquitetura tipo Havard existem dois barramentos internos, sendo um de dados e outro de instrues. No caso dos microcontroladores PIC, o barramento de dados sempre de 8 bits e o de instrues pode ser de 12, 14 ou 16 bits, dependendo do

microcontrolador. Esse tipo de arquitetura permite que enquanto uma instruo executada outra seja buscada na memria, o que torna o processamento mais rpido. Alm disso, como o barramento de instrues maior do que 8 bits, o OPCODE da instruo j inclui o dado e o local onde ela vai operar (quando necessrio), o que significa que apenas uma posio de memria utilizada por instruo, economizando assim muita memria de programa. Desta forma, podemos observar que dentro da palavra o OPCODE, que pode ser de 12, 14 ou 16 bits, no sobra muito espao para o cdigo da instruo propriamente dito. Por isso, os PICs utilizam uma tecnologia chamada RISC, que significa Reduced Instruction Set Computer (Computador com set de instrues reduzido). Desta forma, os PICs possuem cerca de 35 instrues (o nmero correto varia de acordo com o microcontrolador), muito menos que os microcontroladores convencionais (CISC) que chegam a possuir mais de 100 instrues. Isto torna o aprendizado muito mais fcil e dinmico, mas, por outro lado, implica no fato de que muitas funes devem ser construdas, pois no possuem uma instruo direta, exigindo maior habilidade do programador. Nos microcontroladores PIC, o sinal de clock internamente dividido por quatro. Portanto, para um clock externo de 4 MHz, temos um clock interno de 1 MHz, e consequentemente, cada ciclo de mquina dura 1us. A diviso do clock por quatro forma as fases Q1, Q2, Q3 e Q4. O program counter (registrador PC) 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 decodificada e executada no prximo ciclo, no intervalo de Q1 at Q4. Esta caracterstica de buscar a informao num 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 1us (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 instrues, o PIPELINE deve ser primeiramente limpo para depois poder ser carregado novamente com o endereo correto, consumindo para isso 2 ciclos de mquina. Esse PIPELINE facilmente implementado devido arquitetura Havard.

Captulo III - MEMRIA DE PROGRAMA (FLASH EPROM), MEMRIA DE DADOS (RAM) E MEMRIA DE DADOS PERMANENTES (EEPROM)

MEMRIA DE PROGRAMA (FLASH EPROM) Em particular o PIC16F628 dispe de uma memria para armazenar o programa, do tipo Flash EPROM, que pode ser escrita cerca de 1000 vezes e que ideal para o nosso experimento tornando a coneco para a programao on-board, ou seja podemos colocar o programa dentro do chip sem ter que remov-lo do circuito de prova. A sua capacidade de memorizao de 2048 locaes (2 K Byte de 14 bits cada) e que podero conter, cada uma, somente uma instruo bsica do PIC. Logo, o programa mais complexo que poderemos realizar no poder ter mais do que 2048 instrues. Os endereos reservados para Flash EPROM comeam em 0000H e vo at 07FFH. O PIC pode somente executar instrues memorizadas nestas locaes. No se pode de maneira nenhuma ler, escrever ou cancelar dados nesses endereos, a no ser com o uso de um dispositivo externo chamado programador. A primeira localizao de memria de programa que ser executada quando o PIC comear a rodar (aps a alimentao ou um reset) o endereo 0000H, por isso essa localizao de memria denominada Reset Vector (Vetor de Reset). J, quando ocorre uma interrupo, a primeira instruo a ser executada est no endereo 0004H, por isto, este endereo denomina-se endereo de Interrupt Vector (Vetor de Interrupo). O template, exemplo padro, a seguir mostra como deve ser a estrutura de um programa em Assembly escrito para o PIC16F628 no MPLAB (compilador, simulador e emulador para o PIC).

;******************************************************************* *** list p=16F628 #include processador __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;***** DEFINIES DE VARIVEIS*************** w_temp EQU 0x20 ; varivel usada para salvar o registrador de trabalho W status_temp EQU 0x21 ; varivel usada para salvar o registrador de STATUS ORG 0x000 ; Vetor de reset ; Diretiva list para definir processador ; Definies de variveis especficas do

goto main ; vai para o incio do programa ORG 0x004 ; Vetor de interrupo movwf w_temp ; salva o contedo de W movf STATUS,w ; move registrador de status para W movwf status_temp ; salva o contedo de STATUS ; Cdigo da rotina de interrupo que pode ser escrito aqui ou em outro lugar usando call sub_int movf status_temp,w ; Copia STATUS_TEMP para W movwf STATUS ; restaura o contedo do registrador de STATUS swapf w_temp,f swapf w_temp,w ; restaura o contedo do registrador W retfie ; retorno da interrupo ; Incio do programa principal main ; Restante do cdigo do programa vai aqui END ; diretiva de fim de programa ;********************************************************************** MEMRIA DE DADOS (RAM) Diferentemente da memria Flash EPROM destinada a conter o programa, a rea de memria RAM visvel pelo resto do programa. Nela podemos escrever, ler, ou modificar tranqilamente qualquer registrador do nosso programa a qualquer momento que for necessrio. A nica limitao consiste de que alguns desses registradores desenvolvem funes especiais para o PIC que no podem ser utilizados para outra coisa a no ser para aquilo a qual eles esto reservados. Estes registradores encontram-se nas locaes base da rea de memria RAM mostrada na Tabela 2. A localizao de memria presente na RAM endereada diretamente em um espao de memria que vai de 00H a 7FH dando um total de 128 bytes, denominado pgina 0 (ou banco 0). Um segundo espao de endereamento denominado pgina 1 (ou banco 1) vai de 80H a FFH. Para acessar esse segundo espao necessrio recorrer a dois bits auxiliares RP0 e RP1 do registrador de STATUS segundo a modalidade que iremos explicar mais adiante. As primeiras 12 locaes da pgina 0 (de 00H a 0BH) e da pgina 1 (de 80H a 8BH) so aquelas reservadas as funes especiais para o funcionamento do PIC e, como j foi dito, no podem ser utilizadas para outra coisa. As 68 locaes na pgina 0 reservados para as nossas variveis podem ser endereadas de 0CH a 4FH podemos aqui utilizar livremente pelo nosso programa para memorizar variveis, contadores, etc. Em resumo, podemos dizer que a memria RAM do PIC est dividida em dois bancos. O banco 0 que selecionado zerando o bit RP0 (STATUS) e o banco 1 que selecionado setando o bit RP0. Os 12 primeiros bytes da RAM so reservados aos Registradores de Funes Especiais (SFR Special Function Registers), os 116 bytes restantes de cada banco so reservados aos Registradores de Propsitos Gerais (GPR General Purpose Registers), mas somente 68 bytes destes GPR so implementados para o

PIC16F628. Tabela 2 Mapa da memria de dados do PIC16F628End. Indir. TMR0 PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h PCLATH INTCON PIR1 TMR1L TMR1H T1CON TMR2 T2CON 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh CMCON 1Fh 20h REGISTRADORES DE PROPSITO GERAL VRCON TXSTA SPBRG EEDATA EEADR EECON1 EECON2 PR2 PCON PCLATH INTCON PIE1 End. Indir. OPTION REG PCL STATUS FSR TRISA TRISB 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h REGISTRADORES DE PROPSITO GERAL 11Fh 120h PCLATH INTCON PORTB End. Indir. TMR0 PCL STATUS FSR 100h 101h 102h 103h 104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch 10Dh 10Eh 10Fh PCLATH INTCON TRISB End. Indir. OPTION PCL STATUS FSR 180h 181h 182h 183h 184h 185h 186h 187h 188h 189h 18Ah 18Bh 18Ch 18Dh 18Eh 18Fh

REGISTRADOR ES DE PROPSITO GERAL

48 BYTES14Fh

80 BYTES 96 BYTES70h 7Fh EFh F0h 70h 7Fh

150h 16Fh 170h 70h 7Fh 1EFh 1F0h

BANCO 0

BANCO 1

BANCO 2

BANCO 3

Os registradores de funes especiais (SFR) do PIC sero utilizados com muita freqncia nos programas. Por exemplo, os registradores TRISA e TRISB so usados para definir quais linhas de I/O sero entradas e quais sero sadas. O PORTA e o PORTB definem o estado lgico das linhas de I/O. Outro exemplo o registrador STATUS que registra o estado de funcionamento interno do PIC ou o resultado de operaes aritmticas e lgicas. necessrio conhecer, portanto, exatamente qual funo desenvolve cada um dos registradores especiais e qual efeito se obtm ao manipular seus contedos. A memria EEPROM interna ao PIC pode ser utilizada pelo usurio para guardar dados. Entretanto, ao contrrio da memria de dados vista anteriormente, esta uma memria no voltil, que consegue manter as informaes mesmo sem alimentao. A EEPROM do PIC16F628 contm 128 Bytes, endereadas de 0 a 127. Pode-se escrever em cada bit dessa memria cerca de 1 milho de vezes sem danific-la. A PILHA (STACK) um local totalmente separado da memria de programao, em que sero armazenados os endereos de retorno quando utilizarmos instrues de chamadas de rotinas. Quando o programa desviado para o comeo de uma rotina por meio da instruo correta (call), o endereo seguinte ao ponto que estava sendo rodado armazenado na pilha para que, ao fim da rotina, o programa possa retornar. O tamanho determina a quantidade de rotinas que podem ser chamadas ao mesmo tempo. Caso se tente chamar um nmero de rotinas maior que o tamanho da pilha, o endereo de retorno mais antigo ser perdido. Ainda podemos utilizar OUTRAS MEMRIAS, por exemplo, memrias externas. J esto disponveis no mercado memrias EEPROM serial de 64 Kbytes, que podem ser interligadas ao PIC utilizando apenas duas portas de I/O. Essas memrias podem ser teis para armazenar parmetros de programao diferentes daqueles do programa principal.

Captulo IV - Registradores de Funes Especiais

Os registradores de funes especiais, tambm denominados de SFR (Special Function Registers) so usados pela CPU e funes perifricas para controlar as operaes do PIC, servem para guardar a configurao e o estado de funcionamento atual da mquina. Estes registradores esto localizados na memria RAM. A seguir faremos uma descrio detalhada de todos os registradores do PIC16F628. Observaes quanto sintaxe: R/W, bit de leitura e de escrita. R, bit somente de leitura. W, bit somente de escrita. U, bit no implementado, ler como 0. -1, bit aps o reset vale 1. -0, bit aps o reset vale 0. -x, bit aps o reset possui valor indefinido (desconhecido). -u, bit no se altera aps o reset. -q, valor do bit depende de condio. Exemplo1: R/W-0, bit de leitura e escrita, aps o reset vale 0. Exemplo2: U, bit no implementado, ler como 0. Exemplo3: R-u, bit somente de leitura, aps o reset o bit possui um valor inalterado.

Registradores: 1. Registrador W (Acumulador ou registrador de trabalho) e a ALU (Unidade Lgica e Aritmtica) A ALU (Arithmetic and Logic Unit) ou ULA (Unidade Lgica e Aritmtica) a componente mais complexa do PIC por conter todos os circuitos destinados a desenvolver as funes de clculo e manipulao de dados durante a execuo de um programa. A ALU uma componente presente em todos os microprocessadores e dessa depende diretamente a capacidade de clculo do micro em si. A ALU do PIC16F628 est preparada para operar com 8 bits, ou seja valor

numrico no maior do que 255. Existem processadores com ALU de 16, 32, 64 bits ou mais. A famlia Intel 80386, 486 e Pentium, por exemplo, dispe de uma ALU de 32 bits. A capacidade de clculo presente nesses micros notavelmente superior em detrimento da complexidade dos circuitos internos e consequentemente do espao ocupado. A ALU referencia diretamente o registrador W denominado antigamente de acumulador. Este registrador consiste de uma localizao de memria destinada a conter um s valor de 8 bits. A diferena entre o registrador W e outras localizaes de memria consiste no fato de que, por referenciar o registrador W, a ALU no pode fornecer nenhum endereo, mas podemos acess-los diretamente. O registrador W ser utilizado freqentemente para intermediar instrues do PIC. Faamos um exemplo prtico. Suponhamos querer colocar na localizao de memria 0CH da RAM o valor 01H. Procurando entre as instrues do PIC veremos rapidamente que no existe uma nica instruo capaz de efetuar esta operao mas deveremos necessariamente recorrer ao acumulador e usar duas instrues em seqncia. Vejamos porque: Como dissemos anteriormente, o opcode de uma instruo no pode exceder aos 14 bits e assim teremos: 8 bits para especificar o valor que queremos colocar na localizao de memria, 7 bits para especificar em qual localizao de memria queremos inserir o nosso valor, 6 bits para especificar qual instruo queremos usar. teremos um total de 8 + 7 + 6 = 21 bits. Devemos ento recorrer a duas instrues, ou seja: movlw movwf 01H 0CH

onde a primeira instruo colocar no registrador W o valor 01H com a instruo MOVe Literal para W e depois "moveremos" (copiaremos) esse valor para a localizao 0CH com a instruo MOVe W para F. 2. Registrador STATUS (endereo 03h e 83h) Esse registrador serve para mostrar o estado da ULA (bits de Carry e Zero), a forma do ltimo reset e tambm para configurar a pgina de programao atual, quando necessrio.N dos bits Bits Power on reset Bit 7 IRP R/W-0 bit 6 RP1 R/W-0 Bit 5 RP0 R/W-0 bit 4 /TO R-1 bit 3 /PD R-1 bit 2 Z R/W-x bit 1 DC R/W-x bit 0 C R/W-x

Obs.: O valor dos bits aps os demais resets ser: 000qquuu

Descrio dos bits: Bit 7: IRP, Bit de seleo de banco de registradores (usado para endereamento indireto), p/ bit7=0 seleciona Bancos 0 e banco 1 (endereos 00 - FFh); j para bit7 = 1 seleciona bancos 2 e 3 (100h - 1FFh). Obs.: Este bit no usado no PIC16F628 (considerar IRP=0). Bit 6-5: RP1:RP0, Bit de seleo de banco de registradores (usado para endereamento direto). P/ bits 6-5=00 implica seleo do banco 0 (00 - 7Fh), para bits 6-5=01 implica seleo do banco 1 (80h - FFh), para bits 6-5=10 implica seleo do banco 2 (100 - 17Fh) e, para bits 6-5=11 implica seleo do banco 3 (180h - 1FFh). obs.: Cada banco de 128 bytes e somente o bit RP0 usado no PIC16F628 (considerar RP1=0). Bit 4: /TO, bit de Time-Out. Vai a 1 aps power-up, instruo CLRWDT ou instruo SLEEP. Vai a 0 aps ocorrer uma interrupo de WDT (Watch Dog Timer). Bit 3: /PD, bit de Power-Down. Vai a 1 aps power-up ou instruo CLRWDT. Vai a 0 na execuo da instruo SLEEP. Bit 2: Z, bit de Zero. Vai a 1 quando o resultado de uma operao aritmtica ou lgica zero. Vai a 0 quando o resultado de uma operao aritmtica ou lgica diferente de zero. Bit 1: DC, Bit de Digit Carry/Borrow. Este bit vai a 1 quando ocorre um estouro dos 4 bits inferiores de um registrador numa instruo de soma (addlw ou addwf) ou quando a subtrao (sublw ou subwf) entre dois nibles inferiores negativa. zero quando a ltima operao na ULA no ocasionou um estouro de dgito. Bit 0: C, Bit de Carry/Borrow. Este bit vai a 1 quando ocorre um estouro do byte de um registrador numa instruo de soma (addlw ou addwf) ou quando a subtrao (sublw ou subwf) entre dois bytes positiva. Note que no caso da subtrao o Carry trabalha com a lgica invertida. Obs.: As instrues de rotao de bits (rlf ou rrf) tambm alteram o valor do Carry.

3. Registrador PORTA (endereo 05H)N dos bits Bits Power on reset Bit 7 bit 6 Bit 5 bit 4 RA4/TOCKI R\W-x bit 3 RA3 R/W-x bit 2 RA2 R/W-x bit 1 RA1 R/W-x bit 0 RA0 R/W-x

Obs: Valor dos bits aps os demais resets: ---uuuuu

4. Registrador PORTB (endereo 06H)

N dos bits Bits Power on reset

Bit 7 RB7 R/W-x

bit 6 RB6 R/W-x

Bit 5 RB5 R/W-x

bit 4 RB4 R\W-x

bit 3 RB3 R/W-x

bit 2 RB2 R/W-x

bit 1 RB1 R/W-x

bit 0 RB0/INT R/W-x

Obs.: Valor dos bits aps os demais resets: uuuuuuuu 5. Registrador TRISA (endereo 85H) Registrador de direo de dados da porta A. Os registradores TRIS servem para configurar os pinos das portas como entrada ou sada. Quando colocado 1 em um bit do TRIS, o pino relacionado a ele configurado com entrada. Para configurar o pino com sada, voc deve escrever 0 no bit relacionado. Uma maneira prtica para memorizar esta regra associar o 1 ao I de Input (entrada), e o 0 de Output (sada). Para configurar o PORTA, deve ser utilizado o TRISA, e para configurar o PORTB, deve ser utilizado o TRISB.N dos bits Bits Power on reset bit 7 bit 6 Bit 5 Bit 4 TRISA4 R\W-1 bit 3 TRISA3 R/W-1 bit 2 TRISA2 R/W-1 bit 1 TRISA1 R/W-1 bit 0 TRISA0 R/W-1

Obs.: Valor dos bits nos demais resets: ---11111

6. Registrador TRISB (endereo 86H) Registrador de direo de dados da porta B.N dos bits Bits Power on reset bit 7 TRISB7 R/W-1 Bit 6 TRISB6 R/W-1 Bit 5 TRISB5 R/W-1 Bit 4 TRISB4 R\W-1 bit 3 TRISB3 R/W-1 bit 2 TRISB2 R/W-1 bit 1 TRISB1 R/W-1 bit 0 TRISB0 R/W-1

Obs.: Valor dos bits nos demais resets: 11111111

7. Registrador INDF (endereos 00h e 80h) e o FSR (endereos 04h e 84h) O registrador INDF usa o contedo de FSR para endereamento indireto de memria de dados (no um registrador fsico). O FSR um registrador em que pode ser escrito um outro endereo de memria que ser acessado indiretamente, como se ele fosse apenas um ponteiro. J o INDF no um registrador realmente verdadeiro; trata-se somente de um espelho do endereo apontado pelo FSR. O INDF no um registrador verdadeiro, usado para o endereamento indireto.

Os bits de FSR esto representados a seguir:N dos bits Bits Power on reset bit 7 R/W-x bit 6 R/W-x bit 5 R/W-x bit 4 R/W-x bit 3 R/W-x bit 2 R/W-x bit 1 R/W-x bit 0 R/W-x

Obs.: O valor dos bits aps os demais resets ser: uuuuuuuu

8. Registrador TRM0 (endereo 01h) um contador automtico de 8 bits. A diferena entre o registrador TMR0 e os demais registradores que seu incremento automtico e pode ser feito pelo clock da mquina ou por um sinal externo. Esse registrador ser estudado em detalhes no captulo VI.

N dos bits Bits Power on reset

Bit 7 R/W-x

bit 6 R/W-x

bit 5 R/W-x

bit 4 R/W-x

bit 3 R/W-x

bit 2 R/W-x

bit 1 R/W-x

bit 0 R/W-x

Obs.: O valor dos bits aps os demais resets ser: uuuuuuuu

9. Registrador PCL (endereos 02h e 82h) e o PCLATH (endereos 0Ah e 8Ah) O PCL a parte baixa (8 bits menos significativo) do Contador de Programa (PC = Program Counter).N dos bits Bits Power on reset Bit 7 R/W-0 bit 6 R/W-0 bit 5 R/W-0 bit 4 R/W-0 bit 3 R/W-0 bit 2 R/W-0 bit 1 R/W-0 bit 0 R/W-0

Obs.: O valor dos bits aps os demais resets ser: 00000000 O PCLATH, parte alta (5 bits mais significativos) do Contador de Programa. Como a rea de memria de programao do PIC16F628 maior que 256 bytes, no possvel acess-la completamente com somente 8 bits do PCL. Por isso, o PCLATH possui os 5 bits mais altos do PC.

N dos bits

Bit 7

bit 6

Bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

Bits Power on reset

-

-

-

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

Obs.: O valor dos bits aps os demais resets ser: ---00000 O Contador de Programa (Program Counter = PC) e a Pilha (Stack) so dois componentes importantes para a compreenso da instruo de salto e chamada a subrotina. Como foi visto no captulo anterior, o PIC16F628 inicia a execuo do programa a partir do Reset Vector, ou seja, da localizao de memria 0000H. Depois de ter executado esta instruo passa para a prxima instruo memorizada na localizao 0001H e assim por diante. Se no existisse instruo capaz de influenciar a execuo progressiva do programa, o PIC chegaria at o final na ltima instruo memorizada na ltima localizao e no saberia mais como continuar. Sabemos obviamente que no bem assim e qualquer sistema a microprocessador ou linguagem de programao dispe de instruo de desvio, ou seja, instrues capazes de modificar o fluxo de execuo do programa. Uma destas instrues o goto (do ingls go to, v para). Quando o PIC encontra um goto no segue mais a instruo imediatamente aps, mas desvia-se diretamente para a localizao de memria especificada na instruo. Faamos um exemplo: ORG Point1 movlw goto 00H 10 Point1

No reset o PIC seguir a instruo movlw 10 memorizada na localizao 0000H que colocar no acumulador o valor decimal 10. Onde ento passar a executar a prxima instruo goto Point1. Esta instruo determinar um desvio incondicional para localizao de memria especificada pelo label Point1, ou seja, de novo para localizao 0000H. O programa no far outra coisa se no a de executar um ciclo infinito seguindo continuamente as instrues especificadas. Durante este ciclo, para determinar qual a prxima instruo a ser seguida, o PIC utiliza um registrador especial denominado Program Counter, ou seja, contador de programa. Este ter sempre o endereo da prxima instruo a ser executada. No RESET este estar sempre zerado, determinando o incio da execuo no endereo 0000H, e cada instruo ter um incremento de um para poder passar para prxima instruo. A instruo goto permite a colocao de um novo valor no Program Counter e consequentemente desvia a uma localizao qualquer da rea de programa do PIC. Uma outra instruo muito interessante o call, ou seja, a chamada a subrotina. Esta instruo funciona de maneira muito similar ao goto com a nica diferena que, a primeira, desvia para uma localizao de memria especificada e continua a execuo do programa, enquanto o call desviar o programa para uma subrotina especificada e executar a mesma, e retornar a execuo da instruo imediatamente aps a chamada call, o valor imediatamente aps a chamada call ser armazenado em uma rea particular da memria denominada Stack (Pilha).

Vejamos melhor com um exemplo: ORG Point1 movlw call goto Point2 movlw return 00H 10 Point2 Point1 11

Neste caso o PIC, aps ter executado movlw 10 passa a executar o call Point2. Antes de desviar memoriza no Stack o endereo 0002H, ou seja, a prxima localizao ao call. Passa ento a executar a instruo movlw 11, memorizada em correspondncia ao label Point2. E neste ponto encontra uma nova instruo o return que, como podemos deduzir de seu nome, permite o "RETORNO", ou seja, retorne a execuo da instruo imediatamente aps o call. Esta operao denominada de: "chamada a subrotina", ou seja, uma interrupo momentnea do fluxo normal do programa para "chamar" a execuo de uma srie de instrues, para depois retornar a execuo normal do programa. Para poder retornar para onde havia interrompido, o PIC utiliza o ltimo valor armazenado no Stack e o coloca de novo no Program Counter. A palavra stack em ingls significa "pilha" e por esse fato possvel empilhar um endereo sobre o outro para ser recuperado quando necessrio. Este tipo de memorizao era antes denominado de LIFO do ingls Last In First Out, onde o ltimo elemento armazenado (last in) deve necessariamente ser o primeiro a sair (last out). Graas ao Stack possvel efetuar vrios call, um dentro do outro, e manter sempre o retorno ao fluxo do programa quando se encontra uma instruo return. Vejamos um outro exemplo: ORG Point1 movlw call goto Point2 movlw call return Point3 movlw return 00H 10 Point2 Point1 11 Point3

12

No exemplo acima a rotina principal Point1 promove a chamada do primeiro call para subrotina Point2, a subrotina Point2 chama outra subrotina no caso Point3, este ltimo por sua vez, encontra um returm e retorna para Point2 que encontra o outro return e retorna para a execuo da rotina Point1 que no caso a principal. Os endereos a serem memorizados no stack so dois e quando vir a encontrar um segundo call procurar pelo return correspondente ao primeiro e assim por diante. Diz-se ento que o call "nidificante", ou seja, um dentro do outro.

O PIC16F628 dispe de um stack de 8 nveis, ou seja um Stack que consegue armazenar no mximo 8 chamadas subrotina. importante assegurar-se, durante a formulao de um programa que, se tenha sempre uma instruo returm em correspondncia a um call para evitar o perigo de desalinhamento do stack que em execuo pode gerar erros que dificilmente encontraremos.

10. Registrador EEDATA (endereo 08h) EEDATA o registrador de dados da EEPROM. Ele possui duas funes distintas: nas operaes de escrita da EEPROM, ele deve ser preenchido com o dado a ser armazenado, j nas operaes de leitura, ele armazena o dado lido.N dos bits Bits Power on reset Bit 7 R/W-x bit 6 R/W-x bit 5 R/W-x bit 4 R/W-x bit 3 R/W-x bit 2 R/W-x bit 1 R/W-x bit 0 R/W-x

Obs.: O valor dos bits aps os demais resets ser: uuuuuuuu

11. Registrador EEADR (endereo 09h) EEADR o registrador de endereos da EEPROM. Ele especifica o endereo de escrita ou leitura do endereo da EEPROM interna ao PIC.

N dos bits Bits Power on reset

Bit 7 R/W-x

bit 6 R/W-x

bit 5 R/W-x

bit 4 R/W-x

bit 3 R/W-x

bit 2 R/W-x

bit 1 R/W-x

bit 0 R/W-x

Obs.: O valor dos bits aps os demais resets ser: uuuuuuuu

12. Registrador INTCON (endereos 0BH e 8Bh) Contm os vrios bits de habilitao e estados de todas as fontes de interrupo do PIC16F628. Ele serve para configurar e identificar as interrupes.

N dos bits Nomes dos bits

Bit 7 GIE

bit 6 EEIE

bit 5 T0IE

bit 4 INTE

bit 3 RBIE

bit 2 T0IF

bit 1 INTF

bit 0 RBIF

Power-on-reset

R/W-0

R/W-0

R/W-0

R\W-0

R/W-0

R/W-0

R/W-0

R/W-x

Obs.: Valor dos bits aps os demais resets: 0000000u Descrio dos bits: bit 7: GIE, Bit de habilitao da interrupo global, p/ bit7=1 habilita todas as interrupes no mascarveis e p/ bit7=0 desabilita todas as interrupes. Bit 6: EEIE, Bit de habitao da interrupo completa de escrita na EEPROM interna do PIC, p/ bit6=1 habilita interrupo de escrita na EEPROM e p/ bit6=0 desabilita a interrupo. Bit 5: T0IE, Bit de habitao da interrupo de overflow do Timer 0 (TMR0), p/ bit5=1 habilita a interrupo de TMR0 e p/ bit5=0 desabilita a interrupo. Bit 4: INTE, Bit de habitao da interrupo RB0/INT, p/ bit4=1 habilita a interrupo de RB0/INT e p/ bit4=0 desabilita a interrupo. Bit 3: RBIE, Bit de habitao da interrupo de mudana de nvel na porta B (bits RB7 a RB4), p/ bit3=1 habilita a interrupo de mudana de nvel na porta B e p/ bit3=0 desabilita a interrupo. Bit 2: T0IF, Bit de flag da interrupo de overflow do Timer 0 (TMR0), se bit2=1 implica que ocorreu um overflow no TMR0 (deve ser zerado no programa) e se bit2=0 implica que no ocorreu a interrupo. Bit 1: INTF, Bit de flag da interrupo RB0/INT, se bit1=1 implica que ocorreu uma RB0/INT e se bit1=0 implica que no ocorreu a interrupo. Bit 0: RBIF, Bit de flag da interrupo de mudana de nvel na porta B, se bit0=1 implica que ocorreu uma mudana de estado num dos pinos RB7:RB4 (deve ser zerado no programa) e se bit0=0 implica que no ocorreu a interrupo.

13. Registrador OPTION_REG(endereo 81h) Contm vrios bits de controle. Serve para configurar uma srie de opes para a operao do microcontrolador.N dos bits Bits Power on reset Bit 7 /RBPU R/W-1 bit 6 INTEDG R/W-1 bit 5 T0CS R/W-1 bit 4 T0SE R\W-1 bit 3 PSA R/W-1 bit 2 PS2 R/W-1 bit 1 PS1 R/W-1 bit 0 PS0 R/W-1

Obs.: Valor dos bits aps os demais resets: 11111111 Descrio dos bits:

bit 7: /RBPU, bit de habilitao de pull-up na porta B, p/ bit7 = 1 desabilita pull-up e p/ bit7=0 habilita pull-up. bit 6: INTEDG, bit de seleo de borda de interrupo, p/ bit6 = 1 interrupo na borda de subida do pino RB0/INT e p/ bit6 = 0 interrupo na borda de descida do pino RB0/INT. bit 5: T0CS, bit de seleo da fonte de clock do TMR0, p/ bit5 = 1 clock colocado na entrada do pino RA4/T0CKI e p/ bit5 = 0 clock interno. bit 4: T0SE, bit de seleo da borda da fonte de clock do TMR0, p/ bit4 = 1 incrementa na transio de alto para baixo no pino RA4/T0CKI e p/ bit4 = 0 incrementa na transio de baixo para alto no pino RA4/T0CKI. Bit 3: PSA, bit de sinalizao do prescaler, p/ bit3 = 1 assinala o prescaler ao WDT e p/ bit3=0 assinala o prescaler ao TMR0. Bit 2-0: PS2, PS1 e PS0, bits de seleo da razo do prescaler.

PS2 0 0 0 0 1 1 1 1

PS1 0 0 1 1 0 0 1 1

PS0 0 1 0 1 0 1 0 1

Divisor p/ o TMR0 2 4 8 16 32 64 128 256

Divisor p/ o WDT 1 2 4 8 16 32 64 128

14. Registrador EECON1 (endereo 88h) O EECON1 o registrador de controle de escrita e leitura na EEPROM interna do PIC.N dos bits Bits Power on reset bit 7 U Bit 6 U Bit 5 U Bit 4 EEIF R\W-0 bit 3 WRERR R/W-x bit 2 WREN R/W-0 bit 1 WR R/S-0 bit 0 RD R/S-0

Obs.: Valor dos bits nos demais resets: ---0q000

Descrio dos bits: bit 7-5: No implementados, ler como 0. bit 4: EEIF, bit de flag de interrupo na operao de escrita na EEPROM, se bit4 = 1 implica que a operao de escrita foi completado (deve ser zerado no programa) e se bit4 = 0 implica que a operao de escrita no foi completada ou ainda no foi inicializada. bit 3: WRERR, bit de flag de erro da EEPROM, se bit3 = 1 implica que uma operao de escrita foi prematuramente terminada e se bit3 = 0 implica que a operao de escrita foi completada. bit 2: WREN, bit de habilitao de escrita na EEPROM, p/ bit2 = 1 segue ciclos de escrita e p/ bit2 = 0 inibe escrita de dados na EEPROM. bit 1: WR, bit de controle de escrita na EEPROM, p/ bit1 = 1 inibe um ciclo de escrita (obs.: esse bit zerado por hardware uma vez que a escrita completada, o bit WR no pode ser zerado no programa). Se bit1 = 0 indica que o ciclo de escrita de dados na EEPROM foi completado. bit 0: RD, bit de controle de leitura na EEPROM, p/ bit0 = 1 inicializa uma leitura na EEPROM (obs.: esse bit zerado por hardware uma vez que a leitura completada, o bit RD no pode ser zerado no programa, pode somente ser setado). Se bit0 = 0 indica que a leitura de dados da EEPROM no foi inicializada.

15. Registrador EECON2 (endereo 89h) EECON2 no um registrador fsico. O EECON2 usado exclusivamente em uma seqncia de escrita de dados na EEPROM. Veja o Captulo IX para mais detalhes.

Captulo V - Conjunto de Instrues do PIC16F628

Observaes quanto aos termos utilizados na construo dos nomes das instrues e seus argumentos: Work: Trata-se de um registrador temporrio para as operaes da ULA. No Assembler do PIC, ele conhecido como W. Tambm comum cham-lo de acumulador. File: Referncia a um registrador (posio de memria) propriamente dito. Utilizaremos a letra F para sua representao nos nomes de instrues e f nos argumentos delas. Literal: Um nmero qualquer que pode ser escrito na forma decimal, hexadecimal ou binria. Utilizaremos a letra L para sua representao nos nomes de instrues e k nos argumentos delas. Destino: O local onde deve ser armazenado o resultado da operao. Os destinos podem ser 0 (W ) ou 1 (F). A letra d ser usada para indicar o destino de uma instruo, o destino pode ser o acumulador (d=0) ou o registrador (d=1). Bit: Refere-se a um bit especfico dentro de um byte. Utilizaremos a letra B para sua representao nos nomes das instrues e b nos argumentos delas.

Para facilitar as operaes de seus registradores especiais na RAM (que como recordamos estava includo no cdigo com a diretiva INCLUDE), a Microchip inseriu uma lista de nomes que identificam univocamente qualquer registrador especial e a qual est associado o endereo correspondente na rea da memria RAM. Se, por exemplo, quisermos definir toda a linha do PORTB do PIC como sada, devemos agir sobre o TRISB. Podemos escolher e referenciar diretamente o registrador com o seu endereo: movlw B'00000000' movwf 86H ; Endereo de TRISB

ou ento, referenciar o mesmo registrador com o seu nome simblico, neste caso tendo que ter a certeza de ter inserido a diretiva INCLUDE "P16F628.INC" (mostrado no Apndice A desta apostila): movlw B'00000000' movwf TRISB ; Nome simblico do endereo de TRISB

Para facilitar o estudo das instrues do PIC, organizamos a seguir duas tabelas. Uma com as instrues em ordem alfabtica e a outra com as instrues divididas em quatro grupos, conforme as suas aplicaes: Operaes com registradores; Operaes com literais; Operaes com bits; Controles.

Conjunto de instrues do PIC16F628 Operaes em ordem alfabtica Instruo Argumento Descrio s ADDLW K Soma k com W, guardando o resultado em W (W = W + k). ADDWF f,d Soma W e f, guardando o resultado em d (d = W + f). ANDLW K Lgica E entre k e W, guardando o resultado em W (W = W AND k). ANDWF f,d Lgica E entre W e f, guardando o resultado em d (d = W AND f). BCF f,b Zera o bit b do registrador f. BSF f,b Seta o bit b do registrador f. BTFSC f,b Testa o bit b do registrador f, e pula a prxima linha se ele for 0 (zero). BTFSS f,b Testa o bit b do registrador f, e pula a prxima linha se ele for 1 (um). CALL Label Chamada a uma subrotina no endereo Label. CLRF F Limpa o registrador f (f = 0). CLRW Limpa o acumulador (W = 0). CLRWDT Limpa o registrador WDT para evitar o reset (Watchdog timer = 0). COMF f,d Pega o complemento de f, guardando o resultado em d (d = not f). DECF f,d Decrementa f, guardando o resultado em d (d = f -1). DECFSZ f,d Decrementa f, guardando o resultado em d, e pula a prxima linha se o resultado for zero (d = f 1, skip se zero). GOTO Label Desvia para o endereo Label. INCF f,d Incrementa f, guardando o resultado em d (d = f +1). INCFSZ f,d Incrementa f, guardando o resultado em d, e pula a prxima linha se o resultado for zero (d = f+1, skip se zero). IORLW K Lgica OU entre k e W, guardando o resultado em W (W = W OR k). IORWF f,d Lgica OU entre W e f, guardando o resultado em d (d = f OR W). MOVLW K Move (copia) valor literal k para o acumulador W (W = k). MOVF F,d Move (copia) valor de registrador f para destino d (d = f). MOVWF F Move (copia) valor do acumulador W para o registrador f (f = W). NOP Nenhuma operao, gasta um ciclo de mquina sem fazer nada. RETFIE Retorno de uma interrupo. RETLW K Retorno de uma rotina, com k em W. RETURN Retorna de uma rotina. RLF f,d Rotaciona f um bit a esquerda, guardando o resultado em d (d = f > 1). SLEEP Coloca o PIC em modo sleep (dormindo) para economia de energia. SUBLW K Subtrai W de k, guardando o resultado em W (W = k W). SUBWF f,d Subtrai W de f, guardando o resultado em d (d = f - W). SWAPF f,d Executa uma inverso entre o nibble da parte alta e o nibble da parte baixa de f, guardando o resultado em d. XORLW W Lgica ou-exclusivo entre k e W, guardando o resultado em W (W=W XOR k). XORWF f,d Lgica ou-exclusivo entre W e f, guardando o resultado em d (d=W XOR f).

Conjunto de instrues do PIC16F628Instruo Argumentos Descrio

Grupo 1: Operaes com registradoresADDWF ANDWF CLRF COMF DECF DECFSZ Soma W e f, guardando o resultado em d (d = W + f). Lgica E entre W e f, guardando o resultado em d (d = W AND f). Limpa o registrador f (f = 0). Pega o complemento de f, guardando o resultado em d (d = not f). Decrementa f, guardando o resultado em d (d = f -1). Decrementa f, guardando o resultado em d, e pula a prxima linha se o resultado for zero (d = f 1, skip se zero). INCF f,d Incrementa f, guardando o resultado em d (d = f +1). INCFSZ f,d Incrementa f, guardando o resultado em d, e pula a prxima linha se o resultado for zero (d = f+1, skip se zero). IORWF f,d Lgica OU entre W e f, guardando o resultado em d (d = f OR W). MOVF F,d Move (copia) valor de registrador f para destino d (d = f). MOVWF F Move (copia) valor do acumulador W para o registrador f (f = W). RLF f,d Rotaciona f um bit a esquerda, guardando o resultado em d (d = f > 1). SUBWF f,d Subtrai W de f, guardando o resultado em d (d = f - W). SWAPF f,d Executa uma inverso entre o nibble da parte alta e o nibble da parte baixa de f, guardando o resultado em d. XORWF f,d Lgica ou-exclusivo entre W e f, guardando o resultado em d (d=W XOR f). Grupo 2: Operaes com literais ADDLW K Soma k com W, guardando o resultado em W (W = W + k). ANDLW K Lgica E entre k e W, guardando o resultado em W (W = W AND k). IORLW K Lgica OU entre k e W, guardando o resultado em W (W = W OR k). MOVLW K Move (copia) valor literal k para o acumulador W (W = k). SUBLW K Subtrai W de k, guardando o resultado em W (W = k W). XORLW W Lgica ou-exclusivo entre k e W, guardando o resultado em W (W=W XOR k). Grupo 3: Operaes com bits BCF f,b Zera o bit b do registrador f. BSF f,b Seta o bit b do registrador f. BTFSC f,b Testa o bit b do registrador f, e pula a prxima linha se ele for 0 (zero). BTFSS f,b Testa o bit b do registrador f, e pula a prxima linha se ele for 1 (um). Grupo 4: Controles CALL Label Chamada a uma subrotina no endereo Label. CLRW Limpa o acumulador (W = 0). CLRWDT Limpa o registrador WDT para evitar o reset (Watchdog timer = 0). GOTO Label Desvia para o endereo Label. NOP Nenhuma operao, gasta um ciclo de mquina sem fazer nada. RETFIE Retorno de uma interrupo. RETLW K Retorno de uma rotina, com k em W. RETURN Retorna de uma rotina. SLEEP Coloca o PIC em modo sleep (dormindo) para economia de energia. f,d f,d F f,d f,d f,d

Explicao detalhada do conjunto de instrues do PIC. 1) ADDLW k ; Soma a constante k a W Descrio: Soma a constante k ao valor memorizado no acumulador W e coloca o resultado no acumulador. Exemplo: movlw 10 addlw 12 ; aps o trecho de programa, o acumulador W ter o valor 22 2) ADDWF f,d ; Soma o valor contido em W com o valor contido no registrador F Descrio: Esta instruo soma o valor contido no acumulador W com o valor contido no registrador endereado pelo parmetro f. Exemplo: Vejamos um exemplo de soma entre dois registradores: add1 equ 0CH add2 equ 0DH org 00H movlw 10 ;Primeiro somador = 10 movwf add1 movlw 15 ;Segundo somador = 15 movwf add2 movf add1,W ;W = add1 addwf add2,W ;W = add1 + add2 3) ANDLW k ; Efetua o AND bit a bit entre W e uma constante k Descrio: Efetua o AND bit a bit entre o valor contido no acumulador W e o valor constante k. O resultado ser memorizado no acumulador. Exemplo: movlw 10101010B andlw 11110000B ... Depois de haver executado este trecho de programa o acumulador W ir valer 10100000B. 4) ANDWF f,d ; Efetua o AND bit a bit entre o valor contido em W e o valor contido no registrador F. Descrio: Esta instruo efetua o AND bit a bit entre o valor contido no acumulador W e o valor contido no registrador endereado pelo parmetro f. Exemplo: Freqentemente o AND ser utilizado para mascarar o valor de algum bit dentro de um registrador. Se por exemplo quisssemos extrair do nmero binrio 01010101B os quatro bits menos significativo a fim de obter o seguinte valor 00000101B, bastar preparar uma mscara do tipo 00001111B e fazer o AND com o nosso valor, vejamos como: movlw 01010101B ; Armazena em W o valor binrio movwf 0CH ; Usa o endereo 0CH para armazenar o valor inicial da

mscara movlw 00001111B ; Prepara a mscara do bit andwf 0CH,W ; Efetua o AND e memoriza o resultado no acumulador W O resultado em W ser 00000101B como descrito. W = 00001111 AND f = 01010101 = ---------------W = 00000101 5) BCF f,b ; Zera o bit b do registrador F Descrio: Esta instruo zera o bit b do registrador no endereo f . Exemplo: parm1 equ 0CH movlw 11111111B ;Valor inicial movwf parm1 bcf parm1,0 Ao trmino do programa o registrador parm1 ser 11111110B. 6) BSF f,b ;Coloca em nvel alto o bit b no registrador F. Descrio: Esta instruo coloca em um no bit b do registrador que est no endereo f. Exemplo: parm1 equ 0CH movlw 00000000B ;Valore inicial movwf parm1 bsf parm1,0 ;D0=1 Ao terminar o programa o registrador parm1 ser 00000001B. 7) BTFSC f,b ; Pula a prxima instruo se o bit b do registrador F for 0 Descrio: Testa o bit b contido no registrador no endereo f e pula a prxima instruo se este valer 0. Exemplo: parm1 equ 0CH org 00H movlw 11111110B ;Valor inicial movwf parm1 loop btfsc parm1,0 ;bit0 = 0? Se for, pular prxima instruo. goto loop ;Se no, ficar no loop Este programa executa um loop infinito. Entretanto, o mesmo programa no executar o loop se substituirmos a instruo: movlw 11111110B pela instruo: movlw 11111111B.

8) BTFSS f,b ; Pula a prxima instruo se o bit b do registrador F for 1 Descrio: Testa o bit b contido no registrador do endereo f e pula a instruo seguinte se

este for 1. Exemplo: parm1 equ 0CH org 00H movlw 11111111B ;Valor inicial movwf parm1 loop btfss parm1,0 ;bit0 = 1 ? Se for, pular prxima instruo. goto loop ;Se no, ficar no loop Este programa executa um loop infinito. O mesmo programa no executar o loop se substituirmos a instruo: movlw 11111111B pela instruo: movlw 11111110B. 9) CALL k ; Chamada a uma subrotina Descrio: Chama uma subrotina memorizada no endereo k. O parmetro k pode ser especificado utilizando-se diretamente o valor numrico do endereo ou ento o relativo label. Exemplo: #define LED1 1 org 00H call ledOn ; Chama a rotina ledOn ledOn btfsc PORTB,LED1 return

; testa o bit 1 da porta B

Quando a CPU do PIC encontra uma instruo CALL, memoriza no STACK o valor do registrador PC+1 de modo a poder retornar para instruo aps o CALL, em seguida escreve no PC o endereo da subrotina pulando a execuo desta ultima. O valor original do PC ser recuperado pela subrotina com a execuo da instruo de retorno RETURN ou RETLW. No PIC16F628 esto disponveis 8 nveis de stack (pilha), ou seja a instruo CALL dentro de uma subrotina pode ter no mximo 8 chamadas ou 8 nveis. As demais chamadas sero sobrepostas s primeiras. 9) CLRF f ; Zera o registrador F Descrio: Esta instruo zera o valor contido no registrador endereado pelo parmetro f. Exemplo: Se quisermos zerar o registrador TMR0 no qual o endereo 01H hexadecimal, a instruo a se executar ser: clrf 01H Ou, se no endereo do nosso cdigo incluirmos o arquivo P16F628.INC, poderemos utilizar o nome simblico do registrador TMR0, ou seja, clrf TMR0. 11) CLRW ; Zera o registrador W

Descrio: Zera o valor contido no registrador W. Exemplo: clrw 12) CLRWDT ; Limpa o registrador WDT para no acontecer o Reset Descrio: Esta instruo deve ser utilizada quando programarmos o PIC com a opo Watchdog (fusvel WDTE). Nesta modalidade o PIC habilita um timer que, uma vez transcorrido um determinado tempo, efetua o reset do mesmo. Para evitar o reset do nosso programa deveremos executar ciclicamente a instruo CLRWDT para zerar o timer antes deste tempo. Se no zerarmos o WDT neste tempo, o circuito de watchdog (do ingls co de guarda) interpretar este como um bloco de programa em execuo e efetuar o reset para bloquea-lo. Exemplo: org 00H loop clrwdt goto loop 13) COMF f,d ; Efetua o complemento do registrador F Descrio: Esta instruo efetua o complemento do valor contido no registrador endereado pelo parmetro f. Exemplo: parm1 equ 0CH org 00H movlw 01010101B movwf parm1 comf parm1,F Ao trmino da execuo do programa o valor do registrador parm1 ser 10101010B. 14) DECF f,d ; Decrementa o contedo do registrador F Descrio: Esta instruo decrementa o contedo do registrador endereado pelo parmetro f. Exemplo: movlw 23H ;Escreve em W o valor 23H movwf 0CH ;Copia no registrador 0CH o valor de W decf 0CH,F ;Decremente o valor contido no registrador 0CH 15) DECFSZ f,b ; Decrementa o valor do registrador f e pula a prxima instruo se o resultado for zero. Descrio: Decrementa o valor de registrador do endereo f e se o resultado for zero pula a prxima instruo. Exemplo: counter equ 0CH org 00H movlw 10 ;counter = 10 movwf counter loop

decfsz counter,F ;counter = counter 1, se counter = 0, pula prxima instruo goto loop ;se no, continua no loop Este programa executa 10 vezes a instruo decfsz at que counter seja = 0. 16) GOTO k ; Desvia a execuo do programa para o endereo especificado k. Descrio: Determina o desvio incondicional do programa em execuo para o endereo k. O parmetro k pode ser especificado utilizando-se diretamente um valor numrico do endereo ou ento o relativo label. Exemplo: org 00H loop goto loop Este programa executa um cilclo (loop) infinito. 17) INCF f,d ; Incrementa o valor do registrador no endereo F. Descrio: Incrementa o contedo do registrador no endereo f. Exemplo: movlw 23H ;Escreve em W o valor 23H movwf 0CH ;Copia no registrador 0CH o valor de W incf 0CH,F ;Incrementa de 1 valor contido no registrador 0CH

18) INCFSZ f,b ; Incrementa o valor do registrador f e pula a prxima instruo se o resultado for zero. Descrio: Incrementa o valor do registrador f e se o resultado for zero pula a prxima instruo. Exemplo: counter equ 0CH org 00H movlw 250 ;counter = 250 movwf counter loop incfsz counter,F ;counter = counter + 1, se counter = 0 ? pular prxima instruo goto loop ; se no, continuar no loop Este programa executa para 256-10 = 6 vezes a instruo incfsz at que counter seja 0. Sendo counter um registrador de 8 bit's quando for incrementado do valor 255 assume novamente o valor 0 e dai a formula 256 - 10 = 6. 19) IORLW k ; Efetua o OU inclusive entre W e uma constante k Descrio: Efetua o OR inclusive entre o valor contido no acumulador W e o valor da constante k. Exemplo: org 00H

start movlw 00001111B iorlw 11110000B Aps ser executado esse programa o acumulador W ser 11111111B. 20) IORWF f,d ; Efetua o OR inclusive entre o valor contido em W e o valor contido no registrador F Descrio: Esta instruo efetua o OR inclusive entre o valor contido no acumulador W e o valor contido no registrador endereado pelo parmetro f. Exemplo: parm1 equ 0CH org 00H movlw 00001111B movwf parm1 movlw 11111111B iorwf parm1,F Ao trmino do programa o valor do registrador parm1 ser 11111111B. 21) MOVLW k ; Copia para W o valor constante k Descrio: Passa ao acumulador W um valor constante k. Exemplo: org 00H movlw 20 Aps ter executado este programa o acumulador W ir a 20. 22) MOVF f,d ;Copia o contedo do registrador f para o destino d Descrio: Esta instruo copia o contedo do registrador endereado pelo parmetro f para o parmetro de destino d. Exemplo: O exemplo a seguir copia o valor contido no registrador do endereo 0CH no acumulador W: movf 0CH,W 23) MOVWF f ; Copia o contedo do registrador W para o registrador F Descrio: Esta instruo copia o contedo do registrador W no registrador de parmetro f. Exemplo: Para copia o valor 10H no registrador TMR0. A instruo a se executar ser a seguinte: movlw 10H ;Escreve no registrador W o valor 10H movwf TMR0 ;e o memoriza no registrador TMR0

24) NOP ; Nenhuma operao Descrio: Esta instruo no executa nenhuma operao mas til para inserir atrasos de um ciclo de maquina ou mais. Exemplo: nop nop

Os dois nops acima vai provocar um atraso de 2 uS se utilizarmos um cristal de 4MHz no nosso hardware. 25) RETFIE ; Retorna de uma rotina de interrupo Descrio: Esta instruo deve ser colocada no trmino de cada subrotina de controle de interrupes para retornar o controle ao programa principal. Exemplo: org 00H loop goto loop ;Loop infinito org 04H ;Interrupt vector intHandler retfie ;Retorna da interrupo Neste cdigo o programa principal executa um loop infinito. Se habilitarmos uma das interrupes do 16F628 ele no apenas verificar o controle como ir automaticamente ao programa alocado no endereo 04H (no exemplo intHandler), a instruo RETFIE determinar ento o retorno ao loop principal. 26) RETLW k ; Retorna de uma rotina com uma constante k em W Descrio: Esta instruo retorna o controle de uma rotina ao programa principal. A diferena desta em relao instruo RETURN que retflw permite retornar, atravs do acumulador W, o valor k ao programa principal. Exemplo: rtc equ 0CH org 00H call mySub1 movwf rtc ... mySub1 nop retlw 10 Uma vez executado esse programa ele memorizar no registrador rtc o valor 10 passado pela subrotina mySub1. 27) RETURN ; Retorna de uma rotina Descrio: Esta instruo deve ser inserida no termino de cada subrotina para retornar a execuo ao programa principal. Exemplo: org 00H call mySub1 .... mySub1 nop return

Nota: No PIC16F628 podemos fazer apenas 8 chamadas a subrotinas, do tipo: org 00H call mySub1 .... mySub1 call mySub2 return mySub2 call mySub3 return mySub3 return 28) RLF f,b ;Rotaciona a esquerda o contedo do registrador f passando pelo Carry Descrio: Rotaciona o bit contido no registrador do endereo f para a esquerda (ou seja do bit menos significativo para o mais significativo) passando pelo CARRY do registrador STATUS como ilustrado na figura a seguir:BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0

CARRY

Figura 7 Rotao de bit a esquerda O contedo do bit CARRY do registrador STATUS ser deslocado para o bit0 enquanto que o valor do bit7 ser deslocado para o CARRY. Exemplo: parm1 equ 0CH org 00H bcf STATUS,C ;Zera o CARRY movlw 01010101B ;Valor inicial movwf parm1 rlf parm1,F Ao trmino do programa o registrador parm1 ser 10101010B enquanto o CARRY ser 0.

29) RRF f,b ; Rotaciona para a direita o contedo do registrador f passando pelo Carry Descrio: Rotaciona o bit contido no registrador do endereo f para direita (ou seja do bit mais significativo para o menos significativo) passando pelo bit CARRY do registrador STATUS como ilustrado na figura a seguir:

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

CARRY

Figura 8 Rotao de bit a direita O contedo do bit CARRY do registrador STATUS ser deslocado para o bit7 enquanto o valor do bit0 ser deslocado para o CARRY. Exemplo: parm1 equ 0CH org 00H bcf STATUS,C ;Zera o CARRY movlw 01010101B ;Valor inicial movwf parm1 rrf parm1,F Ao trmino do programa o registrador parm1 ser 00101010B enquanto o CARRY ser 1. 30) SLEEP ; Coloque o PIC (para dormir) em standby Descrio: Esta instruo bloqueia a execuo do programa em andamento e coloca o PIC em standby (sleep do ingls = dormir). Exemplo: org 00H start sleep 31) SUBLW k ; Subtraia de k o valor em W Descrio: Subtrai a constante k do valor memorizado no acumulador W. Exemplo: org 00H start movlw 10 ; W = 10 sublw 12 ; W = 12 - 10 ... Depois de haver executado este programa o acumulador W ser 2. 32) SUBWF f,d ;Subtraia o valor contido em W do valor contido no registrador F. Descrio: Esta instruo subtrai o valor contido no registrador W do valor contido no registrador endereado pelo parmetro f. Exemplo: Analisando um exemplo extrado do datasheet da Microchip: Se inserirmos a instruo: subwf REG1,F Onde reg1 o endereo de um registrador qualquer especificado com a diretiva: REG1 RES 1 Para o valor inicial de REG1=3 e W=2, teremos REG1=1 e C=1 porque o resultado positivo. Para o valor inicial de REG1=2 e W=2, teremos REG1=0 e C=1 porque o resultado

positivo. Para o valor inicial de REG1=1 e W=2, teremos REG1=FFH ou seja -1 e C=0 porque o resultado negativo. 33) SWAPF f,d ; Troca de nibbles. Descrio: Troca o valor dos quatro bits mais significativo (D7-D4) contido no registrador do endereo f com os quatro bits menos significativo(D3-D0) do mesmo. Exemplo: movlw 11110000B ;Valor inicial swapf parm1,F Ao trmino do programa o registrador parm1 ser 00001111B. 34) XORLW k ; Efetua o OR exclusivo entre W e uma constante k Descrio: Efetua o OR exclusivo entre o valor contido no acumulador W e o valor constante k. Exemplo: org 00H start movlw 00000000B xorlw 11110000B ... Aps haver executado este programa o acumulador W ser 11110000B. 35) XORWF f,d ; Efetua o OR exclusivo entre o valor contido em W e o valor contido no registrador Descrio: Esta instruo efetua o OR exclusivo(XOR) entre o valor contido no acumulador W e o valor contido no registrador endereado pelo parmetro f. Exemplo: Efetuar um XOR entre o registrador W e o registrador REG1 por ns definido no endereo 0CH com a diretiva: REG1 EQU 0CH podemos utilizar a instruo IORWF de duas formas, dependendo onde queremos colocar o resultado, ou seja: xorwf COUNTER,F ;COUNTER = COUNTER XOR W ou ento: xorwf COUNTER,W ;W = COUNTER XOR W

Captulo VI - AS INTERRUPES DO PIC16F628

A interrupo uma tcnica particular do PIC que permite interceptar eventos externos ao programa em execuo, interrompe momentaneamente a operao do programa em andamento, controla o evento com uma subrotina apropriada e retorna para a execuo do programa. Fazendo uma analogia, podemos dizer que a interrupo para o PIC o que para ns representaria uma chamada telefnica. Para recebermos um telefonema no precisamos nos preocupar em ficar levantando continuamente o monofone do gancho para ver se tem algum querendo falar conosco, mas podemos tranqilamente aguardar pelo toque da campainha quando algum nos chamar. Quando ento apenas levantamos o monofone do gancho e interrompemos momentaneamente o sistema de chamada, respondemos ao telefonema e, uma vez terminada a conversao, retornamos o monofone ao gancho, ou seja, do ponto onde havamos interrompido. Transportando o termo deste pargrafo ao PIC veremos que: O nosso telefone corresponde ao programa em execuo; A chamada de algum corresponde ao evento de controle; O monofone corresponde a requisio de interrupo; A nossa reposta ao telefone corresponde a subrotina de controle da interrupo.

evidente que assim como extremamente mais eficaz se ter uma campainha conectada ao telefone extremamente mais eficaz controlar nosso evento com uma interrupo ao invs de diretamente pelo programa. O PIC16C84 esta preparado para controlar interrupes ao final de quatro eventos diferentes, vejamos quais so: 1. Ao final da contagem do registrador TMR0, interrupo de TIMER 0. 1. Interrupo externa por mudana de nvel no pino RB0. 3. A troca de estado sobre uma das linhas de RB4 a RB7, interrupo por mudana de estado. 4. Ao final da escrita sobre um endereo da EEPROM. Interrupo de TIMER 0, essa interrupo acontece sempre que um contador de tempo interno, denominado TMR0 (Timer 0), estoura, ou seja, como ele um contador de 8 bits, sempre que passar de 0xFF para 0x00. Ela utilizada normalmente para a contagem de tempo. Como pode acontecer a qualquer momento, a contagem de tempo fica precisa, no dependendo de anlises constantes durante o programa para garantir que o tempo seja contado. Como veremos em exemplos, o TMR0 pode tanto ser incrementado internamente pelo clock da mquina, como tambm por um sinal externo. Neste caso, ele passa a ser um

contador de pulsos, podendo ser utilizado para outras finalidades. Interrupo externa (RB0/INT), essa interrupo gerada por um sinal externo ligado a uma porta especfica do PIC, que no caso a porta RB0, caso ela esteja configurada como entrada. Desta maneira, podemos identificar e processar imediatamente um sinal externo. Ela utilizada para diversas finalidades, como, por exemplo, a comunicao entre micros, garantindo o sincronismo, o reconhecimento de boto ou outro sinal do sistema que necessite de uma ao imediata. Essa interrupo acontece ou na borda de subida ou na borda de descida conforme a configurao da mesma. Interrupco por mudana de estado (RB4 a RB7), essa interrupo acontece em ambos os casos, na borda de subida ou na borda de descida, basta haver mudana de estado. Esse tipo de interrupo pode ser utilizado, por exemplo, para criar um sincronismo com a rede de 60 Hz, para o controle de um triac ou outro sistema semelhante. Interrupo de fim de escrita na EEPROM, essa interrupo serve para detectarmos o final de uma rotina de escrita na EEPROM do PIC. A utilizao da interrupo no obrigatria para que a escrita funcione, mas como a EEPROM lenta na hora de escrever, em alguns sistemas a sua utilizao pode ser necessria para evitar uma parada durante a escrita na EEPROM. A interrupo de qualquer um destes eventos pode ser conseguida agindo sobre os bits do registrador INTCON, podemos habilitar ou desabitar esses bits independentemente uns dos outros. A Figura abaixo mostra os bits do INTCON.

Figura 9 - Interrupes do PIC16F628

Registrador INTCON:

GIE

EEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

INTE (bit 4) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre a linha RB0 T0IE (bit 5) se este bit estiver em 1 habilitar a interrupo de final de contagem do registrador TMR0 RBIE (bit 3) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre uma das linhas de RB4 a RB7 EEIE (bit 6) se este bit estiver em 1 habilitar a interrupo de final de escrita sobre um endereo da EEPROM GIE (bit 7) bit de habilitao geral de interrupo. Esse bit deve ser setado em 1 antes dos demais.

Vetor de Interrupo e Controle de Interrupo (Interrupt vector e Interrupt handler), qualquer que seja o evento habilitado, ao se manifestar, o PIC interrompe a execuo do programa em andamento, memoriza automaticamente no STACK o valor corrente do PROGRAM COUNTER (PC) e pula para a instruo presente no endereo de memria 0004H denominada Interrupt vector (vetor de interrupo). Deste ponto em diante devemos colocar a nossa subrotina de controle denominada Interrupt Handler (controle de interrupo). Pode-se habilitar mais interrupes e, a primeira providncia da interrupt handler a de verificar qual o evento habilitado que gerou a interrupo e a execuo da parte do programa relativo. Este controle pode ser efetuado utilizando a Interrupt flag. Interrupt flag (sinalizador de interrupo), dado que qualquer interrupo gera uma chamada do endereo 04H, no registrador INTCON est presente o flag que indica qual o evento que gerou a interrupo vejamos: INTF (bit 1), se for 1 porque a interrupo RB0/INT ocorreu. T0IF (bit 2), se for 1 porque ocorreu uma interrupo de TMR0. RBIF (bit 0), se for 1 porque ocorreu uma interrupo de troca de estado de uma das linhas de RB4 a RB7.

Como se pode ver a interrupo de final de escrita na EEPROM no tem previsto nenhum flag de sinalizao para que a interrupt handler deva considerar que a interrupo um estado gerado deste evento quando todos os trs flags supra citados iro a 0. Importante: Uma vez conhecido qual o flag que est ativo, a interrupt handler deve zer-lo, ou ento no mais gerar interrupo correspondente. Retorno de uma interrupt handler, quando for gerada uma interrupo o PIC desabilitada automaticamente o bit GIE (global Interrupt Enable) do registrador INTCON de modo a desabilitar todas as interrupes restantes. Para poder retornar ao programa principal e reinicializar em 1 este bit deve-se utilizar a instruo: RETFIE

Captulo VII - O CONTADOR/TEMPORIZADOR (TMR0)O registrador TMR0 um contador, ou seja, um registrador particular, na qual, seu contedo v-se incrementado com cadncia regular e programada ditada pelo hardware do PIC. Na prtica, a diferena de um outro registrador, que o TMR0 no mantm inalterado o valor que memorizado, mas o incrementa continuamente, se por exemplo escrevermos nele o valor 10 com a instruo: movlw 10 movwf TMR0 Aps um tempo por quatro ciclos de mquina, o contedo do registrador comea a ser incrementado de +1 ou seja 11, 12, 13 e assim por diante com a cadncia constante e independente da execuo do resto do programa. Se por exemplo, aps ter colocado um valor no registrador TMR0, executar-mos um loop infinito movlw movwf loop goto loop 10 TMR0

o registrador TMR0 ser incrementado pelo hardware interno do PIC durante a execuo do loop. Uma vez atingido o valor 255 o registrador TMR0 ser zerado automaticamente recomeando ento a contagem, mas no do valor originalmente imposto mas do zero. A freqncia diretamente proporcional a freqncia de clock aplicada ao chip e pode ser modificada programando-se oportunamente os seus bits de configurao. Na figura seguinte est representada a cadeia de blocos interno do PIC que determina o funcionamento do registrador TMR0.

Figura 10 - Funcionamento do registrador TMR0

O bloco Fosc/4 e T0CKI representados esquerda representam as duas possveis fontes de sinal para o contador TMR0. Fosc/4 um sinal gerado internamente no PIC pelo circuito de clock e igual a freqncia de clock dividida por quatro. T0CKI um sinal gerado de um eventual circuito externo e aplicado ao pino T0CKI correspondente ao pino 3 no PIC 16F628. O blocos T0CS e PSA so dois comutadores de sinal na qual esto representando um dos dois tipos de sinal de entrada com base no valor dos bits TOCS e PSA do registrador OPTION. O bloco PRESCALER um divisor programvel e que seu funcionamento ser explicado no prximo passo. Vejamos na prtica como possvel agir sobre este bloco para obter diferentes modalidades de contagem pelo registrador TMR0. Iniciaremos programando o bit T0CS em 0 e PSA em 1. A configurao de funcionamento que obteremos a representada na figura abaixo:

Figura 11 - Percurso do sinal usando o clock interno A parte em vermelho (de cima, a partir de Fosc/4) mostra-nos o percurso que efetua o sinal antes de chegar ao contador TMR0. Como j havia dito anteriormente, a freqncia Fosc/4 igual a um quarto da freqncia de clock. Utilizando-se um cristal de quartzo de 4Mhz teremos uma freqncia igual a 1 MHz. Tal freqncia ser enviada diretamente ao registrador TMR0 sem nenhuma modificao. A cadncia de contagem que se obtm ento igual a de 1 milho de incrementos por segundo do valor presente no TMR0. Imaginemos agora modificar o registrador de STATUS, o bit T0CS de 0 para 1 a configurao que obteremos seguinte:

Figura 12 - Percurso do sinal usando clock externo pelo pino T0CKI

Desta vez ser o sinal aplicado ao pino TOCKI do PIC a ser enviado diretamente ao contador TMR0 determinando a freqncia de contagem. Aplicando-se por exemplo a este pino uma freqncia par de 100Hz obteremos uma de contagem igual a cem incrementos por segundo. A presena da porta lgica XOR (exclusive OR) na entrada TOCKI do PIC permite determinar o caminho do bit TOSE do registrador OPTION se o contador TMR0 deve ser incrementado na descida do pulso (TOSE=1) ou na subida do pulso (TOSE=0) do sinal externo aplicado. Na figura seguinte est representada a correspondncia entre a cadncia do sinal externo e o valor que assume o contador TMR0 :

Figura 13 - Cadncia do sinal externo

O ltimo bloco a ser analisado para poder utilizar complemente o registrador TMR0 o PRESCALER. Se configurar-mos o bit PSA do registrador OPTION em 0 enviamos ao registrador TMR0 o sinal de sada do PRESCALER como visvel na figura abaixo:

Figura 14 - O PRESCALER como divisor

O PRESCALER consiste na prtica de um divisor programvel de 8 bits utilizado no caso pela freqncia de contagem enviada ao contador TMR0 que demasiada alta para nossos propsitos. No exemplo descrito na lio anterior haviamos visto que utilizando um cristal de 4Mhz era obtido uma freqncia de contagem igual a 1 Mhz que para muitas aplicaes poder ser muito elevada. Com o uso do PRESCALER podemos dividir interiormente a freqncia Fosc/4 configurando os bits PS0, PS1, PS2 do registrador OPTION segundo a tabela abaixo:

PS2 0 0 0 0 1 1 1 1

PS 1 0 0 1 1 0 0 1 1

PS 0 0 1 0 1 0 1 0 1

Divisor 2 4 8 16 32 64 128 256

Freqncia de sada do prescaler (Hz) p/ cristal de 4 MHz 500.000 = 4MHz/(4 * 2) 250.000 = 4MHz/(4 * 4) 125.000 = 4MHz/(4 * 8) 62.500 = 4MHz/(4 * 16) 31.250 = 4MHz/(4 * 32) 15.625 = 4MHz/(4 * 64) 7.813 = 4MHz/(4 * 128) 3.906 = 4MHz/(4 * 256)

Captulo VIII MODO POWER DOWN, MODO SLEEP E O WDT

O modo Power Down/Sleep um estado particular de funcionamento do PIC utilizado para reduzir o consumo de corrente no momento em que o PIC no utilizado. Se pegarmos como exemplo um controle remoto para TV veremos que na maior parte do tempo o PIC permanece aguardando que algum pressione uma tecla. Apenas quando pressionamos, o PIC efetua uma breve transmisso e se coloca de novo a espera de um novo pressionar de tecla. O tempo de utilizao efetivo da CPU do PIC ento limitado a poucos milisegundos necessrio para efetuar a transmisso. Para evitar o consumo intil frente a limitada energia da bateria possvel desligar boa parte do circuito de funcionamento do PIC e reativ-lo somente quando um evento externo ocorrer. Para entrar no modo Power Down, basta executar a instruo sleep, nesse modo, como o prprio nome diz, o microcontrolador colocado para dormir e reduzir consequentemente a corrente absorvida que passar de cerca de 2mA (a 5 volts com clock de 4Mhz) para cerca dos 2uA, ou seja 1000 vezes menos. Quando entramos neste modo, o oscilador imediatamente paralisado, e com ele todo o processamento. O estado das portas mantido, isto , aquelas que eram entradas continuam como entradas, assim como o nvel lgico das portas que eram sadas. No entanto, como o objetivo normalmente economizar energia, o estado das portas deve ser minuciosamente checado e acertado antes de entrarmos neste modo. Configurar as portas para entrada, quando possvel, resulta em maior economia de energia. Para despertar o PIC do seu sono, podemos utilizar trs maneiras possveis: 1. Por meio de um reset externo, colocando em 0 o pino /MCLR (pino 4). 2. Por um estouro de WDT, no caso de ele estar habitado. 3. Por meio de um interrupo externa RB0/INT, ou por mudana de estado na porta B (RB4, RB5, RB6 e RB7) ou no trmino da operao de escrita na EEPROM. No primeiro caso, o PIC ser resetado e a execuo comear da posio 00h. No segundo caso o programa continuar a ser executado na linha seguinte instruo SLEEP. E no terceiro caso, o PIC se comporta como no atendimento de uma interrupo, o programa ir para a rotina de interrupo e ento retornar para execuo aps a instruo SLEEP. O WACHTDOG TIMER (WDT) O Wachtdog Timer na prtica um contador automtico incrementado por meio de um oscilador interno do PIC, mas complemente independente do resto do circuito. Com o prescaler de 1:1, o seu tempo de estouro, ou seja, 256 incrementos, equivalente a 18 ms. O prescaler utilizado para aumentarmos este tempo. Caso o WDT estoure, um reset do

sistema ir ocorrer imediatamente. Para evitar o reset automtico deve-se utilizar a instruo CLRWDT em algum trecho do programa para zerar o prescaler e assim no permitindo o mesmo, terminar sua contagem. Se a CPU no executa esta instruo antes de terminar a contagem ser entendido como um bloqueio de programa por motivo qualquer, e ser efetuado o reset da CPU. O perodo mnimo para que a CPU seja resetada de cerca de 18ms (isso depender da temperatura e da tenso de alimentao). Porem possvel programar o PRESCALER para Wachtdog Timer para obter um tempo de retardo maior com cerca de 2 a 3 segundos. Para configurar o Wachtdog Timer devemos habilitar na fase de programao o bit WDTE do byte de configurao (no __CONFIG, incio do programa) . Para ajustar o PRESCALER ao WDT, devemos agir sobre o bit PSA do registrador OPTION_REG. O bit PSA dever setado em 1 com a instruo: BSF OPTION_REG,PSA Caso contrrio o prescaler estar ligado ao TIMER 0. Obviamente ajustando o prescaler ao WTD no ser possvel ajust-lo para TIMER 0 e vice-versa. Intervindo sobre o valor do bit PS0, PS1 e PS2 do mesmo registrador OPTION_REG podemos obter diversos intervalos de retardo. A habilitao correta dever ser feita tendo em conta o mximo retardo que podemos obter dentro do nosso programa entre a execuo de duas instrues CLRWD sucessivas. Na tabela seguinte est representada a correspondncia entre os valores destes bit's e os intervalos que obteremos.

PS2 0 0 0 0 1 1 1 1

PS1 0 0 1 1 0 0 1 1

PS0 0 1 0 1 0 1 0 1

Divisor 1 2 4 8 16 32 64 128

Perodo de retardo do WDT 18ms 36ms 72ms 144ms 288ms 576ms 1.152s 2.304s

Captulo IX - Escrita e Leitura na EEPROM do PIC16F628

A memria EEPROM do PIC16F628 pode armazenar at 64 bytes de dados, endereos de 00h a 3Fh. Os registradores de controle, de dado e de endereo da EEPROM para esse PIC so os seguintes:

1. EECOM1: registrador de controle, veja definio dos bits no Captulo IV. 2. EECOM1: registrador no implementado fisicamente, ele usado exclusivamente em

uma escrita sequencial de dados na EEPROM.3. EEDATA: registrador de dados. 4. EEADR: registrador de endereos.

Passos que devero ser seguidos para a leitura de dados na EEPROM:1. Escrever o endereo no registrador EEADR; 2. Colocar em nvel alto o bit de controle RD (EECON1); 3. O dado colocado na registrador EEDATA e est pronto para ser pego no

prximo ciclo de mquina. EEDATA segurar o valor at que uma outra leitura seja ativada ou at que seja escrita em EEDATA um outro valor diferente. Exemplo: bcf movf movwf bsf bsf bcf movf STATUS,RP0 Endereco,W EEADR STATUS,RP0 EECON1,RD STATUS,RP0 EEDATA,W ; Vai para o banco 0 ; W = Endereo onde vai ser armazenado o dado ; Escrita do endereo em EEADR ; Vai para o banco 1 ; Habilita a leitura ; Vai para o banco 0 ; Armazena o dado em W (W=EEDATA)

Passos que devero ser seguidos para a escrita de dados na EEPROM:1. 2. 3. 4.

Escrever o endereo no registrador EEADR; Escrever o dado no registrador EEDATA; Programar sequncia de controle para habilitar a escrita; Colocar em nvel alto o bit de controle WR (EECON1) para iniciar a escrita. Obs.: Tipicamente uma operao de escrita demora 10 ms.

Exemplo: bcf STATUS,RP0 ; Vai para o banco 0 movf Endereo,W ; W = Endereo onde vai ser armazenado o dado movwf EEADR ; Escrita do endereo em EEADR movf Dado,W ; W = Dado que ser armazenado na EEPROM movwf EEDATA ; Escrita do dado em EEDATA bsf STATUS,RP0 ; Vai para o banco 1 ;programao da seqncia de controle bsf EECOM1,WREN movlw 55h ; W = 55h movwf EECON2 movlw 0Aah ; W = AAh movwf EECON2 ; Escrita do dado em EEDATA ; fim da programao da seqncia de controle bsf EECON1,WR ; Habilita a escrita bcf STATUS,RP0 ; Retorna ao banco 0 Obs.: Para economizar energia, recomenda-se colocar os bits 6 e 7 de EEADR (EEADR) desligados (clear). Com eles setados o consumo cerca de 400 A, j com eles clear o consumo cerca de 150 A.

BIBLIOGRAFIA

1. Souza, David Jos de, Desbravando o PIC, Baseado no Microcontrolador PIC16F628; Editora rica, 2a edio, 2000. 2. PIC16/17 MICROCONTROLLER DATA BOOK, Microchip, 1996/1997. 3. Sites: www.microchip.com, http://www2.ele.ufes.br/~hans/pic/index.html,

Apndice A - INTRODUO AO MPLABO MPLAB um ambiente integrado para o estudo e desenvolvimento com a famlia PIC de microcontroladores. Sua principal caracterstica a total integrao de seus mdulos com o ambiente Windows, permitindo a fcil cpia de arquivos e trechos de arquivos de um aplicativo para outro. Neste ambiente, alm da edio de cdigo-fonte, podemos tambm compilar programas e corrigir seus erros, caso existam. Outra ferramenta importante a simulao do programa, que pode ser realizada passo-a-passo para verificarmos se o trabalho tm erros de lgica. A Figura 1 mostra a janela principal do MPLAB onde temos um menu principal, uma barra de ferramentas com vrios cones e uma janela do gerenciador de projeto e janela de mensagens de sada.

Barra de Ferramentas Menu Principal

Janela de mensagens de sada

Janela do gerenciador

Figura 1 Tela principal do MPLAB

Para se escrever um programa no MPLAB, precisamos antes assimilar o conceito de projeto.

O Projeto no MpLab

Entende-se por projeto um conjunto de arquivos e informaes que diz ao MPLAB qual a situao de um certo trabalho em particular. Por exemplo, num certo projeto designado EXEMPLO.MCP temos duas janelas abertas: a janela do gerenciador de projeto e o cdigo-fonte exemplo.asm. Em outro projeto podemos ter outros arquivos sendo simulados o que caracteriza outro projeto. Com o gerenciamento de projetos presente no MPLAB no precisamos lembrar quais as janelas que cada projeto estava usando no momento em que encerramos o trabalho, pois ao carregarmos o projeto desejado todas as informaes relativas ao mesmo sero recuperadas. Para a montagem de um projeto vamos supor que foi desenvolvido o programa para controlar 8 leds dispostos no PORTB do PICF628 ou PIC16F87x. Gravamos este programa na pasta PIC com o nome de SEQLEDS.ASM. A listagem deste programa para o PIC16F628 encontra-se em anexo.

CRIAO DO PROJETO - PRIMEIRO PASSO

Uma vez que voc abriu o MPLAB a primeira coisa a se fazer criar um projeto ou abrir um projeto criado anteriormente. O projeto que vamos criar ter o nome de LED.MCP. importante ressaltar que o projeto e o cdigo-fonte SEQLEDS.ASM tm que ser salvos na mesma pasta. No menu principal, na opo Project o MPLAB possui o Project Wizard que nos facilita o trabalho de criao do projeto. A Figura 2 mostra a janela inicial do Project Wizard.

Figura 2 Project Wizard

Click em avanar para executarmos a prxima etapa.

A seguir, precisamos definir com qual microcontrolador vamos trabalhar. Neste exemplo ser selecionado o PIC16F628. A Figura 3 detalha este passo no MPLAB.

Figura 3 Seleo do microcontrolador.

CRIAO DO PROJETO - SEGUNDO PASSO

Os programadores de micorcontrolador usam basicamente dois tipos de cdigo-fonte: ASSEMBLY e LINGUAGEM C. O cdigo Assembly, que utilizamos neste curso, usa mnemnicos para trabalhar cada operao (instruo). As instrues atuam nos bits e bytes dos registradores internos do PIC.

J a linguagem C, tem prontos comandos que realizam, muitas vezes, mais de uma instruo assembly. A vantagem de usar Assembly que a arquitetura interna do microcontrolador estudado fica muito clara, alm do desenvolvimento de programas menores e mais rpidos. A linguagem C traz a vantagem da rapidez no desenvolvimento dos programas.

A Figura 4 mostra a prxima janela do Project Wizard. Nesta etapa, selecionamos o compilador que iremos trabalhar e verificamos o local onde o mesmo est gravado. Para trabalharmos com a programao Assembly, selecionaremos a opo MPASM, como mostra a figura. Em Active ToolSuite esto as outras opes de compiladores.

Figura 4 Escolha do compilador.

CRIAO DO PROJETO - TERCEIRO PASSO

Nessa etapa, definiremos o nome do projeto e o local de gravao dos arquivos do mesmo. O projeto e o codigo-fonte tm que ser salvos na mesma pasta. A Figura 5 mostra a janela que controla esta etapa. CRIAO DO PROJETO - QUARTO PASSO Agora transferiremos o cdigo-fonte Assembly (ASM) para o projeto como mostrado na Figura 6. O arquivo que vamos trabalhar o SEQLEDS.ASM.

Figura 5- Nome e local do proejto.

Figura 6 Cdigo-fonte do projeto.

Na ltima janela, temos um resumo do projeto como mostra a Figura 7.

Figura 7- Concluso da montagem do projeto.

Compilando o Projeto

Compilar transformar o cdigo-fonte em linguagem de mquina para o microcontrolador poder executar. A ferramenta Assembler que realiza essa tarefa, mas continuaremos a utilizar a palavras compilao e copilar para nos referir a isso. Para compilarmos o cdigo-fonte SEQLEDS.ASM, presente no projeto LED.MCP, basta irmos ao menu principal, selecionarmos a opo Project e depois Build All. Podemos tambm pressionarmos simultaneamente as teclas e . Com uma dessas aes, aparece na janela de mensagens do MPLAB informaes sobra a compilao executada. Se algum erro foi detectado aparecer mensagem de erro. Clicando em cima da mensagem o MPLAB leva ao erro no cdifo-fonte. Se nenhum erro foi detectado pelo compilador aparecer a mensagem:

BUILD SUCCEEDED

A Figura 8 mostra as janelas e mensagens do processo de compilao.

Figura 8 Processo de compilao.

Executando o programa passo-a-passo

Para podermos executar o programa passo-a-passo para eliminarmos os erros de lgica que por ventura possam existir teremos que sair do modo de compilao para o modo SIMULAO. Para isso vamos clicar na opo Debugger (menu principal), depois Select Tools e 3-MPLAB SIM. A Figura 9 mostra estes passos em detalhes. Quando o modo de simulao estiver escolhido vrias ferramentas novas aparecem na opo Debugger. Uma dessa opes Step InTo (execuo passo-a-passo). A tecla tambm realiza essa tarefa. A Figura 10 mostra a como realizada a execuo passo-a-passo.

Figura 9 Seleo do modo Simulao.

Figura 10 Execuo passo-a-passo.

Acompanhando o valor registradores

Podemos acompanhar o valor dos registradores que fazem parte da arquitetura interna do PIC de duas formas: 1) Janela com todos os registradores: esta opo pode ser verificada na Figura 11. 2) Janela com registradores escolhidos pelo usurio: esta opo pode ser verificada na Figura 12. A tecla ADD SFR faz a adio de registradores janela de observao.

Figura 11 Registradores de Funes Especiais.

Figura 12 Janela de observao de registradores.

Alterando valor de bit de entrada

Como sabemos os pinos que compem as portas de entrada/sada dos microcontroladores PIC podem ser configurados como entrada ou sada. Quando

config