MICROCONTROLADORES PIC18 COM LINGUAGEM C - UMA ABORDAGEM PRATICA E OBJETIVA
WAGNER DA SILVA ZANCO
1A. EDICAO - 2010
Parte 1 - Microcontrolador PIC18F4520
Capítulo 1 - PIC18F4520 - Uma Visão Geral 1.1. Pinagem do PIC18F4520 1.2. Configuração do oscilador 1.2.1. Oscilador cristal/ressonador 1.2.2. Oscilador RC 1.2.3. Oscilador interno 1.2.3.1. OSCTUNE 1.2.4. Oscilador externo 1.2.5. HSPLL 1.2.6. Chaveamento do oscilador 1.2.6.1. OSCCON 1.3. Modos de energia gerenciada (power-managed) Exercícios Capítulo 2 - Memórias do PIC18F4520 2.1. Memória de programa 2.2. Memória de dados (RAM) 2.2.1. Access Bank 2.3. Memória EEPROM Exercícios Capítulo 3 - RESET 3.1. Power-on Reset (POR) 3.1.1. Power-up Timer (PWRT) 3.1.2. Oscillator Start-up Timer (OST) 3.1.3. PLL Lock Timer-out 3.2. Função /MCLR 3.3. Brown-out Reset (BOR) 3.4. Watchdog Timer (WDT) 3.5. Instrução RESET 3.6. Stack Full RESET e Stack Underflow RESET Exercícios Capítulo 4 - Ports de I/O 4.1. Port A 4.2. Port B 4.3. Port C 4.4. Port D 4.5. Port E Exercícios Parte 2 - Linguagem C Capítulo 5 - Compilador MPLAB®C18 5.1. Assembly versus C 5.2. Configuração do compilador MPLAB® C18 na instalação 5.3. Instalação do MPLAB® C18 5.4. Criação de projeto no MPLAB® IDE para o MPLAB® C18 5.4.1. Criação de um arquivo-e em C 5.4.2. Criação de um projeto com o Project Wizard 5.4.3. Adicionar o arquivo-e ao projeto 5.4.4. Configurar a localização da ferramenta de compilação 5.4.5. Configurar os diretórios de procura da ferramenta de compilação 5.4.6. Compilar o projeto 5.4.7. Remover um arquivo do projeto 5.5. Ativar o MPASM SIM para simular uma aplicação Exercícios Capítulo 6 - Introdução à Linguagem C 6.1. Função main( ) 6.1.1 Outras funções 6.2. Bloco de código 6.3. Tipos de dados 6.4. Identificador 6.5. Variáveis 6.5.1 Variáveis locais 6.5.2. Parâmetros formais 6.5.3. Variáveis globais 6.5.4. Qualificadores rom e ram 6.5.5. Qualificadores far e near 6.5.6. Modificador de tipo de acesso const 6.5.7. Modificador de tipo de acesso volatile 6.5.8. Especificadores de tipos de classes de armazenamento 6.5.9. Atribuição de endereço a uma variável 6.6. Inicialização de variáveis e constantes Exercícios Capítulo 7 - Operadores 7.1. Operador de atribuição 7.1.1. Representação de valores em ponto flutuante 7.1.2. Atribuições múltiplas 7.2. Operadores aritméticos 7.2.1. Operadores de incremento e decremento 7.3. Operadores relacionais 7.4. Operadores lógicos 7.5. Operadores bit a bit 7.6. Operador ? 7.7. Operadores de ponteiros & e * 7.8. Operador cast 7.9. Operador sizeof 7.10. Operador vírgula 7.11. Abreviação de expressões Exercícios Capítulo 8 - Comandos de Controle 8.1. Comandos de seleção 8.1.1. Comando if 8.1.2. Os ifs aninhados 8.1.3. Comando switch 8.2. Comandos de iteração 8.2.1. Laço for 8.2.2. Laço while 8.2.3. Laço do-while 8.3. Comandos de desvio 8.4. Protótipos de funções 8.5. Comando return 8.6. Comando goto 8.7. Comando break 8.8. Comando continue Exercícios Capítulo 9 - Vetores e Matrizes 9.1. Inicialização de vetores 9.1.1. Vetor inicializado por uma string 9.2. Ponteiros para vetores 9.2.1. Passagem de vetores como parâmetro a uma função 9.3. Vetor bidimensional (matriz) 9.4. Vetores e matrizes adimensionais 9.4.1. Passagem de matriz como parâmetro a uma função Exercícios Capítulo 10 - Strings 10.1. Manipulação de strings 10.1.1. Função strcat() 10.1.2. Função strcpy() 10.1.3. Função strlen() 10.1.4. Função strncmp() 10.1.5. Função strchr() 10.1.6. Função strstr() 10.1.7. Função strlwr() 10.1.8. Função strupr() 10.1.9. Outras funções que manipulam strings 10.1.10. Funções que manipulam conteúdo de memória Exercícios Capítulo 11 - Estruturas de Dados 11.1. Estrutura 11.1.1. Vetor de estruturas 11.2. Passagem de estrutura como parâmetro para funções 11.2.1. Passagem de uma estrutura como parâmetro para uma função 11.2.2. Operador seta (->) 11.2.3. Estruturas aninhadas 11.3. Campos de bits 11.4. Uniões 11.5. Enumerações 11.6. Typedef Exercícios Capítulo 12 - Funções de Saída de Caracteres 12.1. Streams 12.1.1. Variáveis globais stdout e stderr 12.2. Função fprintf() 12.2.1. Caractere flag 12.2.2. Comprimento do campo 12.2.3. Precisão do campo 12.2.4. Especificador de tamanho 12.2.5. Operadores de conversão 12.2.6. Caracteres de barra invertida 12.3. Função fputs() 12.4. Função printf() 12.5. Função putc() 12.6. Função puts() 12.7. Função sprintf() 12.8. Função vfprintf() 12.9. Função vprintf() 12.10. Função vsprintf() 12.11. Função _usart_putc 12.12. Função _user_putc 12.13. Conversão de um float em string Exercícios Parte 3 - Explorando o PIC18F4520 Capítulo 13 - Teclado e LED 13.1. Efetuar a leitura de um botão 13.2. Acionar LEDs 13.3. Teclado matriz Exercícios Capítulo 14 - Displays Multiplexados 14.1. Display de sete segmentos 14.2. Displays multiplexados 14.2.1. Temporização dos displays Exercícios Capítulo 15 - LCD Caractere 16 x 2 15.1. LCD caractere 16 x 2 (16 caracteres x 2 linhas) 15.2. Arquitetura interna de um LCD caractere 15.3. Interfacear um microcontrolador com um LCD caractere 15.4. Inicialização de um LCD caractere 15.5. Como escrever dados no LCD caractere 16 x 2 15.6. Como acessar um LCD caractere 15.6.1. Função IniciaLCD() 15.6.2. Função TestPixelsLCD() 15.6.3. Função EscInstLCD() 15.6.4. Função EscDataLCD() 15.6.5. Função EscStringLCD() 15.6.6. Função EscStringLCD_ROM() 15.6.7. Função TesteBusyFlag() 15.6.8. Função Pulse() 15.6.9. Funções de delay Exercícios Capítulo 16 - Interrupção 16.1. Diretiva #pragma 16.1.1. #pragma tmpdata 16.1.2. #pragma varlocate 16.2. Interrupção 16.2.1. INTCON 16.2.2. INTCON2 16.2.3. INTCON3 16.2.4. PIR1 16.2.5. PIR2 16.2.6. PIE1 16.2.7. PIE2 16.2.8. IPR1 16.2.9. IPR2 16.2.10. RCON 16.2.11. Função de tratamento de interrupção 16.2.12. Como salvar o contexto 16.3. Interrupção externa Exercícios Capítulo 17 - Medição de Tempo 17.1. Funções de delay 17.1.1. Função Delay1TCYx() 17.1.2. Função Delay10TCYx() 17.1.3. Função Delay100TCYx() 17.1.4. Função Delay1kTCYx() 17.1.5. Função Delay10kTCYx() 17.2. Módulo Timer0 17.2.1. Módulo Timer0 configurado como temporizador 17.2.2. T0CON 17.2.3. Módulo Timer0 configurado como temporizador/contador de 16 bits 17.3. Módulo Timer1 17.3.1. T1CON 17.3.2. Módulo Timer1 configurado como temporizador/contador de 16 bits 17.4. Módulo Timer2 17.4.1. T2CON 17.5. Módulo Timer3 17.5.1. T3CON Exercícios Capítulo 18 - Conversão A/D 18.1. PCM (Pulse Code Modulation) 18.2. Teorema de Nyquist 18.3. Frequência de corte do FPB 18.4. Tensão de referência 18.5. Conversor A/D do PIC18F4520 18.5.1. ADCON0 18.5.2. ADCON1 18.5.3. ADCON2 18.6. Obter o resultado de uma conversão 18.7. Requisitos para a aquisição da amostra 18.8. Clock utilizado na conversão 18.9. Ciclo de conversão 18.9.1. Conversão manual 18.9.2. Conversão automática 18.10. Interrupção do conversor A/D 18.11. Conversor A/D no modo Sleep 18.12. Configuração do conversor A/D do PIC18F4520 Exercícios Capítulo 19 - Modulação PWM 19.1. PWM (Pulse Width Modulation) 19.1.1. Duty cycle 19.1.2. Recuperação do nível DC de um sinal PWM 19.1.3. Geração do sinal PWM no módulo CCP1 19.1.4. Período do sinal PWM 19.1.5. Ciclo ativo do sinal PWM 19.1.6. Definição do número de passos de controle 19.1.7. Definição do tempo correspondente a cada passo (Tp) Exercícios Parte 4 - Comunicação de Dados Capítulo 20 - Protocolo I2CTM 20.1. Iniciar e finalizar uma transmissão 20.2. Condição Re-START (Repeated START Condition) 20.3. Endereçamento de 10 bits 20.4. Endereço de chamada geral 20.5. Operação Mult-Master (múltiplos mestres) 20.6. Módulo MSSP implementando o barramento I2C 20.6.1. SSPSTAT (registrador de status) 20.6.2. SSPCON1 (registrador de controle) 20.6.3. SSPCON2 (registrador de controle) 20.7. Configurar o PIC18F4520 como dispositivo mestre 20.8. Verificar se o barramento está livre 20.9. Dispositivo mestre transmite com 7 bits de endereço 20.10. Dispositivo mestre recebe com 7 bits de endereço 20.11. Resistores de pull-up 20.12. Memória EEPROM 24C08 20.12.1. Proteção contra escrita por hardware 20.12.2. Endereçar o 24C08 20.12.3. Operação de escrita 20.12.4. Operação de leitura 20.13. Cálculo dos resistores de pull-up Exercícios Capítulo 21 - Protocolo SPITM 21.1. Introdução ao protocolo SPI 21.1.1. SSPSTAT (registrador de status) 21.1.2. SSPCON1 (registrador de controle) 21.2. Operação do modo SPI 21.2.1. Modo mestre 21.2.2. Modo escravo 21.3. Potenciômetro digital MCP41010 21.3.1. Modo reostato 21.3.2. Modo potenciômetro 21.3.3. Interface SPI Exercícios Capítulo 22 - Comunicação Serial UART via RS-232 22.1. Bit de paridade 22.2. Taxa de transferência ou baud rate 22.3. Controle de fluxo 22.4. EUSART 22.4.1. TXSTA 22.4.2. RCSTA 22.4.3. BAUDCON 22.5. Gerador de baud rate 22.6. EUSART em modo assíncrono 22.6.1. Transmissor assíncrono 22.6.2. Receptor assíncrono 22.7. Padrão RS-232 22.7.1. Especificação mecânica 22.7.2. Conexão RS-232 Null modem 22.7.3. Conexão RS-232 entre o microcontrolador e o PC 22.7.4. Especificação elétrica 22.7.5. RS-232 driver/receiver (MAX232) Exercícios Capítulo 23 - Pré-Processamento, Compilação e Linkedição 23.1. Compilação de uma aplicação 23.1.1. Criação de um arquivo biblioteca 23.2. Diretivas de compilação 23.2.1. #if, #else, #elif e #endif 23.2.2. #ifdef, #ifndef e #undef 23.2.3. #include 23.2.4. #define 23.2.5. #line 23.2.6. #error 23.2.7. #pragma 23.3. Macros 23.3.1. Macros predefinidas 23.4. Introdução de instruções em Assembly no C 23.5. Modelos de memória 23.5.1. Stack software 23.6. Set de instruções estendido 23.7. Start-up code 23.7.1. Ativar o modo estendido 23.8. Otimização de código 23.8.1. Duplicate-string merging 23.8.2. Branch optimizations 23.8.3. Banking optimizer 23.8.4. WREG tracking 23.8.5. Code straightening 23.8.6. Tail merging 23.8.7. Unreachable-code remove 23.8.8. Copy propagation 23.8.9. Redundant-store remove 23.8.10. Dead-code remove 23.8.11. Procedural abstration 23.8.12. Efeitos colaterais da otimização Exercícios Apêndice A - Bits de Configuração Apêndice B - Funções Nativas do MPLAB® C18 Apêndice C - Sumário dos SFRs do PIC18F4520 Apêndice D - Set de Instruções do PIC18F4520 Apêndice E - Código ASCII Apêndice F - Especificações Elétricas do PIC18F4520 Bibliografia Índice Remissivo