Introdução ao PIC
Guilherme Luiz Moritz
11DAELT - Universidade Tecnológica Federal do Paraná
6 de novembro de 2013
Características do PIC
Arquitetura Harvard RISC, 35 instruções
8 a 84 pinos
Mais de 180 modelos
Vários periféricos
Panorâmica do PIC 16F877A
Arquitetura RISC
Apenas 35 instruções para aprender
Todas as instruções são executadas em um ciclo, exceto os saltos
Frequência de operação de até 20 MHz
33 pinos de I/O
Alta corrente para acionar LEDs diretamente
Interrupção quando há mudança no estado lógico dos pinos de entrada
Conversor A/D
8 canais
10 bits de resolução
Panorâmica do PIC 16F877A
3 Temporizadores / Contadores independentes
Temporizador Watch-dog
Saída por PWM
Modo USART melhorado
Suporta RS-232 e RS-485 Detecção automática de baudrate
CPU
Acumulador: registrador especial, sempre um dos
operandos da ULA
Decodificador de intruções: interpreta as instruções
Unidade lógica aritmética (ULA): executa as operações
Status Register (PSW): registrador de estado da ULA
Programação de microcontroladores
Um programa de microcontrolador é uma sequência de
comandos da CPU (
instruções) que realiza operações sobre a
memória (
registradores e memória de uso geral) ou
Memórias Internas
Esse microcontrolador tem três tipos de memórias:
Memória ROM (8 kbytes):
Memória de programa Usada para armazenar o programa ser executado
Feita com tecnologia FLASH seu conteúdo pode ser alterado com o auxílio de um programador externo O chip pode ser reprogramado cerca de 100.000 vezes
Memória EEPROM (256 bytes):
Memória de dados assim como ROM, seu conteúdo não se apaga quando a alimentação é desligada
Pode ser alterada durante a execução do programa Pode ser escrita cerca de 1.000.000 vezes
Memória RAM (368 bytes):
Registradores de função geral (GPR) Registradores de função especial (SFR)
Memória e Registradores
Registradores são memórias internas do microcontrolador
que tem funções específicas
Registradores de memória: Armazenam dados
SFRs: Cumprem funções específicas dentro do
microcontrolador (Ex: Acionar uma porta)
SFRs)
SFRs) - Exemplos
Como saber a função de cada bit dos registradores?
-Datasheet
Periféricos do PIC - PORTS
O 16F628a possui duas portas que são comandadas pelos
registradores
PORTA, PORTB, TRISA, TRISB
Periféricos do PIC - PORTS
Vamos estudar o funcionamento dos registradores!
Porque alguns pinos do processador têm mais de um nome?
TRISX
Debouncing
Instruções
Instrução de máquina: Um comando codificado de
maneira compreensível pelo decoder de instruções
Linguagem de máquina: Conjunto de instruções
reconhecidas pela CPU
Tipo de instruções:
Transferência: copia dados de uma localização para outra Aritmética e lógica: Comanda a ULA
Conjunto de Instruções
O conjunto de instruções da arquitetura compreende todas
as operações que a CPU é implementada para executar
1
Carrega y no registrador R1
2Carrega z no registrador R2
3Se R2 = 0, pule para instrução 6
4
Comande a ULA a dividir R1 por R2, armazenando o
resultado em R3
5
Armazena R3 em x
6Pare
Diretivas
Diretivas:
independente do processador
característica
da própria linguagem Assembly
Exemplos:
PROCESSOR: deve ser escrita no início de TODOS os programas. Define o tipo do microcontrolador
Processor 16f877
#INCLUDE: possibilita incluir um arquivo na compilação
#include <p16f877.inc>
Diretivas
Exemplos:
EQU: atribui um nome a uma posição específica da memória RAM. Cria uma VARIÁVEL
MAXIMUM EQU 0x25
CBLOCK e ENDC: cria uma série de variáveis CBLOCK 0x20
(tab) START ; endereço da memória 0x20 (tab) RELE ; endereço da memória 0x21 (tab) STOP ; endereço da memória 0x22 (tab) LEFT ; endereço da memória 0x23 (tab) RIGHT ; endereço da memória 0x24
Diretivas
Exemplos:
ORG: especifica uma posição da memória para o PROGRAMA ORG 0x100 START ... ... ORG 0x1000 TABLE ... ...
END: todo programa deve obrigatoriamente ser terminado por essa diretiva
...
END ; Fim de programa
Conjunto de Instruções PIC
Grupos de Instruções
Transferência de dados
MOVWF
Lógica e Aritmética
Soma, Subtração, Incremento, E, OU, XOR, ...
Operação com bits
Direcionadores de programa
BTFSC, CALL
Conjunto de Instruções PIC16
Ações:
MOV(Move): Move um byte de origem para destino ADD: Soma dois valores
SUB(Subtract): Subtrai AND: Faz um “E” lógico
IOR(Inclusive OR): Faz um “OU” lógico XOR(Exclusive OR): Faz um “XOR” lógico CLR(Clear): Zera um byte
COM(Complement): Inverte os bits de um byte DEC(Decrement): Subtrai 1
Conjunto de Instruções PIC16
Ações (continuação):
RR(Rotate Right): Rotaciona os bits de um byte uma posição à direita (o carry participa da rotação) RL(Rotate Left): Rotaciona os bits de um byte uma posição à esquerda (o carry participa da rotação) BC(Bit Clear): Zera um bit
BS(Bit Set): Seta um bit
BT(Bit Test): Testa o bit (se é 0 ou 1) GOTO: Vai para um endereço determinado
CALL: Vai para um endereço determinado (mas memoriza posição atual para retornar)
RETURN: Retorna ao local onde havia o CALL
Conjunto de Instruções PIC16
Ações (continuação):
SLEEP: Entra em estado de dormência (poupa energia)
CLRWDT(Clear Watchdog): Restaura contagem do watchdog
NOP(No Operation): Não faz nada, usado para pequenos ajustes de tempo
Conjunto de Instruções PIC16
Especificadores:
L(Literal): número constante F(File): endereço da RAM interna W(Working register): acumulador
Referências:
f: refere-se ao endereço de um file d: refere-se ao destino (W ou F apenas) b: refere-se ao número do bit de um file k: refere-se a um número constante
Conjunto de Instruções PIC16
Ação Condicional:
S(Skip): pula a próxima instrução
Condições:
S(if set): se o bit testado for 1 C(if cleared): se o bit testado for 0
Conjunto de Instruções PIC16
EXEMPLOS:
“Move Literal to Work”
Move (copia) o valor 0x1B para o acumulador
Conjunto de Instruções PIC16
EXEMPLOS:
“Move Work to File”
Conjunto de Instruções PIC16
EXEMPLOS:
“Bit Set File”
Seta o bit 3 do file 0x21
Conjunto de Instruções PIC16
EXEMPLOS:
“Bit Test File Skip if Cleared”
Conjunto de Instruções PIC16
EXEMPLOS:
“Decrement File”
Decrementa o valor do file 0x1C e coloca o resultado no
próprio file
Conjunto de Instruções PIC16
EXEMPLOS:
“Decrement File Skip if Zero”
Fluxogramas
Elementos gráficos utilizados para estabelecer uma sequência
a uma tarefa a ser realizada. Possuem três elementos básicos:
Exemplo: Contador
Exemplo: Contador
Programação Assembly
L2 MOVLW 0x00 ; W=0 MOVWF CONT ; W -> CONT
L1 INCF CONT,F ; CONT+1 -> CONT
MOVF CONT,W ; CONT -> W SUBLW 0x09 ; 0x09-W -> W BTFSS STATUS,Z ; Deu zero?
GOTO L1 ; não
GOTO L2 ; sim