SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Um resumo do
Microcontrolador
PIC18xx

Autor: Pedro Inácio
Revisão: Rui Antunes

Dezembro/2007
1.

Introdução

1.1 PIC-Programmable Interrupt Controller
O PIC é um microcontrolador fabricado exclusivamente pela empresa Microchip, que
se divide em várias famílias. Com arquitectura de 8 bits têm-se por ordem crescente
de performance e dimensão o PIC10, PIC12, PIC16 e PIC18. Com arquitectura de
16 bits têm-se os microcontroladores PIC24F e PIC24H e os controladores de sinal
dsPIC30 e dsPIC33. Este documento refere-se à família PIC18xx, embora
genericamente, possa ser aplicado a todas as famílias de 8 bits e de forma mais
abstracta às de 16 bits.

1.2 A família PIC18xx
Na

Figura

1.1

representa-se,

como

exemplo,

o

diagrama de

pinos

do

microcontrolador PIC18F2550, em que se pode ver que se trata de um DIP28 (Dual
Inline Package 28) – duas filas de 14 pinos totalizando 28.

Figura 1: Diagrama de pinos do Microcontrolador PIC18F2550

2
Note-se que cada pino não tem uma única função. Dependendo das necessidades
de cada aplicação, o utilizador poderá utilizar cada uma das funções de certo grupo
de pinos. Por exemplo os pinos 26, 27 e 28 podem ser usados como GPIO (General
Purpose Input Output) – entrada/saída normal, ou como PGM, PGC ou PGD, para a
programação ICSP (In Circuit Serial Programming) – programação sem remoção do
microcontrolador do circuito. Os pinos são específicos de uma determinada função
integrada em certos modelos pelo que diferem para cada microcontrolador.

1.3 Programação do PIC
A maioria dos microcontroladores recebe como programa o ficheiro binário gerado
por uma linguagem compilada. Esta programação pode ser feita dentro do circuito
com um mecanismo que desabilita o funcionamento e reescreve a área de memória
de programa com o novo código, ou ainda removendo o microcontrolador do circuito
e inserindo-o num programador externo.
A Microchip produz um interface de programação/depuração chamado ICD2, que
juntamente com o IDE (Integrated Development Environment) – ambiente de
desenvolvimento integrado (chamado MPLAB), permitem escrever o código,
compilar, programar e depurar sem sequer desligar o circuito.
Existem outros métodos de programação por programadores universais como o ALL11 e o PRESTO, em que é necessário remover o microcontrolador, compilar o
código e levar ambos ao programador, que reescreve o código (flash).

1.4 Configuração
Os microcontroladores são configurados por fuses ou bits de configuração.
Estes podem ser configurados no IDE (como no caso do MPLAB), num programador
universal, ou no código (sobrepõe o MPLAB, mas não funciona no programador
ALL-11).
De seguida descrevem-se algumas das configurações mais comuns:

3
Oscilador
O PIC necessita de uma fonte de sincronismo. Existem muitas formas de a obter.
Existe normalmente um PLL com um divisor. Dividir por PLL significa multiplicar a
frequência de entrada pelo factor seleccionado.
XT Crystal/Resonator
XTPLL Crystal/Resonator with PLL enabled
HS High-Speed Crystal/Resonator
HSPLL High-Speed Crystal/Resonator with PLL enabled
Nestes modos é utilizado um cristal de baixa (XT) ou alta-frequência (HS). Ao usar o
PLL pode multiplicar-se a frequência. Por exemplo: usando um cristal de 12MHz e a
PLL com divisor de 4, atinge-se a frequência interna de 48MHz.

Figura 2: Circuito do oscilador
EC External Clock with FOSC/4 output
ECIO External Clock with I/O on RA6
ECPLL External Clock with PLL enabled and FOSC/4 output on RA6
ECPIO External Clock with PLL enabled, I/O on RA6
Neste modo requer-se uma fonte externa de sincronismo.
Nos modos EC e ECPLL, a frequência de entrada é dividida por 4 e é disponibilizada
no pino OSC2 (Figura 1.2).

4
Figura 3: Divisor de frequência
Nos modos ECIO e ECPIO o pino OSC2 é poupado para uso geral como RA6
(Figura 1.3).

Figura 4: Pino de uso geral
INTHS Internal Oscillator used as microcontroller clock source, HS Oscillator
used as USB clock source
INTXT Internal Oscillator used as microcontroller clock source, XT Oscillator
used as USB clock source
INTIO Internal Oscillator used as microcontroller clock source, EC Oscillator
used as USB clock source, digital I/O on RA6
INTCKO Internal Oscillator used as microcontroller clock source, EC Oscillator
used as USB clock source, FOSC/4 output on RA6
Estes modos fazem uso do oscilador interno.
O modo INTHS usa o oscilador de 8MHz e um divisor para gerar a frequência
seleccionada, e INTXT usa o oscilador de 31kHz.
OS modos INTIO e INTCKO usam o oscilador de 8MHz, mas o primeiro poupa os
pinos RA6 e RA7 para GPIO e o segundo poupa o pino RA7, divide a frequência por
4 e disponibiliza no pino OSC2.
5
Nos PIC com USB o pino OSC1 é sempre usado para entrada de sincronismo
externo para o controlador USB.
RC External Resistor/Capacitor with FOSC/4 output on RA6
RCIO External Resistor/Capacitor with I/O on RA6
Nestes modos o oscilador é composto por um schmitt-trigger interno e por uma
malha RC externa.
O modo RC divide a frequência por 4 e disponibiliza no pino OSC2 (Figura 1.4).

Figura 5: Divisor de frequência

O modo RCIO poupa o pino RA6 para GPIO (Figura 1.5)

Figura 6: Pinos OSC1 e RA6

6
Configurações Gerais
Port A/D Enable:
Porto configurado como I/O digital
Porto configurado como entradas analógicas (ADC)
Master Clear
Porto configurado como GPIO
Porto configurado como MCLR
Brownout
Desactivado
Especificar uma tensão mínima de limite
WDT
Desactivado
Especificar um tempo de intervalo entre checkpoints

1.5 Memória
Registos
Um registo é um local na memória do PIC, que pode ser lida e escrita, e dependendo
do endereço, pode ter um significado especial no comportamento do programa se for
um SFR (Special Function Register – registo de função especial), ou ser apenas um
pedaço de memória de uso geral.
Bancos de Memoria
O banco de memória 0 corresponde ao acesso à memória geral e o banco 1
corresponde aos registos.
TRIS
Este registo controla o sentido da porta respectiva. Por exemplo se TRISA = 255 =
11111111, o porto A é configurado para entrada, se TRISB = 129 = 10000001, o
7
porto B é configurado para saída excepto os pinos 0 e 7 que são de entrada.
Os dispositivos actuais só possuem este dispositivo para compatibilidade e os mais
recentes já não o possuem, pelo que o código só deve referir o TRIS quando se
refere a dispositivos antigos ou ao reutilizar código antigo.
PORT
Cada um destes registos controla um porto. O esquema de cada pino encontra-se
representado na Figura 1.6. Normalmente cada porto é composto por 8 bits (mas
podem ser menos), ou ainda algum destes estar a ser usado por uma função
especial, pelo que deve ser tomado cuidado ao se escrever em todo o porto. As
instruções de escrita bit a bit são uma prática mais eficaz, segura e perceptível. A
atribuição de nomes inteligíveis aos pinos que realizam uma função específica
também é recomendada em prol da facilidade de compreensão e depuração do
código.

Figura 7: Esquema de um pino

