125
09/22/09 Ricardo Pannain 1 Microcontroladores

microcontroladores_unicamp

Embed Size (px)

Citation preview

Page 1: microcontroladores_unicamp

09/22/09 Ricardo Pannain 1

Microcontroladores

Page 2: microcontroladores_unicamp

09/22/09 Ricardo Pannain 2

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

Page 3: microcontroladores_unicamp

09/22/09 Ricardo Pannain 3

1. Conceitos Básicos de Arquitetura de Computadores

• Arquitetura Havard X von Neuman

Page 4: microcontroladores_unicamp

09/22/09 Ricardo Pannain 4

1. Conceitos Básicos de Arquitetura de Computadores

• Organização Básica de um Computador Digital

CLOCK

MEMÓRIA

PRINCIPAL

DE ENTRADA

E SAÍDA

UNIDADE CENTRAL DE PROCESSAMENTO - CPU

UNIDADE

DISPOSITIVOS

DE E/S

Barramento de dados

Barramento de endereços

Barramento de controle

REGS. DE

PROPÓSITO

GERAL

UNIDADE DE

ARITMÉTICA E LÓGICA

UNID. DE

CONTROLE

REGS.

ESPECIAIS

Page 5: microcontroladores_unicamp

09/22/09 Ricardo Pannain 5

1. Conceitos Básicos de Arquitetura de Computadores

• Organização Básica de um Computador Digital MEMÓRIA

UNIDADE CENTRAL DE PROCESSAMENTO - CPU

Barramento de dados

Barramento de endereços

Barramento de controle

UNIDADE DE

ARITMÉTICA E LÓGICA

UNID. DE

CONTROLE

A B

C D

E F

... ...

RI

SP

RDM REM PC

Page 6: microcontroladores_unicamp

09/22/09 Ricardo Pannain 6

1. Conceitos Básicos de Arquitetura de Computadores

• Arquitetura RISC

Time2 4 6 8 10

IF ID WBEX MEM

Page 7: microcontroladores_unicamp

09/22/09 Ricardo Pannain 7

1. Conceitos Básicos de Arquitetura de Computadores

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

Instructionfetch

Reg ALUData

accessReg

8 nsInstruction

fetchReg ALU

Dataaccess

Reg

8 nsInstruction

fetch

8 ns

Time

lw $1, 100($0)

lw $2, 200($0)

lw $3, 300($0)

2 4 6 8 10 12 14 16 18

2 4 6 8 10 12 14

...

Programexecutionorder(in instructions)

Instructionfetch

Reg ALUData

accessReg

Time

lw $1, 100($0)

lw $2, 200($0)

lw $3, 300($0)

2 nsInstruction

fetchReg ALU

Dataaccess

Reg

2 nsInstruction

fetchReg ALU

Dataaccess

Reg

2 ns 2 ns 2 ns 2 ns 2 ns

Programexecutionorder(in instructions)

Page 8: microcontroladores_unicamp

09/22/09 Ricardo Pannain 8

1. Conceitos Básicos de Arquitetura de Computadores

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

IM Reg

IM Reg

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6

Time (in clock cycles)

sub $2, $1, $3

Programexecutionorder(in instructions)

and $12, $2, $5

IM Reg DM Reg

IM DM Reg

IM DM Reg

CC 7 CC 8 CC 9

10 10 10 10 10/– 20 – 20 – 20 – 20 – 20

or $13, $6, $2

add $14, $2, $2

sw $15, 100($2)

Value of register $2:

DM Reg

Reg

Reg

Reg

DM

Page 9: microcontroladores_unicamp

09/22/09 Ricardo Pannain 9

1. Conceitos Básicos de Arquitetura de Computadores

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

Reg

IM

Reg

Reg

IM

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6

Time (in clock cycles)

lw $2, 20($1)

Programexecutionorder(in instructions)

and $4, $2, $5

IM Reg DM Reg

IM DM Reg

IM DM Reg

CC 7 CC 8 CC 9

or $8, $2, $6

add $9, $4, $2

slt $1, $6, $7

DM Reg

Reg

Reg

DM

Page 10: microcontroladores_unicamp

09/22/09 Ricardo Pannain 10

1. Conceitos Básicos de Arquitetura de Computadores

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

IM Reg

IM Reg

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6

Time (in clock cycles)

sub $2, $1, $3

Programexecutionorder(in instructions)

and $12, $2, $5

IM Reg DM Reg

IM DM Reg

