MICROCONTROLADORES. PIC16F87x
|
|
|
- João Batista Paranhos Azenha
- 10 Há anos
- Visualizações:
Transcrição
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
19 Microcontrolador PIC16F87x 19 Registrador PORTD (endereço 08H) Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 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 PORTE (endereço 09H) Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits RE2 RE1 RE0 Power on reset R/W-x R/W-x R/W-x Obs.: Valor dos bits após os demais resets: uuuuuuuu Registrador TRISA (endereço 85H) Registrador de direção de dados da porta A. Os registradores TRIS servem para configurar os pinos das portas como entrada ou saída. Quando é colocado 1 em um bit do TRIS, o pino relacionado a ele é configurado com entrada. Para configurar o pino com saída, você deve escrever 0 no bit relacionado. Uma maneira prática para memorizar esta regra é associar o 1 ao I de Input (entrada), e o 0 de Output (saída). Para configurar o PORTA, deve ser utilizado o TRISA, e para configurar o PORTB, deve ser utilizado o TRISB. Nº dos bits bit 7 bit 6 Bit 5 Bit 4 bit 3 bit 2 bit 1 bit 0 Bits TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 Power on reset R\W-1 R/W-1 R/W-1 R/W-1 R/W-1 Obs.: Valor dos bits nos demais resets: Registrador TRISB (endereço 86H) Registrador de direção de dados da porta B. Nº dos bits bit 7 Bit 6 Bit 5 Bit 4 bit 3 bit 2 bit 1 bit 0 Bits TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 Power on reset R/W-1 R/W-1 R/W-1 R\W-1 R/W-1 R/W-1 R/W-1 R/W-1 Obs.: Valor dos bits nos demais resets:
20 Microcontrolador PIC16F87x 20 Registrador TRISC (endereço 87H) Registrador de direção de dados da porta C. Nº dos bits bit 7 Bit 6 Bit 5 Bit 4 bit 3 bit 2 bit 1 bit 0 Bits TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 Power on reset R/W-1 R/W-1 R/W-1 R\W-1 R/W-1 R/W-1 R/W-1 R/W-1 Obs.: Valor dos bits nos demais resets: Registrador TRISD (endereço 88H) Registrador de direção de dados da porta D. Nº dos bits bit 7 Bit 6 Bit 5 Bit 4 bit 3 bit 2 bit 1 bit 0 Bits TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 Power on reset R/W-1 R/W-1 R/W-1 R\W-1 R/W-1 R/W-1 R/W-1 R/W-1 Obs.: Valor dos bits nos demais resets: Registrador TRISE (endereço 89H) Registrador de direção de dados da porta E. Nº dos bits bit 7 Bit 6 Bit 5 Bit 4 bit 3 bit 2 bit 1 bit 0 Bits TRISE2 TRISE1 TRISE0 Power on reset R/W-1 R/W-1 R/W-1 Obs.: Valor dos bits nos demais resets: Registrador INDF (endereços 00h e 80h) e o FSR (endereços 04h e 84h) O registrador INDF usa o conteúdo de FSR para endereçamento indireto de memória de dados (não é um registrador físico). O FSR é um registrador em que pode ser escrito um outro endereço de memória que será acessado indiretamente, como se ele fosse apenas um ponteiro. Já o INDF não é um registrador realmente verdadeiro; trata-se somente de um espelho do endereço apontado pelo FSR. O INDF não é um registrador verdadeiro, é usado para o endereçamento indireto. Os bits de FSR estão representados a seguir: Nº dos bits bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits 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.: O valor dos bits após os demais resets será: uuuuuuuu
21 Microcontrolador PIC16F87x 21 Registrador TRM0 (endereço 01h) É um contador automático de 8 bits. A diferença entre o registrador TMR0 e os demais registradores é que seu incremento é automático e pode ser feito pelo clock da máquina ou por um sinal externo. Esse registrador será estudado em detalhes no capítulo VI. Nº dos bits Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits 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.: O valor dos bits após os demais resets será: uuuuuuuu Registrador PCL (endereços 02h e 82h) e o PCLATH (endereços 0Ah e 8Ah) O PCL é a parte baixa (8 bits menos significativo) do Contador de Programa (PC = Program Counter ). Nº dos bits Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits Power on reset R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 Obs.: O valor dos bits após os demais resets será: O PCLATH, parte alta (5 bits mais significativos) do Contador de Programa. Como a área de memória de programação do PIC16F87X é maior que 256 bytes, não é possível acessá-la completamente com somente 8 bits do PCL. Por isso, o PCLATH possui os 5 bits mais altos do PC. Nº dos bits Bit 7 bit 6 Bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits Power on reset R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 Obs.: O valor dos bits após os demais resets será: O Contador de Programa (Program Counter = PC) e a Pilha (Stack) são dois componentes importantes para a compreensão da instrução de salto e chamada a subrotina. Como foi visto no capítulo anterior, o PIC16F628 inicia a execução do programa a partir do Reset Vector, ou seja, da localização de memória 0000H. Depois de ter executado esta instrução passa para a próxima instrução memorizada na localização 0001H e assim por diante. Se não existisse instrução capaz de influenciar a execução progressiva do programa, o PIC chegaria até o final na última instrução memorizada na última localização e não saberia mais como continuar. Sabemos obviamente que não é bem assim e qualquer sistema a microprocessador ou linguagem de programação dispõe de instrução de desvio, ou seja, instruções capazes de modificar o fluxo de execução do programa. Uma destas instruções é o goto (do inglês go to, vá para). Quando o PIC encontra um goto não segue mais a instrução imediatamente após, mas
22 Microcontrolador PIC16F87x 22 desvia-se diretamente para a localização de memória especificada na instrução. Façamos um exemplo: ORG 00H Point1 movlw 10 goto Point1 No reset o PIC seguirá a instrução movlw 10 memorizada na localização 0000H que colocará no acumulador o valor decimal 10. Onde então passará a executar a próxima instrução goto Point1. Esta instrução determinará um desvio incondicional para localização de memória especificada pelo label Point1, ou seja, de novo para localização 0000H. O programa não fará outra coisa se não a de executar um ciclo infinito seguindo continuamente as instruções especificadas. Durante este ciclo, para determinar qual é a próxima instrução a ser seguida, o PIC utiliza um registrador especial denominado Program Counter, ou seja, contador de programa. Este terá sempre o endereço da próxima instrução a ser executada. No RESET este estará sempre zerado, determinando o início da execução no endereço 0000H, e cada instrução terá um incremento de um para poder passar para próxima instrução. A instrução goto permite a colocação de um novo valor no Program Counter e consequentemente desvia a uma localização qualquer da área de programa do PIC. Uma outra instrução muito interessante é o call, ou seja, a chamada a subrotina. Esta instrução funciona de maneira muito similar ao goto com a única diferença que, a primeira, desvia para uma localização de memória especificada e continua a execução do programa, enquanto o call desviará o programa para uma subrotina especificada e executará a mesma, e retornará a execução da instrução imediatamente após a chamada call, o valor imediatamente após a chamada call será armazenado em uma área particular da memória denominada Stack (Pilha). Vejamos melhor com um exemplo: ORG 00H Point1 movlw 10 call Point2 goto Point1 Point2 movlw 11 return Neste caso o PIC, após ter executado movlw 10 passa a executar o call Point2. Antes de desviar memoriza no Stack o endereço 0002H, ou seja, a próxima localização ao call. Passa então a executar a instrução movlw 11, memorizada em correspondência ao label Point2. E neste ponto encontra uma nova instrução o return que, como podemos deduzir de seu nome, permite o "RETORNO", ou seja, retorne a execução da instrução imediatamente após o call. Esta operação é denominada de: "chamada a subrotina", ou seja, uma interrupção momentânea do fluxo normal do programa para "chamar" a execução de uma série de instruções, para depois retornar a execução normal do programa. Para poder retornar para onde havia interrompido, o PIC utiliza o último valor armazenado no Stack e o coloca de novo no Program Counter. A palavra stack em inglês significa "pilha" e por esse fato é possível empilhar um endereço sobre o outro para ser recuperado quando necessário. Este tipo de memorização era antes denominado de LIFO do
23 Microcontrolador PIC16F87x 23 inglês Last In First Out, onde o último elemento armazenado (last in) deve necessariamente ser o primeiro a sair (last out). Graças ao Stack é possível efetuar vários call, um dentro do outro, e manter sempre o retorno ao fluxo do programa quando se encontra uma instrução return. Vejamos um outro exemplo: ORG 00H Point1 movlw 10 call Point2 goto Point1 Point2 movlw 11 call Point3 return Point3 movlw 12 return No exemplo acima a rotina principal Point1 promove a chamada do primeiro call para subrotina Point2, a subrotina Point2 chama outra subrotina no caso Point3, este último por sua vez, encontra um returm e retorna para Point2 que encontra o outro return e retorna para a execução da rotina Point1 que no caso é a principal. Os endereços a serem memorizados no stack são dois e quando vir a encontrar um segundo call procurará pelo return correspondente ao primeiro e assim por diante. Diz-se então que o call é "nidificante", ou seja, um dentro do outro. O PIC16F87X dispõe de um stack de 8 níveis, ou seja um Stack que consegue armazenar no máximo 8 chamadas à subrotina. É importante assegurar-se, durante a formulação de um programa que, se tenha sempre uma instrução returm em correspondência a um call para evitar o perigo de desalinhamento do stack que em execução pode gerar erros que dificilmente encontraremos. Registrador EEDATA (endereço 08h) EEDATA é o registrador de dados da EEPROM. Ele possui duas funções distintas: nas operações de escrita da EEPROM, ele deve ser preenchido com o dado a ser armazenado, já nas operações de leitura, ele armazena o dado lido. Nº dos bits Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits 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.: O valor dos bits após os demais resets será: uuuuuuuu
24 Microcontrolador PIC16F87x 24 Registrador EEADR (endereço 09h) EEADR é o registrador de endereços da EEPROM. Ele especifica o endereço de escrita ou leitura do endereço da EEPROM interna ao PIC. Nº dos bits Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits 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.: O valor dos bits após os demais resets será: uuuuuuuu Registrador INTCON (endereços 0BH e 8Bh) Contém os vários bits de habilitação e estados de todas as fontes de interrupção do PIC16F628. Ele serve para configurar e identificar as interrupções. Nº dos bits Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Nomes dos bits GIE EEIE T0IE INTE RBIE T0IF INTF RBIF Power-on-reset R/W-0 R/W-0 R/W-0 R\W-0 R/W-0 R/W-0 R/W-0 R/W-x Obs.: Valor dos bits após os demais resets: u Descrição dos bits: bit 7: GIE, Bit de habilitação da interrupção global, p/ bit7=1 habilita todas as interrupções não mascaráveis e p/ bit7=0 desabilita todas as interrupções. Bit 6: EEIE, Bit de habitação da interrupção completa de escrita na EEPROM interna do PIC, p/ bit6=1 habilita interrupção de escrita na EEPROM e p/ bit6=0 desabilita a interrupção. Bit 5: T0IE, Bit de habitação da interrupção de overflow do Timer 0 (TMR0), p/ bit5=1 habilita a interrupção de TMR0 e p/ bit5=0 desabilita a interrupção. Bit 4: INTE, Bit de habitação da interrupção RB0/INT, p/ bit4=1 habilita a interrupção de RB0/INT e p/ bit4=0 desabilita a interrupção. Bit 3: RBIE, Bit de habitação da interrupção de mudança de nível na porta B (bits RB7 a RB4), p/ bit3=1 habilita a interrupção de mudança de nível na porta B e p/ bit3=0 desabilita a interrupção. Bit 2: T0IF, Bit de flag da interrupção de overflow do Timer 0 (TMR0), se bit2=1 implica que ocorreu um overflow no TMR0 (deve ser zerado no programa) e se bit2=0 implica que não ocorreu a interrupção. Bit 1: INTF, Bit de flag da interrupção RB0/INT, se bit1=1 implica que ocorreu uma RB0/INT e se bit1=0 implica que não ocorreu a interrupção. Bit 0: RBIF, Bit de flag da interrupção de mudança de nível na porta B, se bit0=1 implica que ocorreu uma mudança de estado num dos pinos RB7:RB4 (deve ser zerado no programa) e se bit0=0 implica que não ocorreu a interrupção.
25 Microcontrolador PIC16F87x 25 Registrador OPTION_REG(endereço 81h) Contém vários bits de controle. Serve para configurar uma série de opções para a operação do microcontrolador. Nº dos bits Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Bits /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 Power on reset R/W-1 R/W-1 R/W-1 R\W-1 R/W-1 R/W-1 R/W-1 R/W-1 Obs.: Valor dos bits após os demais resets: Descrição dos bits: bit 7: /RBPU, bit de habilitação de pull-up na porta B, p/ bit7 = 1 desabilita pull-up e p/ bit7=0 habilita pull-up. bit 6: INTEDG, bit de seleção de borda de interrupção, p/ bit6 = 1 interrupção na borda de subida do pino RB0/INT e p/ bit6 = 0 interrupção na borda de descida do pino RB0/INT. bit 5: T0CS, bit de seleção da fonte de clock do TMR0, p/ bit5 = 1 clock colocado na entrada do pino RA4/T0CKI e p/ bit5 = 0 clock interno. bit 4: T0SE, bit de seleção da borda da fonte de clock do TMR0, p/ bit4 = 1 incrementa na transição de alto para baixo no pino RA4/T0CKI e p/ bit4 = 0 incrementa na transição de baixo para alto no pino RA4/T0CKI. Bit 3: PSA, bit de sinalização do prescaler, p/ bit3 = 1 assinala o prescaler ao WDT e p/ bit3=0 assinala o prescaler ao TMR0. Bit 2-0: PS2, PS1 e PS0, bits de seleção da razão do prescaler. PS2 PS1 PS0 Divisor p/ o TMR0 Divisor p/ o WDT
26 Microcontrolador PIC16F87x 26 Registrador EECON1 (endereço 88h) O EECON1 é o registrador de controle de escrita e leitura na EEPROM interna do PIC. Nº dos bits bit 7 Bit 6 Bit 5 Bit 4 bit 3 bit 2 bit 1 bit 0 Bits EEIF WRERR WREN WR RD Power on reset U U U R\W-0 R/W-x R/W-0 R/S-0 R/S-0 Obs.: Valor dos bits nos demais resets: ---0q000 Descrição dos bits: bit 7-5: Não implementados, ler como 0. bit 4: EEIF, bit de flag de interrupção na operação de escrita na EEPROM, se bit4 = 1 implica que a operação de escrita foi completado (deve ser zerado no programa) e se bit4 = 0 implica que a operação de escrita não foi completada ou ainda não foi inicializada. bit 3: WRERR, bit de flag de erro da EEPROM, se bit3 = 1 implica que uma operação de escrita foi prematuramente terminada e se bit3 = 0 implica que a operação de escrita foi completada. bit 2: WREN, bit de habilitação de escrita na EEPROM, p/ bit2 = 1 segue ciclos de escrita e p/ bit2 = 0 inibe escrita de dados na EEPROM. bit 1: WR, bit de controle de escrita na EEPROM, p/ bit1 = 1 inibe um ciclo de escrita (obs.: esse bit é zerado por hardware uma vez que a escrita é completada, o bit WR não pode ser zerado no programa). Se bit1 = 0 indica que o ciclo de escrita de dados na EEPROM foi completado. bit 0: RD, bit de controle de leitura na EEPROM, p/ bit0 = 1 inicializa uma leitura na EEPROM (obs.: esse bit é zerado por hardware uma vez que a leitura é completada, o bit RD não pode ser zerado no programa, pode somente ser setado). Se bit0 = 0 indica que a leitura de dados da EEPROM não foi inicializada. Registrador EECON2 (endereço 89h) EECON2 não é um registrador físico. O EECON2 é usado exclusivamente em uma seqüência de escrita de dados na EEPROM. Veja o Capítulo IX para mais detalhes.
27 Microcontrolador PIC16F87x 27 Capítulo V - Conjunto de Instruções do PIC16F87X Observações quanto aos termos utilizados na construção dos nomes das instruções e seus argumentos: Work: Trata-se de um registrador temporário para as operações da ULA. No Assembler do PIC, ele é conhecido como W. Também é comum chamá-lo de acumulador. File: Referência a um registrador (posição de memória) propriamente dito. Utilizaremos a letra F para sua representação nos nomes de instruções e f nos argumentos delas. Literal: Um número qualquer que pode ser escrito na forma decimal, hexadecimal ou binária. Utilizaremos a letra L para sua representação nos nomes de instruções e k nos argumentos delas. Destino: O local onde deve ser armazenado o resultado da operação. Os destinos podem ser 0 (W ) ou 1 (F). A letra d será usada para indicar o destino de uma instrução, o destino pode ser o acumulador (d=0) ou o registrador (d=1). Bit: Refere-se a um bit específico dentro de um byte. Utilizaremos a letra B para sua representação nos nomes das instruções e b nos argumentos delas. Para facilitar as operações de seus registradores especiais na RAM (que como recordamos estava incluído no código com a diretiva INCLUDE), a Microchip inseriu uma lista de nomes que identificam univocamente qualquer registrador especial e a qual está associado o endereço correspondente na área da memória RAM. Se, por exemplo, quisermos definir toda a linha do PORTB do PIC como saída, devemos agir sobre o TRISB. Podemos escolher e referenciar diretamente o registrador com o seu endereço: movlw B' ' movwf 86H ; Endereço de TRISB ou então, referenciar o mesmo registrador com o seu nome simbólico, neste caso tendo que ter a certeza de ter inserido a diretiva INCLUDE "P16F628.INC" (mostrado no Apêndice A desta apostila): movlw B' ' movwf TRISB ; Nome simbólico do endereço de TRISB Para facilitar o estudo das instruções do PIC, organizamos a seguir duas tabelas. Uma com as instruções em ordem alfabética e a outra com as instruções divididas em quatro grupos, conforme as suas aplicações: Operações com registradores; Operações com literais; Operações com bits; Controles.
28 Microcontrolador PIC16F87x 28 Conjunto de instruções do PIC16F628 Operações em ordem alfabética Instrução Argumento Descrição s ADDLW K Soma k com W, guardando o resultado em W (W = W + k). ADDWF f,d Soma W e f, guardando o resultado em d (d = W + f). ANDLW K Lógica E entre k e W, guardando o resultado em W (W = W AND k). ANDWF f,d Lógica E entre W e f, guardando o resultado em d (d = W AND f). BCF f,b Zera o bit b do registrador f. BSF f,b Seta o bit b do registrador f. BTFSC f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 0 (zero). BTFSS f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 1 (um). CALL Label Chamada a uma subrotina no endereço Label. CLRF F Limpa o registrador f (f = 0). CLRW Limpa o acumulador (W = 0). CLRWDT Limpa o registrador WDT para evitar o reset (Watchdog timer = 0). COMF f,d Pega o complemento de f, guardando o resultado em d (d = not f). DECF f,d Decrementa f, guardando o resultado em d (d = f -1). DECFSZ f,d Decrementa f, guardando o resultado em d, e pula a próxima linha se o resultado for zero (d = f 1, skip se zero). GOTO Label Desvia para o endereço Label. INCF f,d Incrementa f, guardando o resultado em d (d = f +1). INCFSZ f,d Incrementa f, guardando o resultado em d, e pula a próxima linha se o resultado for zero (d = f+1, skip se zero). IORLW K Lógica OU entre k e W, guardando o resultado em W (W = W OR k). IORWF f,d Lógica OU entre W e f, guardando o resultado em d (d = f OR W). MOVLW K Move (copia) valor literal k para o acumulador W (W = k). MOVF F,d Move (copia) valor de registrador f para destino d (d = f). MOVWF F Move (copia) valor do acumulador W para o registrador f (f = W). NOP Nenhuma operação, gasta um ciclo de máquina sem fazer nada. RETFIE Retorno de uma interrupção. RETLW K Retorno de uma rotina, com k em W. RETURN Retorna de uma rotina. RLF f,d Rotaciona f um bit a esquerda, guardando o resultado em d (d = f << 1). RRF f,d Rotaciona f um bit a direita, guardando o resultado em d (d = f >> 1). SLEEP Coloca o PIC em modo sleep (dormindo) para economia de energia. SUBLW K Subtrai W de k, guardando o resultado em W (W = k W). SUBWF f,d Subtrai W de f, guardando o resultado em d (d = f - W). SWAPF f,d Executa uma inversão entre o nibble da parte alta e o nibble da parte baixa de f, guardando o resultado em d. XORLW W Lógica ou-exclusivo entre k e W, guardando o resultado em W (W=W XOR k). XORWF f,d Lógica ou-exclusivo entre W e f, guardando o resultado em d (d=w XOR f).
29 Microcontrolador PIC16F87x 29 Conjunto de instruções do PIC16F628 Instrução Argumentos Descrição Grupo 1: Operações com registradores ADDWF f,d Soma W e f, guardando o resultado em d (d = W + f). ANDWF f,d Lógica E entre W e f, guardando o resultado em d (d = W AND f). CLRF F Limpa o registrador f (f = 0). COMF f,d Pega o complemento de f, guardando o resultado em d (d = not f). DECF f,d Decrementa f, guardando o resultado em d (d = f -1). DECFSZ f,d Decrementa f, guardando o resultado em d, e pula a próxima linha se o resultado for zero (d = f 1, skip se zero). INCF f,d Incrementa f, guardando o resultado em d (d = f +1). INCFSZ f,d Incrementa f, guardando o resultado em d, e pula a próxima linha se o resultado for zero (d = f+1, skip se zero). IORWF f,d Lógica OU entre W e f, guardando o resultado em d (d = f OR W). MOVF F,d Move (copia) valor de registrador f para destino d (d = f). MOVWF F Move (copia) valor do acumulador W para o registrador f (f = W). RLF f,d Rotaciona f um bit a esquerda, guardando o resultado em d (d = f << 1). RRF f,d Rotaciona f um bit a direita, guardando o resultado em d (d = f >> 1). SUBWF f,d Subtrai W de f, guardando o resultado em d (d = f - W). SWAPF f,d Executa uma inversão entre o nibble da parte alta e o nibble da parte baixa de f, guardando o resultado em d. XORWF f,d Lógica ou-exclusivo entre W e f, guardando o resultado em d (d=w XOR f). Grupo 2: Operações com literais ADDLW K Soma k com W, guardando o resultado em W (W = W + k). ANDLW K Lógica E entre k e W, guardando o resultado em W (W = W AND k). IORLW K Lógica OU entre k e W, guardando o resultado em W (W = W OR k). MOVLW K Move (copia) valor literal k para o acumulador W (W = k). SUBLW K Subtrai W de k, guardando o resultado em W (W = k W). XORLW W Lógica ou-exclusivo entre k e W, guardando o resultado em W (W=W XOR k). Grupo 3: Operações com bits BCF f,b Zera o bit b do registrador f. BSF f,b Seta o bit b do registrador f. BTFSC f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 0 (zero). BTFSS f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 1 (um). Grupo 4: Controles CALL Label Chamada a uma subrotina no endereço Label. CLRW Limpa o acumulador (W = 0). CLRWDT Limpa o registrador WDT para evitar o reset (Watchdog timer = 0). GOTO Label Desvia para o endereço Label. NOP Nenhuma operação, gasta um ciclo de máquina sem fazer nada. RETFIE Retorno de uma interrupção. RETLW K Retorno de uma rotina, com k em W. RETURN Retorna de uma rotina. SLEEP Coloca o PIC em modo sleep (dormindo) para economia de energia.
30 Microcontrolador PIC16F87x 30 Explicação detalhada do conjunto de instruções do PIC. 1) ADDLW k ; Soma a constante k a W Descrição: Soma a constante k ao valor memorizado no acumulador W e coloca o resultado no acumulador. Exemplo: movlw 10 addlw 12 ; após o trecho de programa, o acumulador W terá o valor 22 2) ADDWF f,d ; Soma o valor contido em W com o valor contido no registrador F Descrição: Esta instrução soma o valor contido no acumulador W com o valor contido no registrador endereçado pelo parâmetro f. Exemplo: Vejamos um exemplo de soma entre dois registradores: add1 equ 0CH add2 equ 0DH org 00H movlw 10 ;Primeiro somador = 10 movwf add1 movlw 15 ;Segundo somador = 15 movwf add2 movf add1,w ;W = add1 addwf add2,w ;W = add1 + add2 3) ANDLW k ; Efetua o AND bit a bit entre W e uma constante k Descrição: Efetua o AND bit a bit entre o valor contido no acumulador W e o valor constante k. O resultado será memorizado no acumulador. Exemplo: movlw B andlw B... Depois de haver executado este trecho de programa o acumulador W irá valer B. 4) ANDWF f,d ; Efetua o AND bit a bit entre o valor contido em W e o valor contido no registrador F. Descrição: Esta instrução efetua o AND bit a bit entre o valor contido no acumulador W e o valor contido no registrador endereçado pelo parâmetro f. Exemplo: Freqüentemente o AND será utilizado para mascarar o valor de algum bit dentro de um registrador. Se por exemplo quiséssemos extrair do número binário B os quatro bits menos significativo a fim de obter o seguinte valor B, bastará preparar uma máscara do tipo B e fazer o AND com o nosso valor, vejamos como: movlw B ; Armazena em W o valor binário movwf 0CH ; Usa o endereço 0CH para armazenar o valor inicial da máscara movlw B ; Prepara a máscara do bit andwf 0CH,W ; Efetua o AND e memoriza o resultado no acumulador W O resultado em W será B como descrito.
31 Microcontrolador PIC16F87x 31 W = AND f = = W = ) BCF f,b ; Zera o bit b do registrador F Descrição: Esta instrução zera o bit b do registrador no endereço f. Exemplo: parm1 equ 0CH movlw B ;Valor inicial movwf parm1 bcf parm1,0 Ao término do programa o registrador parm1 será B. 6) BSF f,b ;Coloca em nível alto o bit b no registrador F. Descrição: Esta instrução coloca em um no bit b do registrador que está no endereço f. Exemplo: parm1 equ 0CH movlw B ;Valore inicial movwf parm1 bsf parm1,0 ;D0=1 Ao terminar o programa o registrador parm1 será B. 7) BTFSC f,b ; Pula a próxima instrução se o bit b do registrador F for 0 Descrição: Testa o bit b contido no registrador no endereço f e pula a próxima instrução se este valer 0. Exemplo: parm1 equ 0CH org 00H movlw B ;Valor inicial movwf parm1 loop btfsc parm1,0 ;bit0 = 0? Se for, pular próxima instrução. goto loop ;Se não, ficar no loop Este programa executa um loop infinito. Entretanto, o mesmo programa não executará o loop se substituirmos a instrução: movlw B pela instrução: movlw B. 8) BTFSS f,b ; Pula a próxima instrução se o bit b do registrador F for 1 Descrição: Testa o bit b contido no registrador do endereço f e pula a instrução seguinte se este for 1. Exemplo: parm1 equ 0CH
32 Microcontrolador PIC16F87x 32 org 00H movlw B ;Valor inicial movwf parm1 loop btfss parm1,0 ;bit0 = 1? Se for, pular próxima instrução. goto loop ;Se não, ficar no loop Este programa executa um loop infinito. O mesmo programa não executará o loop se substituirmos a instrução: movlw B pela instrução: movlw B. 9) CALL k ; Chamada a uma subrotina Descrição: Chama uma subrotina memorizada no endereço k. O parâmetro k pode ser especificado utilizando-se diretamente o valor numérico do endereço ou então o relativo label. Exemplo: #define LED1 1 org 00H call ledon ; Chama a rotina ledon ledon btfsc PORTB,LED1 ; testa o bit 1 da porta B return Quando a CPU do PIC encontra uma instrução CALL, memoriza no STACK o valor do registrador PC+1 de modo a poder retornar para instrução após o CALL, em seguida escreve no PC o endereço da subrotina pulando a execução desta ultima. O valor original do PC será recuperado pela subrotina com a execução da instrução de retorno RETURN ou RETLW. No PIC16F628 estão disponíveis 8 níveis de stack (pilha), ou seja a instrução CALL dentro de uma subrotina pode ter no máximo 8 chamadas ou 8 níveis. As demais chamadas serão sobrepostas às primeiras. 9) CLRF f ; Zera o registrador F Descrição: Esta instrução zera o valor contido no registrador endereçado pelo parâmetro f. Exemplo: Se quisermos zerar o registrador TMR0 no qual o endereço é 01H hexadecimal, a instrução a se executar será: clrf 01H Ou, se no endereço do nosso código incluirmos o arquivo P16F628.INC, poderemos utilizar o nome simbólico do registrador TMR0, ou seja, clrf TMR0. 11) CLRW ; Zera o registrador W Descrição: Zera o valor contido no registrador W. Exemplo: clrw 12) CLRWDT ; Limpa o registrador WDT para não acontecer o Reset Descrição: Esta instrução deve ser utilizada quando programarmos o PIC com a opção Watchdog (fusível WDTE). Nesta modalidade o PIC habilita um timer que, uma vez
33 Microcontrolador PIC16F87x 33 transcorrido um determinado tempo, efetua o reset do mesmo. Para evitar o reset do nosso programa deveremos executar ciclicamente a instrução CLRWDT para zerar o timer antes deste tempo. Se não zerarmos o WDT neste tempo, o circuito de watchdog (do inglês cão de guarda) interpretará este como um bloco de programa em execução e efetuará o reset para bloquea-lo. Exemplo: org 00H loop clrwdt goto loop 13) COMF f,d ; Efetua o complemento do registrador F Descrição: Esta instrução efetua o complemento do valor contido no registrador endereçado pelo parâmetro f. Exemplo: parm1 equ 0CH org 00H movlw B movwf parm1 comf parm1,f Ao término da execução do programa o valor do registrador parm1 será B. 14) DECF f,d ; Decrementa o conteúdo do registrador F Descrição: Esta instrução decrementa o conteúdo do registrador endereçado pelo parâmetro f. Exemplo: movlw 23H ;Escreve em W o valor 23H movwf 0CH ;Copia no registrador 0CH o valor de W decf 0CH,F ;Decremente o valor contido no registrador 0CH 15) DECFSZ f,b ; Decrementa o valor do registrador f e pula a próxima instrução se o resultado for zero. Descrição: Decrementa o valor de registrador do endereço f e se o resultado for zero pula a próxima instrução. Exemplo: counter equ 0CH org 00H movlw 10 ;counter = 10 movwf counter loop decfsz counter,f ;counter = counter 1, se counter = 0, pula próxima instrução goto loop ;se não, continua no loop Este programa executa 10 vezes a instrução decfsz até que counter seja = 0. 16) GOTO k ; Desvia a execução do programa para o endereço especificado k. Descrição: Determina o desvio incondicional do programa em execução para o endereço k. O parâmetro k pode ser especificado utilizando-se diretamente um valor numérico do endereço ou então o relativo label.
34 Microcontrolador PIC16F87x 34 Exemplo: org 00H loop goto loop Este programa executa um cilclo (loop) infinito. 17) INCF f,d ; Incrementa o valor do registrador no endereço F. Descrição: Incrementa o conteúdo do registrador no endereço f. Exemplo: movlw 23H ;Escreve em W o valor 23H movwf 0CH ;Copia no registrador 0CH o valor de W incf 0CH,F ;Incrementa de 1 valor contido no registrador 0CH 18) INCFSZ f,b ; Incrementa o valor do registrador f e pula a próxima instrução se o resultado for zero. Descrição: Incrementa o valor do registrador f e se o resultado for zero pula a próxima instrução. Exemplo: counter equ 0CH org 00H movlw 250 ;counter = 250 movwf counter loop incfsz counter,f ;counter = counter + 1, se counter = 0? pular próxima instrução goto loop ; se não, continuar no loop Este programa executa para = 6 vezes a instrução incfsz até que counter seja 0. Sendo counter um registrador de 8 bit's quando for incrementado do valor 255 assume novamente o valor 0 e dai a formula = 6. 19) IORLW k ; Efetua o OU inclusive entre W e uma constante k Descrição: Efetua o OR inclusive entre o valor contido no acumulador W e o valor da constante k. Exemplo: org 00H start movlw B iorlw B Após ser executado esse programa o acumulador W será B. 20) IORWF f,d ; Efetua o OR inclusive entre o valor contido em W e o valor contido no registrador F Descrição: Esta instrução efetua o OR inclusive entre o valor contido no acumulador W e o valor contido no registrador endereçado pelo parâmetro f. Exemplo: parm1 equ 0CH org 00H movlw B
35 Microcontrolador PIC16F87x 35 movwf parm1 movlw B iorwf parm1,f Ao término do programa o valor do registrador parm1 será B. 21) MOVLW k ; Copia para W o valor constante k Descrição: Passa ao acumulador W um valor constante k. Exemplo: org 00H movlw 20 Após ter executado este programa o acumulador W irá a ) MOVF f,d ;Copia o conteúdo do registrador f para o destino d Descrição: Esta instrução copia o conteúdo do registrador endereçado pelo parâmetro f para o parâmetro de destino d. Exemplo: O exemplo a seguir copia o valor contido no registrador do endereço 0CH no acumulador W: movf 0CH,W 23) MOVWF f ; Copia o conteúdo do registrador W para o registrador F Descrição: Esta instrução copia o conteúdo do registrador W no registrador de parâmetro f. Exemplo: Para copia o valor 10H no registrador TMR0. A instrução a se executar será a seguinte: movlw 10H ;Escreve no registrador W o valor 10H movwf TMR0 ;e o memoriza no registrador TMR0 24) NOP ; Nenhuma operação Descrição: Esta instrução não executa nenhuma operação mas é útil para inserir atrasos de um ciclo de maquina ou mais. Exemplo: nop nop Os dois nops acima vai provocar um atraso de 2 us se utilizarmos um cristal de 4MHz no nosso hardware. 25) RETFIE ; Retorna de uma rotina de interrupção Descrição: Esta instrução deve ser colocada no término de cada subrotina de controle de interrupções para retornar o controle ao programa principal. Exemplo: org 00H loop goto loop ;Loop infinito org 04H ;Interrupt vector inthandler retfie ;Retorna da interrupção Neste código o programa principal executa um loop infinito. Se habilitarmos uma das interrupções do 16F628 ele não apenas verificará o controle como irá automaticamente ao programa alocado no endereço 04H (no exemplo inthandler), a instrução RETFIE determinará então o retorno ao loop principal.
36 Microcontrolador PIC16F87x 36 26) RETLW k ; Retorna de uma rotina com uma constante k em W Descrição: Esta instrução retorna o controle de uma rotina ao programa principal. A diferença desta em relação à instrução RETURN é que retflw permite retornar, através do acumulador W, o valor k ao programa principal. Exemplo: rtc equ 0CH org 00H call mysub1 movwf rtc... mysub1 nop retlw 10 Uma vez executado esse programa ele memorizará no registrador rtc o valor 10 passado pela subrotina mysub1. 27) RETURN ; Retorna de uma rotina Descrição: Esta instrução deve ser inserida no termino de cada subrotina para retornar a execução ao programa principal. Exemplo: org 00H call mysub1... mysub1 nop return Nota: No PIC16F628 podemos fazer apenas 8 chamadas a subrotinas, do tipo: org 00H call mysub1... mysub1 call mysub2 return mysub2 call mysub3 return mysub3 return 28) RLF f,b ;Rotaciona a esquerda o conteúdo do registrador f passando pelo Carry Descrição: Rotaciona o bit contido no registrador do endereço f para a esquerda (ou seja do bit menos significativo para o mais significativo) passando pelo CARRY do registrador STATUS como ilustrado na figura a seguir:
37 Microcontrolador PIC16F87x 37 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CARRY Figura 7 Rotação de bit a esquerda O conteúdo do bit CARRY do registrador STATUS será deslocado para o bit0 enquanto que o valor do bit7 será deslocado para o CARRY. Exemplo: parm1 equ 0CH org 00H bcf STATUS,C ;Zera o CARRY movlw B ;Valor inicial movwf parm1 rlf parm1,f Ao término do programa o registrador parm1 será B enquanto o CARRY será 0. 29) RRF f,b ; Rotaciona para a direita o conteúdo do registrador f passando pelo Carry Descrição: Rotaciona o bit contido no registrador do endereço f para direita (ou seja do bit mais significativo para o menos significativo) passando pelo bit CARRY do registrador STATUS como ilustrado na figura a seguir: BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CARRY Figura 8 Rotação de bit a direita O conteúdo do bit CARRY do registrador STATUS será deslocado para o bit7 enquanto o valor do bit0 será deslocado para o CARRY. Exemplo: parm1 equ 0CH org 00H bcf STATUS,C ;Zera o CARRY movlw B ;Valor inicial movwf parm1 rrf parm1,f Ao término do programa o registrador parm1 será B enquanto o CARRY será 1. 30) SLEEP ; Coloque o PIC (para dormir) em standby Descrição: Esta instrução bloqueia a execução do programa em andamento e coloca o PIC em standby (sleep do inglês = dormir). Exemplo: org 00H start
38 Microcontrolador PIC16F87x 38 sleep 31) SUBLW k ; Subtraia de k o valor em W Descrição: Subtrai a constante k do valor memorizado no acumulador W. Exemplo: org 00H start movlw 10 ; W = 10 sublw 12 ; W = Depois de haver executado este programa o acumulador W será 2. 32) SUBWF f,d ;Subtraia o valor contido em W do valor contido no registrador F. Descrição: Esta instrução subtrai o valor contido no registrador W do valor contido no registrador endereçado pelo parâmetro f. Exemplo: Analisando um exemplo extraído do datasheet da Microchip: Se inserirmos a instrução: subwf REG1,F Onde reg1 é o endereço de um registrador qualquer especificado com a diretiva: REG1 RES 1 Para o valor inicial de REG1=3 e W=2, teremos REG1=1 e C=1 porque o resultado é positivo. Para o valor inicial de REG1=2 e W=2, teremos REG1=0 e C=1 porque o resultado é positivo. Para o valor inicial de REG1=1 e W=2, teremos REG1=FFH ou seja -1 e C=0 porque o resultado é negativo. 33) SWAPF f,d ; Troca de nibbles. Descrição: Troca o valor dos quatro bits mais significativo (D7-D4) contido no registrador do endereço f com os quatro bits menos significativo(d3-d0) do mesmo. Exemplo: movlw B ;Valor inicial swapf parm1,f Ao término do programa o registrador parm1 será B. 34) XORLW k ; Efetua o OR exclusivo entre W e uma constante k Descrição: Efetua o OR exclusivo entre o valor contido no acumulador W e o valor constante k. Exemplo: org 00H start movlw B xorlw B... Após haver executado este programa o acumulador W será B. 35) XORWF f,d ; Efetua o OR exclusivo entre o valor contido em W e o valor contido no registrador Descrição: Esta instrução efetua o OR exclusivo(xor) entre o valor contido no acumulador W e o valor contido no registrador endereçado pelo parâmetro f. Exemplo: Efetuar um XOR entre o registrador W e o registrador REG1 por nós definido no endereço 0CH com a diretiva:
39 Microcontrolador PIC16F87x 39 REG1 EQU 0CH podemos utilizar a instrução IORWF de duas formas, dependendo onde queremos colocar o resultado, ou seja: xorwf COUNTER,F ;COUNTER = COUNTER XOR W ou então: xorwf COUNTER,W ;W = COUNTER XOR W
40 Microcontrolador PIC16F87x 40 Capítulo VI - AS INTERRUPÇÕES DO PIC16F87X A interrupção é uma técnica particular do PIC que permite interceptar eventos externos ao programa em execução, interrompe momentaneamente a operação do programa em andamento, controla o evento com uma subrotina apropriada e retorna para a execução do programa. Fazendo uma analogia, podemos dizer que a interrupção é para o PIC o que para nós representaria uma chamada telefônica. Para recebermos um telefonema não precisamos nos preocupar em ficar levantando continuamente o monofone do gancho para ver se tem alguém querendo falar conosco, mas podemos tranqüilamente aguardar pelo toque da campainha quando alguém nos chamar. Quando então apenas levantamos o monofone do gancho e interrompemos momentaneamente o sistema de chamada, respondemos ao telefonema e, uma vez terminada a conversação, retornamos o monofone ao gancho, ou seja, do ponto onde havíamos interrompido. Transportando o termo deste parágrafo ao PIC veremos que: O nosso telefone corresponde ao programa em execução; A chamada de alguém corresponde ao evento de controle; O monofone corresponde a requisição de interrupção; A nossa reposta ao telefone corresponde a subrotina de controle da interrupção. É evidente que assim como é extremamente mais eficaz se ter uma campainha conectada ao telefone é extremamente mais eficaz controlar nosso evento com uma interrupção ao invés de diretamente pelo programa. O PIC16F87x esta preparado para controlar interrupções ao final de 15 eventos diferentes, vejamos quais são: interrupção externa EM RB0; interrupção por overflow do timer TMR0; interrupção por overflow do timer TMR1; interrupção por overflow do timer TMR2; interrupção por mudança de nível nos pinos da porta B (pinos RB7 a RB4); interrupção por escrita completa na EEPROM; interrupção da porta paralela (PSP); interrupção dos conversores A/D; interrupção de recepção da USART; interrupção de transmissão da USART; interrupção da comunicação serial (SPI e I 2 C); interrupção do CCP1 (Capture/Compare/PWM); interrupção do CCP2; interrupção dos comparadores; interrupção de colisão de dados (Bus Collision).
41 Microcontrolador PIC16F87x 41 Nesta apostila serão detalhadas as seguintes interrupções: Interrupção de TIMER 0 Eessa interrupção acontece sempre que um contador de tempo interno, denominado TMR0 (Timer 0), estoura, ou seja, como ele é um contador de 8 bits, sempre que passar de 0xFF para 0x00. Ela é utilizada normalmente para a contagem de tempo. Como pode acontecer a qualquer momento, a contagem de tempo fica precisa, não dependendo de análises constantes durante o programa para garantir que o tempo seja contado. Como veremos em exemplos, o TMR0 pode tanto ser incrementado internamente pelo clock da máquina, como também por um sinal externo. Neste caso, ele passa a ser um contador de pulsos, podendo ser utilizado para outras finalidades. Interrupção externa (RB0/INT) Essa interrupção é gerada por um sinal externo ligado a uma porta específica do PIC, que no caso é a porta RB0, caso ela esteja configurada como entrada. Desta maneira, podemos identificar e processar imediatamente um sinal externo. Ela é utilizada para diversas finalidades, como, por exemplo, a comunicação entre micros, garantindo o sincronismo, o reconhecimento de botão ou outro sinal do sistema que necessite de uma ação imediata. Essa interrupção acontece ou na borda de subida ou na borda de descida conforme a configuração da mesma. Interrupcção por mudança de estado (RB4 a RB7) Essa interrupção acontece em ambos os casos, na borda de subida ou na borda de descida, basta haver mudança de estado. Esse tipo de interrupção pode ser utilizado, por exemplo, para criar um sincronismo com a rede de 60 Hz, para o controle de um triac ou outro sistema semelhante. Interrupção de fim de escrita na EEPROM Essa interrupção serve para detectarmos o final de uma rotina de escrita na EEPROM do PIC. A utilização da interrupção não é obrigatória para que a escrita funcione, mas como a EEPROM é lenta na hora de escrever, em alguns sistemas a sua utilização pode ser necessária para evitar uma parada durante a escrita na EEPROM. A interrupção de qualquer um destes eventos pode ser conseguida agindo sobre os bits do registrador INTCON, podemos habilitar ou desabitar esses bits independentemente uns dos outros. A Figura abaixo mostra os bits do INTCON.
42 Microcontrolador PIC16F87x 42 Registrador INTCON Figura 9 Quatro interrupções do PIC16F87x GIE EEIE T0IE INTE RBIE T0IF INTF RBIF INTE (bit 4) se este bit estiver em 1 habilitará a interrupção de troca de estado sobre a linha RB0 T0IE (bit 5) se este bit estiver em 1 habilitará a interrupção de final de contagem do registrador TMR0 RBIE (bit 3) se este bit estiver em 1 habilitará a interrupção de troca de estado sobre uma das linhas de RB4 a RB7 EEIE (bit 6) se este bit estiver em 1 habilitará a interrupção de final de escrita sobre um endereço da EEPROM GIE (bit 7) bit de habilitação geral de interrupção. Esse bit deve ser setado em 1 antes dos demais. Vetor de Interrupção e Controle de Interrupção (Interrupt vector e Interrupt handler), qualquer que seja o evento habilitado, ao se manifestar, o PIC interrompe a execução do programa em andamento, memoriza automaticamente no STACK o valor corrente do PROGRAM COUNTER (PC) e pula para a instrução presente no endereço de memória 0004H denominada Interrupt vector (vetor de interrupção). Deste ponto em diante devemos colocar a nossa subrotina de controle denominada Interrupt Handler (controle de interrupção). Pode-se habilitar mais interrupções e, a primeira providência da interrupt handler é a de verificar qual o evento habilitado que gerou a interrupção e a execução da parte do programa relativo. Este controle pode ser efetuado utilizando a Interrupt flag. Interrupt flag (sinalizador de interrupção), dado que qualquer interrupção gera uma
43 Microcontrolador PIC16F87x 43 chamada do endereço 04H, no registrador INTCON está presente o flag que indica qual o evento que gerou a interrupção vejamos: INTF (bit 1), se for 1 é porque a interrupção RB0/INT ocorreu. T0IF (bit 2), se for 1 é porque ocorreu uma interrupção de TMR0. RBIF (bit 0), se for 1 é porque ocorreu uma interrupção de troca de estado de uma das linhas de RB4 a RB7. Como se pode ver a interrupção de final de escrita na EEPROM não tem previsto nenhum flag de sinalização para que a interrupt handler deva considerar que a interrupção é um estado gerado deste evento quando todos os três flags supra citados irão a 0. Importante: Uma vez conhecido qual o flag que está ativo, a interrupt handler deve zerálo, ou então não mais gerará interrupção correspondente. Retorno de uma interrupt handler, quando for gerada uma interrupção o PIC é desabilitada automaticamente o bit GIE (global Interrupt Enable) do registrador INTCON de modo a desabilitar todas as interrupções restantes. Para poder retornar ao programa principal e reinicializar em 1 este bit deve-se utilizar a instrução: RETFIE
44 Microcontrolador PIC16F87x 44 Capítulo VII - O CONTADOR/TEMPORIZADOR (TMR0) O registrador TMR0 é um contador, ou seja, um registrador particular, na qual, seu conteúdo vê-se incrementado com cadência regular e programada ditada pelo hardware do PIC. Na prática, a diferença de um outro registrador, é que o TMR0 não mantém inalterado o valor que é memorizado, mas o incrementa continuamente, se, por exemplo, escrevermos nele o valor 10 com a instrução: movlw 10 movwf TMR0 Após um tempo por quatro ciclos de máquina, o conteúdo do registrador começa a ser incrementado de +1, ou seja, 11, 12, 13 e assim por diante com a cadência constante e independente da execução do resto do programa. Se por exemplo, após ter colocado um valor no registrador TMR0, executarmos um loop infinito loop movlw 10 movwf TMR0 goto loop o registrador TMR0 será incrementado pelo hardware interno do PIC durante a execução do loop. Uma vez atingido o valor 255 o registrador TMR0 será zerado automaticamente recomeçando então a contagem, mas não do valor originalmente imposto e sim do zero. A freqüência é diretamente proporcional a freqüência de clock aplicada ao chip e pode ser modificada programando-se oportunamente os seus bits de configuração. Na figura seguinte está representada a cadeia de blocos interno do PIC que determina o funcionamento do registrador TMR0. Figura 10 - Funcionamento do registrador TMR0
45 Microcontrolador PIC16F87x 45 O bloco Fosc/4 e T0CKI representados à esquerda representam as duas possíveis fontes de sinal para o contador TMR0. Fosc/4 é um sinal gerado internamente no PIC pelo circuito de clock e é igual a freqüência de clock dividida por quatro. T0CKI é um sinal gerado de um eventual circuito externo e aplicado ao pino T0CKI correspondente ao pino 3 no PIC 16F87x. O blocos T0CS e PSA são dois comutadores de sinal na qual estão representando um dos dois tipos de sinal de entrada com base no valor dos bits TOCS e PSA do registrador OPTION. O bloco PRESCALER é um divisor programável e que seu funcionamento será explicado no próximo passo. Vejamos na prática como é possível agir sobre este bloco para obter diferentes modalidades de contagem pelo registrador TMR0. Iniciaremos programando o bit T0CS em 0 e PSA em 1. A configuração de funcionamento que obteremos é a representada na figura abaixo: Figura 11 - Percurso do sinal usando o clock interno A parte em vermelho (de cima, a partir de Fosc/4) mostra-nos o percurso que efetua o sinal antes de chegar ao contador TMR0. Como já havia dito anteriormente, a freqüência Fosc/4 é igual a um quarto da freqüência de clock. Utilizando-se um cristal de quartzo de 4Mhz teremos uma freqüência igual a 1 MHz. Tal freqüência será enviada diretamente ao registrador TMR0 sem nenhuma modificação. A cadência de contagem que se obtém é então igual a de 1 milhão de incrementos por segundo do valor presente no TMR0. Imaginemos agora modificar o registrador de STATUS, o bit T0CS de 0 para 1 a configuração que obteremos é seguinte:
46 Microcontrolador PIC16F87x 46 Figura 12 - Percurso do sinal usando clock externo pelo pino T0CKI Desta vez será o sinal aplicado ao pino TOCKI do PIC a ser enviado diretamente ao contador TMR0 determinando a freqüência de contagem. Aplicando-se por exemplo a este pino uma freqüência par de 100Hz obteremos uma de contagem igual a cem incrementos por segundo. A presença da porta lógica XOR (exclusive OR) na entrada TOCKI do PIC permite determinar o caminho do bit TOSE do registrador OPTION se o contador TMR0 deve ser incrementado na descida do pulso (TOSE=1) ou na subida do pulso (TOSE=0) do sinal externo aplicado. Na figura seguinte está representada a correspondência entre a cadência do sinal externo e o valor que assume o contador TMR0 : Figura 13 - Cadência do sinal externo O último bloco a ser analisado para poder utilizar complemente o registrador TMR0 é o PRESCALER. Se configurar-mos o bit PSA do registrador OPTION em 0 enviamos ao registrador TMR0 o sinal de saída do PRESCALER como é visível na figura abaixo:
47 Microcontrolador PIC16F87x 47 Figura 14 - O PRESCALER como divisor O PRESCALER consiste na prática de um divisor programável de 8 bits utilizado no caso pela freqüência de contagem enviada ao contador TMR0 que é demasiada alta para nossos propósitos. No exemplo descrito na lição anterior haviamos visto que utilizando um cristal de 4Mhz era obtido uma freqüência de contagem igual a 1 Mhz que para muitas aplicações poderá ser muito elevada. Com o uso do PRESCALER podemos dividir interiormente a freqüência Fosc/4 configurando os bits PS0, PS1, PS2 do registrador OPTION segundo a tabela abaixo: PS2 PS1 PS0 Divisor Freqüência de saída do prescaler (Hz) p/ cristal de 4 MHz = 4MHz/(4 * 2) = 4MHz/(4 * 4) = 4MHz/(4 * 8) = 4MHz/(4 * 16) = 4MHz/(4 * 32) = 4MHz/(4 * 64) = 4MHz/(4 * 128) = 4MHz/(4 * 256)
48 Microcontrolador PIC16F87x 48 Capítulo VIII MODO POWER DOWN, MODO SLEEP E O WDT O modo Power Down/Sleep é um estado particular de funcionamento do PIC utilizado para reduzir o consumo de corrente no momento em que o PIC não é utilizado. Se pegarmos como exemplo um controle remoto para TV veremos que na maior parte do tempo o PIC permanece aguardando que alguém pressione uma tecla. Apenas quando à pressionamos, o PIC efetua uma breve transmissão e se coloca de novo a espera de um novo pressionar de tecla. O tempo de utilização efetivo da CPU do PIC é então limitado a poucos milisegundos necessário para efetuar a transmissão. Para evitar o consumo inútil frente a limitada energia da bateria é possível desligar boa parte do circuito de funcionamento do PIC e reativá-lo somente quando um evento externo ocorrer. Para entrar no modo Power Down, basta executar a instrução sleep, nesse modo, como o próprio nome diz, o microcontrolador é colocado para dormir e reduzir consequentemente a corrente absorvida que passará de cerca de 2mA (a 5 volts com clock de 4Mhz) para cerca dos 2uA, ou seja 1000 vezes menos. Quando entramos neste modo, o oscilador é imediatamente paralisado, e com ele todo o processamento. O estado das portas é mantido, isto é, aquelas que eram entradas continuam como entradas, assim como o nível lógico das portas que eram saídas. No entanto, como o objetivo normalmente é economizar energia, o estado das portas deve ser minuciosamente checado e acertado antes de entrarmos neste modo. Configurar as portas para entrada, quando possível, resulta em maior economia de energia. Para despertar o PIC do seu sono, podemos utilizar três maneiras possíveis: 1. Por meio de um reset externo, colocando em 0 o pino /MCLR (pino 4). 2. Por um estouro de WDT, no caso de ele estar habitado. 3. Por meio de um interrupção externa RB0/INT, ou por mudança de estado na porta B (RB4, RB5, RB6 e RB7) ou no término da operação de escrita na EEPROM. No primeiro caso, o PIC será resetado e a execução começará da posição 00h. No segundo caso o programa continuará a ser executado na linha seguinte à instrução SLEEP. E no terceiro caso, o PIC se comporta como no atendimento de uma interrupção, o programa irá para a rotina de interrupção e então retornará para execução após a instrução SLEEP. O WACHTDOG TIMER (WDT) O Wachtdog Timer é na prática um contador automático incrementado por meio de um oscilador interno do PIC, mas complemente independente do resto do circuito. Com o prescaler de 1:1, o seu tempo de estouro, ou seja, 256 incrementos, é equivalente a 18 ms. O prescaler é utilizado para aumentarmos este tempo. Caso o WDT estoure, um reset do sistema irá ocorrer imediatamente. Para evitar o reset automático deve-se utilizar a instrução CLRWDT em algum trecho do programa para zerar o prescaler e assim não permitindo o mesmo, terminar sua contagem. Se a CPU não executa esta instrução antes de terminar a contagem será entendido
49 Microcontrolador PIC16F87x 49 como um bloqueio de programa por motivo qualquer, e será efetuado o reset da CPU. O período mínimo para que a CPU seja resetada é de cerca de 18ms (isso dependerá da temperatura e da tensão de alimentação). Porem é possível programar o PRESCALER para Wachtdog Timer para obter um tempo de retardo maior com cerca de 2 a 3 segundos. Para configurar o Wachtdog Timer devemos habilitar na fase de programação o bit WDTE do byte de configuração (no CONFIG, início do programa). Para ajustar o PRESCALER ao WDT, devemos agir sobre o bit PSA do registrador OPTION_REG. O bit PSA deverá setado em 1 com a instrução: BSF OPTION_REG,PSA Caso contrário o prescaler estará ligado ao TIMER 0. Obviamente ajustando o prescaler ao WTD não será possível ajustá-lo para TIMER 0 e vice-versa. Intervindo sobre o valor do bit PS0, PS1 e PS2 do mesmo registrador OPTION_REG podemos obter diversos intervalos de retardo. A habilitação correta deverá ser feita tendo em conta o máximo retardo que podemos obter dentro do nosso programa entre a execução de duas instruções CLRWD sucessivas. Na tabela seguinte está representada a correspondência entre os valores destes bit's e os intervalos que obteremos. PS2 PS1 PS0 Divisor Período de retardo do WDT ms ms ms ms ms ms s s
50 Microcontrolador PIC16F87x 50 Capítulo IX - Escrita e Leitura na EEPROM do PIC16F87X A memória EEPROM do PIC16F87x pode armazenar até 256 bytes de dados, endereços de 00h a FFh. Os registradores de controle, de dado e de endereço da EEPROM para esse PIC são os seguintes: 1. EECOM1: registrador de controle, veja definição dos bits no Capítulo IV. 2. EECOM1: registrador não implementado fisicamente, ele é usado exclusivamente em uma escrita sequencial de dados na EEPROM. 3. EEDATA: registrador de dados. 4. EEADR: registrador de endereços. Passos que deverão ser seguidos para a leitura de dados na EEPROM: 1. Escrever o endereço no registrador EEADR; 2. Colocar em nível alto o bit de controle RD (EECON1<0>); 3. O dado é colocado na registrador EEDATA e está pronto para ser pego no próximo ciclo de máquina. EEDATA segurará o valor até que uma outra leitura seja ativada ou até que seja escrita em EEDATA um outro valor diferente. Exemplo: bcf STATUS,RP0 ; Vai para o banco 0 movf Endereco,W ; W = Endereço onde vai ser armazenado o dado movwf EEADR ; Escrita do endereço em EEADR bsf STATUS,RP0 ; Vai para o banco 1 bsf EECON1,RD ; Habilita a leitura bcf STATUS,RP0 ; Vai para o banco 0 movf EEDATA,W ; Armazena o dado em W (W=EEDATA) Passos que deverão ser seguidos para a escrita de dados na EEPROM: 1. Escrever o endereço no registrador EEADR; 2. Escrever o dado no registrador EEDATA; 3. Programar sequência de controle para habilitar a escrita; 4. Colocar em nível alto o bit de controle WR (EECON1<1>) para iniciar a escrita. Obs.: Tipicamente uma operação de escrita demora 10 ms. Exemplo: bcf STATUS,RP0 ; Vai para o banco 0 movf Endereço,W ; W = Endereço onde vai ser armazenado o dado movwf EEADR ; Escrita do endereço em EEADR movf Dado,W ; W = Dado que será armazenado na EEPROM
51 Microcontrolador PIC16F87x 51 movwf EEDATA ; Escrita do dado em EEDATA bsf STATUS,RP0 ; Vai para o banco 1 ;programação da seqüência de controle bsf EECOM1,WREN movlw 55h ; W = 55h movwf EECON2 movlw 0Aah ; W = AAh movwf EECON2 ; Escrita do dado em EEDATA ; fim da programação da seqüência de controle bsf EECON1,WR ; Habilita a escrita bcf STATUS,RP0 ; Retorna ao banco 0 Obs.: Para economizar energia, recomenda-se colocar os bits 6 e 7 de EEADR (EEADR<7:6>) desligados ( clear ). Com eles setados o consumo é cerca de 400 µa, já com eles clear o consumo é cerca de 150 µa.
52 Microcontrolador PIC16F87x 52 BIBLIOGRAFIA 1. Souza, David José de, Desbravando o PIC, Baseado no Microcontrolador PIC16F628; Editora Érica, 2 a edição, PIC16/17 MICROCONTROLLER DATA BOOK, Microchip, 1996/ Sites:
53 Apêndice A - INTRODUÇÃO AO MPLAB O MPLAB é um ambiente integrado para o estudo e desenvolvimento com a família PIC de microcontroladores. Sua principal característica é a total integração de seus módulos com o ambiente Windows, permitindo a fácil cópia de arquivos e trechos de arquivos de um aplicativo para outro. Neste ambiente, além da edição de código-fonte, podemos também compilar programas e corrigir seus erros, caso existam. Outra ferramenta importante é a simulação do programa, que pode ser realizada passo-a-passo para verificarmos se o trabalho têm erros de lógica. A Figura 1 mostra a janela principal do MPLAB onde temos um menu principal, uma barra de ferramentas com vários ícones e uma janela do gerenciador de projeto e janela de mensagens de saída. Barra de Ferramentas Menu Principal Janela de mensagens de saída Janela do gerenciador Figura 1 Tela principal do MPLAB Para se escrever um programa no MPLAB, precisamos antes assimilar o conceito de projeto.
54 Microcontrolador PIC16F87x 54 O Projeto no MpLab Entende-se por projeto um conjunto de arquivos e informações que diz ao MPLAB qual a situação de um certo trabalho em particular. Por exemplo, num certo projeto designado EXEMPLO.MCP temos duas janelas abertas: a janela do gerenciador de projeto e o código-fonte exemplo.asm. Em outro projeto podemos ter outros arquivos sendo simulados o que caracteriza outro projeto. Com o gerenciamento de projetos presente no MPLAB não precisamos lembrar quais as janelas que cada projeto estava usando no momento em que encerramos o trabalho, pois ao carregarmos o projeto desejado todas as informações relativas ao mesmo serão recuperadas. Para a montagem de um projeto vamos supor que foi desenvolvido o programa para controlar 8 leds dispostos no PORTB do PICF628 ou PIC16F87x. Gravamos este programa na pasta PIC com o nome de SEQLEDS.ASM. A listagem deste programa para o PIC16F628 encontra-se em anexo. CRIAÇÃO DO PROJETO - PRIMEIRO PASSO Uma vez que você abriu o MPLAB a primeira coisa a se fazer é criar um projeto ou abrir um projeto criado anteriormente. O projeto que vamos criar terá o nome de LED.MCP. É importante ressaltar que o projeto e o código-fonte SEQLEDS.ASM têm que ser salvos na mesma pasta. No menu principal, na opção Project o MPLAB possui o Project Wizard que nos facilita o trabalho de criação do projeto. A Figura 2 mostra a janela inicial do Project Wizard.
55 Microcontrolador PIC16F87x 55 Figura 2 Project Wizard Click em avançar para executarmos a próxima etapa. A seguir, precisamos definir com qual microcontrolador vamos trabalhar. Neste exemplo será selecionado o PIC16F628. A Figura 3 detalha este passo no MPLAB.
56 Microcontrolador PIC16F87x 56 Figura 3 Seleção do microcontrolador. CRIAÇÃO DO PROJETO - SEGUNDO PASSO Os programadores de micorcontrolador usam basicamente dois tipos de código-fonte: ASSEMBLY e LINGUAGEM C. O código Assembly, que utilizamos neste curso, usa mnemônicos para trabalhar cada operação (instrução). As instruções atuam nos bits e bytes dos registradores internos do PIC. Já a linguagem C, tem prontos comandos que realizam, muitas vezes, mais de uma instrução assembly. A vantagem de usar Assembly é que a arquitetura interna do microcontrolador estudado fica muito clara, além do desenvolvimento de programas menores e mais rápidos.
57 Microcontrolador PIC16F87x 57 A linguagem C traz a vantagem da rapidez no desenvolvimento dos programas. A Figura 4 mostra a próxima janela do Project Wizard. Nesta etapa, selecionamos o compilador que iremos trabalhar e verificamos o local onde o mesmo está gravado. Para trabalharmos com a programação Assembly, selecionaremos a opção MPASM, como mostra a figura. Em Active ToolSuite estão as outras opções de compiladores. Figura 4 Escolha do compilador.
58 Microcontrolador PIC16F87x 58 CRIAÇÃO DO PROJETO - TERCEIRO PASSO Nessa etapa, definiremos o nome do projeto e o local de gravação dos arquivos do mesmo. O projeto e o codigo-fonte têm que ser salvos na mesma pasta. A Figura 5 mostra a janela que controla esta etapa. CRIAÇÃO DO PROJETO - QUARTO PASSO Agora transferiremos o código-fonte Assembly (ASM) para o projeto como mostrado na Figura 6. O arquivo que vamos trabalhar é o SEQLEDS.ASM. Figura 5- Nome e local do proejto.
59 Microcontrolador PIC16F87x 59 Figura 6 Código-fonte do projeto. Na última janela, temos um resumo do projeto como mostra a Figura 7.
60 Microcontrolador PIC16F87x 60 Figura 7- Conclusão da montagem do projeto. Compilando o Projeto Compilar é transformar o código-fonte em linguagem de máquina para o microcontrolador poder executar. A ferramenta Assembler é que realiza essa tarefa, mas continuaremos a utilizar a palavras compilação e copilar para nos referir a isso. Para compilarmos o código-fonte SEQLEDS.ASM, presente no projeto LED.MCP, basta irmos ao menu principal, selecionarmos a opção Project e depois Build All. Podemos também pressionarmos simultaneamente as teclas <CTRL> e <F10>. Com uma dessas ações, aparece na janela de mensagens do MPLAB informações sobra a compilação executada. Se algum erro foi detectado aparecerá mensagem de erro. Clicando em cima da mensagem o MPLAB leva ao erro no códifo-fonte. Se nenhum erro foi detectado pelo compilador aparecerá a mensagem: BUILD SUCCEEDED
61 Microcontrolador PIC16F87x 61 A Figura 8 mostra as janelas e mensagens do processo de compilação. Figura 8 Processo de compilação. Executando o programa passo-a-passo Para podermos executar o programa passo-a-passo para eliminarmos os erros de lógica que por ventura possam existir teremos que sair do modo de compilação para o modo SIMULAÇÃO. Para isso vamos clicar na opção Debugger (menu principal), depois Select Tools e 3-MPLAB SIM. A Figura 9 mostra estes passos em detalhes. Quando o modo de simulação estiver escolhido várias ferramentas novas aparecem na opção Debugger. Uma dessa
62 Microcontrolador PIC16F87x 62 opções é Step InTo (execução passo-a-passo). A tecla <F7> também realiza essa tarefa. A Figura 10 mostra a como é realizada a execução passo-a-passo. Figura 9 Seleção do modo Simulação.
63 Microcontrolador PIC16F87x 63 Figura 10 Execução passo-a-passo. Acompanhando o valor registradores Podemos acompanhar o valor dos registradores que fazem parte da arquitetura interna do PIC de duas formas: 1) Janela com todos os registradores: esta opção pode ser verificada na Figura 11. 2) Janela com registradores escolhidos pelo usuário: esta opção pode ser verificada na Figura 12. A tecla ADD SFR faz a adição de registradores à janela de observação.
64 Microcontrolador PIC16F87x 64 Figura 11 Registradores de Funções Especiais. Alterando valor de bit de entrada Figura 12 Janela de observação de registradores. Como sabemos os pinos que compõem as portas de entrada/saída dos
65 Microcontrolador PIC16F87x 65 microcontroladores PIC podem ser configurados como entrada ou saída. Quando configuramos algum pino como entrada e necessitamos simular o programa com essa configuração, temos a necessidade de alterar, de maneira assíncrona, o valor (nível alto para baixo ou vice-versa) desse pino. A Figura 13 mostra como abrir o Modo de Estímulos do PIC. Basta clicar em Debugger e depois Stimulus Controller. Figura 13 Controle de Estímulos Externos. Figura 14 Janela de Estímulos Externos.
66 Microcontrolador PIC16F87x 66 A Figura 14 mostra a janela que faz o controle dos estímulos externos. Para acrescentar um pino que foi previamente configurado como entrada, basta clicar em Add Row e configurar de acordo com a necessidade as colunas Pin e Action. A tecla Fire habilita o estimulo externo. Gravando um programa no microcontrolador Inicialmente é necessário definir o programador e habilitá-lo. É necessário que o programador esteja conectado à porta serial do PC com o microcontrolador instalado. A Figura 15 mostra a opção Programmer PicStart Plus no menu principal de MPLAB. Figura 15 Definindo o programador. Depois do passo anterior basta acionar a opção Program no mesmo caminho apontado pela figura anterior.
67 Apêndice B DETALHES DOS PORTs Vamos ver agora explicações mais detalhadas sobre as portas de entrada e saída e os respectivos registradores de direção de dados: PORTA, PORTB, TRISA e TRISB. Iniciaremos com o grupo RA0, RA1, RA2 e RA3 na qual representamos, na figura seguinte, o esquema do estado de escrita extraído do data sheet da Microchip ( Figura 3 - Diagrama de blocos dos pinos RA3:RA0 Como dito acima, a configuração de uma linha como entrada ou saída depende do estado do bit no registrador TRIS (TRISA para o PORTA e TRISB para o PORTB). Pegaremos como exemplo a linha RA0 e analisaremos o funcionamento do estado de saída seja quando a mesma funciona como entrada ou como saída. Funcionamento como entrada Para configurar a linha RA0 como entrada, devemos colocar em 1 o bit 0 do registrador
68 Microcontrolador PIC16F87x 68 TRISA com a instrução: bsf TRISA,0 Esta instrução determinará uma comutação a 1 do estado lógico do flip-flop do D-latch indicado no bloco com o nome TRIS latch. Para outra linha de I/O existe um destes flip-flop e o estado lógico em que se trava depende estritamente do estado lógico do relativo bit no registrador TRIS (ou melhor dizendo, todos os bit's do registrador TRIS é fisicamente implementado com um TRIS latch). A saída Q do TRIS latch é conectada a entrada de uma porta lógica do tipo OR. Isto significa que, independente do valor presente a outra entrada, a saída da porta OR estará sempre em 1 enquanto uma de suas entradas valer 1 (veja na tabela verdade). E nesta condição o transistor P não conduz e mantém a linha RA0 desconectada do positivo da alimentação. Do mesmo modo a saída negativa Q do TRIS latch é conectada a entrada de uma porta AND onde a saída desta estará sempre em 0 enquanto uma de suas entradas valer 0 (veja tabela verdade). E nesta condição em que o transistor N não conduz mantendo a linha RA0 desconectada da massa. O estado lógico da linha RA0 dependerá exclusivamente do circuito externo a que o conectarmos. Aplicando 0 ou 5 volts ao pino RA0, será possível lermos o estado presente no circuito externo a entrada do bloco representado por TTl input buffer e do latch de entrada. Funcionamento como saída Para configurar a linha de RA0 como saída, devemos colocar em 0 o bit 0 do registrador TRISA com a instrução: bcf TRISA,0 Esta determina a comutação para 0 da saída Q do TRIS latch ( e para 1 a saída Q negativa). E neste estado o valor da saída da porta OR e AND depende exclusivamente do estado de saída do Q negativo do Data Latch. Como para o TRIS latch, em que o Data Latch depende do estado de um bit em um registrador, particularmente do registrador PORTA. A sua saída negativa será enviada para entrada das duas portas lógicas OR e AND e que estão diretamente sobre a base do transistor P e N. Se colocarmos em 0 o bit 0 do registrador PORTA com a instrução: PORTA,0 bcf obtermos a condução do transistor N e portanto irá a 0 a linha RA0. Se ao invés colocarmos em 1 o bit 0 com a instrução: bsf PORTA,0 obteremos a condução do transistor P e portanto irá a +5 volts a linha RA0. Nesta condição será sempre possível rever o valor enviado sobre a linha através do circuito de entrada. Estado de saída da linha RA4 Analisaremos agora o funcionamento do estado de saída da linha RA4 que é diferente de todas as outras linhas de I/O enquanto compartilha o mesmo pino do PIC16c84 com o TOCKI o qual iremos analisar no próximo passo. Na figura seguinte está descrito o esquema de blocos do estado de saída extraído do data sheet Microchip:
69 Microcontrolador PIC16F87x 69 Figura 4 - Diagrama de blocos do pino RA4 A lógica de comutação é substancialmente idêntica ao grupo das linha RA0 a 3 com exceção da ausência da porta OR e do transistor P, ou seja de todos os circuitos que permitem a ligação ao positivo, da linha RA4. Isto significa em termos práticos, que quando a linha RA4 está programada em saída poderá assumir um nível que dependerá do circuito externo pois na realidade não está conectada ao positivo e sim desconectada. Este tipo de circuito de saída chama-se "coletor aberto" e é útil para aplicações em que é necessário compartilhar uma mesma ligação com mais pinos de saída ou que se tenha a necessidade de colocar em alta impedância uma linha de saída e podendo assim reprogramá-la como linha de entrada. Se quisermos tornar seguro que a linha RA4 vá a 1 devemos conectar externamente um resistor de pull-up, ou seja um resistor conectado ao positivo da alimentação. Veremos em seguida a utilização da linha indicada no esquema acima TMR0 clock input. Estado de saída das linhas RB0, RB1, RB2 e RB3 Onde que para este grupo de linhas permanece substancialmente invariada a lógica de comutação. Estas dispõe de um circuito a mais, o weak pull-up ativável quando a linha for programada como entrada. A entrada de fato, como explicado anteriormente, a linha vem completamente desligada do PIC. O estado da linha depende então exclusivamente do circuito externo. Se o circuito é do tipo de coletor aberto ou simplesmente é constituído de uma simples chave que, quando pressionada, conecta a massa a linha de I\O, é necessário inserir um resistor de pull-up vinda do positivo para tornar seguro quando a chave for solta o nível voltar a uma condição lógica 1 estável sobre a linha de entrada. O circuito de weak pull-up permite evitar o uso do resistor de pull-up e é possível de ser ativado agindo sobre o bit RBPU do registrador OPTION. Na figura seguinte esta representado o esquema de blocos do estado de saída extraído do
70 Microcontrolador PIC16F87x 70 data sheet da Microchip: Figura 5 - Diagrama de blocos dos pinos RB3:RB0 Além disso a linha RB0 sozinha, apresenta uma característica muito particular. Esta, quando for configurada como linha de entrada, pode gerar, em correspondência a uma troca de estado lógico, uma interrupt, ou seja uma interrupção imediata do programa em execução e uma chamada a uma subrotina especial denominada interrupt handler. Mas falaremos disso em seguida. Estado de saída das linhas RB4, RB5, RB6 e RB7 O circuito de comutação deste grupo de linhas é idêntico ao grupo RB0 a 3. Esta linha dispõe também de um circuito de weak pull-up. E mais, com respeito a linha RB0-3 tem a vantagem de poder revelar variações de estado sobre qualquer linha e gerar uma interrupção da qual falaremos no capítulo sobre interrupções. Na figura seguinte está reproduzido o esquema de blocos do estado de saída extraído do data sheet Microhip.
71 Microcontrolador PIC16F87x 71 Figura 6 - Diagrama de blocos dos pinos RB7:RB4
72 Microcontrolador PIC16F87x 72 Apêndice C - KIT DIDÁTICO PARA PIC16F87x O kit didático apresentado tem a função de ensinar programar o PIC através de dispositivos lógicos como: LED (diodo emissor de luz); Teclado push-boton; Teclado matricial (telefônico); Display de 7 segmentos; Display de Cristal Líquido; Controle de relês; Comunicação serial USART; Conversor A/D; PWM; Projeto de frequencímetro. Na figura dada abaixo mostra-se a interligação do PIC16F87x com esses dispositivos.
73 Microcontrolador PIC16F87x 73 Vcc 10KΩ L1 L2 L3 L4 TECLADO MATRICIAL * 0 # ENT. AN. 1 ENT. AN. 2 ENT. AN. 3 MCLR ENTRADAS ANALÓGICAS 1 MCLR 2 RA0 3 RA1 4 RA2 RB7 40 RB6 39 RB5 38 RB4 37 C1 C2 C3 PUSH-BOTON RELÊ 1 5 RA3 RB3 36 RELÊ 2 6 RA4 RB2 35 RELÊ 3 7 RA5 8 RE0 RB1 34 RB0 33 INTERRUPÇÃO EXTERNA 9 RE1 32 VCC ULN2803 VCC GND 4MHz 10 RE PIC16F87X 31 RD7 30 RD6 29 RD5 28 RD4 27 GND 470Ω 470Ω 470Ω Buzzer LEDS 4511 BCD/7SEG 15 RC0 16 RC1 17 RC2 18 RC3 19 RD0 20 RD1 RC7 26 RC6 25 RC5 24 RC4 23 RD3 22 RD2 21 RX COM. SERIAL TX E RS DISPLAYs 7 SEG 10KΩ RS R/W E B0 B1 B2 B3 B4 B5 B6 B7 Vcc V DISPLAY DE CRISTAL LÍQUIDO - LCD
74 Microcontrolador PIC16F87x 74 Apêndice D Display de Cristal Líquido - LCD Adaptado de apostila dos Professores: Ilton L. Barbacena Claudio Afonso Fleury 1. INTRODUÇÃO Os módulos LCD são interfaces de saída muito útil em sistemas microprocessados. Estes módulos podem ser gráficos e a caracter. Os módulos LCD gráficos são encontrados com resuluções de 122x32, 128x64, 240x64 e 240x128 dots pixel, e geralmente estão disponíveis com 20 pinos para conexão. Os LCD comuns (tipo caracter) são especificados em número de linhas por colunas e são encontrados nas configurações previstas na Tabela 1. Tabela 1 - Módulos LCD disponíveis Número de Colunas Número de Linhas Quantidade de pinos / / / / / / / / /
75 Microcontrolador PIC16F87x 75 Os módulos podem ser encontrados com LED backlight (com uma iluminação de fundo) para facilitar as leituras durante a noite. Neste caso, a alimentação deste led faz-se normalmente pelos pinos 15 e 16 para os módulos comuns e 19 e 20 para os módulos gráficos, sendo os pinos 15 e 19 para ligação ao anodo e os pinos 16 e 20 para o catodo. A corrente de alimentação deste led varia de 100 a 200mA, dependendo do modelo. Estes módulos utilizam um controlador próprio, permitindo sua interligação com com outras placas através de seus pinos, onde deve ser alimentado o módulo e interligado o barramento de dados e controle do módulo com a placa do usuário. Naturalmente que além de alimentar e conectar os pinos do módulo com a placa do usuário deverá haver um protocolo de comunicação entre as partes, que envolve o envio de bytes de instruções e bytes de dados pelo sistema do usuário. A Tabela 2 descreve cada pino do módulo ou do display para conexão deste a outras placas: Tabela 2 - Pinagem dos Módulos LCD Pino Função Descrição 1 Alimentação Terra ou GND 2 Alimentação VCC ou +5V 3 V0 Tensão para ajuste de contraste (ver Figura 1) 4 RS Seleção: 1 - Dado, 0 - Instrução 5 R/W Seleção: 1 - Leitura, 0 - Escrita 6 E Chip select 1 ou (1 0) - Habilita, 0 - Desabilitado 7 B0 LSB 8 B1 9 B2 Barramento 10 B3 de 11 B4 Dados 12 B5 13 B6 14 B7 MSB 15 A (qdo existir) Anodo p/ LED backlight 16 K (qdo existir) Catodo p/ LED backlight
76 Microcontrolador PIC16F87x 76 Assim como em um rádio-relógio todo módulo LCD permite um ajuste na intensidade da luz emitida ou ajuste de contraste, isto é possível variando-se a tensão no pino 3. A Figura 1 mostra um circuito típico e recomendado pela maioria dos fabricantes para efetuar este ajuste. Alguns fabricantes recomenda o uso de um resistor de 4K7 em série com o potenciômetro de 10K. Figura 1 - Detalhe do controle de contraste do módulo LCD 2. PROGRAMAÇÃO / INSTRUÇÕES A Tabela 3 traz um resumo das instruções mais usadas na comunicação com os módulos LCD.
77 Microcontrolador PIC16F87x 77 Tabela 3 - Instruções mais comuns DESCRIÇÃO MODO RS R/W Código (Hexa) Display Liga (sem cursor) 0 0 0C Desliga 0 0 0A / 08 Limpa Display com Home cursor Controle do Cursor Liga 0 0 0E Desliga 0 0 0C Desloca para Esquerda Desloca para Direita Cursor Home Cursor Piscante 0 0 0D Cursor com Alternância 0 0 0F Sentido de deslocamento do Para a esquerda cursor ao entrar com caracter Para a direita Deslocamento da mensagem Para a esquerda ao entrar com caracter Para a direita Deslocamento da mensagem Para a esquerda sem entrada de caracter Para a direita 0 0 1C End. da primeira posição primeira linha segunda linha 0 0 C0
78 Microcontrolador PIC16F87x DESCRIÇÃO DETALHADA DAS INSTRUÇÕES Limpa Display RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO MSB LSB Esta instrução escreve o caracter ASCII 32 que corresponde ao branco ou barra de espaço em todos os endereços da DDRAM apagando a mensagem que estiver escrita. O cursor retorna ao endereço zero, ou seja, à posição mais a esquerda da primeira linha Cursor Home RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO * MSB LSB Faz retornar o cursor para a posição mais a esquerda da primeira linha e faz voltar à posição original mensagens previamente deslocadas. O conteúdo da DDRAM permanece inalterado Fixa o modo de operação RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO X S MSB LSB Esta instrução tem efeito somente durante a leitura ou escrita de dados, portanto, deve ser ativada na inicialização. -Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/ direita)
79 Microcontrolador PIC16F87x 79 -Estabelece se a mensagem deve ou não ser deslocada com a entrada de um novo caracter S=1 SIM, S=0 NÃO. Exemplo: X=1 e S=1 => mensagem desloca p/ direita Controle do Display RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO D C B MSB LSB A mensagem fica aparente quando D=1 e desaparece quando D=0, porém o conteúdo da DDRAM fica inalterado. O cursor fica aparente quando C=1 e desaparece quando C=0, porém as propriedades de escritas vigentes permanecem inalteradas. O cursor quando aparente liga a última linha que compõem o caracter, exceto quando B=1, que apresenta em alternância com uma matriz com todos os pontos negros em intervalos de 0,4 segundos. Quando B=1 e C=0, obteremos a ativação intermitente de uma matriz completa (todos os pontos da matriz) Deslocamento do Cursor ou da Mensagem RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO C R * * MSB LSB Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler dados do display. Utilizado para posicionamento dos dados no display. C R FUNÇÃO 0 0 Desloca o cursor para a esquerda e decrementa o contador de endereço. 0 1 Desloca o cursor para a direita e incrementa o contador de endereço. 1 0 Desloca a mensagem e o cursor para a esquerda. 1 1 Desloca a mensagem e o cursor para a direita Estabelece o modo de utilização do Módulo LCD
80 Microcontrolador PIC16F87x 80 RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO Y N F * * MSB LSB Y estabelece o modo de comunicação. Se Y=1 estabelece 8 bits e quando Y=0 será 4 bits, enviados em duas operações, com os 4 bits (Nible) mais significativos sendo enviados primeiro. N fixa o número de linhas: N=0 para uma linha e N=1 para duas ou mais linhas. F fixa o tipo da matriz: F=0 para matriz 7x5 ou 8x5 e F=1 para matriz 10x5 (somente possível quando apresentando em uma linha) Endereçamento da CGRAM CGRAM é uma região da memória RAM destinada para criação de caracteres especiais, como por exemplo: ç, é, Ê, etc. RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO A A A A A A MSB LSB Estabelece o endereço da CGRAM no contador de endereços (AC) como um número binário AAAAAA e após isto os dados serão escritos ou lidos pela CPU neste endereço. Cada caracter especial ocupa 8 endereços na CGRAM Endereçamento da DDRAM RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO A A A A A A A MSB LSB Estabelece o endereço da DDRAM no contador de endereços (AC) como um número binário AAAAAAA e após isto os dados serão escritos ou lidos pela CPU neste endereço. Para os display de uma linha AAAAAAA varia de 80H a CFH. Já para todos os display de duas linhas varia de 80H a A7H para a primeira linha e de C0H a E7H para
81 Microcontrolador PIC16F87x 81 a segunda linha Busy Flag (BF) RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO 0 1 BF A A A A A A A MSB LSB Busy Flag ou o bit 7 indica ao sistema onde está conectado o módulo LCD, se o controlador do módulo está ocupado com alguma operação interna (BF=1), e neste caso, não aceita nenhuma instrução até que BF volte para 0. Além disso, permite a leitura do conteúdo do contador de endereços (AC) expressa por AAAAAAA. O contador de endereços pode conter tanto endereço da CGRAM como da DDRAM, depende neste caso, da instrução anterior Escrita de dados na DDRAM ou CGRAM RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO 1 0 A A A A A A A A MSB LSB Escreve o byte AAAAAAAA tanto na CGRAM como na DDRAM, dependendo da instrução anterior (que define o endereço). Após a escrita, o endereço é automaticamente incrementado ou decrementado de uma unidade dependendo do modo escolhido (ver item 3.1.3) Leitura de dados na DDRAM ou CGRAM
82 Microcontrolador PIC16F87x 82 RS R/W B7 B6 B5 B4 B3 B2 B1 B0 CÓDIGO 1 1 A A A A A A A A MSB LSB Faz uma leitura na CGRAM ou na DDRAM, dependendo da instrução anterior (que define o endereço). É importante que precedendo a esta leitura seja executado a instrução de estabelecimento do endereço da CGRAM ou DDRAM, pois caso contrário o dado lido é inválido INICIALIZAÇÃO DOS MÓDULOS LCD Toda vez que alimentamos o módulo LCD deve ser executado o procedimento de inicialização, que consiste no envio de uma seqüência de instruções para configurar o modo de operação para execução de um dado programa de interfaceamento. Em muitos display este procedimento ocorre automaticamente, dentro de condições específicas que envolve temporizações mínimas referente a transição do nível lógico 0 para 1, ao ligarmos a fonte. Em caso de dúvidas, recomendamos o envio destas instruções após o reset do sistema Inicialização para sistemas 8 bits de dados (5 instruções) Entre as duas primeiras instruções recomendamos um delay de 15 ms. As demais instruções podem ser escritas após checar o Busy Flag. Instruções em Hexadecimal (8 bits) MÓDULO LCD linha - Matriz 7x5 e 8x mS 30 15mS 06 BF 0E BF 01 1 linha - Matriz 10x mS 34 15mS 06 BF 0E BF 01 2 linha - Matriz 7x5 e 8x mS 38 15mS 06 BF 0E BF Inicialização para sistemas 4 bits de dados (5 instruções)
83 Microcontrolador PIC16F87x 83 Entre as quatro primeiras instruções recomendamos um delay de 15 ms. As demais instruções podem ser escritas após checar o Busy Flag. Estes bits (nible) devem estar conectados aos pinos 11, e 14. Instruções em Hexadecimal (4 bits) MÓDULO LCD linha - Matriz 7x5 e 8x linha - Matriz 10x linha - Matriz 7x5 e 8x ROTEIRO PARA PROGRAMAÇÃO A seguir passaremos a descrever um resumo dos procedimentos para utilização de um módulo ou display LCD: 1. Ao energizar o módulo ajuste o potenciômetro de controle do brilho ou contraste até obter a visualização da matriciação na primeira linha para módulo de duas linhas ou até a matriciação de meia linha para módulos de uma linha. 2. Alguns módulos de uma linha só funcionam com a instrução 38 ao invés de 30, conforme instruções de inicialização. 3. O sinal de Enable (pino 6) deverá ser gerado conforme a temporização mostrada na Figura 2. Os códigos de dados ou de instruções só serão processados pelo processador do módulo após a descida do sinal do Enable. 4. Para ajustar a velocidade de comunicação entre a CPU do usuário e o módulo LCD existem duas possibilidades: Intercalar uma rotina de atraso de aproximadamente 15 ms entre as instruções. Fazer a leitura do Busy Flag antes do envio de cada instrução e só enviar quando o mesmo for 0. Neste caso, a única exceção será durante a inicialização. 5. Durante a inicialização enviar a seqüência correta das instruções de inicialização conforme item Para programar caracteres na CGRAM, faça inicialmente o endereçamento da mesma.
84 Microcontrolador PIC16F87x Após a escrita de dados na CGRAM envie a instrução 01, para posicionar o cursor. 8. Para escrever os caracteres especiais previamente gravados na CGRAM, utilize os códigos de 00 até 07 correspondente aos endereços bases de 40, 48 até 78 em hexa. 9. Comandos úteis: FIXAÇÃO DAS CONDIÇÕES DE UTILIZAÇÃO Instrução 1 linha 5x7 (8 bits) 30H 2 linha 5x7 (8 bits) 38H 1 linha 5x10 (8 bits) 34H 1 linha 5x7 (4 bits) 20H 2 linha 5x7 (4 bits) 28H 1 linha 5x10 (4 bits) 24H CONTROLE DISPLAY Display aceso c/ cursor fixo Display aceso c/ cursor intermitente Display aceso sem cursor Display apagado Instrução 0EH 0FH 0CH 08H MODO DE OPERAÇÃO Escreve deslocando a mensagem para esquerda (cursor fixo) Escreve deslocando a mensagem para a direita (cursor fixo) Escreve deslocando o cursor para a direita Instrução 07H 05H 06H
85 Microcontrolador PIC16F87x 85 Escreve deslocando o cursor para a esquerda 04H OUTROS COMANDOS ÚTEIS Limpa display e retorna o cursor para o inicio Retorna o cursor para o inicio (sem alterar a DDRAM) Desloca somente o cursor para a direita Desloca somente o cursor para a esquerda Desloca o cursor + mensagem para a direita Desloca o cursor + mensagem para a esquerda Desloca o cursor para posição inicial da segunda linha Desloca o cursor para posição inicial da primeira linha Instrução 01H 02H 14H 10H 1CH 18H C0H 80H CGRAM (caracteres especiais) Endereço inicial para construir caracteres especiais Para escrever o primeiro caracter (previamente construídos) Para escrever o último caracter (previamente construídos) Instrução 40H 00H 07H Obs: Após o endereçamento da CGRAM, o cursor se desloca para a primeira posição da segunda linha (ou metade), portanto é recomendado enviar a instrução 01 ou limpa display e cursor home.
86 Microcontrolador PIC16F87x CUIDADOS ESPECIAIS COM MÓDULOS LCD 4.1- MANUSEIO Somente retire o módulo de sua embalagem protetora imediatamente antes de sua instalação Não guarde os módulos em recintos de alta temperatura e alta umidade. A temperatura de armazenamento deverá estar compreendida entre 5 e 30 o C. O LCD é coberto por uma lâmina plástica polarizada a qual não pode ser riscada. Cuidado em seu manuseio. Para a limpeza da lâmina utilize cotonetes embebido em benzina. Não utilize outros tipos de solventes. Observe cuidadosamente os procedimentos de controle anti-estático quando manusear os módulos. Eles incorporam circuitos integrados CMOS LSI os quais são sensíveis à descarga eletrostática. Não toque nos terminais do conector, trilhas do circuito impresso e/ou terminais do CI INSTALAÇÃO Nunca desmonte o módulo Use uma estação de solda aterrada para soldagem de conectores ou terminais. montador deverá também ser convenientemente aterrado. Sempre que o projeto o permita, instale o módulo atrás de uma janela protetora de plástico ou vidro. Somente retire a fita adesiva que protege a lâmina plástica frontal imediatamente antes de seu uso OPERAÇÃO Nunca instale ou desconecte o módulo com sua alimentação ligada. Sempre opere os módulos respeitando sua gama de temperatura de operação. Observe cuidadosamente os valores das tensões de alimentação e os níveis dos sinais de controle. Ajuste a tensão no pino 3 (V0) para obter o contraste mais conveniente para uma dada aplicação.
PIC16F628a. Pinagem do PIC16F628a:
PIC16F628a O PIC16F628a é um microcontrolador fabricado pela Microchip Technology (www.microchip.com), com as seguintes características: - composto de 18 pinos; - possui somente 35 instruções no seu microcódigo;
Hardware Parte I. Fábio Rodrigues de la Rocha
Hardware Parte I Fábio Rodrigues de la Rocha PIC16F877 40 pinos Freqüência máxima 20MHz. Vias de programação 14 bits 33 portas configuráveis como entradas/saídas 15 interrupções diferentes Memória EEPROM
MICROCONTROLADORES PIC PRIMEIROS PASSOS
MICROCONTROLADORES PIC PRIMEIROS PASSOS Os microcontroladores são chips inteligentes, que tem um processador, pinos de entradas/saídas e memória. Através da programação dos microcontroladores podemos controlar
Curso PIC 1 Desbravando o PIC. Eng. Diego Camilo Fernandes Labtools Mosaico Didactic Division
Curso PIC 1 Desbravando o PIC Eng. Diego Camilo Fernandes Labtools Mosaico Didactic Division O que fazemos... Desenvolvimento de projetos (hardware e software); Consultoria em engenharia eletrônica e
Programação Daniel Corteletti Aula 3 Parte III Página 1/7
Programação Daniel Corteletti Aula 3 Parte III Página /7 LINGUAGEM DE PROGRAMAÇÃO - ASSEMLY - PARTE I Assembly - o que é "Assembly" significa montagem. "Assembler" significa montador. Montagem é o ato
Sistemas Microcontrolados
Sistemas Microcontrolados Uma Abordagem com o Microcontrolador PIC 16F84 Nardênio Almeida Martins Novatec Editora Capítulo 1 Introdução Os microcontroladores estão presentes em quase tudo o que envolve
Arquitetura de Computadores. Prof. João Bosco Jr.
Arquitetura de Computadores Prof. João Bosco Jr. Aula 4 (nivel ISA Arquitetura PIC) Características do Controlador 16F628A 18 Pinos Até 20 Mhz (5M instruções por segundo) PortA e PortB 10 Interrupções
Estrutura de um Computador
SEL-0415 Introdução à Organização de Computadores Estrutura de um Computador Aula 7 Prof. Dr. Marcelo Andrade da Costa Vieira MODELO DE VON NEUMANN PRINCÍPIOS A arquitetura de um computador consiste de
DOUGLAS DAL POZZO DIEGO VITTI
DOUGLAS DAL POO DIEGO VITTI O que são MicroControladores Microcontralor é um componente cujo núcleo possui os mesmos blocos funcionais de um microprocessador. No entanto, sua aplicação é um pouco mais
SEMINÁRIO ASSEMBLY: Arquitetura PIC
UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO TECNOLÓGICO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA Curso de Ciências da Computação SEMINÁRIO ASSEMBLY: Arquitetura PIC DOUGLAS DAL POZZO DIEGO VITTI Florianópolis
Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01
Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal
Conhecendo o PIC16F877 Microcontrolador de 8 bits da Microchip Co.
Programação Daniel Corteletti Aula 2 Página 1/6 Conhecendo o PIC16F877 Microcontrolador de 8 bits da Microchip Co. O microcontrolador PIC16F877 pode ser encontrado em diversos encapsulamentos: PDIP, QFP,
Sistemas Microcontrolados. Período Aula 4. 1 Saulo O. D. Luiz
Sistemas Microcontrolados Período 2009.2 Aula 4 1 Saulo O. D. Luiz Roteiro Introdução ao microcontrolador PIC 16F877 Arquitetura do PIC 16F877 Conjunto de instruções Registradores de configuração 2 Saulo
V1 5V +V. (14)Vdd (6)RB0 PIC 16F628A. (16) Clk-out. C1 33pF. C2 33pF. Figura 1 Circuito pisca-pisca.
AUTOR Maurício Madeira Oliveira Página pessoal (fonte): www.seguidorsolar.com.br Este curso pode ser usado e divulgado, sem fins comerciais, citar fonte e autor Prévia: Curso de Microcontroladores PIC
O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware
1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador
Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB
Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha
UNIVERSIDADE FEDERAL DE SÃO JOÃO DEL-REI - UFSJ DEPARTAMENTO DE ENGENHARIA ELÉTRICA - DEPEL INTRODUÇÃO AOS MICROCONTROLADORES PIC
UNIVERSIDADE FEDERAL DE SÃO JOÃO DEL-REI - UFSJ DEPARTAMENTO DE ENGENHARIA ELÉTRICA - DEPEL INTRODUÇÃO AOS MICROCONTROLADORES PIC THIAGO VELOSO GOMES JOÃO MATHEUS DE OLIVEIRA ARANTES São João del-rei Março
PIC18F4550. Curso Engenharia de Controle e Automação. Alex Vidigal Bastos www.decom.ufop.br/alex/ [email protected]
PIC18F4550 Curso Engenharia de Controle e Automação Alex Vidigal Bastos www.decom.ufop.br/alex/ [email protected] 1 Agenda Características do PIC18F4550 Pinagem do PIC18F4550 Pinagem do PIC18F4550 Datasheet
ARQUITETURA DE COMPUTADORES - 1866
7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um
Introdução aos Microcontroladores PIC
Introdução aos Microcontroladores PIC 1ª parte João M. P. Cardoso Universidade do Algarve Microcontroladores PIC Empresa: Microchip Technology Inc. Várias famílias PIC12XX, PIC16XX, PIC17XX, PIC18XX Linha
1. CAPÍTULO COMPUTADORES
1. CAPÍTULO COMPUTADORES 1.1. Computadores Denomina-se computador uma máquina capaz de executar variados tipos de tratamento automático de informações ou processamento de dados. Os primeiros eram capazes
5. Conjunto de Instruções do MCU PIC
5. do MCU PIC Professor: Vlademir de Oliveira Disciplina: Microcontroladores e DSP 5.1 Arquitetura interna Ciclo de Busca e Execução da Instrução O clock externo é internamente dividido por 4, gerando
PIC. PeripheralInterface Controller. Prof. EngºespLuiz Antonio Vargas Pinto www.vargasp.com. Prof. Vargas
PIC PeripheralInterface Controller Prof. EngºespLuiz Antonio Vargas Pinto www.vargasp.com Histórico Em 1965 a General Instruments criou a divisão de microeletrônica Nos anos 80 foi dividida e vendida a
CURSO DE MICROCONTROLADORES Prof. Fábio Renato Elias Boaventura
1 O curso todo é baseado no PIC 16F84, devido as suas facilidades de desenvolvimento, por não necessitar de apagadores de EPROM, mas outros modelos (16C711 com conversores A/D e 12C508 com apenas 8 pinos)
Programação em BASIC para o PIC Mostrando Mensagens no Display LCD Vitor Amadeu Souza
Programação em BASIC para o PIC Mostrando Mensagens no Display LCD Vitor Amadeu Souza Introdução Nesta terceira série de artigos que aborda a programação na linguagem BASIC para o microcontrolador PIC,
1.1 Noções básicas sobre interrupções em Microcontroladores
Capítulo 1 Interrupções 1.1 Noções básicas sobre interrupções em Microcontroladores PIC Interrupções é obrigação em uma programação profissional. Quando um evento ocorrer, uma bandeira de interrupção será
Faculdade de Engenharia de Ilha Solteira- Departamento de Engenharia Elétrica
Faculdade de Engenharia de Ilha Solteira- Departamento de Engenharia Elétrica TEEE I- Projeto de Robôs Móveis - Profs. Nobuo Oki e Suely Cunha Amaro Mantovani 1 o.sem / 2013 TEEE I Projeto de Robôs Móveis
Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.
Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:
O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.
O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. Unidade aritmética e lógica - Executa operações aritméticas (cálculos);
Dispositivos de Entrada e Saída
SEL-0415 Introdução à Organização de Computadores Dispositivos de Entrada e Saída Aula 9 Prof. Dr. Marcelo Andrade da Costa Vieira ENTRADA e SAÍDA (E/S) (I/O - Input/Output) n Inserção dos dados (programa)
Arquitetura de Computadores. Tipos de Instruções
Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada
Interrupções. As interrupções são casos especiais de chamadas de procedimentos.
Interrupções Uma interrupção é equivalente a uma chamada de procedimento. A chamada é equivalente a um CALL gerado pela execução de uma instrução. As interrupções são casos especiais de chamadas de procedimentos.
ULA Sinais de Controle enviados pela UC
Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento
Sistemas Computacionais II Professor Frederico Sauer
Sistemas Computacionais II Professor Frederico Sauer Livro-texto: Introdução à Organização de Computadores 4ª edição Mário A. Monteiro Livros Técnicos e Científicos Editora. Atenção: Este material não
2 Formalidades referentes ao trabalho
Bacharelado em Ciência da Computação DINF / UFPR Projetos Digitais e Microprocessadores 1 o Semestre de 2006 MICO-v12.r0 07/03/2006 Profs. Luis Allan Künzle e Armando Luiz Nicolini Delgado Atenção: Este
DEPARTAMENTO DE ELECTROTECNIA. João Paulo Baptista. Curso de Engenharia Electrotécnica Electrónica e Computadores
DEPARTAMENTO DE ELECTROTECNIA MICROCONTROLADORES João Paulo Baptista Curso de Engenharia Electrotécnica Electrónica e Computadores Sistemas Digitais / 2001 1 MICROCONTROLADORES 1 Arquitectura Base de
CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA
8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente
Registros do 16F628A. Prof. Luiz Antonio Vargas Pinto Prof. Vargas
Registros do 16F628A www.mikroe.com Prof. Luiz Antonio Vargas Pinto www.vargasp.com STATUS (03) STATUS (03) Após RESET Chave dos bancos STATUS (03) Bit 7: IRP - Seleção de banco de registradores 0 - seleciona
Componentes do Computador e. aula 3. Profa. Débora Matos
Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e
Curso de Programação PIC Prof. Msc. Engº Getúlio Teruo Tateoki
Curso de Programação PIC Prof. Msc. Engº Getúlio Teruo Tateoki Este Curso de Programação foi projetado para introduzir ao aluno na programação dos microcontroladores PIC16F84. Para se entender como programar
ARQUITETURA DE COMPUTADORES
ARQUITETURA DE COMPUTADORES Aula 08: UCP Características dos elementos internos da UCP: registradores, unidade de controle, decodificador de instruções, relógio do sistema. Funções do processador: controle
Índice. Dia 05 de fevereiro de 2014...2. Apresentação... 2. Dia 12 de fevereiro de 2013...3
Índice Dia 05 de fevereiro de 2014....2 Apresentação... 2 Dia 12 de fevereiro de 2013....3 -Processador... 3 -Von Neumann... 3 -Harvard... 4 -Von Neumann x Harvard... 4 -Equipamentos que utilizam a arquitetura
3. Arquitetura Básica do Computador
3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ ESCOLA POLITÉCNICA ENGENHARIA DE COMPUTAÇÃO MICROPROCESSADORES PROJETO PARDAL DOCUMENTAÇÃO
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ ESCOLA POLITÉCNICA ENGENHARIA DE COMPUTAÇÃO MICROPROCESSADORES PROJETO PARDAL DOCUMENTAÇÃO CURITIBA, 2012 PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ ESCOLA POLITÉCNICA
Edeyson Andrade Gomes
Sistemas Operacionais Conceitos de Arquitetura Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Máquinas de Níveis Revisão de Conceitos de Arquitetura 2 Máquina de Níveis Máquina de níveis Computador
Servo-Motor. por. Nuno Monteiro & Gabriel Dinis Eng. Electrotécnica, UTAD Junho de 2001. [email protected] gabrieldinis@portugalmail.
Servo-Motor por [email protected] [email protected] Um servo-motor é um pequeno dispositivo cujo veio pode ser posicionado numa determinada posição angular de acordo com um sinal
Interrupção Externa. Capítulo 1. Noções básicas sobre interrupções em Microcontroladores PIC
Capítulo 1 Interrupção Externa Noções básicas sobre interrupções em Microcontroladores PIC Seção 1.1 Interrupções é obrigação em uma programação profissional. Quando um evento ocorrer, uma bandeira de
ARQUITETURA DE COMPUTADORES
01001111 01110010 01100111 01100001 01101110 01101001 01111010 01100001 11100111 11100011 01101111 00100000 01100100 01100101 00100000 01000011 01101111 01101101 01110000 01110101 01110100 01100001 01100100
CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO
CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO O seguinte artigo apresenta uma UCP hipotética construída no software simulador DEMOWARE Digital Works 3.04.39. A UCP (Unidade Central de Processamento)
Curso de Microcontroladores PIC 16F84A
Curso de Microcontroladores PIC 16F84A João Neto Caetano [email protected] Marciel Gonçalves Azevedo [email protected] Célio Rodrigues Pinto Treinamentos em geral, suporte a alunos universitários
UNIPAC UNIVERSIDADE PRESIDENTE ANTÔNIO CARLOS FACULDADE DE CIÊNCIA DA COMPUTAÇÃO E COMUNICAÇÃO SOCIAL CURSO DE CIÊNCIA DA COMPUTAÇÃO
UNIPAC UNIVERSIDADE PRESIDENTE ANTÔNIO CARLOS FACULDADE DE CIÊNCIA DA COMPUTAÇÃO E COMUNICAÇÃO SOCIAL CURSO DE CIÊNCIA DA COMPUTAÇÃO Pietro Diovane Keoma Bergamaschi de Assis MICROCONTROLADOR - 2-2 BARBACENA
CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM
CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas
Microprocessadores. Prof. Leonardo Barreto Campos 1
Microprocessadores Prof. Leonardo Barreto Campos 1 Sumário Introdução; Arquitetura de Microprocessadores; Unidade de Controle UC; Unidade Lógica Aritméticas ULA; Arquitetura de von Neumann; Execução de
DECODIFICADOR DE DISPLAY DE 7 SEGMENTOS COM LATCH
UNIVERSIDADE FEDERAL DO PARANÁ DEPARTAMENTO DE ENGENHARIA ELÉTRICA DECODIFICADOR DE DISPLAY DE 7 SEGMENTOS COM LATCH Projeto para a matéria TE130 Projeto de Circuitos Integrados Digitais, ministrada pelo
Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] /
Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] / [email protected] MATÉRIA: ICO Aula N : 09 Tema: Unidade Central de
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação
www.vwsolucoes.com Copyright 2011 VW Soluções
1 Apresentação O adaptador ADP.v01 é utilizado para facilitar a instalação de display Lcd 16x2 ou display Lcd 20x4 nos CLP PIC28 ou CLP PIC40 através de um flat cable de 10vias de acordo com a necessidade
BARRAMENTO DO SISTEMA
BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade
Microcontroladores PIC16F84 e PIC16F628
1 Microcontroladores PIC16F84 e PIC16F628 Esta apostila foi escrita no final de Julho de 2004 e teve a colaboração de: Derli Bernardes Ivon Luiz José Domingos Luiz Cláudio Edson Koiti Luciana Petraites
7. Técnicas de Programação
7. Professor: Vlademir de Oliveira Disciplina: Microcontroladores e DSP 7.1 Fluxograma Definições Início/Fim Sub-rotinas Tomada de decisão Terminação 7.1 Fluxograma Exercícios Ex.1: Testa um botão e acende
SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA
SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis
CAPÍTULO 5. INTERFACES PARA PERIFÉRICOS DE ARMAZENAMENTO INTERFACES DIVERSAS: FIREWIRE, SPI e I 2 C INTERFACES COM O MUNDO ANALÓGICO
28 CAPÍTULO 5 INTERFACES PARA PERIFÉRICOS DE ARMAZENAMENTO INTERFACES DIVERSAS: FIREWIRE, SPI e I 2 C INTERFACES COM O MUNDO ANALÓGICO Interfaces para periféricos de armazenamento: Periféricos de armazenamento,
Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1
Introdução à Organização e Arquitetura de Computadores Prof. Leonardo Barreto Campos 1 Sumário Introdução; Evolução dos Computadores; Considerações da Arquitetura de von Neumann; Execução de uma instrução
FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES
FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos [email protected] www.oficinadapesquisa.com.br Conceito de Computador Um computador digital é
www.vwsolucoes.com Copyright 2013 VW Soluções
Apresentação O ClpPic40-v4 foi desenvolvido com base no microcontrolador PIC16F877A, mas pode ser utilizado qualquer outro PIC de 40 pinos da família 16F ou 18F (observar a pinagem). Ele possui várias
Comunicação Serial com o AVR ATMEGA8
Comunicação Serial com o AVR ATMEGA8 Vitor Amadeu Souza [email protected] Introdução Os microcontroladores AVR vem a cada dia tomando cada vez mais espaço nos novos projetos eletrônicos microcontrolados.
Na primeira aula, conhecemos um pouco sobre o projeto Arduino, sua família de placas, os Shields e diversos exemplos de aplicações.
Na primeira aula, conhecemos um pouco sobre o projeto Arduino, sua família de placas, os Shields e diversos exemplos de aplicações. A partir de agora, iremos conhecer o hardware do Arduino e suas caracteristicas
Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)
Capítulo 4 João Lourenço [email protected] Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes
Microcontroladores PIC. Microcontroladores PIC
Microcontroladores PIC Prof. Valdir Dugo Zaragoza 28/07/2015 1 MICROCONTROLADORES PIC Os microcontroladores PIC são componentes integrados programáveis fabricados pela empresa americana Microchip. Possuem
Processadores. Prof. Alexandre Beletti Ferreira
Processadores Prof. Alexandre Beletti Ferreira Introdução O processador é um circuito integrado de controle das funções de cálculos e tomadas de decisão de um computador. Também é chamado de cérebro do
Arquitetura de Computadores - Revisão -
Arquitetura de Computadores - Revisão - Principais funções de um Sistema Operacional Componentes básicos da Arquitetura Barramentos Registradores da CPU Ciclo de Instruções Interrupções Técnicas de E/S
Evolução dos Processadores
Evolução dos Processadores Arquitetura Intel Arquitetura x86 Micro Arquitetura P5 P6 NetBurst Core Processador Pentium Pentium Pro Pentium II Pentium III Pentium 4 Pentium D Xeon Xeon Sequence Core 2 Duo
Visão Geral da Arquitetura de Computadores. Prof. Elthon Scariel Dias
Visão Geral da Arquitetura de Computadores Prof. Elthon Scariel Dias O que é Arquitetura de Computadores? Há várias definições para o termo arquitetura de computadores : É a estrutura e comportamento de
1.1. Microprocessadores e microcontroladores Sistemas genéricos e sistemas dedicados. 2. Microcontrolador PIC:
PLANO DE ENSINO Curso: Engenharia mecânica com habilitação em controle e automação Disciplina: Eletiva I Carga Horária Semanal: 04 Carga Horária Total 80 EMENTA Introdução à linguagem Assembly, microcomputador
Organização de Computadores 1
Organização de Computadores 1 5 CONJUNTO DE INSTRUÇÕES Prof. Luiz Gustavo A. Martins Introdução O que é um conjunto de instruções? Coleção completa das instruções que a CPU é capaz de executar (entende).
Sistemas Operacionais
Sistemas Operacionais Aula 3 Software Prof.: Edilberto M. Silva http://www.edilms.eti.br SO - Prof. Edilberto Silva Barramento Sistemas Operacionais Interliga os dispositivos de E/S (I/O), memória principal
Introdução a Informática. Prof.: Roberto Franciscatto
Introdução a Informática Prof.: Roberto Franciscatto 3.1 EXECUÇÃO DAS INSTRUÇÕES A UCP tem duas seções: Unidade de Controle Unidade Lógica e Aritmética Um programa se caracteriza por: uma série de instruções
1. SINTAXE DA LINGUAGEM ASSEMBLY
1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado
EXPERIÊNCIA 17 USO DO TEMPORIZADOR INTERNO
EXPERIÊNCIA 17 USO DO TEMPORIZADOR INTERNO Parte I Fundamentos Teóricos O que diferencia um microcontrolador (como o 8051) de um microprocessador é o fato de que o primeiro pode apresentar, integrados
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
Quadro de consulta (solicitação do mestre)
Introdução ao protocolo MODBUS padrão RTU O Protocolo MODBUS foi criado no final dos anos 70 para comunicação entre controladores da MODICON. Por ser um dos primeiros protocolos com especificação aberta
Introdução à Engenharia de Computação
Introdução à Engenharia de Computação Tópico: Organização Básica de um Computador Digital Introdução à Engenharia de Computação 2 Componentes de um Computador Computador Eletrônico Digital É um sistema
Sistemas Operacionais. Revisando alguns Conceitos de Hardware
Sistemas Operacionais Revisando alguns Conceitos de Hardware Sumário Hardware Processador Memória principal Cache Memória secundária Dispositivos de E/S e barramento Pipelining Arquiteturas RISC e CISC
Programação em BASIC para o PIC Vitor Amadeu Souza
Programação em BASIC para o PIC Vitor Amadeu Souza Introdução Continuando com a série do último artigo, hoje veremos os passos para o desenvolvimento de uma minuteria com o microcontrolador PIC18F1220
PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br
- Aula 5 - O NÍVEL DA LINGUAGEM DE MONTAGEM 1. INTRODUÇÃO É relativamente fácil compreender os fundamentos da programação de computadores, sob o ponto de vista da inteligibilidade dos comandos de alto
Memórias Prof. Galvez Gonçalves
Arquitetura e Organização de Computadores 1 s Prof. Galvez Gonçalves Objetivo: Compreender os tipos de memória e como elas são acionadas nos sistemas computacionais modernos. INTRODUÇÃO Nas aulas anteriores
Microcontroladores PIC
Microcontroladores PIC Prof. Adilson Gonzaga 1 Arquitetura de Microcomputadores Arquitetura von Neumann: Há apenas um barramento (duto) de dados e um de endereço. As Instruções e os dados ocupam o mesmo
R S Q 0 0 1 0 1 0 1 0 0 1 1 0 Tabela 17 - Tabela verdade NOR
19 Aula 4 Flip-Flop Flip-flops são circuitos que possuem a característica de manter os bits de saída independente de energia, podem ser considerados os princípios das memórias. Um dos circuitos sequenciais
for Information Interchange.
6 Memória: 6.1 Representação de Memória: Toda a informação com a qual um sistema computacional trabalha está, em algum nível, armazenada em um sistema de memória, guardando os dados em caráter temporário
Informática I. Aula 4. http://www.ic.uff.br/~bianca/informatica1/ Aula 4-11/09/2006 1
Informática I Aula 4 http://www.ic.uff.br/~bianca/informatica1/ Aula 4-11/09/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação
Disciplina: Introdução à Informática Profª Érica Barcelos
Disciplina: Introdução à Informática Profª Érica Barcelos CAPÍTULO 4 1. ARQUITETURA DO COMPUTADOR- HARDWARE Todos os componentes físicos constituídos de circuitos eletrônicos interligados são chamados
Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa.
Máquina Multinível Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Uma instrução pode ser definida como um comando para o processador.
Guilherme Pina Cardim. Relatório de Sistemas Operacionais I
Guilherme Pina Cardim Relatório de Sistemas Operacionais I Presidente Prudente - SP, Brasil 30 de junho de 2010 Guilherme Pina Cardim Relatório de Sistemas Operacionais I Pesquisa para descobrir as diferenças
M-1117A PIC MICROCONTROLER. Microcontrolador PIC. EXPERIMENTS MANUAL Manual de Experimentos Manual de Experimentos
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
Introdução ao PIC. Guilherme Luiz Moritz 1. 6 de novembro de DAELT - Universidade Tecnológica Federal do Paraná
Guilherme Luiz Moritz 1 1 DAELT - Universidade Tecnológica Federal do Paraná 6 de novembro de 2013 Características do PIC Arquitetura Harvard RISC, 35 instruções 8 a 84 pinos Mais de 180 modelos Vários
A idéia hardware sugerida é colocar a placa entre o PC e o microcontrolador, conforme mostrado no esquema abaixo.
Circuito de gravação (AVR programmer) Introdução Nossa proposta, nesta parte do trabalho, é apresentar um circuito para gravação ISP (In-System- Programming) para microcontroladores AVR. Este circuito,
PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br
- Aula 2 - O NÍVEL DA MICROARQUITETURA 1. INTRODUÇÃO Este é o nível cuja função é implementar a camada ISA (Instruction Set Architeture). O seu projeto depende da arquitetura do conjunto das instruções
www.vwsolucoes.com Copyright 2013 VW Soluções
1 1. Especificação técnicas: Dimensões do módulo 4EA2SA v1.0: 100 mm x 56 mm Peso aproximado: xxx gramas (montada). Alimentação do circuito : 12 ou 24Vcc Tipo de comunicação: RS232 ou RS485 Tensão de referencia:
Programação em BASIC para o PIC Projetos com Display Gráfico Vitor Amadeu Souza
Programação em BASIC para o PIC Projetos com Display Gráfico Vitor Amadeu Souza Introdução No artigo desta edição, veremos os passos para controlar um dispaly gráfico de 128 x 64 pixels. A idéia será apresentar
