Você está na página 1de 125

Microcontroladores

09/22/09 Ricardo Pannain 1


Microcontroladores - Tópicos

• Conceitos Básicos de Arquitetura de Computadores


• Arquitetura Básica de um Microcontrolador
• Estudo de caso – PIC 16F84
• Instruction Set – PIC 16F84
• Programando em Linguagem de Montagem
• Sistema de Desenvolvimento MPLAB
• Exemplos de utilização
• Referências Bibliográficas

09/22/09 Ricardo Pannain 2


1. Conceitos Básicos de Arquitetura de
Computadores

• Arquitetura Havard X von Neuman

09/22/09 Ricardo Pannain 3


1. Conceitos Básicos de Arquitetura de
Computadores
• Organização Básica de um Computador Digital
MEMÓRIA
PRINCIPAL

Barramento de dados

CLOCK Barramento de endereços

Barramento de controle

REGS.
REGS. DE ESPECIAIS
PROPÓSITO UNIDADE
GERAL DE ENTRADA

UNID. DE E SAÍDA
UNIDADE DE
CONTROLE
ARITMÉTICA E LÓGICA

UNIDADE CENTRAL DE PROCESSAMENTO - CPU

DISPOSITIVOS
DE E/S

09/22/09 Ricardo Pannain 4


1. Conceitos Básicos de Arquitetura de
Computadores
• Organização Básica de um Computador Digital
MEMÓRIA

Barramento de dados
Barramento de endereços
Barramento de controle

A B RDM REM PC

C D RI

E F SP
... ...
UNID. DE
UNIDADE DE
CONTROLE
ARITMÉTICA E LÓGICA

UNIDADE CENTRAL DE PROCESSAMENTO - CPU

09/22/09 Ricardo Pannain 5


1. Conceitos Básicos de Arquitetura de
Computadores

• Arquitetura RISC

2 4 6 8 10
Time

IF ID EX MEM WB

09/22/09 Ricardo Pannain 6


1. Conceitos Básicos de Arquitetura de
Computadores

• Arquitetura RISC – Execução de instruções


Program
execution 2 4 6 8 10 12 14 16 18
order Time
(in instructions)
Instruction Data
lw $1, 100($0) fetch
Reg ALU
access
Reg

Instruction Data
lw $2, 200($0) 8 ns fetch
Reg ALU
access
Reg

Instruction
lw $3, 300($0) 8 ns fetch
...
8 ns

Program
execution 2 4 6 8 10 12 14
Time
order
(in instructions)
Instruction Data
lw $1, 100($0) Reg ALU Reg
fetch access

Instruction Data
lw $2, 200($0) 2 ns Reg ALU Reg
fetch access

Instruction Data
lw $3, 300($0) 2 ns Reg ALU Reg
fetch access

2 ns 2 ns 2 ns 2 ns 2 ns

09/22/09 Ricardo Pannain 7


1. Conceitos Básicos de Arquitetura de
Computadores

• RISC- Execução de instruções: Data Hazard


Time (in clock cycles)

Value of CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9
register $2: 10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
Program
execution
order
(in instructions)
sub $2, $1, $3 IM Reg DM Reg

and $12, $2, $5 IM Reg DM Reg

or $13, $6, $2 IM Reg DM Reg

add $14, $2, $2 IM Reg DM Reg

sw $15, 100($2) IM Reg DM Reg

09/22/09 Ricardo Pannain 8


1. Conceitos Básicos de Arquitetura de
Computadores

• RISC- Execução de instruções: Data Hazard


Time (in clock cycles)
Program CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9
execution
order
(in instructions)
lw $2, 20($1) IM Reg DM Reg

and $4, $2, $5 IM Reg DM Reg

or $8, $2, $6 IM Reg DM Reg

add $9, $4, $2 IM Reg DM Reg

slt $1, $6, $7 IM Reg DM Reg

09/22/09 Ricardo Pannain 9


1. Conceitos Básicos de Arquitetura de
Computadores

• RISC- Execução de instruções: Data Hazard


Time (in clock cycles)

Value of CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9
register $2: 10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
Program
execution
order
(in instructions)
sub $2, $1, $3 IM Reg DM Reg

and $12, $2, $5 IM Reg DM Reg

or $13, $6, $2 IM Reg DM Reg

add $14, $2, $2 IM Reg DM Reg

sw $15, 100($2) IM Reg DM Reg

09/22/09 Ricardo Pannain 10


1. Conceitos Básicos de Arquitetura de
Computadores

• Exemplo de Arquitetura RISC - MIPS


PCSrc

ID/EX
0
M
u WB
x EX/MEM
1
Control M WB
MEM/WB

EX M WB
IF/ID

Add

Add
4 Add result
RegWrite
Branch
Shift
left 2

MemWrite
ALUSrc
Read

MemtoReg
Instruction

PC Address register 1
Read
data 1
Read
register 2 Zero
Instruction
Registers Read ALU ALU
memory Write 0 Read
data 2 result Address 1
register M data
u Data M
Write x memory u
data x
1
0
Write
data

Instruction 16 32 6
[15– 0] Sign ALU MemRead
extend control

Instruction
[20– 16]
0 ALUOp
M
Instruction u
[15– 11] x
1
RegDst

09/22/09 Ricardo Pannain 11


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador

09/22/09 Ricardo Pannain 12


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador

09/22/09 Ricardo Pannain 13


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Unidade de Memória

09/22/09 Ricardo Pannain 14


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Unidade Central de Processamento