IM DM Reg

CC 7 CC 8 CC 9

10 10 10 10 10/– 20 – 20 – 20 – 20 – 20

or $13, $6, $2

add $14, $2, $2

sw $15, 100($2)

Value of register $2:

DM Reg

Reg

Reg

Reg

DM

Page 11: microcontroladores_unicamp

09/22/09 Ricardo Pannain 11

1. Conceitos Básicos de Arquitetura de Computadores

• Exemplo de Arquitetura RISC - MIPS

PC

Instructionmemory

Inst

ruct

ion

Add

Instruction[20– 16]

Mem

toR

eg

ALUOp

Branch

RegDst

ALUSrc

4

16 32Instruction[15– 0]

0

0

Mux

0

1

Add Addresult

RegistersWriteregister

Writedata

Readdata 1

Readdata 2

Readregister 1

Readregister 2

Signextend

Mux

1

ALUresult

Zero

Writedata

Readdata

Mux

1

ALUcontrol

Shiftleft 2

Reg

Writ

e

MemRead

Control

ALU

Instruction[15– 11]

6

EX

M

WB

M

WB

WBIF/ID

PCSrc

ID/EX

EX/MEM

MEM/WB

Mux

0

1

Mem

Writ

e

AddressData

memory

Address

Page 12: microcontroladores_unicamp

09/22/09 Ricardo Pannain 12

2. Arquitetura Básica de um Microcontrolador

• Microcontrolador

Page 13: microcontroladores_unicamp

09/22/09 Ricardo Pannain 13

2. Arquitetura Básica de um Microcontrolador

• Microcontrolador

Page 14: microcontroladores_unicamp

09/22/09 Ricardo Pannain 14

2. Arquitetura Básica de um Microcontrolador

• Microcontrolador – Unidade de Memória

Page 15: microcontroladores_unicamp

09/22/09 Ricardo Pannain 15

2. Arquitetura Básica de um Microcontrolador

• Microcontrolador – Unidade Central de Processamento

Page 16: microcontroladores_unicamp

09/22/09 Ricardo Pannain 16

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

Page 17: microcontroladores_unicamp

09/22/09 Ricardo Pannain 17

2. Arquitetura Básica de um Microcontrolador• Microcontrolador – Unidade de E/S

– Portas de entrada, saída e bi-direcionais

Page 18: microcontroladores_unicamp

09/22/09 Ricardo Pannain 18

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

Page 19: microcontroladores_unicamp

09/22/09 Ricardo Pannain 19

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

Page 20: microcontroladores_unicamp

09/22/09 Ricardo Pannain 20

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

Page 21: microcontroladores_unicamp

09/22/09 Ricardo Pannain 21

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

Page 22: microcontroladores_unicamp

09/22/09 Ricardo Pannain 22

3. Estudo de Caso PIC 16F84• Microcontrolador PIC 16F84

– Microcontrolador RISC de 8 bits

Page 23: microcontroladores_unicamp

09/22/09 Ricardo Pannain 23

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

Page 24: microcontroladores_unicamp

09/22/09 Ricardo Pannain 24

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

– Aplicações automobilísticas

– Controle de equipamentos industriais

– Tranca de portas

– Dispositivos de segurança

Page 25: microcontroladores_unicamp

09/22/09 Ricardo Pannain 25

3. Estudo de Caso PIC 16F84

• Ciclo de instrução/Clock

Page 26: microcontroladores_unicamp

09/22/09 Ricardo Pannain 26

3. Estudo de Caso PIC 16F84

• Pipelining

Page 27: microcontroladores_unicamp

09/22/09 Ricardo Pannain 27

3. Estudo de Caso PIC 16F84

• Pinagem

Page 28: microcontroladores_unicamp

09/22/09 Ricardo Pannain 28

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.

Page 29: microcontroladores_unicamp

09/22/09 Ricardo Pannain 29

3. Estudo de Caso PIC 16F84

• Geração de clock - osciladores

Page 30: microcontroladores_unicamp

09/22/09 Ricardo Pannain 30

3. Estudo de Caso PIC 16F84

• Reset

Page 31: microcontroladores_unicamp

09/22/09 Ricardo Pannain 31

3. Estudo de Caso PIC 16F84

• Unidade Central de Processamento

Page 32: microcontroladores_unicamp

09/22/09 Ricardo Pannain 32

3. Estudo de Caso PIC 16F84

• Unidade Lógica e Aritmética

Page 33: microcontroladores_unicamp

