MICROCONTROLADORES PIC - Teoria - parte 1 REGISTRADORES E PINOS DE I/O MICROCONTROLADORES - UMA BREVE HISTÓRIANa década de 80, quando a Intel lançou o seu microcontrolador 8051 ela não poderia prever a revolução que hora se iniciava na eletrônica. Muitos fabricantes como Motorola, Hitachi, National, e outros, trataram logo de lançar o seu. Muitos desses preferiram apenas “clonar” o microcontrolador Intel, outros não.
Um microcontrolador basicamente é a integração de um microprocessador com outros periféricos. Enquanto a maioria dos microprocessadores possui apenas a CPU (Unidade de processamento central), ALU (Unidade de lógica e aritmética), linhas para dados, linhas para endereços e linhas para controle e acesso de memória externa, alguns microcontroladores possuem tudo isso e mais os periféricos para comunicação serial, timer’s, Watchdog Timer, Osciladores, I/O’s (portas para o acesso ao mundo exterior), etc. Podemos então entender um microcontrolador como um “cérebro” (CPU) com “braços” (I/O’s). PARTES INTEGRANDES DE UM MICROCONTROLADOR GENÉRICO
|
Nome Pino |
Nº |
Tipo |
Estrutura |
Descrição |
OSC1/CLKIN |
16 |
Entrada |
Shimitt Trigger/CMOS |
Entrada osciladora |
OSC2/CLKOUT |
15 |
Saída |
|
Saída Osciladora |
|
||||
MCLR |
4 |
Entrada/Programação |
Shimitt Trigger |
Reset e Entrada para voltagem de programação |
|
||||
RA0 |
17 |
Entrada/Saída |
TTL |
Portas de entrada e saída |
RA1 |
18 |
Entrada/Saída |
TTL |
|
RA2 |
1 |
Entrada/Saída |
TTL |
|
RA3 |
2 |
Entrada/Saída |
TTL |
|
RA4/T0CKI |
3 |
Entrada/Saída |
Shimitt Trigger |
Porta de entrada e saída ou entrada do clock externo para timer e contador. |
|
||||
RB0/INT |
6 |
Entrada/Saída |
TTL/ Shimitt Trigger |
Portas de entrada e saída. O port B possui pull-up internos programáveis. |
RB1 |
7 |
Entrada/Saída |
TTL |
|
RB2 |
8 |
Entrada/Saída |
TTL |
|
RB3 |
9 |
Entrada/Saída |
TTL |
|
RB4 |
10 |
Entrada/Saída |
TTL |
Permite interrupção se alterar nível |
RB5 |
11 |
Entrada/Saída |
TTL |
|
RB6 |
12 |
Entrada/Saída |
TTL/ Shimitt Trigger |
|
RB7 |
13 |
Entrada/Saída |
TTL/ Shimitt Trigger |
|
Vss |
5 |
Alimentação |
|
Terra |
Vdd |
14 |
Alimentação |
|
Positivo +5V |
MEMÓRIA
A memória da PIC16F84 para programa não pode ser acessada pelo usuário, a não ser durante a gravação do programa (existem meios de acessar a memória de programa em tempo de execução - modo apenas leitura). Ela tem 1K x 14 bytes, que a princípio pode parecer pequena, mas como o PIC utiliza a tecnologia RISC, garante uma excelente otimização da área de programa. Na figura abaixo pode-se ver o mapa de memória de programa.
PC – Program counter: Neste registro o microcontrolador guarda a posição atual do programa. A cada instrução lida, o PC é incrementado em uma posição.
Reset Vector: Sempre que nosso microcontrolador for “resetado”, ele apontará para esta posição de memória.
Interrupt Vector: Quando tivermos uma interrupção (interna ou externa), o microcontrolador apontará para este endereço.
User memory space: Memória de programa. Área dedicada ao nosso programa.
Os registradores do PIC16F84 estão divididos em duas partes. A primeira é conhecida como SFR (Registros de Função Especial) e GPR (Registros de Propósito Geral). Estes registros dividem-se em dois bancos.
REGISTRADOR STATUS
Este registrador possui o estado atual da Unidade Lógica Aritmética, do Reset e do banco de registros selecionado.
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Leitura |
Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
IRP |
RP1 |
RP0 |
TO |
PD |
Z |
DC |
C |
bit 7 |
|
bit 0 |
bit 7 - IRP – Este registro não é utilizado pela PIC16F84, sempre lido sempre como “0”
bit 6, 5 - RP1, RP0 – Registros de seleção do banco de registros
00 = Banco 0 (00H – 7FH)
01 = Bano 1 (80H – FFH)
bit 4 - TO – Time-out
1 = Após power-up (ligar), instrução CLRWDT (limpar Cão de Guarda) ou instrução SLEEP (dormir)
0 = Um time-out do WDT ocorreu
bit 3 - PD – Power-down
1 = Após power-up (ligar) ou instrução CLRWDT (limpar Cão de Guarda)
0 = execução da instrução SLEEP (dormir)
bit 2 - Z – Zero
1 = O resultado da operação aritmética ou lógica é igual a zero.
0 = O resultado da operação aritmética ou lógica não é zero.
bit 1 - DC – Digito Carry/borrow
1 = Ocorreu um transbordamento do 4º bit menos significativo
0 = Não ocorreu o transbordamento do 4º bit menos significativo
bit 0 - C – Carry
1 = Ocorreu um transbordamento do 7º bit mais significativo
0 = Não ocorreu um transbordamento do 7º bit mais significativo
REGISTRADOR OPTION_REG
Com este registrador podemos configurar a interrupção externa através de RB0, a interrupção do timer, o divisor para o timer e os resistores de pull-up da parte mais significativa do PORTB.
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
RBPU |
INTEDG |
T0CS |
T0SE |
PSA |
PS2 |
PS1 |
PS0 |
bit 7 |
|
bit 0 |
bit 7 - RBPU – Habilita/desabilita pull-up’s do PORTB
1 = pull-up desabilitados
0 = pull-up habilitado
bit 6 - INTEDG – Seleção de borda para interrupção
1 = Interrupção ativa na subida de borda em RB0/INT
0 = Interrupção ativa na descida de borda em RB0/INT
bit 5 -T0CS – Captura do clock do timer
1 = Transição em RA4/T0CKI
0 = Instrução interna, oscilador interno
bit 4 - T0SE – Seleção de borda para clock
1 = Incrementa no nível alto para baixo na transição em RA4/T0CKI
0 = Incrementa no nível baixo para alto na transição em RA4/T0CKI
bit 3 - PSA – Seleção da Divisão Escalar do Timer
1 = Divisão ligada ao WDT
2 = Divisão ligada ao TMR0
bits 2..0 - PS2...PS0 – Divisão para contagem do timer e WDT (Cão de Guarda)
Valor |
Proporção no TMR0 |
Proporção no WDT |
000 |
1 : 2 |
1 : 1 |
001 |
1 : 4 |
1 : 2 |
010 |
1 : 8 |
1 : 4 |
011 |
1 : 16 |
1 : 8 |
100 |
1 : 32 |
1 : 16 |
101 |
1 : 64 |
1 : 32 |
110 |
1 : 128 |
1 : 64 |
111 |
1 : 256 |
1 : 128 |
REGISTRADOR
INTCOM
Este registrador controla as várias interrupções. Também podemos, através deste registrador, saber exatamente qual interrupção foi solicitada.
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
Escrita Leitura |
GIE |
EEIE |
T0IE |
INTE |
RBIE |
T0IF |
INTF |
RBIF |
bit 7 |
|
bit 0 |
bit 7 - GIE – Bit de habilitação global das interrupções
1 = Habilita todas as interrupções
0 = Desabilita todas as interrupções
bit 6 - EEIE – Habilita interrupção de “fim de escrita” para EEPROM
1 = Habilita interrupção de “fim de escrita”
0 = Desabilita interrupção de “fim de escrita”
bit 5 - T0IE – Habilita interrupção para over-flow do Timer
1 = Habilita interrupção pelo timer
0 = Desabilita interrupção pelo timer
bit 4 - INTE – Habilita interrupção pelo pino RB0/INT
1 = Habilita interrupção pelo pino RB0/INT
0 = Desabilita interrupção pelo pino RB0/INT
bit 3 - RBIE – Habilita interrupção na mudança de estado no PORTB
1 = Habilita interrupção na mudança de estado no PORTB
0 = Desabilita interrupção na mudança de estado no PORTB
bit 2 - T0IF – Flag para leitura da interrupção over-flow para o timer
1 = Houve interrupção pelo timer
0 = Não houve interrupção pelo timer
bit 1 - INTF – Flag para leitura da interrupção pelo pino RB0/INT
1 = Houve interrupção pelo pino RB0/INT
0 = Não houve interrupção pelo pino RB0/INT
bit 0 - RBIF – Flag para leitura da interrupção na mudança de estado no PORTB
1 = Houve interrupção na mudança de estado no PORTB
0 = Não houve interrupção na mudança de estado no PORTB
REGISTRADOR PCL
Este registrador contém o endereço da instrução a executar. Ele é incrementado automaticamente e contém os 8 bits menos significativos do PC (Progam Couter).
REGISTRADOR STACK
Este registrador contém os endereços de retorno para as sub-rotinas que utilizam a instrução CALL ou de retorno após a execução de uma interrupção. Note que no PIC16F84 só existem 8 níveis de stack, ou seja, não é possível executar mais que oito instruções CALL sem executar ao menos uma instrução RETURN. Se isso for ignorado, o PIC ficarrá “desorientado” e o microcontrolador não funcionará corretamente.
REGISTRADORES INDF e FSR
Estes registradores permitem endereçar indiretamente o banco de memória RAM. Isso é muito útil quando deseja-se, por exemplo, escrever ou ler dados seqüencialmente na memória. O registrador FSR deve conter o endereço indireto de memória que precisa-se ler ou escrever. No registro INDF será encontrado o dado do endereço apontado indiretamente por FSR.
REGISTRADORES PORTA e PORTB
Estes registradores contêm o estado atual dos “port’s” de I/O. Pode-se através de instruções acessa-los individualmente ou de forma “inteira”. Sem dúvida alguma estes registradores são os mais utilizados no PIC. Sempre que for preciso escrever ou ler um pino de I/O, estes registradores serão utilizado.
REGISTRADORES TRISA e TRISB
Estes registradores permitem configurar os pinos de I/O como entrada ou saída. Isto é feito de acordo com cada necessidade. TRISA configura o “PORTA” e TRISB configura o “PORTB”. Se for preciso configurar um pino de I/O como entrada faz-se o bit deste pino igual a 1 e para saída o bit deve ser igual a zero.
Os outros registradores, que não foram comentados aqui, serão discutidos no decorrer desta pequena série, pois estão ligados diretamente aos periféricos do microcontrolador.
No PIC16F84 existem 13 pinos de I/O que podem ser configurados individualmente como entrada ou saída através dos registros TRISA e TRISB. A leitura e/ou escrita também pode ser feita individualmente através dos registradores PORTA ou PORTB.
Os pinos de I/O da PORTA tem características TTL, exceto o pino RA4 que se comporta como um Schimitt Trigger. Isto porque este pino pode receber um sinal de clock externo para incrementar o timer do PIC. Quando isto não é necessário, o pino tem o mesmo comportamento dos outros. Temos na PORTA 5 pinos de I/O.
No PORTB os pinos de I/O também têm características TTL, exceto o pino RB0 que pode assumir características Shimitt Trigger quando configurado para receber uma interrupção externa. Temos no PORTB 8 pinos de I/O.
Todos os pinos de I/O do PIC16F84 conseguem fornece uma corrente de até 25mA para a carga, que é mais que suficiente para ascender um LED. Note que este dreno é por pino e não por PORT. Porém, por prudência, não é recomendado ultrapassar o limite de 20 mA por pino de I/O.
O mundo dos microcontroladores é realmente fascinante, porém ele exigirá dos que se propõe a conquista-lo um pouco de dedicação e paciência. Muitas dúvidas irão surgir no decorrer desta leitura, mas todas poderão ser sanadas com uma re-leitura mais atenta, até que tudo fique claro. Nas próximas partes desta série serão oferecidos alguns exemplos e projetos práticos que auxiliarão na compreensão da teoria apresentada.
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |