You are on page 1of 17

Joo M P Cardoso Universidade do Algarve Faculdade de Cincias e Tecnologia Campus de Gambelas 8000-117 - Faro - Portugal E-mail: jmcardo@ualg.pt V0.

1: 1996 V0.2: Outubro de 2003

1. Microcontrolador PIC
Este captulo descreve a arquitectura dos microcontroladores da famlia PIC. Estes microcontroladores so bastante versteis e esto presentes numa grande gama de sistemas embebidos de pequena dimenso. dada nfase gama PIC16C5X [1]. Ao longo do captulo so explicadas a arquitectura interna, o conjunto de instrues, e as operaes mais relevantes destes microcontroladores.

1.1 Introduo
Os microcontroladores tm um conjunto de instrues especfico, incorporam uma soluo num nico circuito integrado, tm facilidades de manipulao de bits, de portos de E/S, etc. A maioria dos microcontroladores so do tipo CISC1, que tem a propriedade de possuir um conjunto alargado de instrues. No entanto, graas ao reduzido conjunto de instrues, elevados desempenhos, menor complexidade do integrado, menor rea de silcio, e menor potncia dissipada, a arquitectura RISC2 tem tendncia a ser utilizada no projecto de microcontroladores. Os PIC so um exemplo de microcontroladores com uma arquitectura prxima dos RISC. Os microcontroladores PIC cobrem um hiato entre a lgica discreta e os restantes Micros mais poderosos (ex. 68xx ou 80xx). Pela arquitectura simples, pela existncia de elementos da famlia com poucos pinos (reduzidas dimenses), pelo desempenho, pelo reduzido conjunto de instrues (facilmente memorizvel), e pelo preo reduzido, este tipo de microcontrolador de 8 bits excelente soluo para aplicaes embebidas de pequeno/mdio porte ou para substituio de um conjunto de lgica discreta. Ultimamente tm surgido inmeras aplicaes para os microcontroladores PIC que ilustram a popularidade e o interesse dos projectistas por este tipo de soluo. Este facto deve-se ptima relao preo/desempenho e existncia de vrias ferramentas de baixo custo disponveis para o

Do Ingls: Complex Instruction-Set Computer. Em portugus computador com conjunto complexo de instrues. Do Ingls: Reduced Instruction-Set Computer. Em portugus computador com conjunto reduzido de instrues.

1. MICROCONTROLADOR PIC

desenvolvimento de aplicaes. Como exemplo de utilizao acadmica salienta-se o estudo deste microcontrolador nas disciplinas relacionadas com arquitectura de microprocessadores do Instituto Superior Tcnico. A famlia PIC divide-se em trs gamas de microcontroladores: PIC17, PIC18, PIC16, e PIC12. As gamas existentes oferecem diversas opes: o tamanho da memria de programa e comprimento de instruo; o nmero de registos do ficheiro de registos; o nmero de portos de entrada/sada (E/S); o encapsulamento; a existncia de linhas de interrupo, a existncia de memria Flash, etc.

1.2 Arquitectura
A famlia de microcontroladores PIC tem como caractersticas gerais: Arquitectura baseada nos RISC. Reduzido conjunto de instrues ortogonal, no havendo discriminao no acesso a um registo genrico do ficheiro de registos. Arquitectura Harvard (barramento de dados independente do barramento de instrues), que possibilita o pipeline entre a procura3 e a execuo da instruo. Todas as instrues de igual tamanho, com tempo de execuo igual (1 ciclo) excepo de instrues de salto incondicional, instrues que afectam o PC4, chamadas a sub-rotinas, ou instrues de salto condicional quando a condio verdadeira (2 ciclos). Ficheiro de registos constitudo por 32 ou mais registos de 8 bits. Memria de programa interna (Flash, EPROM ou ROM). Temporizador do "co de guarda" e contador/relgio de tempo-real internos. Modo de endereamento directo, indirecto e relativo. Pinos de E/S oriundos de registos especficos do ficheiro de registos controlados bit a bit ou inteiramente. Instruo que coloca o microcontrolador em modo de adormecimento e que desactiva parte do integrado (economia no consumo de potncia). O elemento mais simples da gama de microcontroladores PIC16C5X, designado por PIC16C54 e arquitectura apresentada na Figura 1-1, possui 33 instrues (12 bits de comprimento), 512 palavras de 12 bits como limite mximo de memria de programa, pilha5 com 2 nveis, 32 registos de 8 bits, frequncia de relgio permitida de DC a 40 MHz, 12 linhas de E/S (8 bits para o porto B e 4 bits para

3 4 5

Em Ingls designada por fetch. Do Ingls Program Counter. Em Portugus contador de programa. Em Ingls stack.

1. MICROCONTROLADOR PIC

o porto A), 1 temporizador de co de guarda (WDT6), 1 contador/relgio de tempo-real, e 18 pinos de encapsulamento.


