Você está na página 1de 9

Wagner da Silva Zanco

Microcontroladores PIC18 com Linguagem C


Uma Abordagem Prática e Objetiva
Com Base no PIC18F4520

1a Edição

São Paulo
2010 -
Editora Érica Ltda.

131
Sumário

Parte 1 • Microcontrolador PIC18F4520

Capítulo 1 PIC18F4520 Uma Visão Geral 24


LlPinagem do PIC18F4520 27
1.2. Configuração do oscilador 31
1.2.1. Oscilador cristal/ressonador 31
1.2.2. Oscilador RC 32
1.2.3. Oscilador interno 33
1.2.3.1. OSCTUNE 33
1.2.4. Oscilador externo 34
1.2.5. HSPLL 34
1.2.6. Chaveamento do oscilador 34
1.2.6.1. OSCCON 35
1.3. Modos de energia gerenciada (power-managed) 36
Exercícios 37

Capítulo 2 -
Memórias do PIC18F4520 38
2.1. Memória de programa 38
2.2. Memória de dados (RAM) 40
2.2.1. Access Bank 41
2.3. Memória EEPROM 42
Exercícios 42

Capítulo 3 RESET - 43
3.1. Power-on Reset(POR) 44
3.1.1. Power-upTimer(PWRT) 45
3.1.2. Oscillator Start-up Timer (OST) 45
3.1.3. PLL Lock Timer-out 45
3.2. Função /MCLR 45
3.3. Brown-out Reset(BOR) 45
3.4. Watchdog Timer (WDT) 46
3.5. Instrução RESET 46
3.6. Stack Full RESET e Stack Underflow RESET 46
Exercícios 47

Capítulo 4 Ports de l/O 48


4.1. PortA 48
4.2. Port B 50
4.3. Port C 51
4.4. Port D 52
4.5. Port E 53
Exercícios 54

Parte 2-Linguagem C

Capítulo 5 Compilador MPLAB®C18 56


5.1. Assembly versus C 57

991
5.2. Configuração do compilador MPLAB® C18 na instalação 58
5.3. Instalação do MPLAB®C18 59
5.4. Criação de projeto no MPLAB® IDE para o MPLAB® C18 62
5.4.1. Criação de arquivo-fonte em C
um 62
5.4.2. Criação de um projeto com o Project Wizard 63
5.4.3. Adicionar o arquivo-fonte ao projeto 66
5.4.4. Configurar a localização da ferramenta de compilação 67
5.4.5. Configurar os diretórios de procura da ferramenta de compilação 67
5.4.6. Compilar o projeto 68
5.4.7. Remover um arquivo do projeto 69
5.5. Ativar o MPASM SIM para simular uma aplicação 70
Exercícios 71

Capítulo 6 Introdução à Linguagem C 72


6.1. Função main() 73
6.1.1 Outras funções 74
6.2. Bloco de código 75
6.3. Tipos de dados 76
6.4. Identificador 77
6.5. Variáveis 78
6.5.1 Variáveis locais 78
6.5.2. Parâmetros formais 80
6.5.3. Variáveis globais 81
6.5.4. Qualificadores rom e ram 82
6.5.5. Qualificadores fare near 83
6.5.6. Modificador de tipo de acesso const 83
6.5.7. Modificador de tipo de acesso volatile 84
6.5.8.Especificadores de tipos de classes de armazenamento 85
6.5.9. Atribuição de endereço a uma variável 89
6.6. Inicialização de variáveis e constantes 89
Exercícios 91

Capítulo 7 Operadores
-
93
7.1. Operador de atribuição 93
7.1.1. Representação de valores em ponto flutuante 94
7.1.2.
Atribuições múltiplas 97
7.2. Operadores aritméticos 97
7.2.1. Operadores de incremento e decremento 99
7.3. Operadores relacionais 100
7.4. Operadores lógicos 101
7.5. Operadores bit a bit 102
7.6. Operador? 106
7.7. Operadores de ponteiros & e
*