W – Working Register (Acumulador)
O Working register ou Acumulador é o registo onde tudo normalmente acontece. É o
espaço de memória mais volátil do PIC, pois poucas operações garantem a
manutenção do seu conteúdo. O conteúdo que se deseje preservar deve então ser
imediatamente copiado para um local seguro.
A analogia a reter para boa prática é imaginar o Working register como uma espécie
de ardósia onde se escrevem os resultados dos cálculos.

8
2.

Exemplos de programação (Assembly e C)

Enunciam-se seguidamente alguns exemplos de programação em, respectivamente,
linguagem Assembly e C:
Exemplo 1: Escrever na memória
Pretende-se escrever o valor 06h no endereço 85h no banco 1.
BSF
MOVLW
MOVWF
BCF

03h,5
06h
85h
03h,5

;Banco 1
;Coloca 00110 no W
;Coloca W no 85h
;Banco 0

BSF 03h,5 – coloca 1 (set) no bit 5 do endereço 03h
MOVLW 06h – escreve o valor 06h no W
MOVWF 85h – coloca o conteúdo do W no endereço 85h
BCF 03h,5 – coloca 0 (clear) no bit 5 do endereço 03h
bit_set(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h
*0x85 = 0x06 – valor literal 06h no endereço 85h
bit_clear(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h
ou
write_bank(1, 0x85, 0x06); escreve o valor 06h no endereço 85h no banco 1
Exemplo 2: Escrever num porto, ligando o bit 1
Pretende-se colocar o bit 1 do porto A a 1.
BSF
MOVLW
MOVWF
BCF
MOVLW
MOVWF

03h,5
00h
85h
03h,5
02h
05h

;Banco 1
;Escreve 0 no W
;Escreve W no 85h/TRISA :definir o porto A para saída
;Banco 0
;Escreve 00000010 no W
;Escreve W no 05h/PORTA :escrever W no porto A

BSF 03h,5 – coloca 1 (set) no bit 5 do endereço 03h
MOVLW 00h – coloca o valor 00h no registo W
MOVWF 85h – coloca o conteúdo do registo W no endereço 85h que corresponde
ao TRISA
BCF 03h,5 – coloca 0 (clear) no bit 5 do endereço 03h
MOVLW 02h – escreve o valor literal 00000010 no registo W
9
MOVWF 05h – coloca o conteúdo do registo W no endereço 05h que corresponde
ao PORTA
bit_set(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h
*0x85 = 0x00 – escreve o valor 06h no endereço 85h
bit_clear(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h
*0x05 = 0x02 – escreve o valor 02h no endereço 05h
ou
write_bank(1, 0x85, 0x00); escreve o valor 00h no endereço 85h no banco 1
write_bank(0, 0x05, 0x02); escreve o valor 02h no endereço 05h no banco 0
ou
set_tris_a(0x00); definir o porto A como saída
output_high(PIN_A0); ligar o bit 1 do porto A
Exemplo 3: Loops e delays
Pretende-se controlar a temporização de atrasos através de ciclos e instruções
directas.
MOVLW
0FFh ;Coloca 0 no W
MOVWF
08h ;Coloca W no 08h
CONTADOR EQU 08h ;Define CONTADOR como o endereço de memoria 08h
CICLO

;Define uma marcação no código

DECFSZ CONTADOR,1 ;Subtrai 1 ao valor no endereço designado por
;contador e ignora a próxima instrução de o valor
;resultante da subtracção for 0
GOTO CICLO
;Salta para a posição marcada pelo nome CICLO
;As instruções seguintes serão executadas quando o valor
;de CONTADOR chegar a 0 e a instrução de salto for
;ignorada
#byte contador = 0x08
contador = 0xFF;
do{
contador--;
}while(contador > 0);

// Define CONTADOR como o endereço de memoria 08h
// Escreve o valor 255 no CONTADOR
// Repete o bloco de instruções enquanto a condição se
// verificar
// Decrementa CONTADOR
// Define a condição de repetição

10
Assumindo um relógio interno de 40MHz, tem-se um clock de instrução de 10MHz e
período de 100ns. As instruções DECFSZ e GOTO são ambas de 2 ciclos, logo cada
loop demora 4 ciclos, ou seja 400ns. Para um atraso de 20us, o valor a escolher
para o contador será então de 20000/400 = 50 ou 32h.
Na linguagem C é mais difícil efectuar a contagem de ciclos, pois a maioria dos
compiladores não esclarece a relação entre o código escrito e o código máquina
correspondente. Na maioria das linguagens C para o microcontrolador PIC existe
uma instrução de atraso declarada por:
delay_us(20);
pode ainda usar-se um bloco de linguagem Assembly no código C:
int8 contador=0x32;
#asm
CICLO
DECFSZ CONTADOR,1
GOTO CICLO
#endasm
Exemplo 4: Funções e Subrotinas
Pretende-se agora definir e chamar subrotinas. Define-se uma rotina que guarda um
valor numa localização de memória, e chama-se do bloco principal.
ROTINA
MOVFW
09h
MOVWF
30h
RETURN
;...
MOVLW
56h
MOVWF
09h
CALL ROTINA

; Guarda o valor do endereço 09h no endereço 30h
;Nome da subrotina
;Escreve o conteúdo do endereço 09h no W
;Escreve o conteúdo do W no endereço 30h
;Retorna ao ponto onde a rotina foi chamada
;Escreve 56h no W
;Escreve o conteúdo do W no endereço 09h
;Chama a subrotina

#byte objecto = 0x09

//Define objecto como o endereço de memória 09h

void guarda (int8 valor){
*0x30 = valor;
}

//cabeçalho da função
//escreve o valor recebido no endereço 30h

void main(){
objecto = 0x56;
guarda(objecto);
}

//Coloca o valor 56h no objecto
//chama a função para guardar o valor do endereço 09h

11
Exemplo 5: Leitura de portos
Pretende-se ler de um porto e alterar a sua direccionalidade. O programa espera que
o bit 0 do porto B esteja a 1 e coloca o bit 7 do mesmo porto a 1. Depois retorna o bit
0 a 0;
STATUS
TRISB
PORTB

EQU
EQU
EQU

FD8h
F93h
F81h

INICIO
MOVLW
MOVWF

01h
TRISB

;Coloca o bit 0 do porto B para entrada

CICLO
BTFSS

PORTB,0

GOTO

CICLO

BSF
PORTB,7
MOVLW
00h
MOVWF
TRISB
BSF
PORTB,0
GOTOINICIO

;Testa o bit 0 do porto B e salta a próxima instrução se for
;1
;Se o bit 0 estiver a 0 testa de novo
;Se o bit 0 estiver a 1
;Coloca o bit 7 a 1
;Configura todo o porto B como porto de saída
;Coloca o bit 0 a 0
;Repete o programa

while(true){
set_tris_b(0x01);
while(!input(PIN_B0)){}
set_tris_b(0x00);
output_low(PIN_B0);
output_high(PIN_B7);
}
Exemplo 6: Adição e subtracção
Pretende-se verificar as operações básicas da adição e da subtracção, usando
operadores no acumulador
MOVLW
MOVWF
MOVLW
ADDLW
SUBLW
SUBWF

30
08h
25
25
20
08h

;W=30
;08h=30
;W=25
;W=50
;W=30
;W=0

12
#byte f = 0x08
main(){
int8 acumulador = 25;
f = 30;
acumulador += 25;
acumulador -= 20;
acumulador += f;
}
Exemplo 7: Interrupção por Temporizador
Pretende-se usar um temporizador (timer) com interrupção de overflow temporizar 1
segundo.
ORG
GOTO

00h
MAIN

;Vector de Reset
;Evita sobrepor o vector de interrupção com código

ORG
GOTO

08h
LOW_ISR

;Vector de Interrupção
;Evita sobrepor o vector de interrupção prioritário com
;código, neste caso é desnecessário, pois não é usado

ISR
BTFSS
GOTO
MOVLW
MOVWF
BCF
FIM_ISR
RETFIE

INTCON,5
FIM_ISR
0FFh
PORTB
TMR0IF

;Tratamento de interrupção
;Escreve FFh no W
;Escreve o conteúdo do registo W no porto B
;Limpa a flag para permitir a activação da interrupção
;Fim do tratamento de interrupção

MAIN
BCF
BSF
BSF

IPEN
GIE
TMR0IE

;Desabilita prioridade de interrupções
;Habilita interrupções
;Habilita interrupção do timer

BCF
BSF
BCF
BCF
MOVLW
IORWF
MOVLW
MOVWF
MOVLW
MOVWF

TMR0ON
T08BIT
T0CS
PSA
06h
T0CON,1,1
98h
TMR0H
96h
TMR0L

;Pára o Timer0
;Configura o contador para 16bits
;Configura a fonte para clock interno
;Usa divisor de frequência
;Divide a frequência por 128

13
BSF
TMR0ON
;Inicia o Timer0
;....
; Ao fim de 1 segundo o programa será interrompido e todos os pinos do porto B
estarão a ‘1’, seguindo imediatamente de onde havia sido interrompido. Assume-se
uma frequência interna de 40MHz
#pragma code INT_VECTOR = 0x08
timer0_isr(){
PORTB=0xFF;
TMR0IF=0;
}
void main(){
IPEN=0;
GIE=1;
TMR0IE=1;
TMR0ON=0
T08BIT=1;
T0CS=0;
PSA=0;
T0CON|=0x06;
TMR0H=0x98;
TMR0L=0x96;
TMR0ON=1;
//
...
}

//Desabilita prioridade de interrupções
//Habilita interrupções
//Habilita interrupção do timer
//Pára o Timer0
//Configura o contador para 16bits
//Configura a fonte para clock interno
//Usa divisor de frequência
//Divide a frequência por 128
//Inicia o Timer0

ou
#int_timer0
timer0_isr(){
output_port_b(0xFF);
}
void main(){
interrupt_active(int_timer0);
setup_timer(RTCC_INTERNAL|RTCC_DIV_2|RTCC_16_BIT);
set_timer0(0x9896);
//
...
}

14
3.

Interrupções e registos associados

INTCON
bit 7 GIE/GIEH: Global Interrupt Enable bit
Quando IPEN = 0:
1 = Activa todas as interrupções
0 = Desactiva todas as interrupções
Quando IPEN = 1:
1 = Activa todas as interrupções com alta prioridade
0 = Desactiva todas as interrupções com alta prioridade
bit 6 PEIE/GIEL: Peripheral Interrupt Enable bit
Quando IPEN = 0:
1 = Activa todas as interrupções periféricas
0 = Desactiva todas as interrupções periféricas
Quando IPEN = 1:
1 = Activa todas as interrupções periféricas com alta prioridade
0 = Desactiva todas as interrupções periféricas com alta prioridade
bit 5 TMR0IE: TMR0 Overflow Interrupt Enable bit
1 = Activa a interrupção do timer 0
0 = Desactiva a interrupção do timer 0
bit 4 INT0IE: INT0 External Interrupt Enable bit
1 = Activa a interrupção externa 0
0 = Desactiva a interrupção externa 0
bit 3 RBIE: RB Port Change Interrupt Enable bit
1 = Activa a interrupção do porto B
0 = Desactiva a interrupção do porto B
bit 2 TMR0IF: TMR0 Overflow Interrupt Flag bit
1 = O registo TMR0 chegou ao máximo/activou interrupção (para reactivar a
detecção/interrupção, deve manualmente colocar-se a 0, ou a detecção/interrupção
não volta a disparar)
0 = O registo TMR0 não chegou ao máximo/activou interrupção
bit 1 INT0IF: INT0 External Interrupt Flag bit
1 = A interrupção INT0 foi activada (para reactivar a interrupção, deve manualmente
colocar-se a 0, ou a interrupção não volta a activar)
0 = A interrupção INT0 não foi activada

15
bit 0 RBIF: RB Port Change Interrupt Flag bit(1)
1 = Um dos pinos do porto B mudou de estado
0 = Nenhum dos pinos do porto B mudou de estado
INTCON2
bit 7 RBPU: PORTB Pull-up Enable bit
1 = Todos os pull-ups do PORTB estão desabilitados
0 = Todos os pull-ups do PORTB são controlados pelo valor do latch de cada porto
bit 6 INTEDG0: External Interrupt 0 Edge Select bit
1 = INT0 activo na transição positiva
0 = INT0 activo na transição negativa
bit 5 INTEDG1: External Interrupt 1 Edge Select bit
1 = INT1 activo na transição positiva
0 = INT1 activo na transição negativa
bit 4 INTEDG2: External Interrupt 2 Edge Select bit
1 = INT2 activo na transição positiva
0 = INT2 activo na transição negativa
bit 2 TMR0IP: TMR0 Overflow Interrupt Priority bit
1 = TMR0 tem prioridade alta
0 = TMR0 tem prioridade baixa
bit 0 RBIP: RB Port Change Interrupt Priority bit
1 = PORTB tem prioridade alta
0 = PORTB tem prioridade baixa
INTCON3
bit 7 INT2IP: INT2 External Interrupt Priority bit
1 = INT2 tem prioridade alta
0 = INT2 tem prioridade baixa
bit 6 INT1IP: INT1 External Interrupt Priority bit
1 = INT1 tem prioridade alta
0 = INT1 tem prioridade baixa
bit 4 INT2IE: INT2 External Interrupt Enable bit
1 = Activa a interrupção externa 2
0 = Desactiva a interrupção externa 2

16
bit 3 INT1IE: INT1 External Interrupt Enable bit
1 = Activa a interrupção externa 1
0 = Desactiva a interrupção externa 1
bit 1 INT2IF: INT2 External Interrupt Flag bit
1 = A interrupção INT2 foi activada (para reactivar a interrupção, deve manualmente
colocar-se a 0, ou a interrupção não volta a activar)
0 = A interrupção INT2 não foi activada
bit 0 INT1IF: INT1 External Interrupt Flag bit
1 = A interrupção INT1 foi activada (para reactivar a interrupção, deve manualmente
colocar-se a 0, ou a interrupção não volta a activar)
0 = A interrupção INT1 não foi activada
PIR1
bit 6 ADIF: A/D Converter Interrupt Flag bit
1 = A conversão A/D terminou (para reactivar a interrupção, deve manualmente
colocar-se a 0, ou a interrupção não volta a activar)
0 = A conversão A/D não terminou
bit 5 RCIF: EUSART Receive Interrupt Flag bit
1 = O buffer de recepção EUSART, RCREG, está cheio (este bit é colocado a 0
lendo o buffer)
0 = O buffer de recepção EUSART está vazio
bit 4 TXIF: EUSART Transmit Interrupt Flag bit
1 = O buffer de recepção EUSART, TXREG, está cheio (este bit é colocado a 0
escrevendo no buffer)
0 = O buffer de recepção EUSART está vazio
bit 3 SSPIF: Master Synchronous Serial Port Interrupt Flag bit
1 = A transmissão/recepção terminou (para reactivar a interrupção, deve
manualmente colocar-se a 0, ou a interrupção não volta a activar)
0 = Aguardando transmissão/recepção
PIE1
bit 6 ADIE: A/D Converter Interrupt Enable bit
1 = Activa a interrupção do ADC
0 = Desactiva a interrupção do ADC
bit 5 RCIE: EUSART Receive Interrupt Enable bit
1 = Activa a interrupção de recepção do EUSART
0 = Desactiva a interrupção de recepção do EUSART

17
bit 4 TXIE: EUSART Transmit Interrupt Enable bit
1 = Activa a interrupção de transmissão do EUSART
0 = Desactiva a interrupção de transmissão do EUSART
bit 3 SSPIE: Master Synchronous Serial Port Interrupt Enable bit
1 = Activa a interrupção do MSSP (SPI/I2C)
0 = Desactiva a interrupção do MSSP (SPI/I2C)
IPR
bit 6 ADIP: A/D Converter Interrupt Priority bit
1 = A interrupção do ADC tem prioridade alta
0 = A interrupção do ADC tem prioridade baixa
bit 5 RCIP: EUSART Receive Interrupt Priority bit
1 = A interrupção de recepção do EUSART tem prioridade alta
0 = A interrupção de recepção do EUSART tem prioridade baixa
bit 4 TXIP: EUSART Transmit Interrupt Priority bit
1 = A interrupção de transmissão do EUSART tem prioridade alta
0 = A interrupção de transmissão do EUSART tem prioridade baixa
bit 3 SSPIP: Master Synchronous Serial Port Interrupt Priority bit
1 = A interrupção do MSSP (SPI/I2C) tem prioridade alta
0 = A interrupção do MSSP (SPI/I2C) tem prioridade baixa
RCON
bit 7 IPEN: Interrupt Priority Enable bit
1 = Activa os níveis de prioridade das interrupções
0 = Inactiva os níveis de prioridade das interrupções
bit 6 SBOREN: BOR Software Enable bit
Se BOREN1:BOREN0 = 01:
1 = BOR está activo
0 = BOR está desactivado
Se BOREN1:BOREN0 = 00, 10 or 11:
Bit está desactivado
bit 4 RI: RESET Instruction Flag bit
1 = Não foi executado RESET (não editável)
0 = Foi executado RESET (Deve ser colocado a 0 por software após um brown-out)
bit 3 TO: Watchdog Time-out Flag bit
1 = Aplicado no início, ou após CLRWDT ou SLEEP
0 = O watchdog timer fez RESET
18
bit 2 PD: Power-Down Detection Flag bit
1 = Aplicado no início, ou após CLRWDT
0 = Aplicado após SLEEP
bit 1 POR: Power-on Reset Status bit(2)
1 = Não foi executado Power-on Reset (não editável)
0 = Foi executado Power-on Reset (Deve ser colocado a 0 por software após um
Power-on Reset)
bit 0 BOR: Brown-out Reset Status bit
1 = Não foi executado Brown-out Reset (não editável)
0 = Foi executado Brown-out Reset (Deve ser colocado a 0 por software após um
Brown-out Reset)

4.

Características e funções do PIC18xx

Master Clear (MCLR)
O pino MCLR é a forma de externamente inicializar o dispositivo. Este pino, quando
atribuído a esta função não pode ser escrito por software.
Power-on Reset (POR)
Esta função ocorre quando o valor de tensão do pino VDD sobe acima de um
determinado nível, após o qual é determinado que o dispositivo encontra-se
efectivamente ligado. Esta função assegura que o código é correctamente iniciado.
Brown-out Reset (BOR)
Esta função ocorre quando o valor de tensão do pino VDD desce abaixo de um nível
pré-configurado, em que se reinicia o funcionamento.
Watchdog Timer (WDT)
Esta função permite reiniciar automaticamente o dispositivo após um intervalo de
tempo pré-configurado. Devem ser introduzidos checkpoints para reiniciar a
contagem em zonas do código que assegurem que existe tempo de execução
suficiente para o programa correr normalmente.
Ciclos de instrução
O clock interno é dividido por 4 para gerar o sincronismo de pipeline, conforme
ilustrado na figura 8. Isto significa que cada ciclo de programa corresponde a 4 ciclos
de relógio. Por exemplo, para um oscilador de 20MHz com PLL de 2, tem-se uma
19
frequência interna de 40MHz. A frequência de instrução será então de 10Mhz e o
período de 100ns.

Figura 8: Pipeline

5.

Referências
•

http://www.microchip.com

•

http://www.pic-tools.com

20

Contenu connexe

Tendances

Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoFabio Souza
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicampFrancisco Fambrini
 
Pic apostila
Pic apostilaPic apostila
Pic apostilamoschen
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorRodrigo Almeida
 
Resumo linguagem c para microcontroladores PIC usando MikroC
Resumo linguagem c para microcontroladores PIC usando MikroCResumo linguagem c para microcontroladores PIC usando MikroC
Resumo linguagem c para microcontroladores PIC usando MikroCFabio Souza
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores picCesar Prim
 
8085 Introducao
8085 Introducao8085 Introducao
8085 Introducaoedgluc2001
 
Microcontroladores PIC - Manipulação de pinos de I/O com a Linguagem C
Microcontroladores PIC - Manipulação de pinos de I/O com a Linguagem CMicrocontroladores PIC - Manipulação de pinos de I/O com a Linguagem C
Microcontroladores PIC - Manipulação de pinos de I/O com a Linguagem CFabio Souza
 
Microcontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DMicrocontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DFabio Souza
 
Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051Thiago Oliveira
 
Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051Thiago Oliveira
 
Apresentação pic
Apresentação picApresentação pic
Apresentação picSaddam Lande
 
Material Auxiliar Para Curso BáSico Msp430 55 A 98
Material Auxiliar Para Curso BáSico Msp430   55 A 98Material Auxiliar Para Curso BáSico Msp430   55 A 98
Material Auxiliar Para Curso BáSico Msp430 55 A 98Texas Instruments
 

Tendances (20)

Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - Introdução
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Pic apostila
Pic apostilaPic apostila
Pic apostila
 
Programando microcontroladores pic março
Programando microcontroladores pic marçoProgramando microcontroladores pic março
Programando microcontroladores pic março
 
Roteiro exp9
Roteiro exp9Roteiro exp9
Roteiro exp9
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontrolador
 
Pisca 2 leds
Pisca 2  ledsPisca 2  leds
Pisca 2 leds
 
Resumo linguagem c para microcontroladores PIC usando MikroC
Resumo linguagem c para microcontroladores PIC usando MikroCResumo linguagem c para microcontroladores PIC usando MikroC
Resumo linguagem c para microcontroladores PIC usando MikroC
 
Pic aula1
Pic   aula1Pic   aula1
Pic aula1
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
8085 Introducao
8085 Introducao8085 Introducao
8085 Introducao
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
Microcontroladores PIC - Manipulação de pinos de I/O com a Linguagem C
Microcontroladores PIC - Manipulação de pinos de I/O com a Linguagem CMicrocontroladores PIC - Manipulação de pinos de I/O com a Linguagem C
Microcontroladores PIC - Manipulação de pinos de I/O com a Linguagem C
 
Pic16f628a
Pic16f628aPic16f628a
Pic16f628a
 
Microcontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DMicrocontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/D
 
Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051
 
Linguagem Assembly
Linguagem AssemblyLinguagem Assembly
Linguagem Assembly
 
Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051
 
Apresentação pic
Apresentação picApresentação pic
Apresentação pic
 
Material Auxiliar Para Curso BáSico Msp430 55 A 98
Material Auxiliar Para Curso BáSico Msp430   55 A 98Material Auxiliar Para Curso BáSico Msp430   55 A 98
Material Auxiliar Para Curso BáSico Msp430 55 A 98
 

En vedette

OOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối TượngOOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối TượngNguyễn Quang Thiện
 
Bài giảng vantoc
Bài giảng vantocBài giảng vantoc
Bài giảng vantochoanle1987
 
Programming Methodology Ii
Programming Methodology IiProgramming Methodology Ii
Programming Methodology Iimark
 
Xác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình QuỳXác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình Quỳhiendoanht
 
THỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN Z
THỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN ZTHỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN Z
THỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN ZĐiện Tử Bách Khoa
 
Phân tích mã nguồn driver usb mouse
Phân tích mã nguồn driver usb mousePhân tích mã nguồn driver usb mouse
Phân tích mã nguồn driver usb mouseThanh Cứng
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging ChallengesAaron Irizarry
 

En vedette (18)

Ceec
CeecCeec
Ceec
 
FIFO 2015 VHN
FIFO 2015 VHNFIFO 2015 VHN
FIFO 2015 VHN
 
DS&A Reviews
DS&A ReviewsDS&A Reviews
DS&A Reviews
 
OOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối TượngOOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối Tượng
 
V1 08-dieu-khien-qua-trinh
V1 08-dieu-khien-qua-trinhV1 08-dieu-khien-qua-trinh
V1 08-dieu-khien-qua-trinh
 
Bài giảng vantoc
Bài giảng vantocBài giảng vantoc
Bài giảng vantoc
 
Bao cao servo
Bao cao servoBao cao servo
Bao cao servo
 
Servo 2
Servo 2Servo 2
Servo 2
 
Servo 1
Servo 1Servo 1
Servo 1
 
Encoder
EncoderEncoder
Encoder
 
Programming Methodology Ii
Programming Methodology IiProgramming Methodology Ii
Programming Methodology Ii
 
Servo 3
Servo 3Servo 3
Servo 3
 
Encoder
EncoderEncoder
Encoder
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
Xác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình QuỳXác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình Quỳ
 
THỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN Z
THỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN ZTHỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN Z
THỰC HÀNH ĐIỆN TỬ TỪ A ĐẾN Z
 
Phân tích mã nguồn driver usb mouse
Phân tích mã nguồn driver usb mousePhân tích mã nguồn driver usb mouse
Phân tích mã nguồn driver usb mouse
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
 

Similaire à PIC18xx Introdução

Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Cláudio Alves
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptxfmtpereira
 
Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Flávia Martins
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFengelrfs
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduinoRui Alves
 
UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxcentroclinicosalus
 
201728 22259 manual_picgenios
201728 22259 manual_picgenios201728 22259 manual_picgenios
201728 22259 manual_picgeniosBárbara Gama
 
Workshop Microchip Curiosity Board
Workshop Microchip Curiosity BoardWorkshop Microchip Curiosity Board
Workshop Microchip Curiosity BoardFabio Souza
 
Programação em C para Arduino
Programação em C para ArduinoProgramação em C para Arduino
Programação em C para ArduinoRodrigo Rosa
 
Clp completa
Clp completaClp completa
Clp completapanelada
 

Similaire à PIC18xx Introdução (20)

Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
ARM
ARMARM
ARM
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
2 gravação
2 gravação2 gravação
2 gravação
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
 
UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptx
 
Aula1 30-07-120922184742-phpapp02
Aula1 30-07-120922184742-phpapp02Aula1 30-07-120922184742-phpapp02
Aula1 30-07-120922184742-phpapp02
 
201728 22259 manual_picgenios
201728 22259 manual_picgenios201728 22259 manual_picgenios
201728 22259 manual_picgenios
 
Workshop Microchip Curiosity Board
Workshop Microchip Curiosity BoardWorkshop Microchip Curiosity Board
Workshop Microchip Curiosity Board
 
Clp
ClpClp
Clp
 
Treinamento arduino (1).pptx
Treinamento arduino (1).pptxTreinamento arduino (1).pptx
Treinamento arduino (1).pptx
 
Programação em C para Arduino
Programação em C para ArduinoProgramação em C para Arduino
Programação em C para Arduino
 
Pro2 01p
Pro2 01pPro2 01p
Pro2 01p
 
Clp completa
Clp completaClp completa
Clp completa
 
2 manual - clp pic40-v3
2 manual - clp pic40-v32 manual - clp pic40-v3
2 manual - clp pic40-v3
 

Dernier

Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSOLeloIurk1
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 

Dernier (20)

Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 

PIC18xx Introdução

  • 1. Um resumo do Microcontrolador PIC18xx Autor: Pedro Inácio Revisão: Rui Antunes Dezembro/2007
  • 2. 1. Introdução 1.1 PIC-Programmable Interrupt Controller O PIC é um microcontrolador fabricado exclusivamente pela empresa Microchip, que se divide em várias famílias. Com arquitectura de 8 bits têm-se por ordem crescente de performance e dimensão o PIC10, PIC12, PIC16 e PIC18. Com arquitectura de 16 bits têm-se os microcontroladores PIC24F e PIC24H e os controladores de sinal dsPIC30 e dsPIC33. Este documento refere-se à família PIC18xx, embora genericamente, possa ser aplicado a todas as famílias de 8 bits e de forma mais abstracta às de 16 bits. 1.2 A família PIC18xx Na Figura 1.1 representa-se, como exemplo, o diagrama de pinos do microcontrolador PIC18F2550, em que se pode ver que se trata de um DIP28 (Dual Inline Package 28) – duas filas de 14 pinos totalizando 28. Figura 1: Diagrama de pinos do Microcontrolador PIC18F2550 2
  • 3. Note-se que cada pino não tem uma única função. Dependendo das necessidades de cada aplicação, o utilizador poderá utilizar cada uma das funções de certo grupo de pinos. Por exemplo os pinos 26, 27 e 28 podem ser usados como GPIO (General Purpose Input Output) – entrada/saída normal, ou como PGM, PGC ou PGD, para a programação ICSP (In Circuit Serial Programming) – programação sem remoção do microcontrolador do circuito. Os pinos são específicos de uma determinada função integrada em certos modelos pelo que diferem para cada microcontrolador. 1.3 Programação do PIC A maioria dos microcontroladores recebe como programa o ficheiro binário gerado por uma linguagem compilada. Esta programação pode ser feita dentro do circuito com um mecanismo que desabilita o funcionamento e reescreve a área de memória de programa com o novo código, ou ainda removendo o microcontrolador do circuito e inserindo-o num programador externo. A Microchip produz um interface de programação/depuração chamado ICD2, que juntamente com o IDE (Integrated Development Environment) – ambiente de desenvolvimento integrado (chamado MPLAB), permitem escrever o código, compilar, programar e depurar sem sequer desligar o circuito. Existem outros métodos de programação por programadores universais como o ALL11 e o PRESTO, em que é necessário remover o microcontrolador, compilar o código e levar ambos ao programador, que reescreve o código (flash). 1.4 Configuração Os microcontroladores são configurados por fuses ou bits de configuração. Estes podem ser configurados no IDE (como no caso do MPLAB), num programador universal, ou no código (sobrepõe o MPLAB, mas não funciona no programador ALL-11). De seguida descrevem-se algumas das configurações mais comuns: 3
  • 4. Oscilador O PIC necessita de uma fonte de sincronismo. Existem muitas formas de a obter. Existe normalmente um PLL com um divisor. Dividir por PLL significa multiplicar a frequência de entrada pelo factor seleccionado. XT Crystal/Resonator XTPLL Crystal/Resonator with PLL enabled HS High-Speed Crystal/Resonator HSPLL High-Speed Crystal/Resonator with PLL enabled Nestes modos é utilizado um cristal de baixa (XT) ou alta-frequência (HS). Ao usar o PLL pode multiplicar-se a frequência. Por exemplo: usando um cristal de 12MHz e a PLL com divisor de 4, atinge-se a frequência interna de 48MHz. Figura 2: Circuito do oscilador EC External Clock with FOSC/4 output ECIO External Clock with I/O on RA6 ECPLL External Clock with PLL enabled and FOSC/4 output on RA6 ECPIO External Clock with PLL enabled, I/O on RA6 Neste modo requer-se uma fonte externa de sincronismo. Nos modos EC e ECPLL, a frequência de entrada é dividida por 4 e é disponibilizada no pino OSC2 (Figura 1.2). 4
  • 5. Figura 3: Divisor de frequência Nos modos ECIO e ECPIO o pino OSC2 é poupado para uso geral como RA6 (Figura 1.3). Figura 4: Pino de uso geral INTHS Internal Oscillator used as microcontroller clock source, HS Oscillator used as USB clock source INTXT Internal Oscillator used as microcontroller clock source, XT Oscillator used as USB clock source INTIO Internal Oscillator used as microcontroller clock source, EC Oscillator used as USB clock source, digital I/O on RA6 INTCKO Internal Oscillator used as microcontroller clock source, EC Oscillator used as USB clock source, FOSC/4 output on RA6 Estes modos fazem uso do oscilador interno. O modo INTHS usa o oscilador de 8MHz e um divisor para gerar a frequência seleccionada, e INTXT usa o oscilador de 31kHz. OS modos INTIO e INTCKO usam o oscilador de 8MHz, mas o primeiro poupa os pinos RA6 e RA7 para GPIO e o segundo poupa o pino RA7, divide a frequência por 4 e disponibiliza no pino OSC2. 5
  • 6. Nos PIC com USB o pino OSC1 é sempre usado para entrada de sincronismo externo para o controlador USB. RC External Resistor/Capacitor with FOSC/4 output on RA6 RCIO External Resistor/Capacitor with I/O on RA6 Nestes modos o oscilador é composto por um schmitt-trigger interno e por uma malha RC externa. O modo RC divide a frequência por 4 e disponibiliza no pino OSC2 (Figura 1.4). Figura 5: Divisor de frequência O modo RCIO poupa o pino RA6 para GPIO (Figura 1.5) Figura 6: Pinos OSC1 e RA6 6
  • 7. Configurações Gerais Port A/D Enable: Porto configurado como I/O digital Porto configurado como entradas analógicas (ADC) Master Clear Porto configurado como GPIO Porto configurado como MCLR Brownout Desactivado Especificar uma tensão mínima de limite WDT Desactivado Especificar um tempo de intervalo entre checkpoints 1.5 Memória Registos Um registo é um local na memória do PIC, que pode ser lida e escrita, e dependendo do endereço, pode ter um significado especial no comportamento do programa se for um SFR (Special Function Register – registo de função especial), ou ser apenas um pedaço de memória de uso geral. Bancos de Memoria O banco de memória 0 corresponde ao acesso à memória geral e o banco 1 corresponde aos registos. TRIS Este registo controla o sentido da porta respectiva. Por exemplo se TRISA = 255 = 11111111, o porto A é configurado para entrada, se TRISB = 129 = 10000001, o 7
  • 8. porto B é configurado para saída excepto os pinos 0 e 7 que são de entrada. Os dispositivos actuais só possuem este dispositivo para compatibilidade e os mais recentes já não o possuem, pelo que o código só deve referir o TRIS quando se refere a dispositivos antigos ou ao reutilizar código antigo. PORT Cada um destes registos controla um porto. O esquema de cada pino encontra-se representado na Figura 1.6. Normalmente cada porto é composto por 8 bits (mas podem ser menos), ou ainda algum destes estar a ser usado por uma função especial, pelo que deve ser tomado cuidado ao se escrever em todo o porto. As instruções de escrita bit a bit são uma prática mais eficaz, segura e perceptível. A atribuição de nomes inteligíveis aos pinos que realizam uma função específica também é recomendada em prol da facilidade de compreensão e depuração do código. Figura 7: Esquema de um pino W – Working Register (Acumulador) O Working register ou Acumulador é o registo onde tudo normalmente acontece. É o espaço de memória mais volátil do PIC, pois poucas operações garantem a manutenção do seu conteúdo. O conteúdo que se deseje preservar deve então ser imediatamente copiado para um local seguro. A analogia a reter para boa prática é imaginar o Working register como uma espécie de ardósia onde se escrevem os resultados dos cálculos. 8
  • 9. 2. Exemplos de programação (Assembly e C) Enunciam-se seguidamente alguns exemplos de programação em, respectivamente, linguagem Assembly e C: Exemplo 1: Escrever na memória Pretende-se escrever o valor 06h no endereço 85h no banco 1. BSF MOVLW MOVWF BCF 03h,5 06h 85h 03h,5 ;Banco 1 ;Coloca 00110 no W ;Coloca W no 85h ;Banco 0 BSF 03h,5 – coloca 1 (set) no bit 5 do endereço 03h MOVLW 06h – escreve o valor 06h no W MOVWF 85h – coloca o conteúdo do W no endereço 85h BCF 03h,5 – coloca 0 (clear) no bit 5 do endereço 03h bit_set(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h *0x85 = 0x06 – valor literal 06h no endereço 85h bit_clear(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h ou write_bank(1, 0x85, 0x06); escreve o valor 06h no endereço 85h no banco 1 Exemplo 2: Escrever num porto, ligando o bit 1 Pretende-se colocar o bit 1 do porto A a 1. BSF MOVLW MOVWF BCF MOVLW MOVWF 03h,5 00h 85h 03h,5 02h 05h ;Banco 1 ;Escreve 0 no W ;Escreve W no 85h/TRISA :definir o porto A para saída ;Banco 0 ;Escreve 00000010 no W ;Escreve W no 05h/PORTA :escrever W no porto A BSF 03h,5 – coloca 1 (set) no bit 5 do endereço 03h MOVLW 00h – coloca o valor 00h no registo W MOVWF 85h – coloca o conteúdo do registo W no endereço 85h que corresponde ao TRISA BCF 03h,5 – coloca 0 (clear) no bit 5 do endereço 03h MOVLW 02h – escreve o valor literal 00000010 no registo W 9
  • 10. MOVWF 05h – coloca o conteúdo do registo W no endereço 05h que corresponde ao PORTA bit_set(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h *0x85 = 0x00 – escreve o valor 06h no endereço 85h bit_clear(0x03,5) – coloca 1 (set) no bit 5 do endereço 03h *0x05 = 0x02 – escreve o valor 02h no endereço 05h ou write_bank(1, 0x85, 0x00); escreve o valor 00h no endereço 85h no banco 1 write_bank(0, 0x05, 0x02); escreve o valor 02h no endereço 05h no banco 0 ou set_tris_a(0x00); definir o porto A como saída output_high(PIN_A0); ligar o bit 1 do porto A Exemplo 3: Loops e delays Pretende-se controlar a temporização de atrasos através de ciclos e instruções directas. MOVLW 0FFh ;Coloca 0 no W MOVWF 08h ;Coloca W no 08h CONTADOR EQU 08h ;Define CONTADOR como o endereço de memoria 08h CICLO ;Define uma marcação no código DECFSZ CONTADOR,1 ;Subtrai 1 ao valor no endereço designado por ;contador e ignora a próxima instrução de o valor ;resultante da subtracção for 0 GOTO CICLO ;Salta para a posição marcada pelo nome CICLO ;As instruções seguintes serão executadas quando o valor ;de CONTADOR chegar a 0 e a instrução de salto for ;ignorada #byte contador = 0x08 contador = 0xFF; do{ contador--; }while(contador > 0); // Define CONTADOR como o endereço de memoria 08h // Escreve o valor 255 no CONTADOR // Repete o bloco de instruções enquanto a condição se // verificar // Decrementa CONTADOR // Define a condição de repetição 10
  • 11. Assumindo um relógio interno de 40MHz, tem-se um clock de instrução de 10MHz e período de 100ns. As instruções DECFSZ e GOTO são ambas de 2 ciclos, logo cada loop demora 4 ciclos, ou seja 400ns. Para um atraso de 20us, o valor a escolher para o contador será então de 20000/400 = 50 ou 32h. Na linguagem C é mais difícil efectuar a contagem de ciclos, pois a maioria dos compiladores não esclarece a relação entre o código escrito e o código máquina correspondente. Na maioria das linguagens C para o microcontrolador PIC existe uma instrução de atraso declarada por: delay_us(20); pode ainda usar-se um bloco de linguagem Assembly no código C: int8 contador=0x32; #asm CICLO DECFSZ CONTADOR,1 GOTO CICLO #endasm Exemplo 4: Funções e Subrotinas Pretende-se agora definir e chamar subrotinas. Define-se uma rotina que guarda um valor numa localização de memória, e chama-se do bloco principal. ROTINA MOVFW 09h MOVWF 30h RETURN ;... MOVLW 56h MOVWF 09h CALL ROTINA ; Guarda o valor do endereço 09h no endereço 30h ;Nome da subrotina ;Escreve o conteúdo do endereço 09h no W ;Escreve o conteúdo do W no endereço 30h ;Retorna ao ponto onde a rotina foi chamada ;Escreve 56h no W ;Escreve o conteúdo do W no endereço 09h ;Chama a subrotina #byte objecto = 0x09 //Define objecto como o endereço de memória 09h void guarda (int8 valor){ *0x30 = valor; } //cabeçalho da função //escreve o valor recebido no endereço 30h void main(){ objecto = 0x56; guarda(objecto); } //Coloca o valor 56h no objecto //chama a função para guardar o valor do endereço 09h 11
  • 12. Exemplo 5: Leitura de portos Pretende-se ler de um porto e alterar a sua direccionalidade. O programa espera que o bit 0 do porto B esteja a 1 e coloca o bit 7 do mesmo porto a 1. Depois retorna o bit 0 a 0; STATUS TRISB PORTB EQU EQU EQU FD8h F93h F81h INICIO MOVLW MOVWF 01h TRISB ;Coloca o bit 0 do porto B para entrada CICLO BTFSS PORTB,0 GOTO CICLO BSF PORTB,7 MOVLW 00h MOVWF TRISB BSF PORTB,0 GOTOINICIO ;Testa o bit 0 do porto B e salta a próxima instrução se for ;1 ;Se o bit 0 estiver a 0 testa de novo ;Se o bit 0 estiver a 1 ;Coloca o bit 7 a 1 ;Configura todo o porto B como porto de saída ;Coloca o bit 0 a 0 ;Repete o programa while(true){ set_tris_b(0x01); while(!input(PIN_B0)){} set_tris_b(0x00); output_low(PIN_B0); output_high(PIN_B7); } Exemplo 6: Adição e subtracção Pretende-se verificar as operações básicas da adição e da subtracção, usando operadores no acumulador MOVLW MOVWF MOVLW ADDLW SUBLW SUBWF 30 08h 25 25 20 08h ;W=30 ;08h=30 ;W=25 ;W=50 ;W=30 ;W=0 12
  • 13. #byte f = 0x08 main(){ int8 acumulador = 25; f = 30; acumulador += 25; acumulador -= 20; acumulador += f; } Exemplo 7: Interrupção por Temporizador Pretende-se usar um temporizador (timer) com interrupção de overflow temporizar 1 segundo. ORG GOTO 00h MAIN ;Vector de Reset ;Evita sobrepor o vector de interrupção com código ORG GOTO 08h LOW_ISR ;Vector de Interrupção ;Evita sobrepor o vector de interrupção prioritário com ;código, neste caso é desnecessário, pois não é usado ISR BTFSS GOTO MOVLW MOVWF BCF FIM_ISR RETFIE INTCON,5 FIM_ISR 0FFh PORTB TMR0IF ;Tratamento de interrupção ;Escreve FFh no W ;Escreve o conteúdo do registo W no porto B ;Limpa a flag para permitir a activação da interrupção ;Fim do tratamento de interrupção MAIN BCF BSF BSF IPEN GIE TMR0IE ;Desabilita prioridade de interrupções ;Habilita interrupções ;Habilita interrupção do timer BCF BSF BCF BCF MOVLW IORWF MOVLW MOVWF MOVLW MOVWF TMR0ON T08BIT T0CS PSA 06h T0CON,1,1 98h TMR0H 96h TMR0L ;Pára o Timer0 ;Configura o contador para 16bits ;Configura a fonte para clock interno ;Usa divisor de frequência ;Divide a frequência por 128 13
  • 14. BSF TMR0ON ;Inicia o Timer0 ;.... ; Ao fim de 1 segundo o programa será interrompido e todos os pinos do porto B estarão a ‘1’, seguindo imediatamente de onde havia sido interrompido. Assume-se uma frequência interna de 40MHz #pragma code INT_VECTOR = 0x08 timer0_isr(){ PORTB=0xFF; TMR0IF=0; } void main(){ IPEN=0; GIE=1; TMR0IE=1; TMR0ON=0 T08BIT=1; T0CS=0; PSA=0; T0CON|=0x06; TMR0H=0x98; TMR0L=0x96; TMR0ON=1; // ... } //Desabilita prioridade de interrupções //Habilita interrupções //Habilita interrupção do timer //Pára o Timer0 //Configura o contador para 16bits //Configura a fonte para clock interno //Usa divisor de frequência //Divide a frequência por 128 //Inicia o Timer0 ou #int_timer0 timer0_isr(){ output_port_b(0xFF); } void main(){ interrupt_active(int_timer0); setup_timer(RTCC_INTERNAL|RTCC_DIV_2|RTCC_16_BIT); set_timer0(0x9896); // ... } 14
  • 15. 3. Interrupções e registos associados INTCON bit 7 GIE/GIEH: Global Interrupt Enable bit Quando IPEN = 0: 1 = Activa todas as interrupções 0 = Desactiva todas as interrupções Quando IPEN = 1: 1 = Activa todas as interrupções com alta prioridade 0 = Desactiva todas as interrupções com alta prioridade bit 6 PEIE/GIEL: Peripheral Interrupt Enable bit Quando IPEN = 0: 1 = Activa todas as interrupções periféricas 0 = Desactiva todas as interrupções periféricas Quando IPEN = 1: 1 = Activa todas as interrupções periféricas com alta prioridade 0 = Desactiva todas as interrupções periféricas com alta prioridade bit 5 TMR0IE: TMR0 Overflow Interrupt Enable bit 1 = Activa a interrupção do timer 0 0 = Desactiva a interrupção do timer 0 bit 4 INT0IE: INT0 External Interrupt Enable bit 1 = Activa a interrupção externa 0 0 = Desactiva a interrupção externa 0 bit 3 RBIE: RB Port Change Interrupt Enable bit 1 = Activa a interrupção do porto B 0 = Desactiva a interrupção do porto B bit 2 TMR0IF: TMR0 Overflow Interrupt Flag bit 1 = O registo TMR0 chegou ao máximo/activou interrupção (para reactivar a detecção/interrupção, deve manualmente colocar-se a 0, ou a detecção/interrupção não volta a disparar) 0 = O registo TMR0 não chegou ao máximo/activou interrupção bit 1 INT0IF: INT0 External Interrupt Flag bit 1 = A interrupção INT0 foi activada (para reactivar a interrupção, deve manualmente colocar-se a 0, ou a interrupção não volta a activar) 0 = A interrupção INT0 não foi activada 15
  • 16. bit 0 RBIF: RB Port Change Interrupt Flag bit(1) 1 = Um dos pinos do porto B mudou de estado 0 = Nenhum dos pinos do porto B mudou de estado INTCON2 bit 7 RBPU: PORTB Pull-up Enable bit 1 = Todos os pull-ups do PORTB estão desabilitados 0 = Todos os pull-ups do PORTB são controlados pelo valor do latch de cada porto bit 6 INTEDG0: External Interrupt 0 Edge Select bit 1 = INT0 activo na transição positiva 0 = INT0 activo na transição negativa bit 5 INTEDG1: External Interrupt 1 Edge Select bit 1 = INT1 activo na transição positiva 0 = INT1 activo na transição negativa bit 4 INTEDG2: External Interrupt 2 Edge Select bit 1 = INT2 activo na transição positiva 0 = INT2 activo na transição negativa bit 2 TMR0IP: TMR0 Overflow Interrupt Priority bit 1 = TMR0 tem prioridade alta 0 = TMR0 tem prioridade baixa bit 0 RBIP: RB Port Change Interrupt Priority bit 1 = PORTB tem prioridade alta 0 = PORTB tem prioridade baixa INTCON3 bit 7 INT2IP: INT2 External Interrupt Priority bit 1 = INT2 tem prioridade alta 0 = INT2 tem prioridade baixa bit 6 INT1IP: INT1 External Interrupt Priority bit 1 = INT1 tem prioridade alta 0 = INT1 tem prioridade baixa bit 4 INT2IE: INT2 External Interrupt Enable bit 1 = Activa a interrupção externa 2 0 = Desactiva a interrupção externa 2 16
  • 17. bit 3 INT1IE: INT1 External Interrupt Enable bit 1 = Activa a interrupção externa 1 0 = Desactiva a interrupção externa 1 bit 1 INT2IF: INT2 External Interrupt Flag bit 1 = A interrupção INT2 foi activada (para reactivar a interrupção, deve manualmente colocar-se a 0, ou a interrupção não volta a activar) 0 = A interrupção INT2 não foi activada bit 0 INT1IF: INT1 External Interrupt Flag bit 1 = A interrupção INT1 foi activada (para reactivar a interrupção, deve manualmente colocar-se a 0, ou a interrupção não volta a activar) 0 = A interrupção INT1 não foi activada PIR1 bit 6 ADIF: A/D Converter Interrupt Flag bit 1 = A conversão A/D terminou (para reactivar a interrupção, deve manualmente colocar-se a 0, ou a interrupção não volta a activar) 0 = A conversão A/D não terminou bit 5 RCIF: EUSART Receive Interrupt Flag bit 1 = O buffer de recepção EUSART, RCREG, está cheio (este bit é colocado a 0 lendo o buffer) 0 = O buffer de recepção EUSART está vazio bit 4 TXIF: EUSART Transmit Interrupt Flag bit 1 = O buffer de recepção EUSART, TXREG, está cheio (este bit é colocado a 0 escrevendo no buffer) 0 = O buffer de recepção EUSART está vazio bit 3 SSPIF: Master Synchronous Serial Port Interrupt Flag bit 1 = A transmissão/recepção terminou (para reactivar a interrupção, deve manualmente colocar-se a 0, ou a interrupção não volta a activar) 0 = Aguardando transmissão/recepção PIE1 bit 6 ADIE: A/D Converter Interrupt Enable bit 1 = Activa a interrupção do ADC 0 = Desactiva a interrupção do ADC bit 5 RCIE: EUSART Receive Interrupt Enable bit 1 = Activa a interrupção de recepção do EUSART 0 = Desactiva a interrupção de recepção do EUSART 17
  • 18. bit 4 TXIE: EUSART Transmit Interrupt Enable bit 1 = Activa a interrupção de transmissão do EUSART 0 = Desactiva a interrupção de transmissão do EUSART bit 3 SSPIE: Master Synchronous Serial Port Interrupt Enable bit 1 = Activa a interrupção do MSSP (SPI/I2C) 0 = Desactiva a interrupção do MSSP (SPI/I2C) IPR bit 6 ADIP: A/D Converter Interrupt Priority bit 1 = A interrupção do ADC tem prioridade alta 0 = A interrupção do ADC tem prioridade baixa bit 5 RCIP: EUSART Receive Interrupt Priority bit 1 = A interrupção de recepção do EUSART tem prioridade alta 0 = A interrupção de recepção do EUSART tem prioridade baixa bit 4 TXIP: EUSART Transmit Interrupt Priority bit 1 = A interrupção de transmissão do EUSART tem prioridade alta 0 = A interrupção de transmissão do EUSART tem prioridade baixa bit 3 SSPIP: Master Synchronous Serial Port Interrupt Priority bit 1 = A interrupção do MSSP (SPI/I2C) tem prioridade alta 0 = A interrupção do MSSP (SPI/I2C) tem prioridade baixa RCON bit 7 IPEN: Interrupt Priority Enable bit 1 = Activa os níveis de prioridade das interrupções 0 = Inactiva os níveis de prioridade das interrupções bit 6 SBOREN: BOR Software Enable bit Se BOREN1:BOREN0 = 01: 1 = BOR está activo 0 = BOR está desactivado Se BOREN1:BOREN0 = 00, 10 or 11: Bit está desactivado bit 4 RI: RESET Instruction Flag bit 1 = Não foi executado RESET (não editável) 0 = Foi executado RESET (Deve ser colocado a 0 por software após um brown-out) bit 3 TO: Watchdog Time-out Flag bit 1 = Aplicado no início, ou após CLRWDT ou SLEEP 0 = O watchdog timer fez RESET 18
  • 19. bit 2 PD: Power-Down Detection Flag bit 1 = Aplicado no início, ou após CLRWDT 0 = Aplicado após SLEEP bit 1 POR: Power-on Reset Status bit(2) 1 = Não foi executado Power-on Reset (não editável) 0 = Foi executado Power-on Reset (Deve ser colocado a 0 por software após um Power-on Reset) bit 0 BOR: Brown-out Reset Status bit 1 = Não foi executado Brown-out Reset (não editável) 0 = Foi executado Brown-out Reset (Deve ser colocado a 0 por software após um Brown-out Reset) 4. Características e funções do PIC18xx Master Clear (MCLR) O pino MCLR é a forma de externamente inicializar o dispositivo. Este pino, quando atribuído a esta função não pode ser escrito por software. Power-on Reset (POR) Esta função ocorre quando o valor de tensão do pino VDD sobe acima de um determinado nível, após o qual é determinado que o dispositivo encontra-se efectivamente ligado. Esta função assegura que o código é correctamente iniciado. Brown-out Reset (BOR) Esta função ocorre quando o valor de tensão do pino VDD desce abaixo de um nível pré-configurado, em que se reinicia o funcionamento. Watchdog Timer (WDT) Esta função permite reiniciar automaticamente o dispositivo após um intervalo de tempo pré-configurado. Devem ser introduzidos checkpoints para reiniciar a contagem em zonas do código que assegurem que existe tempo de execução suficiente para o programa correr normalmente. Ciclos de instrução O clock interno é dividido por 4 para gerar o sincronismo de pipeline, conforme ilustrado na figura 8. Isto significa que cada ciclo de programa corresponde a 4 ciclos de relógio. Por exemplo, para um oscilador de 20MHz com PLL de 2, tem-se uma 19
  • 20. frequência interna de 40MHz. A frequência de instrução será então de 10Mhz e o período de 100ns. Figura 8: Pipeline 5. Referências • http://www.microchip.com • http://www.pic-tools.com 20