Program Counter (F2) Memria de Programa 0.5K x 12 bits Stack de 2 Nveis (9 bits) 12 bits Registo de Instruo 12 bits 5 bits Ficheiro de Registos (26 registos de 8 bits)

8 bits

MUX 5 bits FSR (F4)

TMR0 (F1) Status (F3) 8 bits Porto B (F6) MUX Descodificao da Instruo e Controlo MCLR ALU OST (Oscillator Start-up Timer) Reset de ligao do micro VDD, VSS Contador de Co de Guarda & Temporizador W Porto A (F5)

RTCC

TRISA OPTION 4 bits TRISB

OSC1 OSC2/CLKOUT Gerao de Relgio

8 bits

Figura 1-1. Diagrama de Blocos da arquitectura interna do PIC16C54.

1.2.1 Instrues
Nas tabelas seguintes (referentes aos diversos formatos de instrues) apresentam-se: o cdigo para cada instruo, a mnemnica utilizada pelos assembladores da Microchip, a operao realizada, as flags afectadas por cada uma das instrues, e a descrio textual. A Figura 1-2 ilustra o formato das instrues que operam sobre o byte de um registo do ficheiro de registos, e a Tabela 1.1 descreve as instrues com este formato.

Do Ingls WatchDog Timer.

1. MICROCONTROLADOR PIC
11 opcode 6 5 d 4 f (FILE #) 0 d = 0, destino em W d = 1, destino em f

Figura 1-2. Formato de cada instruo sobre o ficheiro de registos orientada ao byte. opcode (Bin) Mnemnica Operao Registo de Status C, DC, Z Z Z Z Z Z Z Z Z C Descrio

0001 11df ffff 0001 01df ffff 0000 011f ffff 0000 0100 0000 0010 01df ffff 0000 11df ffff 0010 11df ffff 0001 00df ffff 0010 10df ffff 0011 11df ffff 0010 00df ffff 0000 001f ffff 0000 0000 0000 0011 01df ffff

ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ IORWF INCF INCFSZ MOVF MOVWF NOP RLF

f,d f, d F f, d f, d f, d f, d f, d f, d f, d F f, d

W + f d|f W & f d|f 0f 0W ~f d|f f - 1 d|f f - 1 d|f W || f d|f f + 1 d|f f + 1 d|f f d|f Wf f(n) [d|f](n+1), C [d|f](0), f(7) C f(n) [d|f](n-1), C [d|f](7), f(0) C W f d|f f - W d|f f(0-3) f(4-7) d|f

Soma o contedo de W com o registo f (um registo do ficheiro de registos). "AND" de W com o registo f. Coloca a zero o registo f. Coloca a zero o registo W. Complementa o registo f. Decrementa o registo f. Decrementa o registo f. Se o resultado for zero salta a prxima instruo. OR do registo W com o registo f. Incrementa o registo f. Incrementa o registo f. Se o resultado for zero salta a prxima instruo. O contedo do registo f movido. Move o contedo de W para o registo f. Nenhuma operao. Rotao de um bit para a esquerda do contedo do registo f. O bit de transporte envolvido na rotao.

0011 00df ffff

RRF

f, d

Rotao de um bit para a direita do contedo do registo f. O bit de transporte envolvido na rotao.

0001 10df ffff 0000 10df ffff 0011 10df ffff

XORWF SUBWF SWAPF

f, d f, d f, d

Z C, DC, Z -

XOR de W com o registo f. Subtrai W ao registo f em complemento para dois. Troca no registo f os 4 bms com os 4 bMs.

Tabela 1.1. Instrues sobre o ficheiro de registos orientadas ao byte. A Figura 1-3 ilustra o formato das instrues que operam sobre o imediato representado pelos 8 bits menos significativos das instrues deste tipo. A Tabela 1.2 descreve as instrues com este formato.
11 opcode 8 7 k (LITERAL) 0

Figura 1-3. Formato de instrues com imediatos e deinstrues de controlo.

1. MICROCONTROLADOR PIC
opcode (Bin) Mnemnica Operao Registo de Status Z Descrio

1110 kkkk kkkk 1001 kkkk kkkk

ANDLW CALL

k k

k&WW PC + 1 Pilha (PC + 1 Topo da pilha), k PC<7:0>, '0' PC<8> 00h WDT, 0 WDT k PC<8:0> k || W W kW k OPTION k W, Pilha PC (TOS PC) 0 PD, 1 TO; 00h WDT, 0 WDT W TRIS do porto f kWW

AND de W com o imediato de 8 bits, k. O resultado colocado no registo W. Chamada a uma sub-rotina. Primeiro, o endereo de retorno (PC+1) colocado na Pilha. O valor de 8 bits, k, carregado no PC<7:0>. O bit 8 do PC colocado a zero.

0000 0000 0100

CLRWDT

TO, PD

Reset do WDT e tambm reset do prescalar do WDT se estiver atribudo. Os bits de status, TO e PD, so colocados a um.

101k kkkk kkkk 1101 kkkk kkkk 1100 kkkk kkkk 0000 0000 0010 1000 kkkk kkkk

GOTO IORLW MOVLW OPTION RETLW

k k k k

Z -

Coloca no PC o contedo de k. OR de W com os 8 bits do imediato k. O resultado colocado no registo W. Os 8 bits do imediato k so colocados no registo W. Os 6 bms do registo W so carregados no registo OPTION. O registo W carregado com os 8 bits do imediato k. O PC carregado do topo da Pilha (o endereo de retorno). Esta instruo demora 2 ciclos.

0000 0000 0011

SLEEP

TO, PD

O bit de status PD (power down) colocado a zero. O bit de status TO (time-out) colocado a um. O WDT e o pr-escalar se lhe estiver atribudo so colocados a zero. Desliga os relgios internos (modo de adormecimento).

0000 0000 0fff 1111 kkkk kkkk

TRIS XORLW

f k

O registo TRIS de f (f = 5, 6, ou 7) carregado com o contedo do registo W. XOR de W com os 8 bits do imediato k. O resultado colocado no registo W.

Tabela 1.2. Instrues com imediatos e de instrues de controlo. A Figura 1-4 ilustra o formato das instrues que operam sobre um dos bits de um registo do ficheiro de registos. A Tabela 3.3 descreve as instrues com este formato.
11 8 opcode 7 5 4 f (FILE #) 0

b (BIT #)

Figura 1-4. Formato de cada instruo sobre o ficheiro de registos orientada ao bit.

1. MICROCONTROLADOR PIC
opcode (Bin) Mnemnica Operao Registo de Status Descrio

0100 bbbf ffff 0101 bbbf ffff 0110 bbbf ffff

BCF BSF BTFSC

f, b f, b f, b

0111 bbbf ffff

BTFSS

f, b

0 f(b) 1 f(b) Testa bit ficheiro f: se zero. Testa bit ficheiro f: se um.

O bit b do registo f colocado a zero. O bit b do registo f colocado a um. Se o bit b do registo f igual a zero, ento salta a prxima instruo.

b do Salta b do Salta

Se o bit b do registo f igual a um, ento salta a prxima instruo.

Tabela 1.3. Instrues sobre o ficheiro de registos orientadas ao bit.

1.3 Caractersticas do Ficheiro de Registos


O ficheiro de registos do PIC16C54 constitudo por registos especiais e por registos de propsito geral (f7 a f31), como se pode observar pela Figura 1-5. O dispositivo PIC16C55 contm mais um porto de E/S (porto C) no endereo 7 do ficheiro de registos. O dispositivo PIC16C56 tem mais um bit no PC que lhe permite enderear 1024 instrues de programa [1]. Qualquer das instrues que endeream um registo do ficheiro no tem esse endereamento restrito a apenas uma gama de registos. Na famlia de PICs existem dispositivos com mais do que os 32 registos de 8 bits descritos anteriormente, como o exemplo do PIC16C57. O esquema de endereamento de registos, que ultrapassam a gama de indexao possvel pelos 5 bits, baseado no mapeamento de memria ilustrado na Figura 1-6. Cada banco extra constitudo por 16 registos e mapeado pelos bits 5 e 6 do registo FSR. O primeiro banco contm os registos f16:31, o segundo f32:47, o terceiro f48:63, e o quarto f64:79. Este elemento da famlia PIC tem, como se pode ver pela Figura 3.6, mais 2 bits no registo PC que lhe permitem enderear 2048 instrues de programa.

1. MICROCONTROLADOR PIC
8 7 0

f0 f1 f2 f3 f4 f5 f6 f7

INDF TMR0 PC STATUS FSR PORTO A PORTO B

REGISTOS DE PROPSITO GERAL

f31

Figura 1-5. Ficheiro de registos: INDF endereamento de dados indirecto.


10 7 0

f0 f1 f2 f3 f4 f5 f6 f7 f8

INDF RTCC PC STATUS bits 5, 6 FSR PORTO A PORTO B PORTO C f16 00 01 10 11

REGISTOS DE PROPSITO GERAL f15

f32

Figura 1-6. Mapeamento de registos.

1.3.1 Registo f0 (INDF: endereamento de dados indirecto)


Este registo no existe fisicamente. Uma instruo que utilize este registo indica que o registo endereado o indicado pelos 5 bms do registo f4 (FSR7). Caso o endereo do registo a utilizar seja o

Do Ingls File Select Register.

1. MICROCONTROLADOR PIC

prprio f0, na leitura lido zero e a escrita corresponde execuo de um NOP (no efectuada qualquer operao).

1.3.2 Registo f1 (TMR0: contador/relgio de tempo-real)


Este registo, designado por TMR0, pode ser lido ou escrito como qualquer registo genrico. Pode tambm ser incrementado por um sinal externo conectado ao pino TMR0, ou pelo relgio interno, CLKOUT. O diagrama de blocos da Figura 1-7 descreve o funcionamento da atribuio do pr-escalar, mediante a programao por software do registo OPTION. Ao contador/relgio em tempo-real pode ser atribudo, pelo bit PSA, um pr-escalar de 8 bits, definido pelos bits PS2-0 do registo OPTION. Se o pr-escalar for atribudo, as instrues que escrevem no registo f1 (CLRF 1, BSF 1, 5, etc) colocam a zero o pr-escalar. O bit RTS do registo OPTION determina se f1 incrementado por um sinal interno ou externamente. No caso de escolha do sinal externo para incremento, possvel seleccionar, atravs do bit RTE do registo OPTION, o flanco de sinal que despoleta o incremento. O registo f1 incrementado at atingir o valor 0xFF e reinicia novamente em 0x00.
CLKOUT 0 PINO T0CKI 1 1 0 TOSE TOCS PSA PSA Sincronizao com o relgio interno BARRAMENTO DE DADOS

TMR0 f(1)

0 W ATCH DOG TIMER CONTADOR 8 bits 1 0 8:1 1 WDT TIMEOUT

W DT ENABLE EPROM FUSE

PSA

PS2-PS0

Figura 1-7. Diagrama de blocos do circuito que faz a atribuio do pr-escalar ao Timer0/WDT.

1.3.3 Registo f2 (PC: Program Counter)


Este registo permite aceder at 512 instrues (9 bits disponveis no PIC 16C54) do cdigo do programa armazenado na memria de programa. Durante a fase de execuo de programa o PC incrementado de uma unidade por cada instruo a no ser que o resultado da instruo modifique o prprio PC, ou em presena de instrues de salto:

1. MICROCONTROLADOR PIC

1. A instruo GOTO modifica os 9 bits do PC, com os 9 bits do endereo especificado pela instruo. 2. A instruo CALL coloca a zero o nono bit do PC e carrega directamente os restantes com o endereo especificado pela instruo. colocado na pilha o valor de PC+1. 3. A instruo RETLW carrega o PC com o valor de topo da pilha. 4. Quando a instruo enderea o PC como registo destino (ex. MOVWF 2) os 8 bits so carregados com o contedo do registo W, o nono bit colocado a zero, e executado um NOP no ciclo de instruo imediatamente a seguir.

1.3.4 Registo de estado f3 (STATUS)


Este registo, representa o registo de estado (SR8), e contm as flags de controlo da execuo de determinadas operaes. Os bits TO e PD so apenas de leitura e servem para detectar se o microcontrolador foi ligado, acordou do modo SLEEP pelo timeout do WDT, acordou pela aplicao do reset externo (sinal lgico zero no pino MCLR ), ou ocorreu o timeout do WDT. A instruo CLRF 3, coloca a zero todos os bits deste registo, com excepo dos dois anteriores e do bit Z que neste caso colocado a '1'. Recomenda-se, caso se pretenda colocar a zero este registo, a utilizao de instrues cujo resultado no afecte o registo de status (BCF, BSF e MOVWF). bit C Descrio da funcionalidade CARRY/BORROW BIT Activo se houve transporte no bMs (bit mais significativo) do resultado da operao. Usado pelas instrues ADDWF, SUBWF, RRF e RLF. DIGIT CARRY/BORROW BIT Activo se houve transporte dos 4 bms do resultado da operao. Usado pelas instrues ADDWF e SUBWF. ZERO BIT Activo se o resultado de uma operao aritmtica ou lgica zero, se o contedo do registo transferido zero, ou quando executada a instruo CLRF 3. POWER DOWN BIT activado, durante a ligao (power up) ou pela instruo CLRWDT. desactivado pela operao SLEEP. TIME-OUT BIT activado, durante a ligao (power up) ou pelas instrues SLEEP e CLRWDT. desactivado pelo tempo final do WDT. Bit de leitura/escrita para uso geral. (PIC16C54/55) Bit de leitura/escrita para uso geral. (PIC16C54/55) Bit de leitura/escrita para uso geral (reservado para uso futuro) Tabela 1.4. Descrio de cada flag do registo de estado.

DC

PD

TO

5 6 7

PA0 PA1 PA2

Do Ingls Status Register.

1. MICROCONTROLADOR PIC 1.3.5 Registo de seleco indirecta f4 (FSR: File Select Register)

10

Este registo permite o endereamento indirecto de um registo. Os 5 bms seleccionam um dos 32 registos do ficheiro de registos no modo de endereamento indirecto (endereando o registo f0 em qualquer instruo que manipule registos). Os 3 bMs tm o valor lgico 1. Caso no seja usado o modo de endereamento indirecto este registo pode ser usado como um registo de propsito geral com 5 bits.

1.3.6 Registos de E/S


O registo f5, denominado de PORTO A tem apenas 4 bits que acedem a 4 pinos de E/S. Apenas so usados os 4 bms (RA0 - RA3). Os 4 bMs so lidos como zero. O registo f6, denominado de PORTO B, tem 8 bits que acedem a 8 pinos de E/S. Uma instruo de leitura l sempre o valor lgico do pino, quer este esteja programado como sada ou como entrada.

1.4 Registos especficos 1.4.1 Registos TRISA e TRISB


Estes registos configuram o estado dos pinos de E/S. Caso algum dos bits de TRISA ou TRISB esteja no valor lgico 1, implica que o bit correspondente no pino est em alta impedncia (s para leitura). Assim, cada pino configurado pelo bit correspondente do registo TRIS. Estes registos so carregados com o contedo do registo W, pela instruo TRIS. Na inicializao do micro estes registos so colocados a 1 para que os portos de E/S estejam em alta impedncia.

1.4.2 Registo OPTION


O registo OPTION constitudo pelos bits apresentados na Tabela 1.5. Este registo utilizado para configurar o pr-escalar do temporizador do WDT ou o contador/relgio em tempo-real. O contedo deste registo programado por software com o uso da instruo OPTION, que carrega os 6 bits de OPTION com o contedo dos 6 bms do registo W. Em caso de condio de RESET os bits so colocados a '1'.

10

1. MICROCONTROLADOR PIC
bit PS0 PS1 PS2 PSA Descrio da funcionalidade

11

0 1 2 3

{PS2, PS1, PS0} valor do pr-escalar. bit de atribuio do pr-escalar (atribuio mutualmente exclusiva):
(1) '0' (2) '1' Timer0 WDT incrementa na transio ascendente do pino T0CKI. incrementa na transio descendente do pino T0CKI. relgio interno de instruo (CLKOUT) sinal no pino T0CKI

TOSE

indica o flanco de sinal utilizado para o incremento do Timer0:


(1) '0' (2) '1'

TOCS

indica a origem do sinal de incremento:


(1) '0' (2) '1'

Tabela 1.5. Descrio de cada bit do registo OPTION. Os estados possveis do pr-escalar, formado pelos bits {PS2, PS1, PS0}, e o perodo do ciclo de relgio, em relao ao ciclo de instruo esto representados na Tabela 1.6. 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 Timer0 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256 WDT 1:1 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128

Tabela 1.6. Pr-escalares possveis para o temporizador do co de guarda e para o contador/relgio em tempo-real.

1.4.3 Registo W
Registo utilizado pelas instrues como segundo operando ou de suporte de transferncias internas de dados e equivalente ao acumulador de algumas arquitecturas. Todas as intrues lgicas, aritmticas e de movimento de dados usam este registo. As instrues que acabam em WF, usam, como um dos operandos de entrada o valor de W, e colocam o resultado em W ou no registo que identificou o segundo operando de entrada (Exemplo 1.1). ADDWF 6, W ADDWF 6 ; W = W + F6 ; F6 = W + F6

Exemplo 1.1. Utilizao de W como segundo operando.

1.5 Caractersticas gerais


Nesta seco complementa-se a descrio do microcontrolador com a explicao de alguns tpicos que necessitam de clarificao.

11

1. MICROCONTROLADOR PIC 1.5.1 Memria de Programa

12

A Figura 1-8 ilustra a memria de programa para o PIC16C54. Na figura tambm apresentada a ligao do registo de PC e da pilha. Com um registo PC de 9 bits possvel enderear um espao de endereamento de 512 x 12 bits (000h at 1FFh). Uma instruo de NOP no vector de RESET (posio 1FFh) causa o recomeo da execuo do microcontrolador a partir da posio 000h.

Figura 1-8. Memria de programa, ligao com o registo PC e com os 2 nveis da pilha.

1.5.2 Ciclos por Instruo


Os passos de execuo de uma instruo genrica, representados na Figura 1.9, so: procura da instruo (FETCH) e execuo da instruo (EXECUTE). As instrues de salto necessitam de 4 ciclos de relgio e todas as outras instrues necessitam de dois ciclos de relgio.
OSC1 OSC2/CLKOUT

Instruo 1 Instruo 2

FETCH1

EXECUTE1 FETCH2 EXECUTE2

Figura 1.9. Diagrama temporal da execuo de uma instruo. A procura da prxima instruo realizada em paralelo com a descodificao e execuo da instruo actual. Devido ao pipelining dos dois estgios (busca e execuo) pode-se dizer que cada instruo executa num nico ciclo de relgio (sinal CLKOUT no pino OSC2) que equivale a 4 ciclos do relgio externo (pino OSC1) excepo das instrues de salto e instrues que mudem o valor do PC. Estas ltimas demoram 8 ciclos de OSC1 (2 ciclos de CLKOUT).

1.5.3 Imediatos
O microcontrolador possui instrues equivalentes s instrues com endereamentos de valores imediatos da maioria dos processadores. Estas instrues, que envolvem imediatos, com mnemnica

12

1. MICROCONTROLADOR PIC

13

acabada em LW, permitem a manipulao de constantes codificadas nos 8 bms da prpria instruo.

1.5.4 Reset externo


O pino MCLR quando colocado a zero coloca o microcontrolador em reset externo, que corresponde colocao em f2 (PC) do vector de reset (0x1FF no PIC16C54), colocao de 0xFF no registo OPTION, registos TRIS (A e B) a 0xFF (no caso de A, como s inclui os 4 bits menos significativos, colocado 0x0F), o temporizador do WDT e o pr-escalar a zero, e os 3 bMs de f3 a zero.

1.5.5 Reset interno


O reset interno, no faz a inicializao descrita para o reset externo, e ocorre quando acontece uma das situaes apresentadas na Tabela 1.7. TO 0 0 1 1 X PD 0 1 0 1 X RESET causado por: WDT timeout durante o SLEEP WDT timeout (sem ser durante o SLEEP) RESET externo (pino MCLR) durante o SLEEP Ligao do microcontrolador RESET externo (pino MCLR)

Tabela 1.7. Estados dos bits TO e PD aps reset.

1.5.6 Chamadas a rotinas


Quando executada uma instruo CALL, o topo da pilha carregado com o valor de PC+1, e ao PC dado o valor do endereo da primeira instruo da rotina chamada. O retorno da rotina feito pela instruo RETLW, que devolve ao PC os 9 bits (PIC15C54) guardados no topo da pilha. O corpo da rotina tem que estar no bloco de memria constitudo pelas primeiras 256 instrues (acedidas pelos 8 bMs da instruo CALL). A chamada de uma segunda rotina durante a execuo da primeira (rotinas encadeadas), provoca a passagem do topo da pilha para baixo, e mais tarde, quando do retorno desta segunda rotina, novamente para o topo. So apenas permitidos dois nveis de encadeamento de rotinas, embora haja a possibilidade de contornar este problema com o uso da instruo GOTO. Ao fazer uma terceira chamada, o topo da pilha substitudo pelo PC+1 e o retorno da segunda chamada passa para o nvel inferior da pilha. Nesta situao os retornos da 2 e 3 so correctos mas perdido o retorno da 1. A famlia de PICs inclu a gama 16Cxx [1] que contm uma pilha de 8 nveis que funciona em modo circular. A pilha no pode ser acedida por mais nenhuma instruo e no existe qualquer instruo que permita examinar o contedo.

13

1. MICROCONTROLADOR PIC 1.5.7 Tabelas de constantes

14

As tabelas de constantes (lookup tables) so implementadas atravs da modificao do PC pelo software (ver Exemplo 1.2). No existe outra forma de aceder a uma posio especfica da memria do programa. tabela andlw addwf retlw retlw retlw retlw 0x03 PC 0x01 0x02 0x03 0x04 ; Limita a tabela a 4 valores

Exemplo 1.2. Uso da instruo RETLW para a implementao de tabelas de valores: Neste exemplo retornado para o registo W o valor indexado pelos trs bms deste registo. A indexao de valores deve ser feita convenientemente, pois uma indexao fora dos limites das instrues RETLW provoca a execuo de instrues arbitrrias.

1.5.8 Co de guarda (WDT)


um contador especial, que se pode programar para reiniciar uma aplicao quando esta descarrila ou para acordar o microcontrolador de um adormecimento. O WDT executa com um perodo tpico de 18ms e independente do relgio externo. Mesmo que o microcontrolador esteja no modo SLEEP o temporizador est activo, e quando atinge o timeout produz o reset interno do integrado. O perodo de timeout pode ser programado pela atribuio do pr-escalar ao WDT colocando PSA a 1 no registo OPTION. No mximo possvel obter timeouts de aproximadamente 2,3s (18ms x 128). As instrues SLEEP e CLRWDT colocam a zero o WDT e o pr-escalar, se estiver atribudo ao WDT, no permitindo o timeout e consequente reset do integrado. O timeout do WDT coloca a zero a flag TO do registo de estado. O WDT pode ser desactivado programando o fusvel de configurao a 0.

1.5.9 O modo SLEEP


No modo de adormecimento, provocado pela instruo SLEEP, o relgio do microcontrolador desligado de parte do integrado, mantendo o temporizador do WDT e o contador/relgio em temporeal a funcionar. A flag TO colocada a um, PD colocada a zero, e feito o reset do WDT. O integrado acorda deste estado ou pelo RESET externo (pino MCLR a zero) ou pelo timeout do WDT se estiver activado o fusvel de configurao. Ao acordar, o microcontrolador executa a instruo contida no vector de reset (0x1FF). Os microcontroladores 16C84 e 16C71 [1], quando acordam do modo SLEEP executam a instruo imediatamente a seguir (em PC+1). Os pinos de E/S mantm o estado anterior execuo da instruo SLEEP.

14

1. MICROCONTROLADOR PIC 1.6 Suporte Software

15

Para esta famlia de microcontroladores existe um vasto suporte de software para PC, desde assembladores cruzados9, simuladores, compiladores de C, etc. Da Microchip existe um pacote para DOS constitudo pelo MPALC [4] (assemblador) e MPSIM [5] (simulador). O MPALC gera o cdigo objecto no formato INHX8M (Merged 8-bit Intellec Hex Format). Alm do conjunto de instrues intrnsecas, o assemblador permite a utilizao de 27 mnemnicas extra [4] (pseudo-operaes) constitudas por uma ou mais instrues intrnsecas e que por vezes permitem maior clarividncia de programao. Para o programador aceder-lhes s necessita de colocar no ficheiro de programa a directiva: include Pseudoin.mac. O MPSIM simula por discretizao de eventos. A simulao pode ser feita passo-a-passo, ou estabelecendo pontos de paragem, que facilitam a depurao (debug) do cdigo. Aps a execuo de cada instruo pode ser visualizado o contedo dos registos internos do microcontrolador nesse instante. O simulador permite a edio de um ficheiro de estmulos (vectores de teste a aplicar aos pinos do microcontrolador). Uma nova verso das ferramentas para Windows tambm disponibilizada gratuitamente [6][7]. A Parallax tambm apresenta vrios produtos entre os quais um assemblador cruzado (PASM) e um simulador (PSIM) ilustrado na Figura 1-10. Estas ferramentas suportam as mnemnicas da Microchip ou pseudo-instrues. Esta redefinio da sintaxe de cada instruo permite instrues ou macro-instrues que, respectivamente, correspondem a mltiplas instrues ou a algumas instrues da Microchip, tornando menor o conjunto de instrues (ex. a Parallax empacota 10 instrues em uma instruo genrica MOV).

Em Ingls: cross-assemblers.

15

1. MICROCONTROLADOR PIC

16

Figura 1-10. Simulador PSIM da Parallax . Existem vrios compiladores de C para a famlia PIC. Estes permitem o desenvolvimento de software mais rapidamente, por se tratar de uma linguagem de alto nvel. Ao C so adicionadas construes que permitem o acesso s portas de entrada/sada, manipulao de dados do tipo bit, configurao dos temporizadores, etc., cruciais na maioria das aplicaes.

1.7 Sumrio
Conforme descrito neste captulo, os microcontroladores PIC so um exemplo de um microprocessador com diversas caractersticas para fazer face a uma gama variada de sistemas embebidos de pequena dimenso, o cdigo extremamente compacto, as aplicaes so inmeras, e nos ltimos anos tm tido taxas de popularidade elevadas, a que no so alheios os vrios artigos de aplicaes com este integrado em muitas revistas da especialidade.

1.8 Referncias [1] [2] [3] Microchip Data Book, Microchip Technology Inc., 2003. Embedded Control Handbook, Microchip Technology Inc., 2003. Tom A. Kellett, "Microcontroler FAQ/PIC: A collection of Information on the PIC Micro", 1995, newsgroups: sci.electronics. [4] MPCALC Assembler users guide, Microchip Technology Inc., 120 pp., 1994. 16

1. MICROCONTROLADOR PIC [5] [6] MPSIM users guide, Microchip Technology Inc., 120 pp., 1993.

17

MPASM Users Guide with MPLINK and MPLIB, Microchip Technology Inc., 1999.

[7]

MPLAB

IDE

v6.30,

http://www.microchip.com/1010/pline/tools/picmicro/devenv/mplabi/mplab6/ind ex.htm

17

You might also like