Escolar Documentos
Profissional Documentos
Cultura Documentos
Microchip PIC
ndice
(1) Histria dos Microcontroladores............................................................................. 8
1.1. Histria dos Microcontroladores........................................................................ 9
1.2. Arquitectura de um microcontrolador.............................................................. 13
1.3. Caractersticas dos microcontroladores PIC .................................................... 15
1.3.1. Famlias dos microcontroladores PIC....................................................... 15
1.3.2. Core de 12 bits .......................................................................................... 15
1.3.3. Core de 14 bits .......................................................................................... 16
1.3.4. Core de 16 bits .......................................................................................... 17
1.3.5. Core de 16 bits avanado.......................................................................... 17
1.3.6. Tipos de Memria de programa................................................................ 18
1.3.6.1. OTP .................................................................................................... 18
1.3.6.2. EPROM.............................................................................................. 19
1.3.6.3. FLASH............................................................................................... 19
1.3.7. Vantagens do PIC16F628A sobre o PIC16F84 ........................................ 19
1.3.7.1. Pinos multiuso.................................................................................... 20
1.3.7.2. Bancos de memria............................................................................ 20
1.3.7.3. Vantagens do PIC16F628A ............................................................... 20
(2) Comear com os PICs.......................................................................................... 22
2.1. A arquitectura PICMicro.................................................................................. 23
2.2. Perifricos ........................................................................................................ 25
(3) Famlia 16F6xxA................................................................................................... 26
3.1. A arquitectura interna ...................................................................................... 27
3.2. Organizao da memria ................................................................................. 27
3.2.1. Memria de programa............................................................................... 27
3.2.2. Memria de dados..................................................................................... 29
3.2.2.1. Memria de uso geral RAM ........................................................... 32
3.2.2.2. Registos com funes especiais ......................................................... 32
3.2.2.2.1. Registo STATUS ........................................................................ 35
3.2.2.2.2. Registo OPTION......................................................................... 37
3.2.2.2.3. Registo INTCON ........................................................................ 38
-1-
-4-
ndice de figuras
Fig. 1 - Transstor antigo................................................................................................9
Fig. 2 Vista interna do Intel 4004 ...............................................................................9
Fig. 3 Diagrama de acesso s memrias ...................................................................10
Fig. 4 Microcontrolador PIC 16F84A.......................................................................10
Fig. 5 Arquitectura do PIC 16F628A........................................................................11
Fig. 6 Encapsulamento do PIC da famlia 16F62x ...................................................12
Fig. 7 Arquitectura de um computador .....................................................................13
Fig. 8 Arquitectura Von Neumann............................................................................13
Fig. 9 Arquitectura Harvard......................................................................................14
Fig. 10 Microcontrolador da famlia 12Fxxx com core de 12 bits ...........................16
Fig. 11 Microcontrolador da famlia 16F6xxA com core de 14 bits ........................16
Fig. 12 Microcontrolador da famlia 17C4xA com core de 16 bits..........................17
Fig. 13 Microcontrolador da famlia 18Fxx2 com core de 16 bits melhorado .........18
Fig. 14 Registos ........................................................................................................23
Fig. 15 - Opcode ..........................................................................................................24
Fig. 16 Exemplo de Pipelining .................................................................................24
Fig. 17 Oscilador.......................................................................................................24
Fig. 18 - Mapa da memria de Programa e da Stack ...................................................28
Fig. 19 - Distribuio da RAM pelos Bancos de memoria ..........................................29
Fig. 20 - Acesso aos Bancos de Memria....................................................................29
Fig. 21 Mapa de memria de dados do PIC16F628A...............................................30
Fig. 22 - Mapa da memria de Dados do PIC16F648A ..............................................31
Fig. 23 - Registos de Funo Especial, Banco 0..........................................................32
Fig. 24 - Registos de Funo Especial, Banco 1..........................................................33
Fig. 25 - Registos de Funo Especial, Banco 2..........................................................34
Fig. 26 - Registos de Funo Especial, Banco 3..........................................................35
Fig. 27 Registo STATUS (endereo: 03h, 83h, 103h, 183h)....................................36
Fig. 28 - Registo OPTION (endereo: 81h, 181h).......................................................37
Fig. 29 - Registo INTCON (endereo: 0Bh, 8Bh, 10Bh, 181h) ..................................38
Fig. 30 - Registo PIE1 (endereo: 8Ch).......................................................................39
Fig. 31 - Registo PIR1 (endereo: 0Ch).......................................................................40
-5-
-6-
-7-
Captulo 1
(1) Histria dos Microcontroladores
-8-
Barramento de Endereamento
Memria
Barramento de Dados
ROM
(Read Only
Memory)
RAM
(Random
Access
Memory)
A famlia mais utilizada por todo o mundo a famlia 16xxx com o popular
16F84. Um microcontrolador que tem sido utilizado nas mais diversas aplicaes
electrnicas.
- 10 -
- 11 -
- 12 -
Unidade Central
de
Processamento
Entradas
Sadas
Armazenamento
auxiliar
Memria
Memria
Dados
Cdigo de
programa
Sadas
Entradas
Unidade
Central de
Processamento
ALU
1
2
- 13 -
Sadas
Entradas
Memria
Unidade
Central de
Processamento
Cdigo de
Programa
ALU
- 14 -
Core de 12 bits
Core de 14 bits
Core de 16 bits
Core de 16 bit avanado
- 15 -
memria OTP 3 e EPROM 4 apagvel por UV 5 . Este tipo de memrias tornou esta
famlia pouco popular entre os amadores e hobistas. S recentemente a Microchip
relanou para o mercado estas famlias com memria FLASH6, que possibilitam uma
versatilidade quase imensurvel.
- 16 -
Pilha de memria
- 17 -
1.3.6.1. OTP
Existe um grande nmero de modelos PIC que so implementados com
memria ROM, que s pode ser gravada uma vez. Esta caracterstica faz com que
estes PICs sejam muito populares na indstria devido ao seu baixo custo em largas
quantidades. Contudo, o mercado amador tende a no usar estes PICs, devido
necessidade de reprogramar a memria, medida que se corrige o software.
Os PICs so identificados com a letra C, seguindo-se o nmero de famlia.
- 18 -
1.3.6.2. EPROM
Estes modelos foram introduzidos pois, a possibilidade de apagamento por
UV, faz com que o PIC possa ser reprogramado as vezes necessrias, at finalizao
do software. Distinguem-se pela letra C, e algumas que so apagveis electricamente,
esto marcadas pela letra CE.
1.3.6.3. FLASH
Trata-se de uma memria no voltil, que pode ser apagada e escrita
electricamente. Todos os PICs mais recentes, incluem este tipo de memria, que se
distingue pela letra F; tais como os 16F84 ou 16F628A.
A vantagem da FLASH sobre as EEPROM, que com a primeira, o utilizador
pode trocar tempo de escrita, por tempo de leitura. O tempo de escrita foi aumentado,
havendo uma diminuio no tempo de leitura, trazendo bvias melhorias na execuo
do programa.
O PrimeProg PIC Programmer8 est habilitado a trabalhar com os PICs mais
recentes, tambm como com os mais antigos. O software que acompanha este
programador tem actualizaes constantes, e gratuitas, podendo ser usado para todos
os dispositivos com que o PrimeProg PIC Programmer trabalha.
- 19 -
Maior Memria
Aumento de memria de programa de 1K a 2K
Aumento de memria de dados de 68 para 224 bytes
Aumento de memria EEPROM de 64 para 128 bytes
Maior funcionalidade
Oscilador interno de 4MHz/37kHz, para aplicaes no crticas
Detector de abaixamento de tenso
Passvel de programao em baixa tenso
- 20 -
- 21 -
Captulo 2
(2) Comear com os PICs
- 22 -
Memria de
Dados
INDF
TMR0
PCL
STATUS
FSR
PORTA
ALU
Registo W
RAM
Fig. 14 Registos
- 23 -
Fig. 15 - Opcode
Fig. 17 Oscilador
- 24 -
2.2. Perifricos
A Microchip disponibiliza inmeros modelos na famlia PIC16. Os perifricos
presentes em cada um deles, variam bastante, segundo diversos factores. Um
projectista de electrnica deve fazer escolher de forma correcta, qual o modelo que
mais se adequa ao seu projecto, para que este possa cumprir as funes para as quais
foi escolhido.
Os perifricos que podem ser encontrados dentro de um PIC16 so ento:
- 25 -
Captulo 3
(3) Famlia 16F6xxA
- 26 -
- 27 -
- 28 -
PIC16F627A/628A
20h - 7Fh
A0h - FFh
120h - 14Fh, 170h - 17Fh
1F0h - 1FFh
PIC16F648A
20h - 7Fh
A0h - FFh
120h - 14Fh
1F0h - 1FFh
Banco 0
Banco 1
Banco 2
Banco 3
RP0
0
1
0
1
13
14
- 29 -
- 30 -
- 31 -
15
- 32 -
- 33 -
- 34 -
- 35 -
- 36 -
- 37 -
16
- 38 -
- 39 -
- 40 -
17
18
- 41 -
contagem sequencial do mesmo. Desta maneira, instrues GOTO e CALL podem ser
utilizadas.
O PC est localizado na memria de dados, registo 02h, e chamado de
19
PCL . Isto significa que pode ser acedido, e manipulado, pelo software, da mesma
maneira que outro qualquer registo. Por exemplo, se o contedo do registo W for n, a
instruo addwf 2, f vai escrever o PC com o seu valor original, adicionado do
valor n. Esta uma instruo de Salto, disponvel nas instrues do PIC.
Um GOTO computacional feito se se adicionar um offset20 ao PC (addwf
PCL).
Existe um problema neste exemplo, que acontece devido ao PC ser de 13 bits,
e o registo 02h apenas contm os 8 bits menos significativos, PC[7..0]. Os 5 bits
mais significativos, PC[12..8], esto contidos num registo que no directamente
acessvel pelo utilizador. Na verdade, qualquer instruo que escreve directamente
para o registo 02h, muda todos os 13 bits dos PC. No s os 8 bits provenientes da
instruo addwf 2, f vo ser colocados no byte inferior do PC, mas os cinco bits
menos significativos do registo 0Ah, chamado de PCLATH21, so automaticamente
copiados para dentro do byte superior do PC.
O registo PCLATH limpo de cada vez que ocorre um RESET, e uma
instruo ADDWF como a do exemplo seguinte, vai resultar num endereo da primeira
pgina de 256 bytes, da memria de programa, a no ser que o PCLATH tenha sido
carregado com um valor diferente de 0. Sendo assim, necessrio cuidado quando da
alterao do estado do PC desta maneira, especialmente se o resultado exceder o
campo de 8 bits. Quando se faz uma leitura de tabela, usando o mtodo de GOTO
computacional, dever haver o cuidado de fazer com que a mesma no ultrapasse a
fronteira de memria do PCL22.
movlw 0x00
call tabela
;carrega W com 0
;chama a subrotina da tabela, para
; converter
movlw 0x01
call tabela
;carrega W com 0
;chama a subrotina da tabela, para
; converter
goto
org
0x00fe
tabela
addwf pcl,f
retlw
retlw
retlw
retlw
retlw
'a'
'e'
'i'
'o'
'u'
19
- 42 -
3.4. Stack
A famlia PIC com core de 14 bits tem uma Stack 23 de 13 bits, que
exclusivamente usada para guardar endereos de retorno de subrotinas 24 . Esta
estrutura, mostrada na figura 18, conhecida como Stack de Hardware. Esta Stack no
pertence ao mapa de memria, por isso, o seu contedo no pode ser alterado.
Associado a esta Stack, existe um contador de 3 bits, que aponta para o
seguinte registo livre, da mesma. Este Ponteiro de Stack - SP25 no pode ser alterado
por nenhuma instruo, mas automaticamente incrementado de cada vez que uma
instruo CALL executada. CALL similar instruo GOTO, mas antes de o
endereo de destino ser posto no PC, o valor actual do PC empurrado para a Stack.
Este o endereo da instruo depois da instruo CALL, pois o PC j foi
incrementado, e o PIC j est a ler a prxima instruo para o barramento, ao mesmo
tempo que a instruo CALL executada ver figura 16 do captulo 2 (ciclos de
relgio).
23
- 43 -
- 44 -
3.5.1 Inerente
Das instrues listadas no Apndice 1 as CLRWDT, RETFIE, NOP, RETURN, e
SLEEP no se referem a registo de dados na memria ou no W.
26
Clear - Limpar
- 45 -
ou ento:
incf 20h, w
- 46 -
- 47 -
Captulo 4
(4) Assembler PIC16
- 48 -
Movimento de dados
Manipulao de registos
Controlo de fluxo de programa
Nenhuma operao
Controlo do microcontrolador
Operaes lgicas
Operaes aritmticas
<p16f628A.INC>
p16f628A.INC
ou
#include
JAN
FEV
MAR
ABR
MAI
JUN
JUL
AGO
SET
OUT
NOV
DEZ
0x1F
0x1C
0x1F
0x1E
0x1F
0x1E
0x1F
0x1F
0x1E
0x1F
0x1E
0x1F
;
;
;
;
;
;
;
;
;
;
;
;
O
O
O
O
O
O
O
O
O
O
O
O
ms
ms
ms
ms
ms
ms
ms
ms
ms
ms
ms
ms
- 49 -
de
de
de
de
de
de
de
de
de
de
de
de
0x0000
TEMPO equ
movlw
0x20
TEMPO
TEMPO
ou
movwf
0x20
TEMPO
END
f - Registos
d - Destino
0 - Registo W
1 - Registo normal
k - Constante numrica
k - Label
b - Bit
b - Binrio
d - Decimal
k
f,d
f
- 51 -
DECF
INCF
BCF
BSF
RLF
f,d
f,d
f,b
f,b
f,d
RRF
f,d
SWAPF
f,d
f,d
k
k
k
f,b
BTFSS
f,b
DECFSZ
f,d
INCFSZ
f,d
- 52 -
SLEEP
k
f,d
k
f,d
k
f,d
- 53 -
f,d
ADDLW
SUBLW
SUBWF
f,d
- 54 -
Captulo 5
(5) MPLab IDE da Microchip
- 55 -
- 57 -
- 59 -
- 60 -
- 61 -
Captulo 6
(6) Funes e registos internos
- 62 -
6.1.1. Timer 0
O mdulo Timer0 contm um temporizador/contador de 8 bits com
possibilidade de leitura e escrita do valor. Alm disso, existe a possibilidade de
escolher qual a fonte de sinal de contagem, se interna ou externa.
A figura seguinte mostra uma verso simplificada do mdulo.
6.1.2. Divisores
Para utilizar com os temporizadores/contadores existe internamente no
PIC16F628A um divisor (prescaler) que permite dividir as contagens por n vezes. O
temporizador Timer0 dispe de um divisor de 8 bits, pelo que as contagens podem ser
divididas at 256 vezes. Para configurar o divisor atribuem-se valores aos bits PS0PS2 (OPTION<2:0>), mediante a seguinte tabela:
Bits
TMR0
WDT
000
1:2
1:1
001
1:4
1:2
010
1:8
1:4
011
1:16
1:8
100
1:32
1:16
101
1:64
1:32
110
1:128
1:64
111
1:256
1:128
- 64 -
6.1.3. Timer 1
O mdulo Timer1 contm um temporizador/contador de 16 bits. Este
temporizador tem dois registos, o TMR1H e o TMR1L, que em conjunto formam o
registo TMR1. Este par de registos tem possibilidade de leitura e escrita do contedo e
pode assumir valores entre 0000h e FFFFh.
A figura seguinte apresenta o esquema simplificado do mdulo Timer1.
- 65 -
Quando se utiliza este temporizador com uma interrupo (Interrupes Capitulo 11), este gerada por ocorrncia de um overflow no registo TMR1. Nesta
altura o bit TMR1IF (PIR1<0>) colocado no nvel lgico 1. Esta interrupo pode
ser ligada/desligada configurando o bit TMR1IE (PIE1<0>).
Tal como o mdulo Timer0, tambm o Timer1 pode ser utilizado como
temporizador ou contador. O modo de operao escolhido, configurando o bit
TMR1CS (T1CON<1>).
adicionalmente ser ligados dois condensadores cermicos de 15pF entre cada pino do
cristal e a massa elctrica do circuito.
bit 7-6:
bit 5-4:
bit
3:
bit
2:
bit
1;
bit
0:
Guarda o
Activa a
N/A
11 ->Prescale 1:8
Oscilador do Timer1 desligado
No sincronizar relogio externo
Relogio interno Fosc/4
Liga o Timer1
valor no registo T1CON
interrupo TMR1IE
- 67 -
6.1.6. Timer2
O mdulo Timer2 um temporizador de 8 bits com prescaler e postscaler.
Este temporizador tem a particularidade de poder ser utilizado como base de tempos
para o mdulo de PWM, tambm descrito mais frente neste captulo.
A figura seguinte apresenta o esquema simplificado do mdulo Timer2.
- 68 -
registo TMR2 e PR2 se igualam. Neste altura, o valor de TMR2 volta a 00h na
contagem seguinte. O registo PR2 inicializado com o valor FFh no arranque
(RESET) do micro-controlador.
A fase final da contagem do Timer2 o postscaler de 4 bits que controla as
interrupes originadas por este temporizador. Os valores do postscaler vo de 1:1 at
1:16.
Para desligar o Timer2, necessrio colocar o bit TMR2ON (T2CON<2>) no
nvel lgico 0. Esta opo permite minimizar o consumo de energia.
Os valores do prescaler e postscaler so apagados quando qualquer uma das
situaes acontece:
- Escrita de um valor no registo TMR2
- Escrita de um valor no registo T2CON
O resultado do TMR2 injectado no mdulo USART, quando configurada
para trabalhar em modo sncrono. Esta temporizao pode ser utilizada no processo de
desvio de bits da SSP (shift clock).
A tabela seguinte resume os registos do micro-controlador que esto
associados ao funcionamento do temporizador Timer2. A sua consulta
imprescindvel para que nenhuma configurao seja esquecida, quando se pretende
utilizar este mdulo.
- 69 -
Com duas contagens completas do Timer1 atingimos 1s. Neste caso, vamos
ver no cdigo seguinte como feita a contagem.
contador1
equ
movlw
movwf
movlw
movwf
movlw
movwf
mowlw
movwf
20h
; Variavel de contagem
00h
TRISB
02h
contador1
0Bh
TMR1H
DBh
TMR1L
;
;
;
;
;
;
;
;
;
;
;
movlw b'00110101' ;
;
;
;
;
;
movwf T1CON
;
bsf
PIE1, 0
;
org
0004h
movf
btfss
goto
movlw
xorwf
contador1, 0
STATUS, Z
mesma_contagem
01h
PORTB, 1
return
mesma contagem:
movlw
movwf
mowlw
movwf
movlw
xorwf
bsf
0Bh
TMR1H
DBh
TMR1L
b'00110000'
T1CON
PIE1, 0
;
;
;
;
;
;
;
- 70 -
- 71 -
Para seleccionar que tipo de evento, em que queremos que desencadeie uma
captura, necessrio configurar os bits CCP1M3:CCP1M0 (CCP1CON<3:0>).
Quando uma captura feita, o bit CCP1IF (PIR<2>) colocado automaticamente no
nvel lgico 1. Se ocorre uma nova captura, sem que o valor do registo CCP1R seja
lido, o valor da captura anterior perdido.
- 72 -
- 73 -
- 74 -
EQU
CLRF
CLRF
MOVF
ANDLW
IORWF
MOVLW
MOVWF
BSF
MOVLW
MOVWF
BCF
CALL
MOVF
BCF
BSF
BSF
BCF
BSF
BSF
0X20
FLAG_REG
PORTA
CMCON, W
- 76 -
A tabela seguinte apresenta a lista dos registos que esto associados aos modos
de Captura, Comparador e Timer1.
- 77 -
F=
1
[Hz ]
T
- 78 -
- 79 -
Tosc e tambm o valor guardado no prescaler do TMR2 (ver seco XX deste captulo
onde abordado o Timer2).
Duty Cycle do PWM = (CCPR1L : CCP1CON < 5 : 4 > ) * Tosc * TMR 2 prescaler value
Fosc
log
FPWM * TMR 2 prescaler value
Re soluo do PWM =
log(2)
[bits ]
- 80 -
- 81 -
- 82 -
- 83 -
- 84 -
Fosc
64( x + 1)
16000000
64( x + 1)
x = 25.042
9600 =
Erro =
16000000
= 9615
64(25 + 1)
- 85 -
A tabela seguinte apresenta uma lista de valores para o registo SPBRG obtidos
para diferentes velocidades de oscilador, para a porta USART em modo sncrono.
Fig. 73 Valores de SPBRG possveis, para diferentes baud rates, em modo sncrono
- 86 -
A tabela seguinte apresenta uma lista de valores para o registo SPBRG obtidos
para diferentes velocidades de oscilador, para a porta USART em modo assncrono.
assncrono
- 87 -
- 88 -
- 89 -
possvel receber dois bytes de cada vez com o receptor da porta USART.
Quando detectado o stop bit, se o registo RCREG que guarda os dados de chegada,
estiver ainda cheio, o PIC coloca o bit de erro OERR a 1. Isto significa que o buffer
excedeu a capacidade e perderam-se dados. Quando isto acontece, este bit deve ser
apagado manualmente por software. Por outro lado, se um stop bit detectado mas
em nvel 0, o bit FERR colocado a 1 pelo PIC. Quando se l um byte do buffer de
entrada, o RCREG, so colocados novos valores nos bits RX9D e FERR.
importante ler sempre o contedo do registo RCSTA antes de fazer uma leitura de
dados do receptor, para que no se percam os dados de FERR e RX9D de bytes
anteriores.
Em seguida apresentam-se os passos resumidos, que devem ser tomados para
configurar a porta USART em modo assincrono, para recepo:
1. Colocar os bits TRISB<1> a 1 e TRISB<2> a 0, para configurar os
pinos de TX e RX da porta USART
2. Inicializar o registo SPBRG com o baud rate apropriado. Se se tratar
de uma velocidade alta, colocar a 1 o bit BRGH
3. Colocar a 0 o bit SYNC para obter modo assincrono e colocar a 1 o
bit SPEN
4. Se se pretender interrupes na porta, activar o bit RCIE
5. Se se pretender utilizar 9bits, colocar a 1 o bit RX9
6. Activar a transmisso atravs do bit CREN, colocando-o a 1
7. A flag RCIF ser activada quando a recepo de um byte est
completa. Surgir a interrupo se o bit RCIE estiver activo
8. Ler o byte recebido atravs do registo RCREG. Como o shiftregister suporta 2 bytes, o segundo fica a ser pronto a ler,
imediatamente a seguir a ser lido o primeiro
9. Se ocorrer algum erro, apagar o bit CREN para voltar ao estado
normal da porta
- 90 -
- 91 -
STATUS, RP0
CONFIG_ADDR
EEADR
EECON1, RD
EEDATA, W
STATUS, RP0
;Banco 1
;
;Endereo a ler
;Leitura da EEPROM
;W = EEDATA
;Banco 0
STATUS, RP0
EECON1, WREN
INTCON, GIE
55h
EECON2
AAh
EECON2
EECON1,WR
;Banco 1
;Activa a escrita
;Desactiva as interrupes
;
;Escreve 55h
;
;Escreve AAh
;Activa bit WR
;Inicia a escrita
;Activa interrupes
O registo WREN deve ser activado para permitir a escrita. Quando a sequncia
de escrita concluda, a flag EEIF activada pelo PIC.
- 92 -
Captulo 7
(7) Funes especiais
- 93 -
- 94 -
- 95 -
Tipos de Osclilador:
Para aplicaes em que um relgio externo existe, o pino de OSC1 pode ser
directamente ligado ao mesmo.
- 96 -
- 97 -
7.3. Reset
- 98 -
- 99 -
7.4. Interrupes
- 100 -
- 101 -
- 102 -
Captulo 8
(8) Utilizao das portas
- 103 -
CLRF
PORTA
;Apaga a porta A
;
MOVLW 0x07
;Desliga os
; comparadores
MOVWF CMCON
;Activa pinos para
; funces I/O
BCF
STATUS, RP1 ;
BSF
STATUS, RP0 ;Banco 1
MOVLW 0x1F
;Carrega W com o valor
; a utilizar para a
MOVWF TRISA
; configuracao dos pinos
; da porta A
Os oito bits de uma porta podem ser lidos ao mesmo tempo, usando a
instruo MOVF portX, W. Os dados so vlidos, no momento em que a porta
lida. Os pinos de cada porta podem ser lidos independentemente, usando as instrues
BTFSC e BTFSS.
As instrues orientadas para a manipulao directa de bits, BCF e BSF, lem
toda a porta para o CPU, mudam o bit pretendido, e volta a escrever o contedo do
CPU de volta para a porta. Tudo num ciclo de relgio. Este mtodo chamado de LModifica-Escreve.
A porta lida no incio de cada ciclo de instruo, e escrita no fim do mesmo
ciclo. Se a escrita imediatamente seguida de uma leitura, na mesma porta, problemas
podero ocorrer, porque a porta necessita de tempo para estabilizar. Este problema
ultrapassado, inserindo uma instruo NOP entre a escrita e a leitura.
Executando duas escritas consecutivas em uma porta, pode originar o mesmo
problema. De novo, inserindo um NOP, resolver a questo.
- 104 -
8.3. FLAGS
Uma Flag um registo de 1 bit, que pode ser activado (1), ou desactivado (0),
por intermdio de vrios tipos de instrues. A activao/desactivao, normalmente,
feita automaticamente. Depois da execuo da instruo, a Flag em questo pode ser
testada, para saber se foi activada ou desactivada. O fluxo/deciso do software escrito,
pode depender destes testes.
Das muitas Flags existentes, nos vrios registos atrs mencionados, h duas de
extrema importncia, e que devem ser descritas com mais pormenor. So elas a Z
(Zero bit), e a C (Carry bit). Estas encontram-se no registo STATUS.
- 105 -
1010
0xA
movlw
movwf
movlw
movwf
0x00
TRISB
0x3A
PORTB
Caso se queira limpar todos os bits da porta B, de uma s vez, no esquecer que a
porta B est mapeada como um registo normal, e a instruo CLRF pode ser usada
para o efeito:
clrf
PORTB
- 106 -
Captulo 9
(9) Comparao, manipulao de bits e sequncias
- 107 -
9.1. Comparaes
sublw N
btfsc/s
status, 2
...
O resultado ento:
Flag Zero est activada se
Flag Zero est desactivada se
W
W
=
<>
N
N
W
W
<=
>
N
N
Flag testada
Z activado
Z desactivado
C activado
C desactivado
- 108 -
STATUS
PORTB
start
repete
W
0x04
0x05
0x06
equ
equ
0x03
0x06
org
0x0000
bsf
movlw
movwf
bcf
status, 5
0x00
TRISB
status, 5
Z
0
1
0
;Banco 1
;carrega W com 0x00
;configura porta B
;Banco 0
movlw 0x04
sublw 0x05
movf status,w
movwf PORTB
goto
;ciclo infinito
repete
C
1
1
0
end
- 109 -
Bit set BSF, e bit clear BCF, operam directamente num bit, num
determinado registo. Um exemplo, o bit 3 da porta A pode ser activado:
bsf
porta,3
bcf
temp,6
Um bit num registo pode ser testado usando as instrues BTFSC e BTFSS:
btfsc temp, 3
goto ????
Operaes lgicas so bastante teis se, dois ou mais bits num byte, tm que
ser alterados ou testados, num ciclo de relgio.
- 110 -
OR
OR
OR
AND
OR
OR
XOR
OR
- 111 -
9.4. Sequncias
A instruo RLF pode ser usada para deslocar o contedo do registo para a
esquerda, um bit de cada vez. Sempre que a instruo executada, o byte desloca-se
uma posio para a esquerda, o bit mais esquerda movido para a flag de Carry, e o
contedo da flag de Carry carregado no bit menos significante do registo.
A instruo RRF tem exactamente o mesmo procedimento, mas na direco
oposta.
Por vezes, poder ser necessrio fazer circular um registo, sendo um requisito
para aplicaes industriais, ou quando alimentando um display de LEDs.
A instruo RLF/RRF mantm o valor inicial do registo, fazendo o ciclo
completo atravs da Carry, e de volta, para o bit menos significativo.
Uma vez que o contedo da Carry reciclado, de cada vez que usamos a
instruo RLF/RRF, a Carry dever ser posta num estado conhecido (1 ou 0). Para
o fazer, basta usar a instruo BCF/BSF no bit 0 do registo STATUS (flag de Carry).
- 112 -
Captulo 10
(10) Tabelas
- 113 -
Uma tabela de procura pode ser usada para converter um cdigo para outro.
Suponhamos que queremos converter valores hexadecimais, para sinais de 7segmentos, para aplicar num mostrador.
HEX
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
7-segmentos
0x3F
0x06
0x5B
0x4F
0x66
0x6D
0x7D
0x07
0x7F
0x6F
gfe
0011
0000
0101
0100
0110
0110
0111
0000
0111
0110
dcba
1111
0110
1011
1111
0110
1101
1101
0111
1111
1111
0x0000
status, 5
0x00
trisb
status, 5
portb
seg
movlw 0x02
call segmnt
movwf portb
loop
goto
segmnt
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
loop
pc,f
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0x7d
0x07
0x7f
0x6f
;Banco 1
;Carrega W com 0x00
;Configura porta B
;Banco 0
;Carrega w com 0x02
;Chama a subrotina que contem o cdigo 7;Carrega a porta B com o valor lido na
; tabela
;Ciclo infinito
;
;Soma W ao PC
;0 7-segmentos
;1 7-segmentos
;2 7-segmentos
;3 7-segmentos
;4 7-segmentos
;5 7-segmentos
;6 7-segmentos
;7 7-segmentos
;8 7-segmentos
;9 7-segmentos
O processador soma o valor hexadecimal ao PC, onde este vai ser o apontador
para o cdigo de 7-segmentos, que ir ser posteriormente posto na sada da porta B.
A instruo ADDWF soma 8 bits aos 8 bits baixos do PC, e no afecta os 5
bits altos.
- 114 -
Captulo 11
(11) Interrupes
- 115 -
- 116 -
- 117 -
Grava o registo W
Grava o registo STATUS
Executa a rotina de interrupo
Devolve os valores ao STATUS
Devolve os valores ao W
MOVWF W TEMP
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF STATUS_TEMP
:
:(ISR)
:
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
- 118 -
Notas:
- 119 -