MICROCONTROLADORES. PIC16F87x - PDF
Download "MICROCONTROLADORES. PIC16F87x"
João Batista Paranhos Azenha
1 Universidade Católica de Goiás Departamento de Engenharia Curso de Engenharia Elétrica MICROCONTROLADORES PIC16F87x Prof. Eider Lúcio de Oliveira Prof. Éderson Lacerda Fideles
2 Microcontrolador PIC16F87x 2 SUMÁRIO INTRODUÇÃO... 4 CAPÍTULO I - O QUE É O PIC16F PINAGEM DO PIC16F87X... 6 CAPÍTULO II - CARACTERÍSTICAS DO PIC16F87 X CAPÍTULO III - MEMÓRIA DE PROGRAMA (FLASH EPROM), MEMÓRIA DE DADOS (RAM) E MEMÓRIA DE DADOS PERMANENTES (EEPROM) MEMÓRIA DE PROGRAMA (FLASH EPROM) MEMÓRIA DE DADOS (RAM) CAPÍTULO IV - REGISTRADORES DE FUNÇÕES ESPECIAIS REGISTRADOR W (ACUMULADOR OU REGISTRADOR DE TRABALHO) E A ALU (UNIDADE LÓGICA E ARITMÉTICA) 16 REGISTRADOR STATUS (ENDEREÇO 03H E 83H) REGISTRADOR PORTA (ENDEREÇO 05H) REGISTRADOR PORTB (ENDEREÇO 06H) REGISTRADOR PORTC (ENDEREÇO 07H) REGISTRADOR PORTD (ENDEREÇO 08H) REGISTRADOR PORTE (ENDEREÇO 09H) REGISTRADOR TRISA (ENDEREÇO 85H) REGISTRADOR TRISB (ENDEREÇO 86H) REGISTRADOR TRISC (ENDEREÇO 87H) REGISTRADOR TRISD (ENDEREÇO 88H) REGISTRADOR TRISE (ENDEREÇO 89H) REGISTRADOR INDF (ENDEREÇOS 00H E 80H) E O FSR (ENDEREÇOS 04H E 84H) REGISTRADOR TRM0 (ENDEREÇO 01H) REGISTRADOR PCL (ENDEREÇOS 02H E 82H) E O PCLATH (ENDEREÇOS 0AH E 8AH) REGISTRADOR EEDATA (ENDEREÇO 08H) REGISTRADOR EEADR (ENDEREÇO 09H) REGISTRADOR INTCON (ENDEREÇOS 0BH E 8BH) REGISTRADOR OPTION_REG(ENDEREÇO 81H) REGISTRADOR EECON1 (ENDEREÇO 88H) REGISTRADOR EECON2 (ENDEREÇO 89H) CAPÍTULO V - CONJUNTO DE INSTRUÇÕES DO PIC16F87X EXPLICAÇÃO DETALHADA DO CONJUNTO DE INSTRUÇÕES DO PIC CAPÍTULO VI - AS INTERRUPÇÕES DO PIC16F87X INTERRUPÇÃO DE TIMER INTERRUPÇÃO EXTERNA (RB0/INT) INTERRUPCÇÃO POR MUDANÇA DE ESTADO (RB4 A RB7) INTERRUPÇÃO DE FIM DE ESCRITA NA EEPROM REGISTRADOR INTCON CAPÍTULO VII - O CONTADOR/TEMPORIZADOR (TMR0) CAPÍTULO VIII MODO POWER DOWN, MODO SLEEP E O WDT O WACHTDOG TIMER (WDT) CAPÍTULO IX - ESCRITA E LEITURA NA EEPROM DO PIC16F87X BIBLIOGRAFIA... 52
3 Microcontrolador PIC16F87x 3 APÊNDICE A - INTRODUÇÃO AO MPLAB APÊNDICE B DETALHES DOS PORTS APÊNDICE C - KIT DIDÁTICO PARA PIC16F87X APÊNDICE D DISPLAY DE CRISTAL LÍQUIDO - LCD... 74
4 Microcontrolador PIC16F87x 4 INTRODUÇÃO Um microprocessador é um componente eletrônico, que devido às suas modernas técnicas de fabricação, consegue efetuar com rapidez, várias funções e operações lógicas e aritméticas, sob controle de um programa externo, que dita para a máquina a seqüência das funções e os operandos a serem utilizados. A diferença básica entre um microcontrolador e um microprocessador é que o microcontrolador já possui internamente vários circuitos eletrônicos que o microprocessador precisa usar externamente para ser funcional, tais como: memória de programa, memória de dados, portas de entrada e saída de sinais (portas de I/O, Input/Output), circuito de reset, circuito oscilador, contador/temporizador, portas lógicas para selecionar endereços, circuito de comunicação serial e paralela, conversor A/D, etc. Ao escolher um projeto microcontrolado em relação aos projetos digitais tradicionais, visa entre outras coisas: redução de custo; redução do consumo de energia; redução do tamanho do equipamento; aumento da confiabilidade; proteção de software que vai gravado internamente e a facilidade de implementação e de suas possíveis modificações através de programação. Atualmente muitos equipamentos de nosso uso diário, tais como: eletrodomésticos, videocassetes, alarmes, celulares e brinquedos, entre outros, utilizam microcontroladores para execução de suas funções básicas. Muitos microcontroladores são conhecidos pelos desenvolvedores de projetos no Brasil, podemos citar os seguintes: Microcontroladores da família 8051 (INTEL e outros fabricantes) Microcontroladores da família PIC (MICROCHIP) Microcontroladores da família COP8 (NATIONAL SEMICONDUTORES) Microcontroladores da TEXAS, exemplo: MSP430F13x/14x Microcontroladores da HOLTEK, exemplo: HT48500 Microcontroladores da MOTOROLA. O PIC pode ser visto externamente como um circuito integrado TTL ou CMOS normal, mas internamente dispõe de todos os dispositivos típicos de um sistema microprocessado, ou seja: Uma CPU (Central Processor Unit - Unidade de Processamento Central) cuja finalidade é interpretar as instruções de programa. Uma memória de programa Flash EPROM que possibilita a gravação cerca de 1000 vezes sem a necessidade de apagamento com ultravioleta. Uma memória RAM (Random Access Memory - Memória de Acesso Aleatório)
5 Microcontrolador PIC16F87x 5 utilizada para memorizar as variáveis utilizadas pelo programa. Uma série de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, etc. Uma memória EEPROM para gravar dados permanentes. Cada posição pode ser gravada cerca de um milhão de vezes. Uma série de dispositivos auxiliares ao funcionamento, ou seja, gerador de clock, barramento de dados e controle, contador/temporizador, conversor A/D, comunicação serial, etc. A presença de todos estes dispositivos em um espaço extremamente pequeno, dá ao projetista ampla gama de trabalho e enorme vantagem em usar um sistema microprocessado, onde em pouco tempo e com poucos componentes externos podemos fazer o que seria oneroso fazer com circuitos tradicionais. O PIC está disponível em uma ampla gama de modelos para melhor se adaptar as exigências de projetos específicos, diferenciando-se pelo número de linha de I/O e pelo conteúdo do dispositivo. Inicia-se com modelos pequenos identificados pela sigla PIC12Cxx dotados de 8 pinos, até chegar a modelos maiores com sigla PIC16Fxxx dotados de 40 ou mais pinos e os DSPics (processadores digitais de sinais). Como foi dito na introdução, uma descrição detalhada do PIC está disponível no site da microchip onde se pode encontrar grandes e variadas quantidades de informações técnicas, manuais, software de apoio, exemplos de aplicações e atualizações disponíveis. Mas, qual microcontrolador escolher? Ao escolher um microcontrolador devemos analisar o seguinte: facilidade de uso; disponibilidade de ferramentas de programação, teste e depuração; suporte técnico; custo e disponibilidade no mercado; e principalmente, se a família de microcontroladores possui várias opções de modelos e periféricos, possibilitando assim o reaproveitamento de código para outros projetos. A família de microcontroladores PIC é uma das que atende os requisitos do parágrafo anterior. A escolha do microcontrador fica a cargo do projetista, mas temos certeza que uma escolha muito boa, para começar os estudos, é a Família PIC da Microchip. Nesta apostila é feito um estudo detalhado do PIC16F87x.
6 Microcontrolador PIC16F87x 6 Capítulo I - O QUE É O PIC16F628 O PIC16F87x é um circuito integrado produzido pela Microchip, que pertence a categoria dos microcontroladores, ou seja, é um componente integrado, que em um único dispositivo, contém todos os circuitos necessários para realizar um completo sistema digital programável. A Figura 1, a seguir, mostra o encapsulamento DIP (DIP = dual in line) e os nomes descritivos dos pinos do PIC16F628. PINAGEM DO PIC16F87X Figura 1 Pinagem do PIC16F87x A Tabela 1 mostra a descrição de todas as funções de cada pino do microcontrolador em questão.
7 Microcontrolador PIC16F87x 7 Tabela 1 - Descrição da pinagem do PIC16F87x NOME FUNÇÃO DESCRIÇÃO RA0/AN0 RA1/AN1 RA2/AN2/V REF- / CV REF RA3/AN3/V REF+ RA0 AN0 RA1 AN1 RA2 AN3 V REF- / CV REF RA3 AN3 V REF+ RA4 Porta de I/O digital Entrada analógica Porta de I/O digital Porta de I/O digital Porta de I/O digital Entrada analógica Tensão de referência negativa analógica Porta de I/O digital Entrada analógica Tensão de referência negativa analógica Porta de I/O digital Exige resistor de pull-up. RA4/T0CKI/C1OUT T0CKI Entrada de clock do TIMER 0 C1OUT Saída do comparador 1 RA5/SS/AN4/C2OUT RA5 SS AN4 Porta de entrada Habilitação externa (slave select) para comunicação SPI Entrada analógica C2OUT Saída do comparador 2 RB0/INT RB0 INT Porta de I/O digital. Pode ter Pull-up interno habilitado por software. Interrupção externa. RB1 RB1 Porta de I/O digital. Pode ter Pull-up interno habilitado por software. RB2 RB2 Porta de I/O digital. Pode ter Pull-up interno habilitado por software. RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RB3 PGM RB4 RB5 RB6 PGC RB7 Porta de I/O digital. Pode ter Pull-up interno habilitado por software. Pino de programação em baixa tensão. Porta de I/O digital. Interrupção na mudança do estado do pino. Pode ter Pull-up interno habilitado por software. Porta de I/O bidirecional. Interrupção na mudança do estado do pino. Pode ter Pull-up interno habilitado por software. Porta de I/O digital. Interrupção na mudança do estado do pino. Pode ter Pull-up interno habilitado por software. Clock da programação serial. Porta de I/O digital. Interrupção na mudança do estado do pino. Pode
8 Microcontrolador PIC16F87x 8 ter Pull-up interno habilitado por software. RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA PGD RC0 T1OSO T1CKI RC1 T1OSI CCP2 RC2 CCP1 RC3 SCK SCL RC4 SDI Data da programação serial. Porta de I/O digital. Saída para oscilador externo para timer 1(TMR1). Entrada de incremento para TMR1. Porta de I/O digital. Entrada para oscilador externo para TMR1. Entrada do capture2 ou saídas para capture2/pwm2. Porta de I/O digital. Entrada do capture1 ou saídas para capture1/pwm1. Porta de I/O digital. Entrada/saída de clock para comunicação serial SPI/I 2 C. Porta de I/O digital. Entrada de dados para SPI. SDA Via de dados (entrada/saída) para I 2 C. RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RC5 SDO RC6 TX CK RC7 RX DT RD0 PSP0 RD1 PSP1 RD2 PSP2 Porta de I/O digital. Saída de dados para SPI. Porta de I/O digital. Transmissão (TX) de comunicação serial USART. Clock para comunicação síncrona. Porta de I/O digital. Recepção (RX) de comunicação serial USART. Data para comunicação síncrona. Porta de I/O digital. Dado 0 (comunicação paralela). Porta de I/O digital. Dado 1 (comunicação paralela). Porta de I/O digital. Dado 2 (comunicação paralela). RD3/PSP3 RD3 Porta de I/O digital.
9 Microcontrolador PIC16F87x 9 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp PSP3 RD4 PSP4 RD5 PSP5 RD6 PSP6 RD7 PSP7 RE0 RD AN5 RE1 WR AN6 RE2 CS AN7 OSC1 CLKIN OSC2 CLKOUT MCLR Vpp Dado 3 (comunicação paralela). Porta de I/O digital. Dado 4 (comunicação paralela). Porta de I/O digital. Dado 0 (comunicação paralela). Porta de I/O digital. Dado 0 (comunicação paralela). Porta de I/O digital. Dado 0 (comunicação paralela). Porta de I/O digital. Controle de leitura de porta paralela. Entrada analógica. Porta de I/O digital. Controle de escrita de porta paralela. Entrada analógica. Porta de I/O digital. Habilitação externa da porta paralela. Entrada analógica. Entrada para cristal. Entrada para osciladores externos (híbridos ou RC). Saída para cristal. Saída com onda quadrada em ¼ da freqüência imposta em OSC1 quando no modo RC. Essa freqüência equivale aos ciclos de máquina internos. Máster Clear (reset) externo. Entrada para tensão de programação (13V). Vss Vss GND terra 0Volt. V DD V DD Vcc Alimentação positiva (5Volt). Como é possível ver na figura acima, o PIC16F87x é dotado de um total de 40 pinos dispostos em duas fileiras paralelas de 20 pinos cada uma (DIP - dual in line). São 33 pinos de linhas de entrada e saída de sinais (linhas de I/O) para a nossa aplicação, um pino de alimentação, um de terra (referência), um de reset (MCLR) e dois de clock (OSC1/CLKIN e OSC2/CLKOUT).
10 Microcontrolador PIC16F87x 10 Capítulo II - Características do PIC16F87 x Para o PIC16F87x, podemos citar, entre outras, as seguintes características: Microcontrolador de 40 pinos; 33 portas configuráveis como entrada ou saída; Cada porta, pode drenar no máximo 25 ma e fornecer no máximo 20 ma; Freqüência máxima de operação de 4 a 20 MHz, depende das especificações do chip; Possui 15 fontes de interrupção, que são: 1. a interrupção externa; 2. interrupção por overflow do timer TMR0; 3. interrupção por overflow do timer TMR1; 4. interrupção por overflow do timer TMR2; 5. interrupção por mudança de nível nos pinos da porta B (pinos RB7 a RB4); 6. interrupção por escrita completa na EEPROM; 7. interrupção da porta paralela (PSP); 8. interrupção dos conversores A/D; 9. interrupção de recepção da USART; 10. interrupção de transmissão da USART; 11. interrupção da comunicação serial (SPI e I 2 C); 12. interrupção do CCP1 (Capture/Compare/PWM); 13. interrupção do CCP2; 14. interrupção dos comparadores; 15. interrupção de colisão de dados (Bus Collision). Memória de programação FLASH EPROM de 4 Kbytes (PIC16F874) ou 8 Kbytes (PIC16F877). Pode-se escrever nessa memória cerca de 1000 vezes sem danificá-la. Memória de dados temporários, RAM separada em bancos de memória. As primeiras posições de cada banco são reservadas para registradores de funções especiais (SFR - Special Function Registers). O restantes de cada banco são reservadas aos registradores de propósitos gerais (GPR - General Purpose Registers). Todos os registradores da RAM são programáveis bit a bit; Memória de dados permanentes, EEPROM de 256 Bytes. Pode-se escrever em cada bit dessa memória cerca de 1 milhão de vezes sem danificá-la; Via de programação com 14 bits e 35 instruções; 3 Módulos de timer/counter ; A faixa de tensão de trabalho está na faixa de 3 a 5,5 volts; Baixa potência de consumo - menos de 2 ma para 5 V, 4Mhz; cerca de 15 µa para 2 V, 32 KHz e menos de 1µA para 2 V (modo Standby); Os microcontroladores PIC apresentam uma estrutura de máquina interna do tipo Havard, enquanto grande parte dos microcontradores tradicionais apresenta uma arquitetura tipo Von-Neumann. A diferença está na forma como os dados e o programa são processados pelo microcontrolador. Na arquitetura tradicional, tipo Von-Neumann, existe apenas um barramento (bus) interno (geralmente de 8 bits), por onde passam as instruções e os dados. Já na arquitetura tipo Havard existem dois barramentos internos, sendo um de dados e outro de instruções. No caso dos microcontroladores PIC, o barramento de dados é sempre de 8 bits e o de instruções
11 Microcontrolador PIC16F87x 11 pode ser de 12, 14 ou 16 bits, dependendo do microcontrolador. Esse tipo de arquitetura permite que enquanto uma instrução é executada outra seja buscada na memória, o que torna o processamento mais rápido. Além disso, como o barramento de instruções é maior do que 8 bits, o OPCODE da instrução já inclui o dado e o local onde ela vai operar (quando necessário), o que significa que apenas uma posição de memória é utilizada por instrução, economizando assim muita memória de programa. Desta forma, podemos observar que dentro da palavra o OPCODE, que pode ser de 12, 14 ou 16 bits, não sobra muito espaço para o código da instrução propriamente dito. Por isso, os PICs utilizam uma tecnologia chamada RISC, que significa Reduced Instruction Set Computer (Computador com conjunto de instruções reduzido). Desta forma, os PICs possuem cerca de 35 instruções (o número correto varia de acordo com o microcontrolador), muito menos que os microcontroladores convencionais (CISC) que chegam a possuir mais de 100 instruções. Isto torna o aprendizado muito mais fácil e dinâmico, mas, por outro lado, implica no fato de que muitas funções devem ser construídas, pois não possuem uma instrução direta, exigindo maior habilidade do programador. Nos microcontroladores PIC, o sinal de clock é internamente dividido por quatro. Portanto, para um clock externo de 4 MHz, temos um clock interno de 1 MHz, e consequentemente, cada ciclo de máquina dura 1us. A divisão do clock por quatro forma as fases Q1, Q2, Q3 e Q4. O program counter (registrador PC) é incrementado automaticamente na fase Q1 do ciclo de máquina e a instrução seguinte é buscada da memória de programa e armazenada no registrador de instruções no ciclo Q4. Ela é decodificada e executada no próximo ciclo, no intervalo de Q1 até Q4. Esta característica de buscar a informação num ciclo de máquina e executá-la no próximo é conhecida como PIPELINE. Ela permite que quase todas as instruções sejam executadas em apenas um ciclo, gastando assim 1us (para um clock de 4 MHz) e tornando o sistema muito mais rápido. As únicas exceções referem-se às instruções que geram saltos no program counter, como chamadas de rotinas e retornos. Ao executar essas instruções, o PIPELINE deve ser primeiramente limpo para depois poder ser carregado novamente com o endereço correto, consumindo para isso 2 ciclos de máquina. Esse PIPELINE é facilmente implementado devido à arquitetura Havard.
12 Microcontrolador PIC16F87x 12 Capítulo III - MEMÓRIA DE PROGRAMA (FLASH EPROM), MEMÓRIA DE DADOS (RAM) E MEMÓRIA DE DADOS PERMANENTES (EEPROM) MEMÓRIA DE PROGRAMA (FLASH EPROM) Em particular o PIC16F628 dispõe de uma memória para armazenar o programa, do tipo Flash EPROM, que pode ser escrita cerca de 1000 vezes e que é ideal para o nosso experimento tornando a conecção para a programação on-board, ou seja podemos colocar o programa dentro do chip sem ter que removê-lo do circuito de prova. A sua capacidade de memorização é de locações (8 K Byte de 14 bits cada) para o PIC16F877 e que poderão conter, cada uma, somente uma instrução básica do PIC. Logo, o programa mais complexo que poderemos realizar não poderá ter mais do que instruções. Os endereços reservados para Flash EPROM começam em 0000H e vão até 1FFFH. O PIC pode somente executar instruções memorizadas nestas locações. Não se pode de maneira nenhuma ler, escrever ou cancelar dados nesses endereços, a não ser com o uso de um dispositivo externo chamado programador. A primeira localização de memória de programa que será executada quando o PIC começar a rodar (após a alimentação ou um reset) é o endereço 0000H, por isso essa localização de memória é denominada Reset Vector (Vetor de Reset). Já, quando ocorre uma interrupção, a primeira instrução a ser executada está no endereço 0004H, por isto, este endereço denomina-se endereço de Interrupt Vector (Vetor de Interrupção). O template, exemplo padrão, a seguir mostra como deve ser a estrutura de um programa em Assembly escrito para o PIC16F877 no MPLAB (compilador, simulador e emulador para o PIC). ;********************************************************************** list p=16f877 ; diretiva list para definir o processador #include <p16f877.inc> ; definições de variáveis do processador CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF ; Variáveis utilizadas pelo usuário TEMP1 equ 20h ; Três variáveis temporárias TEMP2 equ 21h TEMP3 equ 22h ;**********************************************************************
13 Microcontrolador PIC16F87x 13 ORG 00H ; vetor de reset goto Inicio ; vai para o inicio do programa ;********************************************************************** ;********************************************************************** ORG 04H ; vetor de interrupção retfie ; retorno de interrupção ;********************************************************************** Inicio bsf STATUS,RP0 ;Vai para o banco 1 movlw 06H movwf ADCON1 PORTA funcionará como I/O clrf TRISA ; seta todos os bits dos PORTs como saídas clrf TRISB clrf TRISC clrf TRISD clrf TRISE bcf STATUS,RP0 ;Vai para o banco 0 loopmain ; Restante do código do programa vai aqui END ; diretiva de fim de programa ;********************************************************************** MEMÓRIA DE DADOS (RAM) Diferentemente da memória Flash EPROM destinada a conter o programa, a área de memória RAM é visível pelo resto do programa. Nela podemos escrever, ler, ou modificar tranqüilamente qualquer registrador do nosso programa a qualquer momento que for necessário. A única limitação consiste de que alguns desses registradores desenvolvem funções especiais para o PIC que não podem ser utilizados para outra coisa a não ser para aquilo a qual eles estão reservados. Estes registradores encontram-se nas locações base da área de memória RAM mostrada na Tabela 2. A localização de memória presente na RAM é endereçada diretamente em um espaço de memória que vai de 00H a 7FFH dando um total de 2048 bytes, denominado página 0 (ou banco 0). Um segundo espaço de endereçamento denominado página 1 (ou banco 1) vai de 800H a FFFH. Para acessar esse segundo espaço é necessário recorrer a dois bits auxiliares RP0 e RP1 do registrador de STATUS segundo a modalidade que iremos explicar mais adiante. As primeiras locações de cada página são aquelas reservadas as funções especiais para o funcionamento do PIC e, como já foi dito, não podem ser utilizadas para outra coisa. As 96 locações no final da página 0 são reservadas para as nossas variáveis podem ser endereçadas de 020H a 7FH. Podemos, aqui, utilizar livremente pelo nosso programa para memorizar variáveis, contadores, etc. Em resumo, podemos dizer que a memória RAM do PIC está dividida em quatro bancos.
14 Microcontrolador PIC16F87x 14 O banco 0 que é selecionado zerando os bits RP0 (STATUS<5>) e RP1 (STATUS<6>). O banco 1 que é selecionado setando o bit RP0. Os primeiros bytes da RAM são reservados aos Registradores de Funções Especiais (SFR Special Function Registers), os bytes restantes de cada banco são reservados aos Registradores de Propósitos Gerais (GPR General Purpose Registers). Tabela 2 Mapa da memória de dados do PIC16F628 End. Indir. 00h End. Indir. 80h End. Indir. 100h End. Indir. 180h TMR0 01h OPTION REG 81h TMR0 101h OPTION REG 181h PCL 02h PCL 82h PCL 102h PCL 182h STATUS 03h STATUS 83h STATUS 103h STATUS 183h FSR 04h FSR 84h FSR 104h FSR 184h PORTA 05h TRISA 85h 105h 185h PORTB 06h TRISB 86h PORTB 106h TRISB 186h PORTC 07h TRISC 87h 107h 187h PORTD 08h TRISD 88h 108h 188h PORTE 09h TRISE 89h 109h 189h PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh TMR1L 0Eh PCON 8Eh EEDATH 10Eh 18Eh TMR1H 0Fh 8Fh EEADRH 10Fh 18Fh T1CON 10h 90h TMR2 11h SSPCON2 91h T2CON 12h PR2 92h SSPBUF 13h SSPADD 93h SSPCON 14h SSPSTAT 94h CCPR1L 15h 95h CCPR1H 16h 96h CCP1CON 17h 97h RCSTA 18h TXSTA 98h TSREG 19h SPBRG 99h TXREG 1Ah 9Ah CCPR2L 1Bh 9Bh CCPR2H 1Ch 9Ch CCP2CON 1Dh 9Dh ADRESH 1Eh CMCON 9Eh ADCON0 1Fh CVRCON 9Fh REGISTRADORE S DE PROPÓSITO GERAL 96 BYTES REGISTRADORES DE PROPÓSITO GERAL 16 BYTES 11Fh 20h A0h 120h REGISTRADORES DE PROPÓSITO GERAL 80 BYTES ESPELHO DO BANCO 0 EFh REGISTRADORES DE PROPÓSITO GERAL 80 BYTES 14Fh 150h 16Fh REGISTRADORES DE PROPÓSITO GERAL 16 BYTES 1EFh F0h 170h 1F0h ESPELHO DO ESPELHO DO BANCO 0 BANCO 0 BANCO 0 BANCO 1 BANCO 2 BANCO 3
15 Microcontrolador PIC16F87x 15 Os registradores de funções especiais (SFR) do PIC serão utilizados com muita freqüência nos programas. Por exemplo, os registradores TRISA, TRISB, TRISC, TRISD e TRISE são usados para definir quais linhas de I/O serão entradas e quais serão saídas. O PORTA, PORTB, PORTC, PORTD e PORTE definem o estado lógico das linhas de I/O. Outro exemplo é o registrador STATUS que registra o estado de funcionamento interno do PIC ou o resultado de operações aritméticas e lógicas. É necessário conhecer, portanto, exatamente qual função desenvolve cada um dos registradores especiais e qual efeito se obtém ao manipular seus conteúdos. A memória EEPROM interna ao PIC pode ser utilizada pelo usuário para guardar dados. Entretanto, ao contrário da memória de dados vista anteriormente, esta é uma memória não volátil, que consegue manter as informações mesmo sem alimentação. A EEPROM do PIC16F877 contém 256 Bytes, endereçadas de 0 a 255. Pode-se escrever em cada bit dessa memória cerca de 1 milhão de vezes sem danificá-la. A PILHA (STACK) é um local totalmente separado da memória de programação, em que serão armazenados os endereços de retorno quando utilizarmos instruções de chamadas de rotinas. Quando o programa é desviado para o começo de uma rotina por meio da instrução correta (call), o endereço seguinte ao ponto que estava sendo rodado é armazenado na pilha para que, ao fim da rotina, o programa possa retornar. O tamanho determina a quantidade de rotinas que podem ser chamadas ao mesmo tempo. Caso se tente chamar um número de rotinas maior que o tamanho da pilha, o endereço de retorno mais antigo será perdido. Ainda podemos utilizar OUTRAS MEMÓRIAS, por exemplo, memórias externas. Já estão disponíveis no mercado memórias EEPROM serial de 64 Kbytes, que podem ser interligadas ao PIC utilizando apenas duas portas de I/O. Essas memórias podem ser úteis para armazenar parâmetros de programação diferentes daqueles do programa principal.
16 Microcontrolador PIC16F87x 16 Capítulo IV - Registradores de Funções Especiais Os registradores de funções especiais, também denominados de SFR (Special Function Registers) são usados pela CPU e funções periféricas para controlar as operações do PIC, servem para guardar a configuração e o estado de funcionamento atual da máquina. Estes registradores estão localizados na memória RAM. A seguir faremos uma descrição detalhada de todos os registradores do PIC16F87x. Observações quanto à sintaxe: R/W, bit de leitura e de escrita. R, bit somente de leitura. W, bit somente de escrita. U, bit não implementado, ler como 0. -1, bit após o reset vale 1. -0, bit após o reset vale 0. -x, bit após o reset possui valor indefinido (desconhecido). -u, bit não se altera após o reset. -q, valor do bit depende de condição. Exemplo1: R/W-0, bit de leitura e escrita, após o reset vale 0. Exemplo2: U, bit não implementado, ler como 0. Exemplo3: R-u, bit somente de leitura, após o reset o bit possui um valor inalterado. Registradores: Registrador W (Acumulador ou registrador de trabalho) e a ALU (Unidade Lógica e Aritmética) A ALU (Arithmetic and Logic Unit) ou ULA (Unidade Lógica e Aritmética) é a componente mais complexa do PIC por conter todos os circuitos destinados a desenvolver as funções de cálculo e manipulação de dados durante a execução de um programa. A ALU é uma componente presente em todos os microprocessadores e dessa depende diretamente a capacidade de cálculo do micro em si. A ALU do PIC16F87x está preparada para operar com 8 bits, ou seja valor numérico não maior do que 255. Existem processadores com ALU de 16, 32, 64 bits ou mais. A família Intel Pentium, por exemplo, dispõe de uma ALU de 64 bits. A capacidade de cálculo presente nesses
17 Microcontrolador PIC16F87x 17 micros é notavelmente superior em detrimento da complexidade dos circuitos internos e consequentemente do espaço ocupado. A ALU referencia diretamente o registrador W denominado antigamente de acumulador. Este registrador consiste de uma localização de memória destinada a conter um só valor de 8 bits. A diferença entre o registrador W e outras localizações de memória consiste no fato de que, por referenciar o registrador W, a ALU não pode fornecer nenhum endereço, mas podemos acessá-los diretamente. O registrador W será utilizado freqüentemente para intermediar instruções do PIC. Façamos um exemplo prático. Suponhamos querer colocar na localização de memória 0CH da RAM o valor 01H. Procurando entre as instruções do PIC veremos rapidamente que não existe uma única instrução capaz de efetuar esta operação, mas deveremos necessariamente recorrer ao acumulador e usar duas instruções em seqüência. Vejamos porque: Como dissemos anteriormente, o opcode de uma instrução não pode exceder aos 14 bits e assim teremos: 8 bits para especificar o valor que queremos colocar na localização de memória, 7 bits para especificar em qual localização de memória queremos inserir o nosso valor, 6 bits para especificar qual instrução queremos usar. Teremos um total de = 21 bits. Devemos então recorrer a duas instruções, ou seja: movlw 01H movwf 0CH onde a primeira instrução colocará no registrador W o valor 01H com a instrução MOVe Literal para W e depois "moveremos" (copiaremos) esse valor para a localização 0CH com a instrução MOVe W para F. Registrador STATUS (endereço 03h e 83h) Esse registrador serve para mostrar o estado da ULA (bits de Carry e Zero), a forma do último reset e também para configurar a página de programação atual, quando necessário. Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits IRP RP1 RP0 /TO /PD Z DC C Power on reset R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x Obs.: O valor dos bits após os demais resets será: 000qquuu Descrição dos bits: Bit 7: IRP, Bit de seleção de banco de registradores (usado para endereçamento indireto), p/ bit7=0 seleciona Bancos 0 e banco 1 (endereços 00 - FFh); já para bit7 = 1 seleciona bancos 2 e 3 (100h - 1FFh). Obs.: Este bit não é usado no PIC16F628 (considerar IRP=0). Bit 6-5: RP1:RP0, Bit de seleção de banco de registradores (usado para endereçamento direto).
18 Microcontrolador PIC16F87x 18 P/ bits 6-5=00 implica seleção do banco 0 (00-7Fh), para bits 6-5=01 implica seleção do banco 1 (80h - FFh), para bits 6-5=10 implica seleção do banco 2 (100-17Fh) e, para bits 6-5=11 implica seleção do banco 3 (180h - 1FFh). obs.: Cada banco é de 128 bytes e somente o bit RP0 é usado no PIC16F628 (considerar RP1=0). Bit 4: /TO, bit de Time-Out. Vai a 1 após power-up, instrução CLRWDT ou instrução SLEEP. Vai a 0 após ocorrer uma interrupção de WDT (Watch Dog Timer). Bit 3: /PD, bit de Power-Down. Vai a 1 após power-up ou instrução CLRWDT. Vai a 0 na execução da instrução SLEEP. Bit 2: Z, bit de Zero. Vai a 1 quando o resultado de uma operação aritmética ou lógica é zero. Vai a 0 quando o resultado de uma operação aritmética ou lógica é diferente de zero. Bit 1: DC, Bit de Digit Carry/Borrow. Este bit vai a 1 quando ocorre um estouro dos 4 bits inferiores de um registrador numa instrução de soma (addlw ou addwf) ou quando a subtração (sublw ou subwf) entre dois nibles inferiores é negativa. É zero quando a última operação na ULA não ocasionou um estouro de dígito. Bit 0: C, Bit de Carry/Borrow. Este bit vai a 1 quando ocorre um estouro do byte de um registrador numa instrução de soma (addlw ou addwf) ou quando a subtração (sublw ou subwf) entre dois bytes é positiva. Note que no caso da subtração o Carry trabalha com a lógica invertida. Obs.: As instruções de rotação de bits (rlf ou rrf) também alteram o valor do Carry. Registrador PORTA (endereço 05H) Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits - - RA5 RA4 RA3 RA2 RA1 RA0 Power on reset - - R\W-x R\W-x R/W-x R/W-x R/W-x R/W-x Obs: Valor dos bits após os demais resets: ---uuuuu Registrador PORTB (endereço 06H) Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT Power on reset R/W-x R/W-x R/W-x R\W-x R/W-x R/W-x R/W-x R/W-x Obs.: Valor dos bits após os demais resets: uuuuuuuu Registrador PORTC (endereço 07H) Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 Power on reset R/W-x R/W-x R/W-x R\W-x R/W-x R/W-x R/W-x R/W-x Obs.: Valor dos bits após os demais resets: uuuuuuuu
Parte 2 PIC DEFINIÇÃO DEFINIÇÃO DEFINIÇÃO DEFINIÇÃO DEFINIÇÃO
Parte PIC.. MCU S DE BITS. MCU S DE E DE BITS. PICF-/P... ULA MCU Ideal para sistemas embarcados (embedded systems). Possui uma unidade de microprocessamento, como um P. Possui periféricos específicos
PIC MICROCONTROLER Microcontrolador PIC M-1117A *Only illustrative image./imagen meramente ilustrativa./ Imagem meramente ilustrativa. EXPERIMENTS MANUAL Manual de Experimentos Manual de Experimentos Conteúdo
DE POSICIONAMENTO DE UM DETECTOR USANDO CIRCUITO ELETRÔNICO MICROCONTROLADO E PROGRAMAÇÃO ASSEMBLY
UNIVERSIDADE FEDERAL DE MINAS GERAIS ESCOLA DE ENGENHARIA DEPARTAMENTO DE ENGENHARIA NUCLEAR Programa de Pós-Graduação em Ciências e Técnicas Nucleares CONTROLE DE POSICIONAMENTO DE UM DETECTOR USANDO