Upload
alexandre-lopes
View
102
Download
0
Embed Size (px)
Citation preview
09/22/09 Ricardo Pannain 1
Microcontroladores
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
09/22/09 Ricardo Pannain 3
1. Conceitos Básicos de Arquitetura de Computadores
• Arquitetura Havard X von Neuman
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
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
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
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)
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
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
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
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
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
09/22/09 Ricardo Pannain 14
2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Unidade de Memória
09/22/09 Ricardo Pannain 15
2. Arquitetura Básica de um Microcontrolador
• Microcontrolador – Unidade Central de Processamento
09/22/09 Ricardo Pannain 16
2. Arquitetura Básica de um Microcontrolador• Microcontrolador – CPU Memória
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
09/22/09 Ricardo Pannain 18
2. Arquitetura Básica de um Microcontrolador• Microcontrolador – Porta Serial
09/22/09 Ricardo Pannain 19
2. Arquitetura Básica de um Microcontrolador• Microcontrolador – Unidade de Timer
09/22/09 Ricardo Pannain 20
2. Arquitetura Básica de um Microcontrolador• Microcontrolador – Watchdog
09/22/09 Ricardo Pannain 21
2. Arquitetura Básica de um Microcontrolador• Microcontrolador – Conversor A/D
09/22/09 Ricardo Pannain 22
3. Estudo de Caso PIC 16F84• Microcontrolador PIC 16F84
– Microcontrolador RISC de 8 bits
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
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
09/22/09 Ricardo Pannain 25
3. Estudo de Caso PIC 16F84
• Ciclo de instrução/Clock
09/22/09 Ricardo Pannain 26
3. Estudo de Caso PIC 16F84
• Pipelining
09/22/09 Ricardo Pannain 27
3. Estudo de Caso PIC 16F84
• Pinagem
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.
09/22/09 Ricardo Pannain 29
3. Estudo de Caso PIC 16F84
• Geração de clock - osciladores
09/22/09 Ricardo Pannain 30
3. Estudo de Caso PIC 16F84
• Reset
09/22/09 Ricardo Pannain 31
3. Estudo de Caso PIC 16F84
• Unidade Central de Processamento
09/22/09 Ricardo Pannain 32
3. Estudo de Caso PIC 16F84
• Unidade Lógica e Aritmética
09/22/09 Ricardo Pannain 33
3. Estudo de Caso PIC 16F84
• PIC 16F84 - Diagrama de Blocos
09/22/09 Ricardo Pannain 34
3. Estudo de Caso PIC 16F84
• Registro de Estado
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
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
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
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
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
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
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
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
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
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
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
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
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
09/22/09 Ricardo Pannain 49
3. Estudo de Caso PIC 16F84
• Interrupções
09/22/09 Ricardo Pannain 50
3. Estudo de Caso PIC 16F84
• Interrupções– Registrador de Controle INTCON
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.
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.
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
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
09/22/09 Ricardo Pannain 55
3. Estudo de Caso PIC 16F84
• PUSH e POP no tratamento de interrupções
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
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;
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
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
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])
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
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
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
09/22/09 Ricardo Pannain 64
3. Estudo de Caso PIC 16F84
• Timer TMR0– 8 bits (0 a 255)
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
09/22/09 Ricardo Pannain 66
3. Estudo de Caso PIC 16F84
• Exemplo: Determinar o número de voltas de um motor
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
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
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
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
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
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
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.
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)
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
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
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
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 -
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 -
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 -
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
09/22/09 Ricardo Pannain 82
4. Conjunto de Instruções
09/22/09 Ricardo Pannain 83
5. Programação Assembly
• Programação do Microcontrolador
09/22/09 Ricardo Pannain 84
5. Programação Assembly
• Linguagem assembly
– Labels
– Instruções
– Operandos
– Diretivas
– Comentários
09/22/09 Ricardo Pannain 85
5. Programação Assembly
• Labels
09/22/09 Ricardo Pannain 86
5. Programação Assembly
• Instruções
09/22/09 Ricardo Pannain 87
5. Programação Assembly
• Operandos
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
09/22/09 Ricardo Pannain 89
5. Programação Assembly
• Diretivas
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
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
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
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
09/22/09 Ricardo Pannain 94
5. Programação Assembly
• Macros
09/22/09 Ricardo Pannain 95
5. Programação Assembly - Operadores
09/22/09 Ricardo Pannain 96
5. Programação Assembly - Exemplo
09/22/09 Ricardo Pannain 97
6. MPLAB – Tela inicial
09/22/09 Ricardo Pannain 98
6. MPLAB – Modo de desenvolvimento
• OPTIONS -> DEVELOPMENT MODE
09/22/09 Ricardo Pannain 99
6. MPLAB – Criando um Projeto
• PROJECT -> NEW PROJECT
09/22/09 Ricardo Pannain 100
6. MPLAB – Ajustando elementos de projeto
09/22/09 Ricardo Pannain 101
6. MPLAB – Parâmetros do montador
09/22/09 Ricardo Pannain 102
6. MPLAB – Abrindo um novo projeto
09/22/09 Ricardo Pannain 103
6. MPLAB – Adicionado arquivo p/ montador
09/22/09 Ricardo Pannain 104
6. MPLAB – Escrevendo um novo programa • FILE -> NEW
09/22/09 Ricardo Pannain 105
6. MPLAB – Salvando o novo arquivo
09/22/09 Ricardo Pannain 106
6. MPLAB – Escrevendo um Programa
09/22/09 Ricardo Pannain 107
6. MPLAB – Mensagens na montagem
09/22/09 Ricardo Pannain 108
6. MPLAB – Simulador MPSIM
• Simulando e resetando um microcontrolador
09/22/09 Ricardo Pannain 109
6. MPLAB – MPSIM e sua janela
09/22/09 Ricardo Pannain 110
6. MPLAB – Barra de Ferramentas
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
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
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
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
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
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
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
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
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
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).
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
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
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.
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
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.