09/22/09 Ricardo Pannain 15


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – CPU  Memória

09/22/09 Ricardo Pannain 16


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Unidade de E/S
– Portas de entrada, saída e bi-direcionais

09/22/09 Ricardo Pannain 17


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Porta Serial

09/22/09 Ricardo Pannain 18


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Unidade de Timer

09/22/09 Ricardo Pannain 19


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Watchdog

09/22/09 Ricardo Pannain 20


2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Conversor A/D

09/22/09 Ricardo Pannain 21


3. Estudo de Caso PIC 16F84
• Microcontrolador PIC 16F84
– Microcontrolador RISC de 8 bits

09/22/09 Ricardo Pannain 22


3. Estudo de Caso PIC 16F84
• Memória Flash – Memória de Programa

• Memória EEPROM – Memória de Dados (que devem ser


• mantidos sem alimentação)

• Memória RAM – Memória de Dados (usada pelo programa


durante sua execução)

• Free-Run Timer – Registrador de 8 bits que trabalha


independente do programa, que é incrementado a cada 4
ciclos de clock

• Unidade Central de Processamento

09/22/09 Ricardo Pannain 23


3. Estudo de Caso PIC 16F84
• Aplicações

– Aplicações automobilísticas

– Controle de equipamentos industriais

– Tranca de portas

– Dispositivos de segurança

09/22/09 Ricardo Pannain 24


3. Estudo de Caso PIC 16F84
• Ciclo de instrução/Clock

09/22/09 Ricardo Pannain 25


3. Estudo de Caso PIC 16F84
• Pipelining

09/22/09 Ricardo Pannain 26


3. Estudo de Caso PIC 16F84

• Pinagem

09/22/09 Ricardo Pannain 27


3. Estudo de Caso PIC 16F84
• Pinagem
• Pin no.1 RA2 Second pin on port A. Has no additional function
• Pin no.2 RA3 Third pin on port A. Has no additional function.
• Pin no.3 RA4 Fourth pin on port A. TOCK1 which functions as a timer is also found on this pin
• Pin no.4 MCLR Reset input and Vpp programming voltage of a microcontroller
• Pin no.5 Vss Ground of power supply.
• Pin no.6 RB0 Zero pin on port B. Interrupt input is an additional function.
• Pin no.7 RB1 First pin on port B. No additional function.
• Pin no.8 RB2 Second pin on port B. No additional function.
• Pin no.9 RB3 Third pin on port B. No additional function.
• Pin no.10 RB4 Fourth pin on port B. No additional function.
• Pin no.11 RB5 Fifth pin on port B. No additional function.
• Pin no.12 RB6 Sixth pin on port B. 'Clock' line in program mode.
• Pin no.13 RB7 Seventh pin on port B. 'Data' line in program mode.
• Pin no.14 Vdd Positive power supply pole.
• Pin no.15 OSC2 Pin assigned for connecting with an oscillator
• Pin no.16 OSC1 Pin assigned for connecting with an oscillator
• Pin no.17 RA2 Second pin on port A. No additional function
• Pin no.18 RA1 First pin on port A. No additional function.

09/22/09 Ricardo Pannain 28


3. Estudo de Caso PIC 16F84

• Geração de clock - osciladores

09/22/09 Ricardo Pannain 29


3. Estudo de Caso PIC 16F84

• Reset

09/22/09 Ricardo Pannain 30


3. Estudo de Caso PIC 16F84

• Unidade Central de Processamento

09/22/09 Ricardo Pannain 31


3. Estudo de Caso PIC 16F84

• Unidade Lógica e Aritmética

09/22/09 Ricardo Pannain 32


3. Estudo de Caso PIC 16F84

• PIC 16F84 - Diagrama de Blocos

09/22/09 Ricardo Pannain 33


3. Estudo de Caso PIC 16F84

• Registro de Estado

09/22/09 Ricardo Pannain 34


3. Estudo de Caso PIC 16F84

• Registro de Estado
• bit 0 - C - bit de carry
• bit 1 - DC - bit de carry para operações BCD
• bit 2 - Z - bit de zero
• bit 3 - PD - Powder-down: 1 quando a fonte é ligada e 0 quando
executa instrução sleep
• bit 4 - TO - Time-out :0 - watchdog overflow e 1 - caso contrário
• bit 6:5 - RP1-RP0 - bits de seleção de bancos:00 = banco zero e 01 =
banco 1 para endereçamento direto de memória
• bit 7 - IRP (Register Bank Select) seleciona banco de memória para
endereçamento indireto de memória - 1 = banco 2 e 3 ; 0 = banco 0 e 1

09/22/09 Ricardo Pannain 35


3. Estudo de Caso PIC 16F84

• Registro de Opção

09/22/09 Ricardo Pannain 36


3. Estudo de Caso PIC 16F84

• Registro de Opção

09/22/09 Ricardo Pannain 37


3. Estudo de Caso PIC 16F84

• Registro de Opção
• bit 0:2 - PS0, PS1,PS2 - Define escala do timer
• bit 3 – PSA: assinala presacaler entre TMR0 e watchdog.
• bit 4 T0SE: Source Edge Select
• bit 5 TOCS: TMR0 Clock Source Select
• bit 6 INTEDG: Interrupt Edge Select
• bit 7 RBPU: PORTB Pull-up Enable

09/22/09 Ricardo Pannain 38


3. Estudo de Caso PIC 16F84

• Portas: registrador conectado a pinos de entrada e saída

