Post on 11-Nov-2018
Características do Controlador16F628A
● 18 Pinos● Até 20 Mhz (5M instruções por segundo)● PortA e PortB● 10 Interrupções● 35 instruções● Periféricos– Timers– Comparadores– USART
● Arquitetura Harvard– Capacidade 2048 instruções – 512 bytes de dados
Esquema Realmente Básico dos Componentes (PIC)
ALU
W
STATUS
PORT A
PORT B
00h
01h
04h
05h
06h
07h
03h
02h
Vetor deInicialização
Vetor de interrupção
.
.
.
00h
01h
04h
3FF
03h
02h
MEMÓRIA DEPROGRAMA14 bits
MEMÓRIADE DADOSFILE REGISTERS8 bits
UnidadeDe
Controle
MUX
Conjunto de InstruçõesLógicas e Aritméticas
● Instruções LW (usadas para preencher o registrador W)● Operadores: Literal k (0<=k<=255)
– IORLW k (Ou inclusivo entre w e k resultado em w)– ANDLW k (AND entre w e k resultado em w)– XORLW k (Ou exclusivo entre w e k resultado em w)– SUBLW k (Subtração entre w e k resultado em w)– ADDLW k (Adição entre w e k resultado em w)
Conjunto de InstruçõesLógicas e Aritméticas
● Instruções WF (Usadas para realizar operações entre valores que estão em W e na memória)
– Operadores: ● f posição da memória de dados● d destino do resultado da operação 0=W e 1=F
– IORWF f,d (Ou inclusivo entre W e F resultado em d)– ANDWF f,d (AND entre W e F resultado em d)– XORWF f,d (Ou exclusivo entre W e F resultado em d)– SUBWF f,d (Subtração entre W e F resultado em d)– ADDWF f,d (Adição entre W e F resultado em d)
Conjunto de InstruçõesLógicas e Aritméticas
● Instruções F (Usadas para operar em posições de memória)● Operando
● f é posição de memória (registrador)● D é o destino 0=W e 1=F
– INCF f, d (Incrementa f)– COMF f,d (Complementa f – inverte todos os bits)– DECF f,d (Decrementa f)– CLRF f (Zera F)– SWAPF f,d (Troca os Bits mais e menos significativo)
● EX; 20h=FA ; SWAPF 20h,1 ; 20h=AF● Outras instruções F (não lógicas aritméticas)
– BCF f,b – BIT SET FILE – Liga o b-ésimo BIT do reg f– BSF f,b – BITCLEAR FILE - desliga o b-ésimo BIT do reg f– RRF f,d – Rotaciona a direita (ex. 10101001 => 11010100)– RLF f,d – Rotaciona a esquerda (ex. 10101001 => 01010011)
Conjunto de InstruçõesMovimentação de Dados
● Movimentos Possíveis (MOV)– Literal para registrador W
● MOVLW k, onde k é o literal– Registrador W para Memória Registrador F
● MOVWF F, onde F é o endereço da Memória Registrador– Memória Registrador F para W
● MOVF F, d– F: Endereço da Memória Registrador– d: Destino W=0 e Memória=1
● Exemplos– Alto nível: A=0, Baixo Nível 20h=0– Código:
MOVLW 0MOVWF 20H ou CLRF 20H
Conjunto de InstruçõesInstruções de Controle
● NOP (Gasta um ciclo de execução – sem operação)● SLEEP (Sistema entra em stand-by – só volta com interrupção)● GOTO k (salta para o endereço de programa k - sem retorno)● CALL k (salta para o endereço de programa k – com retorno)– Chamada de procedimento (EMPILHA PC!)
● RETURN (retorna para o ponto antes da chamada)● RETLW k ( o mesmo que RETURN, mas preenche W)
● RETFIE (Retorno de interrupções)● Orientadas a Bytes
– DECFSZ (DECrementa File Salta se Zero)– INCFSZ (INCrementa File Salta se Zero)
● Orientadas a Bits– BTFSC (Bit Testa File Salta se Clear (=0))– BTFSS (Bit Testa File Salta se Set (=1))
● O SALTO é feito sobre a próxima instrução
Conjunto de InstruçõesInstruções de Controle
ExemplosCondiçãoSe o bit 2 do registrador 20H estiver ligado faça 21H=0 caso contrário 22h=1
Alto nível:
if ((22h,2) == 1) { 21H=0; } Else { 22H=1 }Resto
Fluxo: 22H,0 = 1?
21H=0
22H=1Não
Sim
Resto
BTFSS 20h,2GOTO KCLRF 21HGOTO RESTOK MOVLW 1h
MOVWF 21hRESTO
Conjunto de InstruçõesInstruções de Controle
ExemplosLaço:Decrementa o valor i (20h), quando chegar em 0 sai do laço
Alto nível:
i=10;while (i<>0){ i=i-1;}Resto
Fluxo:Não
MOVLW 10MOVWL 20HDECREM
DEC 20H,1DECFSZ 20H,1GOTO DECREMRESTO
20H = 0?
Sim
Resto
20H=10
Decrementa 20H
Conjunto de InstruçõesResumão
● Instruções Lógicas e Aritméticas– ADD, SUB, AND, IOR, XOR, DEC, INC, COM– Instruções LW: Literal → W (operando k)– Instruções WF: W → F ou W (operando F e distino d → 0=W , 1=F)– Instruções F: F → F ou W (operando F e distino d → 0=W , 1=F)
● Instruções de movimentação (MOV: LW ou WF ou F)● Instruções de Controle (Podem gerar Saltos)
– NOP (não faz nada – gasta um ciclo) , SLEEP (Modo Stand-by) – Salto Condicional: Baseadas em BIT - Operandos: File e bit a ser testado
● BTFSS ( BIT TEST FILE SKIP (próxima inst.) se SET)● BIT TEST FILE SKIP (próxima inst.) se CLEAR)
– Salto Condicional: Baseadas em Byte - Operandos: File (Memória) e Destino● DECFSZ (Decrementa FILE SKIP (próxima inst.) se ZERO) : 1 → 0● INCFSZ (Incrementa FILE SKIP (próxima inst.) se ZERO): 255 → 0
– Salto Incondicional: Operando é um endereço de prog● GOTO (Salto sem retorno)● CALL (Salto com retorno)
– RETURN e RETW (RETFIE – Retorno de interrupções)– Outras Instruções
● CLRF, CRLW, RRF, RLF, SWAPF
Memória do PICPrograma
● 2048 Bytes 14 bits por célula (13-0)● Palavra de configuração (2007h): Configura a forma como o PIC
vai trabalhar. Só acessível durante a programação. A tabela abaixo tem uma lista de Bits importantes:Bit
13,1211,10
CP0,CP1 Proteção contra leitura da memória de programa11 – Sem Proteção do Programa00 – Toda Memória de Programa Protegida
8 CPD Proteção de memória de dados 1=Com prot. 0=Sem prot.
5 MCLRE Habilita RA5 para ser o pino de reset, se não o pino faz I/O
4,1,0 FOSC Configura o uso do Oscilador (Interno 4Mhz = 100)
3 PWRTE Habilita o Power UP timer (0 = Habilitado, 1 = Desabilitado)
2 WDTE Watch dog Timer Enable – Timer resposável por resetar o controlador se estourar (255 → 0). 0 = Desabilitado
Nós Vamos Usar:10110100011000Ou em Hexa?
Nós Vamos Usar:10110100011000Ou em Hexa?
Memória do PICDados
● 512 bytes● 4 Bancos de 128 (Nem todos posições poderão ser usadas)● Os SFRs (Special Function Registers) não podem ser usados
para armazenar dados.● Controle através do Registrador de STATUS● RP0 → 03H,5 ● RP1 → 03H,6
BANK RP1 RP0
0 (00h-7Fh) 0 0
1 (80h-FFh) 0 1
2 100h-17Fh) 1 0
3 (180h-1FFh) 1 1
Memória do PICDados – Registrador STATUS● Configurar O PIC e guarda o status de operações feitas na ULA● Acesso: pode ser só lido (R) , lido e escrito (RW)● POR = Valor do Bit quando se liga o PIC● BITS:
– Bit 0: C (Carry out - “Vai 1”: 1=sim , 0=não )– Bit 1: DC (Digit Carry out - “Vai um” para os 4 bits menos significativos)– Bit 2: Z (Resultado da operação foi zero)– Bit 3: PD (Power Down)– Bit 4: TO (WDT Time out)– Bit 6,Bit 5: Vistos no Slide Anterior– Bit 7: IRP (usado no endereçamento indireto)
STATUS (003h, 083h,103h, 183h)Bit 7 6 5 4 3 2 1 0
Função IRP RP1 RP0 TO PD Z DC C
Acesso RW RW RW R R RW RW RW
POR 0 0 0 1 1 X X X
E/S Básica com PIC
● Uso dos registradores especiais (SFR – Special Function Reg)● Portas (Pinos do Controlador) → Estão no Banco 0– PortA => 05h– Portb => 06h
● Configuração de direção dos pinos de E/S → Estão no Banco 1– TRISA => 85h– TRISB => 86h– Se o Bit referente ao pino do PORT for:
● 1 = Input (recebe estímulos externos)● 0 = output (pode enviar estímulos ao mundo exterior)
E/S básica com PIC
06h86h85h05h
RA0
PIC 16F628A
RA1
RA2
RA3
RA4
RA5
RA6
RA7
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
E/S básica com PIC
0 0
06h86h
0 1
85h05h
RA0
PIC 16F628A
RA1
RA2
RA3
RA4
RA5
RA6
RA7
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
5V
0V
E/S básica com PIC
0 1
06h86h
1 1
85h05h
RA0
PIC 16F628A
RA1
RA2
RA3
RA4
RA5
RA6
RA7
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
5V
0V
Formato do Programa PIChello World (acende um led)
Vetor de ResetPula para Inicio
Inicio
Configurações Iniciais
Acende o LED RB2
ORG 0x00
GOTO INICIO
INICIO BSF 3H,5 MOVLW b'0000000' MOVWF 86H BCF 3H,5 MOVWF 6H GOTO MAINMAIN BSF 6h,2 GOTO MAINEND