09/22/09 Ricardo Pannain 33

3. Estudo de Caso PIC 16F84

• PIC 16F84 - Diagrama de Blocos

Page 34: microcontroladores_unicamp

09/22/09 Ricardo Pannain 34

3. Estudo de Caso PIC 16F84

• Registro de Estado

Page 35: microcontroladores_unicamp

09/22/09 Ricardo Pannain 35

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

Page 36: microcontroladores_unicamp

09/22/09 Ricardo Pannain 36

3. Estudo de Caso PIC 16F84

• Registro de Opção

Page 37: microcontroladores_unicamp

09/22/09 Ricardo Pannain 37

3. Estudo de Caso PIC 16F84

• Registro de Opção

Page 38: microcontroladores_unicamp

09/22/09 Ricardo Pannain 38

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

Page 39: microcontroladores_unicamp

09/22/09 Ricardo Pannain 39

3. Estudo de Caso PIC 16F84

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

• TRISA – 85h

• TRSIB – 86h

Page 40: microcontroladores_unicamp

09/22/09 Ricardo Pannain 40

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:

clrfSTATUS ; Bank0

clrf PORTB ; PORTB=0

bsf STATUS,RP0 ; Bank1

movlw 0x0f ; define pinos de entrada e saída

movwf TRISB ; escreve no registrador TRISB

Page 41: microcontroladores_unicamp

09/22/09 Ricardo Pannain 41

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:clrfSTATUS ; Bank0clrf PORTA ; PORTA=0bsf STATUS,RP0 ; Bank1movlw 0x1f ; define pinos de entrada e saídamovwf TRISA ; escreve no registrador TRISA

Page 42: microcontroladores_unicamp

09/22/09 Ricardo Pannain 42

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

Page 43: microcontroladores_unicamp

09/22/09 Ricardo Pannain 43

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

Page 44: microcontroladores_unicamp

09/22/09 Ricardo Pannain 44

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

Page 45: microcontroladores_unicamp

09/22/09 Ricardo Pannain 45

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

Page 46: microcontroladores_unicamp

09/22/09 Ricardo Pannain 46

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

Page 47: microcontroladores_unicamp

09/22/09 Ricardo Pannain 47

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

Page 48: microcontroladores_unicamp

09/22/09 Ricardo Pannain 48

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

Page 49: microcontroladores_unicamp

09/22/09 Ricardo Pannain 49

3. Estudo de Caso PIC 16F84

• Interrupções

Page 50: microcontroladores_unicamp

09/22/09 Ricardo Pannain 50

3. Estudo de Caso PIC 16F84

• Interrupções– Registrador de Controle INTCON

Page 51: microcontroladores_unicamp

09/22/09 Ricardo Pannain 51

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 status0=no change occured on any of the pins

bit 1 INTF (INT External Interrupt Flag bit) External interrupt occured.1=interrupt occured0=interrupt did not occurIf 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 00h0=overflow did not occurBit must be cleared in program in order for an interrupt to be detected.

Page 52: microcontroladores_unicamp

09/22/09 Ricardo Pannain 52

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 status0=interrupts disabled at the change of statusIf 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 enabled0=external interrupt disabledIf 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 enabled0=interrupt disabledIf T0IE and T0IF were set simultaneously, interrupt would occur.

Page 53: microcontroladores_unicamp

09/22/09 Ricardo Pannain 53

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 EEPROM1=interrupt enabled0=interrupt disabledIf 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 enabled0=all interrupts are disabled

Page 54: microcontroladores_unicamp

09/22/09 Ricardo Pannain 54

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

Page 55: microcontroladores_unicamp

09/22/09 Ricardo Pannain 55

3. Estudo de Caso PIC 16F84

• PUSH e POP no tratamento de interrupções

Page 56: microcontroladores_unicamp

09/22/09 Ricardo Pannain 56

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

Page 57: microcontroladores_unicamp

09/22/09 Ricardo Pannain 57

3. Estudo de Caso PIC 16F84

Pushbtfss STATUS, RP0 ; banco 0goto RPOCLEAR ; simbcf STATUS, RP0 ; não, vá para banco 0movwf W_TEMP ; salva registrador Wswapf STATUS, W ; W <- STATUSmovwf STATUS_TEMP ; STATUS_TEMP <- Wbsf STATUS_TEMP,1 ; RP0(STATUS_TEMP)=1goto ISR_code ; push completo