• TRISA – 85h
• TRSIB – 86h
09/22/09 Ricardo Pannain 39
3. Estudo de Caso PIC 16F84

• PORTB
• Tem um resistor pull-up interno pra definição de nível 1 –
reset no RPBU bit do registrador de opção
• Definição de input/output – 0/1
• Exemplo – pinos 0,1,2 e 3 como entrada e 4,5,6 e 7 como
saída:
clrf STATUS ; Bank0
clrf PORTB ; PORTB=0
bsf STATUS,RP0 ; Bank1
movlw 0x0f ; define pinos de entrada e saída
movwf TRISB ; escreve no registrador TRISB

09/22/09 Ricardo Pannain 40


3. Estudo de Caso PIC 16F84

• PORTA
• Pino 4 tem dupla função: entrada externa para o timer
TMR0 (programação através do bit T0CS do regsitrador de
opção)
• Definição de input/output – 0/1
• Exemplo – pinos 0,1,2, 3 e 4 como entrada e 5,6 e 7 como
saída:
clrf STATUS ; Bank0
clrf PORTA ; PORTA=0
bsf STATUS,RP0 ; Bank1
movlw 0x1f ; define pinos de entrada e saída
movwf TRISA ; escreve no registrador TRISA

09/22/09 Ricardo Pannain 41


3. Estudo de Caso PIC 16F84

• Organização
de Memória:
• Dois bancos de
memória: dados e
programa.
• Dados: EEPROM e
registradores GPR
• Programa: FLASH

09/22/09 Ricardo Pannain 42


3. Estudo de Caso PIC 16F84

• Memória de Programa:
– Memória FLASH 1024 X 14 bits
– endereço 0000h – reset
– endereço 0004h – vetor de interrupção
• Memória de Dados
– EEPROM: 64 X 8
• Não é diretamente acessada. É acessada através EEADR e EEDATA
– RAM: registradores GPR (General Purpose Register)
• localização 0x0C até 0x4F – 68 posições
• Registrador SFR (Special Function Register)
– Ocupam as 12 primeiras posições dos dois bancos de memória

09/22/09 Ricardo Pannain 43


3. Estudo de Caso PIC 16F84

• Bancos de Memória
– Selecionados via bits RP0 e RP1 do registrador de STATUS
– Exemplo:
bcf STATUS, RP0 ; zera o bit RP0 do registrador STATUS,
; selecionando o banco 0
bsf STATUS, RP0 ; seta o bit RP0 do registrador STATUS,
; selecionando o banco 1
– MACROS
BANK0 macro BANK1 macro
bcf STATUS, RP0 bsf STATUS, RP0
endm endm

09/22/09 Ricardo Pannain 44


3. Estudo de Caso PIC 16F84

• Program Counter – PC: registrador de 13 bits


– Contém o endereço da instrução que irá ser executada

• Pilha: 8 palavras de 13 bits


– instruções CALL, RETURN, RETWL ou RETFIE

09/22/09 Ricardo Pannain 45


3. Estudo de Caso PIC 16F84

• Programação

– para utilização da memória de programa, o microcontrolador deve


estar setado em um modo especial, conectando o pino MCLR ao
Vdd (4,5 a 5,5 V). A Memória de programa é programada
serialmente usando dois pinos data/clock.

• Modos de endereçamento: direto ou indireto

09/22/09 Ricardo Pannain 46


3. Estudo de Caso PIC 16F84

• Endereçamento direto
• Exemplo de acesso
a registradores SFR

bsf STATUS, RP0 ;Bankl


movlw 0xFF      ;w=0xFF
movwf TRISA     ;address of
;TRISA
;register is
; taken
;from
;instruction
;movwf

09/22/09 Ricardo Pannain 47


3. Estudo de Caso PIC 16F84

• Endereçamento indireto
• Exemplo
Apagar 16 posições da RAM
movlw 0x0C ;endereço inicial
movwf FSR ; FSR aponta 0x0C
LOOP: clrf INDF ; INDF = 0
incf FSR ; endereço ++
btfss FSR,4 ; tudo apagado?
goto loop ; não, volta
CONTINUE
: sim, OK

09/22/09 Ricardo Pannain 48


3. Estudo de Caso PIC 16F84

• Interrupções

09/22/09 Ricardo Pannain 49


3. Estudo de Caso PIC 16F84

• Interrupções
– Registrador de Controle INTCON

09/22/09 Ricardo Pannain 50


3. Estudo de Caso PIC 16F84

bit 0 RBIF (RB Port Change Interrupt Flag bit) Bit which informs about
changes on pins 4, 5, 6 and 7 of port B.
1=at least one pin has changed its status
0=no change occured on any of the pins

bit 1 INTF (INT External Interrupt Flag bit) External interrupt occured.
1=interrupt occured
0=interrupt did not occur
If a rising or falling edge was detected on pin RB0/INT, (which is defined
with bit INTEDG in OPTION register), bit INTF is set. Bit must be cleared in
interrupt subprogram in order to detect the next interrupt.

bit 2 T0IF (TMR0 Overflow Interrupt Flag bit) Overflow of counter TMR0.
1= counter changed its status from FFh to 00h
0=overflow did not occur
Bit must be cleared in program in order for an interrupt to be detected.

09/22/09 Ricardo Pannain 51


3. Estudo de Caso PIC 16F84
bit 3 RBIE (RB port change Interrupt Enable bit) Enables interrupts to occur at the change of
status of pins 4, 5, 6, and 7 of port B. 
1= enables interrupts at the change of status
0=interrupts disabled at the change of status
If RBIE and RBIF were simultaneously set, an interrupt would occur.