106
7.8. Operador cast 107
7.9. Operador sizeof 108
7.10. Operador vírgula 109
7.11. Abreviação de expressões 109
Exercícios 110

110 | Microcontroladores PIC18 com Linguagem C


Capítulo 8 Comandos de Controle 112
8.1. Comandos de seleção 112
8.1.1. Comando if 112
8.1.2. Os ifs aninhados 114
8.1.3. Comando switch 115
8.2. Comandos de iteração 118
8.2.1. Laço for 118
8.2.2. Laçowhile 121
8.2.3. Laço do-while 123
8.3. Comandos de desvio 124
8.4. Protótipos de funções 125
8.5. Comando return 127
8.6. Comando goto 129
8.7. Comando break 130
8.8. Comando continue 130
Exercícios 131

Capítulo 9 -
Vetores e Matrizes 132
9.1. Inicialização de vetores 133
9.1.1. Vetor inicializado por uma string 134
9.2. Ponteiros para vetores 135
9.2.1. Passagem de vetores como parâmetro a uma função 136
9.3. Vetor bidimensional (matriz) 137
9.4. Vetores e matrizes adimensionais 139
9.4.1. Passagem de matriz como parâmetro a uma função 140
Exercícios 142

Capítulo 10-Strings -.143


10.1. Manipulação de strings 144
10.1.1. Função strcat() 144
10.1.2. Função strcpyO 146
10.1.3. Função strlen() 147
10.1.4. Função strncmp() 148
10.1.5. Função strchr() 149
10.1.6. Função strstr() 151
10.1.7. Função strlwr() 152
10.1.8. Função strupr() 152
10.1.9. Outras funções que manipulam strings 153
10.1.10. Funções que manipulam conteúdo de memória 154
Exercícios 154

Capítulo 11 Estruturas de Dados 155


11.1. Estrutura 155
11.1.1. Vetor de estruturas 158
11.2. Passagem de estrutura como parâmetro para funções 159
11.2.1. Passagem de uma estrutura como parâmetro para uma função 160
11.2.2. Operador seta (->) 162
11.2.3. Estruturas aninhadas 162
11.3. Campos de bits 164

11.4. Uniões 165

|111
11.5. Enumerações
11.6. Typedef
Exercícios

Capítulo 12 •
Funções de Saída de Caracteres 170
12.1. Streams 170
12.1.1. Variáveis globais stdout e stderr 171

12.2. Função fprintf() 173


12.2.1. Caractere fiag 173

12.2.2. Comprimento do campo 174


12.2.3. Precisão do campo 174

12.2.4. Especificador de tamanho 174


12.2.5. 176
Operadores de conversão
12.2.6. Caracteres de barra invertida 177
12.3. 182
Função fputs()
12.4. Função printf() 182

12.5. Função putc() 182


12.6. Função puts() 182

12.7. Função sprintfQ 183


12.8. Função vfprintf() 183

12.9. Função vprintf() 185


12.10. Função vsprintf() 185
12.11. Função _usart_putc 186
12.12. Função _user_putc 186

12.13. Conversão de um float em string 186


Exercícios 188

Parte 3 Explorando o PIC18F4520

Capítulo 13 Teclado e LED 190


13.1. Efetuar a leitura de um botão 190
13.2. AcionarLEDs 194
13.3. Teclado matriz 197
Exercícios 213

Capítulo 14 Displays Multiplexados 214


14.1. Display de sete segmentos 214
14.2. Displays multiplexados 217
14.2.1. Temporização dos displays 219
Exercícios 226

Capítulo 15 LCD Caractere 16x2


-
,
227
15.1. LCD caractere 16 x 2 (16 caracteres x2 linhas) 227
15.2. Arquitetura interna de um LCD caractere 229
15.3. Interfacear um microcontrolador com um LCD caractere 230
15.4. Inicialização de um LCD caractere 231
15.5. Como escrever dados no LCD caractere 16 x 2 235
15.6. Como acessar um LCD caractere 236
15.6.1. Função IniciaLCDQ 237
15.6.2. Função TestPixelsLCD() 237