RPOCLEARmovwf W_TEMP ; salvo registrador Wswapf STATUS_W ; W <- STATUSmovwf STATUS_TEMP ; STATUS_TEMP <- W;

ISR_code;; rotina de interrupção;

Page 58: microcontroladores_unicamp

09/22/09 Ricardo Pannain 58

3. Estudo de Caso PIC 16F84

Popswapf STAUS_TEMP ; W <- STATUS_TEMPmovwf STATUS ; STATUS <- Wbtfss STATUS, RP0 ; banco 1 ?goto Return_WREG ; nãobcf STATUS, RP0 ; sim vá para banco 0swapf W_TEMP, F ; retorna conteúdo de Wswapf W_TEMP, W ;bsf STATUS_RP0 ; VOLTO BANCO 1retfie ; terminou POP

Return_WREGswapf W_TEMP, F ; retorna conteúdo de Wswapf W_TEMP, W ;retfie ; terminou POP

Page 59: microcontroladores_unicamp

09/22/09 Ricardo Pannain 59

3. Estudo de Caso PIC 16F84

• MACROS para POP e PUSHPUSH macro

movwf W_TEMP ; W_TEMP <- Wswapf W_TEMP,F ; swap W_TEMP,FBANK1 ; macro para mudar para banco 1swapf OPTION_REG, W ; W <- OPTION_REGmovwf OPTION_TEMP ;OPTION_TEMP <- WBANK0 ; macro para mudar para banco 0swapf STATUS,W ; W <- STATUSmovwf STAT_TEMP ; STAT_TEMP <- Wendm

POP macroswapf STA_TEMP,W ; W<- STAT_TEMPmovwf STATUS ; STATUS <-WBANK1 ; macro para mudar para banco 1swapf OPTION_TEMP,W; W<-OPTIO_TEMPmovwf OPTION_REG ; OPTION_REG <- WBANK0 ; macro para mudar para banco 0swapf W_TEMP,W ; W<- W_TEMPendm

Page 60: microcontroladores_unicamp

09/22/09 Ricardo Pannain 60

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])

Page 61: microcontroladores_unicamp

09/22/09 Ricardo Pannain 61

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

Page 62: microcontroladores_unicamp

09/22/09 Ricardo Pannain 62

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çãobtfsc INTCON, GIE ; GIE está OFF ?goto ISR_ADDR ; não, volte para o inícioPUSH ; macro PUSHbtfsc INTCON, RBIF ; mudanças portb[4..7] ?goto ISR_PORTB ; vá para o tratamento relativo às mudançasbtfsc 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 timerBANK1 ; macro BANK1btfsc EECON1, EEIF ; fim da escrita na EEPROM ?goto ISR_EEPROM : vá p/ o tratamento relativo fim escrita EEPROMBANK0 ;macro BANK0

Page 63: microcontroladores_unicamp

09/22/09 Ricardo Pannain 63

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_ISRPOP ; macro POPRETFIE ; retorna e seta o bit GIE

Page 64: microcontroladores_unicamp

09/22/09 Ricardo Pannain 64

3. Estudo de Caso PIC 16F84

• Timer TMR0– 8 bits (0 a 255)

Page 65: microcontroladores_unicamp

09/22/09 Ricardo Pannain 65

3. Estudo de Caso PIC 16F84

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

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

Page 66: microcontroladores_unicamp

09/22/09 Ricardo Pannain 66

3. Estudo de Caso PIC 16F84

• Exemplo: Determinar o número de voltas de um motor

Page 67: microcontroladores_unicamp

09/22/09 Ricardo Pannain 67

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, desabilitadosbsf STATUS, RP0 ; banco 1 pelo OPTION_REGmovlw B’00110001’ ; escala 1:4, borda de descida para clock

; externo, pull up na porta B ativadamovwf OPTION_REG ; OPTION_REG <- W

TO_OVFLbtfss INTCON, T0IF ; testa bit overflowgoto TO_OVFL ; interrupção não ocorreu, espere

;; parte do programa que processa o número de voltas do motor;

goto TO_OVFL

Page 68: microcontroladores_unicamp

09/22/09 Ricardo Pannain 68

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

Page 69: microcontroladores_unicamp

09/22/09 Ricardo Pannain 69

4. Conjunto de Instruções

• Formato das instruções– Operações com file register – byte oriented

d = 0 destino é W; d = 1 destino f

f = endereço de de 7 bits de registrador