bit 4 INTE (INT External Interrupt Enable bit) Bit which enables external interrupt from pin
RB0/INT.
1=external interrupt enabled
0=external interrupt disabled
If INTE and INTF were set simultaneously, an interrupt would occur.

bit 5 T0IE (TMR0 Overflow Interrupt Enable bit) Bit which enables interrupts during counter
TMR0 overflow.
1=interrupt enabled
0=interrupt disabled
If T0IE and T0IF were set simultaneously, interrupt would occur.

09/22/09 Ricardo Pannain 52


3. Estudo de Caso PIC 16F84

bit 6 EEIE (EEPROM Write Complete Interrupt Enable bit) Bit which enables
an interrupt at the end of a writing routine to EEPROM
1=interrupt enabled
0=interrupt disabled
If EEIE and EEIF (which is in EECON1 register) were set simultaneously , an
interrupt would occur.

bit 7 GIE (Global Interrupt Enable bit) Bit which enables or disables all
interrupts.
1=all interrupts are enabled
0=all interrupts are disabled

09/22/09 Ricardo Pannain 53


3. Estudo de Caso PIC 16F84
• Tipos de interrupções

– Término de escrita de dados na EEPROM

– TMR0 interrupção causada por timer overflow

– Interrupção pela alteração dos pinos RB4 à RB7 da porta B

– Interrupção externa do pino do microcontrolador RB0/INT

09/22/09 Ricardo Pannain 54


3. Estudo de Caso PIC 16F84

• PUSH e POP no tratamento de interrupções

09/22/09 Ricardo Pannain 55


3. Estudo de Caso PIC 16F84

• Exemplo de como salvar registradores no tratamento de


interrupção

– Testar o banco corrente


– Armazenar o registrador W do banco corrente
– Armazenar o registrador STATUS no banco 0
– Executar a rotina de interrupção (ISR)
– Restaurar o registrador STATUS
– Restaurar o registrado W

09/22/09 Ricardo Pannain 56


3. Estudo de Caso PIC 16F84
Push
btfss STATUS, RP0 ; banco 0
goto RPOCLEAR ; sim
bcf STATUS, RP0 ; não, vá para banco 0
movwf W_TEMP ; salva registrador W
swapf STATUS, W ; W <- STATUS
movwf STATUS_TEMP ; STATUS_TEMP <- W
bsf STATUS_TEMP,1 ; RP0(STATUS_TEMP)=1
goto ISR_code ; push completo
RPOCLEAR
movwf W_TEMP ; salvo registrador W
swapf STATUS_W ; W <- STATUS
movwf STATUS_TEMP ; STATUS_TEMP <- W
;
ISR_code
;
; rotina de interrupção
;

09/22/09 Ricardo Pannain 57


3. Estudo de Caso PIC 16F84
Pop
swapf STAUS_TEMP ; W <- STATUS_TEMP
movwf STATUS ; STATUS <- W
btfss STATUS, RP0 ; banco 1 ?
goto Return_WREG ; não
bcf STATUS, RP0 ; sim vá para banco 0
swapf W_TEMP, F ; retorna conteúdo de W
swapf W_TEMP, W ;
bsf STATUS_RP0 ; VOLTO BANCO 1
retfie ; terminou POP
Return_WREG
swapf W_TEMP, F ; retorna conteúdo de W
swapf W_TEMP, W ;
retfie ; terminou POP

09/22/09 Ricardo Pannain 58


3. Estudo de Caso PIC 16F84
• MACROS para POP e PUSH
PUSH macro
movwf W_TEMP ; W_TEMP <- W
swapf W_TEMP,F ; swap W_TEMP,F
BANK1 ; macro para mudar para banco 1
swapf OPTION_REG, W ; W <- OPTION_REG
movwf OPTION_TEMP ;OPTION_TEMP <- W
BANK0 ; macro para mudar para banco 0
swapf STATUS,W ; W <- STATUS
movwf STAT_TEMP ; STAT_TEMP <- W
endm
POP macro
swapf STA_TEMP,W ; W<- STAT_TEMP
movwf STATUS ; STATUS <-W
BANK1 ; macro para mudar para banco 1
swapf OPTION_TEMP,W ; W<-OPTIO_TEMP
movwf OPTION_REG ; OPTION_REG <- W
BANK0 ; macro para mudar para banco 0
swapf W_TEMP,W ; W<- W_TEMP
endm
09/22/09 Ricardo Pannain 59
3. Estudo de Caso PIC 16F84

• Interrupção externa via pino RB0/INT do microcontrolador


– triggered pela borda de subida do sinal ( se bit INTEDG=1 no
OPTION[6]) ou de descida (INTEDG = 0)
– quando temos sinal em INT, INTF =1(INTCON[1])
– para desabilitar, fazer INTE = 0 (INTCON[4])
• Interrupção TMR0 counter overflow
– seta T0IF (INTCON[2])
• Interrupção pela alteração dos pinos 4,5,6 e 7 da porta B
– seta RBIF (INTCON[0])
• Interrupção de fim de escrita na EEPROM
– seta EEIF (INTCON[6])

09/22/09 Ricardo Pannain 60


3. Estudo de Caso PIC 16F84

• Inicialização de interrupções

– Inicialização da interrupção externa no pino RB0

clrf INTCON ; todas interrupções desabilitadas


movlw B’00010000’ ; apenas a interrupção externa é habilitada
bsf INTCON, GIE ; ocorrências de interrupções permitida