112 1 Microcontroladores PIC18 com Linguagem C


15.6.3. Função EsclnstLCD() 238
15.6.4. Função EscDataLCD() 238
15.6.5. Função EscStringLCD() 238
15.6.6. Função EscStringLCD_ROM() 238
15.6.7. Função TesteBusyFlag() 239
15.6.8. Função Pulse() 239
15.6.9. Funções de delay 239
Exercícios 246

Capítulo 16 Interrupção
-
247
16.1. Diretiva#pragma 247
16.1.1.
#pragma tmpdata 250
16.1.2. #pragma varlocate 250
16.2. Interrupção 251
16.2.1. INTCON 253
16.2.2. INTCON2 254
16.2.3. INTCON3 255
16.2.4. PIR1 256
16.2.5. PIR2 257
16.2.6. PIE1 258
16.2.7. PIE2 259
16.2.8. IPR1 260
16.2.9. IPR2 261
16.2.10. RCON 262
16.2.11. Função de tratamento de interrupção 263
16.2.12. Como salvar o contexto 265
16.3. Interrupção externa 265
Exercícios 269

Capítulo 17 Medição de Tempo


-
270
17.1. Funções de delay 270
17.1.1. Função Delay1TCYx() 271
17.1.2. Função Delay 10TCYx() 271
17.1.3. Função Delay 100TCYx() 271
17.1.4. Função Delay1kTCYx() 271
17.1.5. Função Delay 10kTCYx() 271
17.2. Módulo TimerO 272
17.2.1. Módulo TimerO configurado como temporizador 272
17.2.2. T0CON 273
17.2.3. Módulo TimerO configurado como temporizador/contador de 16 bits 277
17.3. Módulo TimeM 278
17.3.1. T1CON 279
17.3.2. Módulo TimeM configurado como temporizador/contador de 16 bits 281
17.4. Módulo Timer2 282
17.4.1. T2CON 283
17.5. Módulo Timer3 284
17.5.1. T3CON 285
Exercícios 288

H3|
Capítulo 18 Conversão A/D
- 289
18.1. PCM (Pulse Code Modulation) 289
18.2. Teorema de Nyquist 292
18.3. Frequência de corte do FPB 292
18.4. Tensão de referência 294
18.5. Conversor A/D do PIC18F4520 295
18.5.1. ADCONO 295

18.5.2. ADCON1 296


18.5.3. ADCON2 296

18.6. Obter o resultado de uma conversão 297


18.7. Requisitos para aquisição
a da amostra 298
18.8. Clock utilizado na conversão 299
18.9. Ciclo de conversão 300
18.9.1. Conversão manual 300
18.9.2. Conversão automática 301
18.10. Interrupção do conversor A/D 303
18.11. Conversor A/D no modo Sleep 304
18.12. Configuração do conversor A/D do PIC18F4520 304
Exercícios 309

Capítulo 19 Modulação PWM


- 310
19.1. PWM (Pulse Width Modulation) 310
19.1.1. Dutycycle 311
19.1.2. Recuperação do nível DC de um sinal PWM 312
19.1.3. Geração do sinal PWM no módulo CCP1 312
19.1.4. Período do sinal PWM 313
19.1.5. Ciclo ativo do sinal PWM 313
19.1.6. Definição do número de passos de controle 314
19.1.7. Definição do tempo correspondente a cada passo (Tp) 316
Exercícios 326

Parte 4 Comunicação de Dados

Capítulo 20-Protocolo l*C 328

20.1. Iniciar e finalizar uma transmissão 329