OPCODE d f (#FILE)

13 8 7 6 0

Page 70: microcontroladores_unicamp

09/22/09 Ricardo Pannain 70

4. Conjunto de Instruções

• Formato das instruções - continuação– Operações com file register – bit oriented

b = endereço de 3 bits

f = endereço de 7 bits de registrador

OPCODE b (bit #) f (#FILE)

13 10 9 8 7 6 0

Page 71: microcontroladores_unicamp

09/22/09 Ricardo Pannain 71

4. Conjunto de Instruções

• Formato das instruções - continuação– Operações com literais e instruções de controle

k = imediato de 8 bits

OPCODE k (literal)

13 8 7 0

Page 72: microcontroladores_unicamp

09/22/09 Ricardo Pannain 72

4. Conjunto de Instruções

• Formato das instruções - continuação– Instruções de controle call e goto

k = imediato de 11 bits

OPCODE k (literal)

13 11 10 0

Page 73: microcontroladores_unicamp

09/22/09 Ricardo Pannain 73

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)

bendereço do bit dentro do registrador de 8 bits

k literal , constante ou label

d seleção de destino; d=0 armazena resultado em W; d=1 no registrador f; default d=1.

Page 74: microcontroladores_unicamp

09/22/09 Ricardo Pannain 74

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

swapf swap nibbles em ff(3:0),(7:4) <- f(7:4),(3:0)

Page 75: microcontroladores_unicamp

09/22/09 Ricardo Pannain 75

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

Page 76: microcontroladores_unicamp

09/22/09 Ricardo Pannain 76

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

Page 77: microcontroladores_unicamp

09/22/09 Ricardo Pannain 77

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

Page 78: microcontroladores_unicamp

09/22/09 Ricardo Pannain 78

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 -

Page 79: microcontroladores_unicamp

09/22/09 Ricardo Pannain 79

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 -

Page 80: microcontroladores_unicamp

09/22/09 Ricardo Pannain 80

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 -

Page 81: microcontroladores_unicamp

09/22/09 Ricardo Pannain 81

4. Conjunto de Instruções – outras

Mnemônico Descrição Operação

nop no operation

clrwdtlimpa watchdog timer

WDT <- 0, TO <- 1, PD <- 1

sleepvai para o modo standby

WDT <- 0, TO <- 1, PD <- 0

Page 82: microcontroladores_unicamp

09/22/09 Ricardo Pannain 82

4. Conjunto de Instruções

Page 83: microcontroladores_unicamp

09/22/09 Ricardo Pannain 83

5. Programação Assembly

• Programação do Microcontrolador

Page 84: microcontroladores_unicamp

09/22/09 Ricardo Pannain 84

5. Programação Assembly

• Linguagem assembly

– Labels

– Instruções

– Operandos

– Diretivas

– Comentários

Page 85: microcontroladores_unicamp

09/22/09 Ricardo Pannain 85

5. Programação Assembly

• Labels

Page 86: microcontroladores_unicamp

09/22/09 Ricardo Pannain 86

5. Programação Assembly

• Instruções

Page 87: microcontroladores_unicamp

09/22/09 Ricardo Pannain 87

5. Programação Assembly

• Operandos

Page 88: microcontroladores_unicamp

09/22/09 Ricardo Pannain 88

5. Programação Assembly

• Comentários (;)

clrf TMRO ;TRMO = 0 clrf INTCON ;interrupções e T0IF=0,

desabilitadosbsf STATUS, RP0 ; banco 1 pelo OPTION_REGmovlw B’00110001’ ; escala 1:4, borda de descida

para clock ; externo, pull up na porta B ativada

movwf OPTION_REG ; OPTION_REG <- WTO_OVFL

btfss INTCON, T0IF ; testa bit overflowgoto TO_OVFL ; interrupção não ocorreu, espere

;; parte do programa que processa o número de voltas do motor;

goto TO_OVFL

Page 89: microcontroladores_unicamp

09/22/09 Ricardo Pannain 89

5. Programação Assembly

• Diretivas

Page 90: microcontroladores_unicamp

09/22/09 Ricardo Pannain 90

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

Page 91: microcontroladores_unicamp

09/22/09 Ricardo Pannain 91

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

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

Page 92: microcontroladores_unicamp

09/22/09 Ricardo Pannain 92

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

Page 93: microcontroladores_unicamp

09/22/09 Ricardo Pannain 93

5. Programação Assembly

• Diretivas de Configuração

DIRETIVAS DESCRIÇÃO

_config seta configuração de bits

processor define o tipo do microcontrolador

Page 94: microcontroladores_unicamp

09/22/09 Ricardo Pannain 94

5. Programação Assembly

• Macros

Page 95: microcontroladores_unicamp

09/22/09 Ricardo Pannain 95

5. Programação Assembly - Operadores

Page 96: microcontroladores_unicamp

09/22/09 Ricardo Pannain 96

5. Programação Assembly - Exemplo

Page 97: microcontroladores_unicamp

09/22/09 Ricardo Pannain 97

6. MPLAB – Tela inicial

Page 98: microcontroladores_unicamp

09/22/09 Ricardo Pannain 98

6. MPLAB – Modo de desenvolvimento

• OPTIONS -> DEVELOPMENT MODE

Page 99: microcontroladores_unicamp

09/22/09 Ricardo Pannain 99

6. MPLAB – Criando um Projeto

• PROJECT -> NEW PROJECT

Page 100: microcontroladores_unicamp

09/22/09 Ricardo Pannain 100

6. MPLAB – Ajustando elementos de projeto

Page 101: microcontroladores_unicamp

09/22/09 Ricardo Pannain 101

6. MPLAB – Parâmetros do montador

Page 102: microcontroladores_unicamp

09/22/09 Ricardo Pannain 102

6. MPLAB – Abrindo um novo projeto

Page 103: microcontroladores_unicamp

09/22/09 Ricardo Pannain 103

6. MPLAB – Adicionado arquivo p/ montador

Page 104: microcontroladores_unicamp

09/22/09 Ricardo Pannain 104

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

Page 105: microcontroladores_unicamp

09/22/09 Ricardo Pannain 105

6. MPLAB – Salvando o novo arquivo

Page 106: microcontroladores_unicamp

09/22/09 Ricardo Pannain 106

6. MPLAB – Escrevendo um Programa

Page 107: microcontroladores_unicamp

09/22/09 Ricardo Pannain 107

6. MPLAB – Mensagens na montagem

Page 108: microcontroladores_unicamp

09/22/09 Ricardo Pannain 108

6. MPLAB – Simulador MPSIM

• Simulando e resetando um microcontrolador

Page 109: microcontroladores_unicamp

09/22/09 Ricardo Pannain 109

6. MPLAB – MPSIM e sua janela

Page 110: microcontroladores_unicamp

09/22/09 Ricardo Pannain 110

6. MPLAB – Barra de Ferramentas

Page 111: microcontroladores_unicamp

09/22/09 Ricardo Pannain 111

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

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 112: microcontroladores_unicamp

09/22/09 Ricardo Pannain 112

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.

L8L7L6L5L4L3L2L1

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 113: microcontroladores_unicamp

09/22/09 Ricardo Pannain 113

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.

abcdefg.

Gnd

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 114: microcontroladores_unicamp

09/22/09 Ricardo Pannain 114

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

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 115: microcontroladores_unicamp

09/22/09 Ricardo Pannain 115

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

L8L7L6L5L4L3L2L1

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 116: microcontroladores_unicamp

09/22/09 Ricardo Pannain 116

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

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 117: microcontroladores_unicamp

09/22/09 Ricardo Pannain 117

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

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 118: microcontroladores_unicamp

09/22/09 Ricardo Pannain 118

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.

L8L7L6L5L4L3L2L1

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 119: microcontroladores_unicamp

09/22/09 Ricardo Pannain 119

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.

L8L7L6L5L4L3L2L1

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 120: microcontroladores_unicamp

09/22/09 Ricardo Pannain 120

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).

Page 121: microcontroladores_unicamp

09/22/09 Ricardo Pannain 121

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. L2L1

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 122: microcontroladores_unicamp

09/22/09 Ricardo Pannain 122

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.

abcdefg.

Gnd

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 123: microcontroladores_unicamp

09/22/09 Ricardo Pannain 123

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.

Page 124: microcontroladores_unicamp

09/22/09 Ricardo Pannain 124

7. Exercícios – 12

+V

4543

D3

D2

D1

D0

LD

BI

PH

gfedcba

abcdefg.

Gnd

abcdefg.

Gnd

4543

D3

D2

D1

D0

LD

BI

PH

gfedcba

PIC

RA0

RA1

RA2

RA3

RB7RB6RB5RB4RB3RB2RB1RB0

RA4

Page 125: microcontroladores_unicamp

09/22/09 Ricardo Pannain 125

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.