09/22/09 Ricardo Pannain 61


3. Estudo de Caso PIC 16F84
• Exemplo: Como o PIC16F84 tem apenas uma localização onde o endereço de uma sub-rotina
é armazenado, precisamos verificar se existe uma rotina de interrupção sendo executada, quando
ocorre uma outra interrupção.
org ISR_ADDR ; endereço da rotina de interrupção
btfsc INTCON, GIE ; GIE está OFF ?
goto ISR_ADDR ; não, volte para o início
PUSH ; macro PUSH
btfsc INTCON, RBIF ; mudanças portb[4..7] ?
goto ISR_PORTB; vá para o tratamento relativo às mudanças
btfsc INTCON, INTF ; ocorreu interrupção externa ?
goto ISR_RB0 ; vá para o tratamento relativo à int. ext.
btfsc INTCON, TOIF ; overflow do timer TMRO ?
goto ISR_TMRO : vá p/ o tratamento relativo overflow timer
BANK1 ; macro BANK1
btfsc EECON1, EEIF ; fim da escrita na EEPROM ?
goto ISR_EEPROM : vá p/ o tratamento relativo fim escrita EEPROM
BANK0 ;macro BANK0

09/22/09 Ricardo Pannain 62


3. Estudo de Caso PIC 16F84
• Exemplo – continuação
ISR_PORTB
;
;
goto END_ISR
ISR_RB0
;
;
goto END_ISR
ISR_TMRO
;
;
goto END_ISR
ISR_EEPROM
;
;
goto END_ISR
END_ISR
POP ; macro POP
RETFIE ; retorna e seta o bit GIE

09/22/09 Ricardo Pannain 63


3. Estudo de Caso PIC 16F84

• Timer TMR0
– 8 bits (0 a 255)

09/22/09 Ricardo Pannain 64


3. Estudo de Caso PIC 16F84

• Diagrama de tempo de interrupção com o timer

• transição 255 para 0 – T0IF é setado

09/22/09 Ricardo Pannain 65


3. Estudo de Caso PIC 16F84
• Exemplo: Determinar o número de voltas de um motor

09/22/09 Ricardo Pannain 66


3. Estudo de Caso PIC 16F84

• Exemplo – Inicialização do timer pra sinal com borda de


decida de fonte de clock externo
clrf TMRO ;TRMO = 0
clrf INTCON ;interrupções e T0IF=0, desabilitados
bsf STATUS, RP0 ; banco 1 pelo OPTION_REG
movlw B’00110001’ ; escala 1:4, borda de descida para clock
; externo, pull up na porta B ativada
movwf OPTION_REG ; OPTION_REG <- W
TO_OVFL
btfss INTCON, T0IF ; testa bit overflow
goto TO_OVFL ; interrupção não ocorreu, espere
;
; parte do programa que processa o número de voltas do motor
;
goto TO_OVFL

09/22/09 Ricardo Pannain 67


4. Conjunto de Instruções

• 35 instruções de 14 bits do tipo


– Transferência de dados
• Feito entre o registrador work (W) e o registrador
f, que representa qualquer registrador SPR ou
GPR
– Aritmética e Lógica
– Operações com bit
– Controle do fluxo de execução de um
programa

09/22/09 Ricardo Pannain 68


4. Conjunto de Instruções

• Formato das instruções