20.2. Condição Re-START (Repeated START Condition) 332
20.3. Endereçamento de 10 bits 332
20.4. Endereço de chamada
geral 334
20.5. Operação Mult-Master (múltiplos mestres) 334
20.6. Módulo MSSP implementando o barramento PC 335
20.6.1. SSPSTAT (registrador de status) 335
20.6.2. SSPCON1 (registrador de controle) 336
20.6.3. SSPCON2 (registrador de controle) 337
20.7. Configurar o PIC18F4520 como dispositivo mestre 338
20.8. Verificar se o barramento está livre 339
20.9. Dispositivo mestre transmite com 7 bits de endereço 340
20.10. Dispositivo mestre recebe com 7 bits de endereço 346
20.11. Resistores de pull-up 350

114 | Microcontroladores PIC18 com Linguagem C


20.12, Memória EEPROM 24C08 352
20.12.1. Proteção contra escrita por hardware 353
20.12.2. Endereçar o 24C08 353
20.12.3.Operação de escrita 354
20.12.4.Operação de leitura 355
20.13. Cálculo dos resistores de pull-up 356
Exercícios 363

Capítulo 21 -
Protocolo SPI 364
21.1. Introdução ao protocolo SPI 364
21.1.1. SSPSTAT
(registrador de status) 365
21.1.2. SSPCON1 (registrador de controle) 366
21.2. Operação do modo SPI 367
21.2.1. Modo mestre 368
21.2.2. Modo escravo 370
21.3. Potenciômetro digital MCP41010 371
21.3.1. Modoreostato 371
21.3.2. Modo potenciômetro 372
21.3.3. Interface SPI 372
Exercícios 379

Capítulo 22 -

Comunicação Serial UART via RS-232 380


22.1. Bit de paridade 381
22.2. Taxa de transferência ou baud rate 381
22.3. Controle de fluxo 381
22.4. EUSART 382
22.4.1. TXSTA 382
22.4.2. RCSTA 383
22.4.3. BAUDCON 384
22.5. Gerador de baud rate 385
22.6. EUSART em modo assíncrono 388
22.6.1. Transmissor assíncrono 388
22.6.2. Receptor assíncrono 390
22.7. Padrão RS-232 392
22.7.1. Especificação mecânica 392
22.7.2. Conexão RS-232 Null modem 394
22.7.3. Conexão RS-232 entre o microcontrolador e o PC 394
22.7.4. Especificação elétrica 395
22.7.5. RS-232 driver/receiver (MAX232) 396
Exercícios 403

Capítulo 23 Pré-Processamento, Compilação e Linkedição 404


23.1. Compilação de uma aplicação 404
23.1.1. Criação de um arquivo biblioteca 405
23.2. Diretivas de compilação 407
23.2.1. #if, #else,#elife#endif 407
23.2.2. #ifdef,#ifndefe#undef 408
23.2.3. ffinclude 409
23.2.4. #define 409
23.2.5. #line 409

1151
23.2.6. #error 409
23.2.7. #pragma 410
23.3. Macros 410
23.3.1. Macros 411
predefinidas
23.4. Introdução de instruções em Assembly no C 412
23.5. Modelos de memória 413
23.5.1. Stack software 414
23.6. Set de instruções estendido 414
23.7. Start-up code 415

23.7.1. Ativar o modo estendido 416


23.8. Otimização de código 416

23.8.1. Duplicate-string merging 417


23.8.2. Branch optimizations 417
23.8.3. Banking optimizer 417

23.8.4. WREG tracking 417


23.8.5. Code straightening 417
23.8.6. Tail merging 418
23.8.7. Unreachable-code remove 418

23.8.8. Copy propagation 418


23.8.9. Redundant-store remove 418

23.8.10. Dead-code remove 418


23.8.11. Procedural abstration 418

23.8.12. Efeitos colaterais da otimização 418


Exercícios 419

Apêndice A Bits de Configuração


- 420

Apêndice B Funções Nativas do MPLAB®C18


- 428

Apêndice C Sumário dos SFRs do PIC18F4520


- 432

Apêndice D Set de Instruções do PIC18F4520 435

Apêndice E- Código ASCII 438

Apêndice F Especificações Elétricas do PIC18F4520


- 439

Bibliografia 440

índice Remissivo 441

916 § Mtaocontratadores PIC18 com Linguagem C

Você também pode gostar