– Operações com file register – byte oriented
13 8 7 6 0
OPCODE d f (#FILE)

d = 0 destino é W; d = 1 destino f
f = endereço de de 7 bits de registrador

09/22/09 Ricardo Pannain 69


4. Conjunto de Instruções

• Formato das instruções - continuação


– Operações com file register – bit oriented
13 10 9 8 7 6 0
OPCODE b (bit #) f (#FILE)

b = endereço de 3 bits
f = endereço de 7 bits de registrador

09/22/09 Ricardo Pannain 70


4. Conjunto de Instruções

• Formato das instruções - continuação


– Operações com literais e instruções de controle
13 8 7 0
OPCODE k (literal)

k = imediato de 8 bits

09/22/09 Ricardo Pannain 71


4. Conjunto de Instruções

• Formato das instruções - continuação


– Instruções de controle call e goto
13 11 10 0
OPCODE k (literal)

k = imediato de 11 bits

09/22/09 Ricardo Pannain 72


4. Conjunto de Instruções
• Descrição dos campos das instruções

Campo Descrição

f endereço de registradores (0x00 a 0x7F)


W working register (acumulador)
endereço do bit dentro do registrador de 8
b
bits
k literal , constante ou label
seleção de destino; d=0 armazena resultado
d
em W; d=1 no registrador f; default d=1.

09/22/09 Ricardo Pannain 73


4. Conjunto de Instruções – transferência de dados

Mnemônico Descrição Operação Flag


movlw k move cte p/ k W <- k -
movwf f move W p/ f f <- W -
movf f,d move d p/ f f <- d
clrw clear W W <- 0
clrf clear f f <- 0
f(3:0),(7:4) <-
swapf swap nibbles em f
f(7:4),(3:0)
09/22/09 Ricardo Pannain 74
4. Conjunto de Instruções – Aritmética e Lógica

Mnemônico Descrição Operação Flag


addlw k W + constante W <- W + k C,DC,Z

addwf f,d W+f d <- W + f C,DC,Z

sublw k W - constante W <- W + k C,DC,Z

subwf f,d W-f d <- W - f C,DC,Z

andlw k W & constante W <- W & k Z

andwf f,d W&f d <- W & f Z

09/22/09 Ricardo Pannain 75


4. Conjunto de Instruções-Aritmética e Lógica –cont.

Mnemônico Descrição Operação Flag


iorlw k W | constante W <- W | k Z

iorwf f,d W|f d <- W | f Z

xorlw k W xor constante W <- W xor k Z


xorwf f,d W xor f d <- W xor f Z
incf f,d incrementa f d <- f + 1 Z

decf f,d decrementa f d <- f - 1 Z

09/22/09 Ricardo Pannain 76


4. Conjunto de Instruções-Aritmética e Lógica –cont.

Mnemônico Descrição Flag


rlf f,d rotate left através do carry C

rrf f,d rotate right através do carry C

comf f,d d <- complemento(f) Z

09/22/09 Ricardo Pannain 77


4. Conjunto de Instruções – Operações com Bit

Mnemônico Descrição Operação Flag


bcf f,b reseta bit b de f f(b) <- 0 -

bsf f,d seta bit b de f f(b) <- 1 -

09/22/09 Ricardo Pannain 78


4. Conjunto de Instruções – Controle do fluxo de
execução de um programa

Mnemônico Descrição Flag


btfsc f,b se f(b) = 0, pula 1 instrução -
btfss f,b se f(b) = 1, pula 1 instrução -
decfsz f,d d <- f -1, pula 1 instrução se zero -
incfsz f,d d <- f +1, pula 1 instrução se zero -
goto k vai para endereço k -
call k chama sub-rotina no endereço k -

09/22/09 Ricardo Pannain 79


4. Conjunto de Instruções – Controle do fluxo de
execução de um programa - continuação

Mnemônico Descrição Flag


return retorna da sub-rotina -
retlw k retorna com constante em W -
retfie retona de interrupção -

09/22/09 Ricardo Pannain 80


4. Conjunto de Instruções – outras

Mnemônico Descrição Operação


nop no operation
WDT <- 0,
limpa watchdog TO <- 1,
clrwdt
timer
PD <- 1
WDT <- 0,
vai para o modo TO <- 1,
sleep
standby
PD <- 0

09/22/09 Ricardo Pannain 81


4. Conjunto de Instruções

09/22/09 Ricardo Pannain 82


5. Programação Assembly
• Programação do Microcontrolador

09/22/09 Ricardo Pannain 83


5. Programação Assembly

• Linguagem assembly

– Labels
– Instruções
– Operandos
– Diretivas
– Comentários

09/22/09 Ricardo Pannain 84


5. Programação Assembly

• Labels

09/22/09 Ricardo Pannain 85


5. Programação Assembly

• Instruções

09/22/09 Ricardo Pannain 86


5. Programação Assembly

• Operandos

09/22/09 Ricardo Pannain 87


5. Programação Assembly
• Comentários (;)
clrf TMRO ;TRMO = 0
clrf INTCON ;interrupções e T0IF=0, desabilitados
bsf STATUS, RP0 ; banco 1 pelo OPTION_REG
movlw B’00110001’ ; escala 1:4, borda de descida para
clock ; externo, pull up na porta B ativada
movwf OPTION_REG ; OPTION_REG <- W
TO_OVFL
btfss INTCON, T0IF ; testa bit overflow
goto TO_OVFL ; interrupção não ocorreu, espere
;
; parte do programa que processa o número de voltas do motor
;
goto TO_OVFL

09/22/09 Ricardo Pannain 88


5. Programação Assembly
• Diretivas

09/22/09 Ricardo Pannain 89


5. Programação Assembly
• Diretivas de Controle
DIRETIVAS DESCRIÇÃO
#define dá um significado p/ um texto
#include inclui arquivo no programa
constant define uma constante
variable define uma variável
set define uma variável
equ define uma constante
org define um endereço p/ carregar o programa
end fim do programa

09/22/09 Ricardo Pannain 90


5. Programação Assembly
• Instruções Condicionais
DIRETIVAS DESCRIÇÃO
if branch condicional
else alternativa para o if

endif fim de um branch condicional

while executa trecho enquanto condição verdadeira

endw fim de um while

ifdef execução de parte do programa se símbolo foi definido


execução de parte do programa se símbolo não foi
ifndef
definido

09/22/09 Ricardo Pannain 91


5. Programação Assembly
• Diretivas de Dados

DIRETIVAS DESCRIÇÃO

cblock define um bloco de constantes

endc fim da definição de um bloco de constantes

db define um dado do tipo byte

de define um byte da EEPROM

dt define um conjunto (tabela) de dados

09/22/09 Ricardo Pannain 92


5. Programação Assembly
• Diretivas de Configuração

DIRETIVAS DESCRIÇÃO
_config seta configuração de bits
processor define o tipo do microcontrolador

09/22/09 Ricardo Pannain 93


5. Programação Assembly

• Macros

09/22/09 Ricardo Pannain 94


5. Programação Assembly - Operadores

09/22/09 Ricardo Pannain 95


5. Programação Assembly - Exemplo

09/22/09 Ricardo Pannain 96


6. MPLAB – Tela inicial

09/22/09 Ricardo Pannain 97


6. MPLAB – Modo de desenvolvimento
• OPTIONS -> DEVELOPMENT MODE

09/22/09 Ricardo Pannain 98


6. MPLAB – Criando um Projeto
• PROJECT -> NEW PROJECT

09/22/09 Ricardo Pannain 99


6. MPLAB – Ajustando elementos de projeto

09/22/09 Ricardo Pannain 100


6. MPLAB – Parâmetros do montador

09/22/09 Ricardo Pannain 101


6. MPLAB – Abrindo um novo projeto

09/22/09 Ricardo Pannain 102


6. MPLAB – Adicionado arquivo p/ montador

09/22/09 Ricardo Pannain 103


6. MPLAB – Escrevendo um novo programa
• FILE -> NEW

09/22/09 Ricardo Pannain 104


6. MPLAB – Salvando o novo arquivo

09/22/09 Ricardo Pannain 105


6. MPLAB – Escrevendo um Programa

09/22/09 Ricardo Pannain 106


6. MPLAB – Mensagens na montagem

09/22/09 Ricardo Pannain 107


6. MPLAB – Simulador MPSIM
• Simulando e resetando um microcontrolador

09/22/09 Ricardo Pannain 108


6. MPLAB – MPSIM e sua janela

09/22/09 Ricardo Pannain 109


6. MPLAB – Barra de Ferramentas

09/22/09 Ricardo Pannain 110


7. Exercícios – 1
• Programa que faz com que um LED, ligado à saída RB0, seja aceso,
caso uma chave C, ligada à entrada RA2, esteja em “1”. Caso
contrário, o diodo se apaga.

PIC
RA0 RB0
RB1
RA1 RB2
RB3
RA2 RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 111


7. Exercícios – 2
• Programa que funciona como um “segredo eletrônico”. O
microcontrolador espera uma combinação de 5 chaves, ligadas na
porta A (RA0 – RA5), e, se esta combinação ocorrer, todos os LEDs
ligados à porta B (RB0 – RB7) se acendem. Caso contrario, eles
permanecem apagados. A combinação deve ser 1-0-1-0-1.

L1 L2 L3 L4 L5 L6 L7 L8

PIC
RA0 RB0
RB1
RA1 RB2
RB3
RA2 RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 112


7. Exercícios – 3
• Programa que utiliza um display de 7 segmentos, ligado à porta B
(RB0 – RB7) para mostrar o valor de uma chave C ligada à entrada
RA2 da porta A. Se a chave estiver ligada, o display exibe o número
1. Caso contrário, é exibido o número 0.
Gnd

abcdefg.
PIC
RA0 RB0
RB1
RA1 RB2
RB3
RA2 RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 113


7. Exercícios – 4
• Programa que faz com que o LED, ligado ao pino RB0 da porta B acenda e apague a
cada segundo. Como o ciclo de clock do microcontrolador é muito pequeno, é
necessário introduzir atrasos para que as transições do LED possam ser visualizadas.
Estes atrasos funcionam da seguinte maneira: uma rotina, chamada Atraso1S, que
utiliza a sub-rotina Del10, que gera atrasos de 10 ms a cada chamada. Dentro desta
rotina existe uma variável auxiliar (TEMPO1), que começa com o valor 100 e vai sendo
decrementada. Cada vez que ela é decrementada, a rotina Del10 é chamada
novamente. Ou seja, serão 100 chamadas à rotina Del10, gerando um atraso total de 1
segundo.
L1

PIC
RA0 RB0
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 114


7. Exercícios – 5
• Programa que conta as transições (mudanças) de uma chave C,
ligada ao pino RA0 da porta A. A quantidade de transições é
mostrada por 8 LEDs ligados aos pinos da porta B, em formato
binário
L1 L2 L3 L4 L5 L6 L7 L8

PIC
RA0 RB0
RB1
RA1 RB2
RB3
RA2 RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 115


7. Exercícios – 6
• Programa que faz com que um speaker, ligado ao pino RB7 da porta B, dê beeps
periódicos a cada segundo. Cada beep dura cerca de 0,5s. Como o ciclo de clock do
microcontrolador é muito pequeno, é necessário introduzir atrasos para que os beeps
do speaker possam ser ouvidos claramente. Estes atrasos funcionam da seguinte
maneira: duas rotinas, uma chamada Atraso1S (atraso de 1 segundo) e outra,
AtrasoMS (atraso de 0,5 segundos), utilizam a subrotina Del10, que gera atrasos de 10
ms a cada chamada. Dentro desta rotina existe uma variável auxiliar (TEMPO1), que,
para a rotina Atraso1S, tem o valor inicial 100 e, para a rotina AtrasoMS tem o valor
inicial de 50, e que vai sendo decrementada. Cada vez que ela é decrementada, a
rotina Del10 é chamada novamente.
PIC
RA0 RB0 + -
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 116


7. Exercícios – 7
• Programa que escreve dados na memória EEPROM do microcontrolador. A posição 0
desta memória irá armazenar o valor das chaves ligadas aos pinos RA0 à RA4 da porta
A (em binário). A verificação do valor armazenado na memória pode ser visualizada
pelo programa de gravação do PIC, já que esta memória não é apagada até ser
subscrita. A gravação da memória EEPROM leva um certo tempo. Devemos esperar
este tempo antes de continuar a execução do programa. Temos duas opções: ou
esperamos que o bit WR do registrador EECON1 seja limpo pelo hardware, indicando o
fim da escrita, ou introduzirmos um atraso, que espera uma determinada quantidade de
tempo antes de continuar a execução. Esta implementação utiliza um atraso de,
aproximadamente, 2,6 segundos, para a espera da gravação da memória EEPROM.

PIC
RA0 RB0
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 117


7. Exercícios – 8
• Programa que lê os dados anteriormente gravados na memória
EEPROM, na posição 0. O valor lido é representado, em binário,
através de LEDs ligados aos pinos da porta B.

L1 L2 L3 L4 L5 L6 L7 L8

PIC
RA0 RB0
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 118


7. Exercícios – 9
• Programa similar ao programa 5, mas explora os recursos de WatchDog e modo Sleep
do microcontrolador. A partir este programa, passaremos a utilizar o arquivo de
definições padrão da Microchip para microcontroladores modelo 16F84, onde se
encontra as definições dos nomes e endereços de todos os SFRs (registradores
especiais) e uma série de outras definições necessárias para a utilização do
microcontrolador 16F84. Como curiosidade, você pode consultar este arquivo para
visualizar todos os nomes dos SFRs e constantes que podem ser utilizadas na
programação do 16F84.
L1 L2 L3 L4 L5 L6 L7 L8

PIC
RA0 RB0
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 119


7. Exercícios – 10
• Programa que simula os movimentos de um robô. Este robô
imaginário possui dois dispositivos infravermelhos, que fazem com
que ele siga uma trajetória desenhada no chão, e dois motores, um
para cada roda de tração. Quando os sensores detectam a
necessidade de acertar a rota, os motores devem ser manipulados a
fim de realizar o acerto. Por exemplo, se o robô estiver desviando a
rota para a esquerda, o robô deve se mover para a direita até que a
rota seja acertada. Para isto, o motor da direita deve ser revertido
(rodar para trás), e o da esquerda deve continuar ligado (rodando
para frente). Quando a rota estiver certa, ambos os motores devem
ser ligados para frente, para que o robô continue andando em frente.
Os movimentos possíveis são para a esquerda (reverter o motor da
esquerda e manter o motor da direita a frente), para a direita
(reverter o motor da direita e manter o motor da esquerda a frente),
para frente (manter os dois motores a frente), e para trás (reverter
os dois motores).

09/22/09 Ricardo Pannain 120


7. Exercícios – 10
• Os sensores serão simulados pelas chaves ligadas aos pinos RA0 e
RA1 da porta. Vamos convencionar que o valor 0 significa que o
sensor não detectou desvio na trajetória, e o valor 1 significa que o
sensor detectou um desvio na trajetória. Os LEDs ligados aos pinos
RB0 e RB1 da porta B irão simular as saídas de controle dos dois
motores de tração (direito e esquerdo, respectivamente). Vamos
convencionar que o valor 1 significa ligar os motores à frente, e 0
significa reverter os motores. L1 L2

PIC
RA0 RB0
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 121


7. Exercícios – 11
• Programa que gera números aleatórios. Irá funcionar da seguinte maneira:
– Devemos gerar números aleatórios de 0 a 6; quando a chave C, ligada ao pino RA0 da
porta A, estiver em "1", o display (ligado aos pinos RB0 à RB7 da porta B) irá mostrar,
seqüencialmente, números de 0 a 6, em intervalos de 0,05 segundos; ao passar a
chave C para "0", o display mostrará, durante 3 segundos, o número aleatório obtido;
passados os 3 segundos, o display se apaga e a seqüência se repete 
• O número representado nos 4 bits menos significativos do registrador Work (W) é
transformado em um número equivalente no display de 7 segmentos, como se
estivéssemos implementando um conversor. O código referente ao número no display de 7
segmentos também retorna no registrador W.
Gnd

abcdefg.
PIC
RA0 RB0
RB1
RA1 RB2
RA2 RB3
RB4
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 122


7. Exercícios – 12

• Programa que irá simular um contador de 2 dígitos (00 a 99). Para sua
realização, serão utilizados dois displays de 7 segmentos, e dois
conversores binário-7segmentos, que recebe um número binário de 4
bits e transforma este número para a representação do display. Para
exibir os números nos displays, utilizaremos a porta B, sendo que os 4
bits menos significativos representarão o número a ser exibido no
primeiro display (unidade), e os 4 bits mais significativos representarão
o número a ser exibido no segundo display (dezena). Este contador
terá duas chaves e um botão (push buttom). A chave ligada à entrada
RA0 da porta A irá controlar o sentido da contagem (0 = Decrescente e
1 = Crescente). A chave ligada à entrada RA1 da porta A irá controlar
a parada do contador (0 = Parar e 1 = Contar). E, por último, o botão
ligado à RA2 servirá de reset, ou seja, quando pressionado, irá zerar
os displays e recomeçar a contagem.

09/22/09 Ricardo Pannain 123


7. Exercícios – 12
Gnd Gnd

abcdefg. abcdefg.

a
b
c
d
e
f
g

a
b
c
d
e
f
g
4543

4543
PH

D3
D2

LD
D3
D2
D1
D0
LD
BI

D1
D0
BI
PH
PIC
RA0 RB0
RB1
RA1 RB2
RB3
RA2 RB4
+V
RA3 RB5
RB6
RA4 RB7

09/22/09 Ricardo Pannain 124


8. Bibliografia

• David A. Patterson & John L. Hennessy; Computer Organization & Design


– The Hardware and Software Interface – Ed. Morgan Kaufmann. – 2ª
Edição.
• G. Jack Lipovski; Introduction to Microcontrollers – Ed. Academic Press –
1ª Edição.
• www.microchip.com; Microchip – PIC16F8X Data Sheet .
• www.microchip.com; Microchip – PIC16F87X Data Sheet.
• www.microchip.com; Microchip – PIC16F84 Data Sheet.
• www.vidal.com.br ; Mini curso MPLAB passo a passo.
• Ricardo Pannain; Notas de aula.

09/22/09 Ricardo Pannain 125

Você também pode gostar