Buscar

Sandrini PIC

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Curso Linguagem C para 
microcontroladores PIC 
Baseado no PIC18F4520 e no compilador CCS 
 
 
 
 
 
 
Carlos Eduardo Sandrini Luz 
 
 
 
 
 
 
 
 
 
 
 
 
 
_________________________________________________________________________ 
2 – Carlos Eduardo Sandrini Luz 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso Linguagem C para microcontroladores PIC - 3 
Sumário 
Introdução .......................................................................................... 14 
Linguagem C ..................................................................................... 16 
Programação de Microcontroladores em linguagem C ............................ 16 
Capítulo 01 ......................................................................................... 17 
Introdução aos Microcontroladores PIC .................................................... 17 
1.1 – Microcontroladores PIC .............................................................. 17 
1.2 - Memória ROM ............................................................................ 17 
1.3 - Memória RAM ............................................................................ 18 
1.3.1 – Registradores ..................................................................... 18 
1.3.2 - Registradores de Propósito Geral .......................................... 18 
1.3.3 - Registradores de Funções Especiais ...................................... 18 
1.4 - CPU .......................................................................................... 18 
1.4.1 - Funcionamento da CPU ........................................................ 19 
Capítulo 02 ......................................................................................... 21 
Introdução à Linguagem C ...................................................................... 21 
2.1 - Palavras Reservadas ................................................................... 21 
2.2 - Identificadores ........................................................................... 21 
2.3- Tipos de dados ........................................................................... 21 
2.4 - Modificadores de Tipo ................................................................. 22 
2.5 -Variáveis .................................................................................... 23 
2.5.1 - Declaração de Variáveis ....................................................... 23 
2.5.2 - Variáveis Globais ................................................................. 24 
2.5.3 - Variáveis Locais ................................................................... 24 
2.6 - Operadores................................................................................ 24 
2.6.1 - Operadores de Atribuição ..................................................... 24 
2.6.2 – Operadores Aritméticos ....................................................... 25 
2.6.3 – Operadores Relacionais ....................................................... 25 
2.6.4 - Operadores lógicos bit-a-bit .................................................. 26 
2.6.5 - Operadores lógicos relacionais: ............................................. 26 
2.7 - Declarações de controle .............................................................. 26 
 
_________________________________________________________________________ 
4 – Carlos Eduardo Sandrini Luz 
 
2.7.1 - Comando if ......................................................................... 26 
2.7.2 - Comandos if-else ................................................................. 27 
2.7.3 - Comandos switch-case ......................................................... 28 
2.7.4 - Laço for .............................................................................. 29 
2.7.5 - Laço while .......................................................................... 30 
2.7.6 - Laço do-while ...................................................................... 30 
2.8- Notação numérica ....................................................................... 31 
Capítulo 03 ......................................................................................... 33 
O PIC 18F4520 ...................................................................................... 33 
3.1 - Introdução ................................................................................ 33 
3.2 - Pinagem do PIC 18F4520 ............................................................ 34 
3.2.1 - Nomenclatura dos pinos ....................................................... 34 
3.3 - Estrutura interna do PIC 18F4420 e 18F4520 ................................ 38 
3.4 - Oscilador ................................................................................... 39 
3.5 - RESET ....................................................................................... 40 
3.6 - Memória .................................................................................... 40 
Capítulo 04 ......................................................................................... 45 
Criando o primeiro programa .................................................................. 45 
4.1 - O compilador CCS – PCWHD ....................................................... 45 
4.1.1 - Criando um programa utilizando o compilador CCS ................. 45 
4.2 - Estrutura de um programa em C ................................................. 48 
4.3 – Diretivas ................................................................................... 49 
Capítulo 05 ......................................................................................... 57 
Entradas e saídas (I/O) .......................................................................... 57 
5.1 - Ciclo de Máquina ........................................................................ 57 
5.2 - Portas de entrada/saída (I/O) ...................................................... 58 
5.2.1 - Registrador TRISx ............................................................... 58 
5.2.1.1- Diretivas de direcionamento dos pinos ............................. 58 
5.2.2 - Registrador PORTx .............................................................. 60 
 
Curso Linguagem C para microcontroladores PIC - 5 
5.2.2.1 - Funções de entrada ...................................................... 60 
5.2.2.2 - Funções de saída .......................................................... 60 
5.3 - Acionamento de LEDS ................................................................ 61 
Circuito: ........................................................................................ 62 
Código fonte do arquivo EX02.c: ..................................................... 62 
5.4 - Gravando o microcontrolador ...................................................... 64 
5.4.1 – Utilizando o Gravador .......................................................... 64 
5.4.1.2 - Programando o microcontrolador ................................... 64 
5.5- Entendendo o código fonte .......................................................... 67 
5.6 - Funções de atraso (delay) ........................................................... 68 
5.7 - Acionamento de chaves .............................................................. 69 
Circuito: ........................................................................................ 70 
Código fonte arquivo Ex03.c ........................................................... 70 
Entendendo o código ...................................................................... 71 
5.8 – Segundo exemplo de acionamento de chaves............................... 72 
Código fonte arquivo Ex04.c ........................................................... 72 
Entendendo o código ...................................................................... 73 
5.9 - Diretiva #define ......................................................................... 74 
Código fonte arquivo
Ex05.c ........................................................... 74 
5.10 – Funções .................................................................................. 75 
5.10.1 -Protótipo de função ............................................................ 77 
Capítulo 06 ......................................................................................... 79 
Função printf ......................................................................................... 79 
6.1 - Função printf ............................................................................. 79 
6.2 - Formatação de strings ................................................................ 79 
6.3 - Códigos diversos ........................................................................ 81 
Capítulo 07 ......................................................................................... 83 
LCD de 16 colunas e 2 linhas .................................................................. 83 
7.1 - Display de Cristal Líquido (LCD) ................................................... 83 
7.2 - Pinagem do LCD ........................................................................ 83 
 
_________________________________________________________________________ 
6 – Carlos Eduardo Sandrini Luz 
 
7.3 - Criando uma biblioteca de funções para o LCD.............................. 85 
7.3.1 - Procedimento para Inicialização de um LCD: .......................... 85 
7.3.2 - Comandos Básicos de um Display de Cristal Líquido ................ 86 
7.4 - Utilizando o LCD no modo 8 bits de dados. ................................... 88 
Código fonte arquivo Ex06.c ........................................................... 88 
Código fonte para as funções de controle do LCD (arquivo LCD8b.c) .. 89 
Entendendo o código fonte ............................................................. 91 
O Arquivo LCD8B.c ......................................................................... 92 
7.5 - Utilizando o LCD no modo 4 bits de dados. ................................... 96 
7.5.1 - Posicionando o código de 8 bits em 2 partes de 4 bits ............ 97 
7.5.2 – O código em C para comunicação em 4 bits de dados. ........... 97 
7.5.3 – Exemplo utilizando o LCD no modo 4 bits de dados ................ 99 
Código fonte arquivo Ex07.c ........................................................... 99 
Código fonte para as funções de controle do LCD (arquivo LCD4b.c) 100 
Capítulo 08 ....................................................................................... 103 
Interrupções ........................................................................................ 103 
8.1 - Estudo das Interrupções ........................................................... 103 
8.1.1 - Tipos de interrupções disponíveis ........................................ 103 
8.1.2 - Representação da lógica das interrupções ............................ 105 
8.2 - Função de tratamento das interrupções ...................................... 106 
8.2.1 - Tratamento das interrupções no compilador CCS .................. 107 
8.3 - Interrupção Externa ................................................................. 108 
8.3.1 - Projeto de exemplo............................................................ 109 
Circuito: ...................................................................................... 110 
Código fonte arquivo Ex08.c ......................................................... 110 
8.4 - Níveis de prioridade das interrupções ......................................... 111 
8.5 - Tratamento de interrupções de alta prioridade no compilador CCS 112 
Capítulo 09 ....................................................................................... 115 
Timers ................................................................................................ 115 
 
Curso Linguagem C para microcontroladores PIC - 7 
9.1 - TIMER0 ................................................................................... 115 
9.1.1 - Interrupção do TIMER0 .......................................................... 117 
9.1.2 - Calculando o tempo total para a ocorrência da interrupção do 
TIMER0 no modo 8 bits. ............................................................... 117 
9.1.3 - Contando um tempo de 1 segundo com o TIMER0 no modo 8 
bits ............................................................................................. 118 
9.1.4 – Utilizando a Interrupção do TIMER0 no modo 8 bits ............. 119 
Circuito: ...................................................................................... 119 
9.1.4.1 - Configuração do TIMER0 no compilador CCS ................. 119 
Código fonte arquivo Ex09.c ......................................................... 120 
Entendendo o código .................................................................... 121 
9.1.5 – Interrupção do TIMER0 no modo 8 bits (exemplo II) .......... 123 
Código fonte arquivo Ex10.c ......................................................... 124 
Entendendo o código .................................................................... 126 
9.1.6 –Utilizando o TIMER0 com um sinal externo ........................... 127 
Circuito: ...................................................................................... 128 
Código fonte arquivo Ex11.c ......................................................... 128 
9.1.7 - Utilizando o TIMER0 no modo 16 bits .................................. 129 
9.1.8- Calculando o tempo total para a ocorrência da interrupção do 
TIMER0 para o modo 16 bits. ........................................................ 129 
9.1.9 - Contando um tempo de 10 segundos no modo 16 bits .......... 130 
9.1.10 – Utilizando a Interrupção do TIMER0 no modo 16 bits ......... 131 
Circuito: ...................................................................................... 131 
Código fonte arquivo Ex12.c ......................................................... 131 
9.2 - TIMER1 ................................................................................... 132 
9.2.1 - Modo de escrita e leitura em 16 bits .................................... 134 
9.2.2 - Circuito oscilador (Low Power) ............................................ 135 
9.2.3 - Interrupção do TIMER1 ...................................................... 135 
9.2.3.1 - Registrador PIE1......................................................... 135 
9.2.3.2 - Registrador PIR1 ........................................................ 136 
9.2.3.3 - Registradores TMR1L e TMR1H .................................... 136 
 
_________________________________________________________________________ 
8 – Carlos Eduardo Sandrini Luz 
 
9.2.4 - Calculando o tempo total para ocorrência da interrupção do 
TIMER1 ....................................................................................... 136 
9.2.5 - Contando um tempo de 1 segundo com o TIMER1 ............... 137 
9.2.5.1 - Configurando o TIMER1 no CCS ................................... 138 
9.2.6 – Utilizando as Interrupções do TIMER0 em 8 bits e do TIMER1
 .................................................................................................. 138 
Circuito: ...................................................................................... 140 
Código fonte arquivo Ex13.c ......................................................... 140 
9.2.7 - Utilizando o TIMER1 com um sinal externo .......................... 142 
Circuito: ...................................................................................... 143 
Código fonte arquivo Ex14.c ......................................................... 143 
9.3 - TIMER2 ................................................................................... 144 
9.3.1 - Registrador T2CON ............................................................ 145 
9.3.2 - Interrupção do TIMER2 ......................................................
146 
9.3.2.1 - Registrador PIE1......................................................... 147 
9.3.2.2 - Registrador PIR1 ........................................................ 147 
9.3.2.3 - Registrador TMR2 ....................................................... 147 
9.3.3 - Calculando o tempo total para a ocorrência da interrupção do 
TIMER2 ....................................................................................... 147 
9.3.4 - Contando um tempo de 1 segundo com o TIMER2 ............... 148 
9.3.4.1 - Configurando o TIMER2 no compilador CCS .................. 149 
Circuito: ...................................................................................... 150 
Código fonte arquivo Ex15.c ......................................................... 150 
9.4 - Watchdog Timer (WDT) ............................................................ 151 
9.4.1 - Tratando o Watchdog no compilador CCS ............................ 152 
9.4.1.1 – Exemplo de programa utilizando o watchdog. ............... 152 
Circuito: ...................................................................................... 153 
Código fonte do arquivo Ex16.c ..................................................... 153 
9.4.1.2 – Funcionamento do projeto .......................................... 154 
 
Curso Linguagem C para microcontroladores PIC - 9 
9.5 – Verificando o motivo do reset do microcontrolador ..................... 154 
9.5.1 – Exemplo ........................................................................... 155 
Código fonte do arquivo Ex14.c ..................................................... 155 
9.5.2 – Funcionamento do projeto ................................................. 155 
Capítulo 10 ....................................................................................... 157 
Conversor Analógico/Digital .................................................................. 157 
10.1 – Conversor A/D interno ............................................................ 157 
10.2 - Processo de Conversão ........................................................... 161 
10.3 - Ciclo de conversão Analógico/Digital ........................................ 162 
10.3.1 - Conversão Manual ........................................................... 162 
10.3.2 - Conversão Automática ..................................................... 163 
10.4 - Configurando o Conversor A/D no CCS ..................................... 164 
10.4.1 - As tensões de referência .................................................. 167 
10.4.2 - Diretiva #DEVICE (Bits retornados) ................................... 168 
10.5 – Primeiro exemplo para o conversor A/D. .................................. 168 
Circuito: ...................................................................................... 169 
Código fonte arquivo Ex18.c ......................................................... 169 
10.6 – Segundo exemplo para o conversor A/D. ................................. 170 
10.6.1 – Convertendo valores em tensão ....................................... 171 
10.6.2 – O sensor LM35 ................................................................ 171 
Código fonte arquivo Ex19.c ......................................................... 172 
Entendo o código ......................................................................... 174 
Conversão em temperatura. ...................................................... 174 
Conversão em tensão. .............................................................. 174 
Imprimindo os resultados no LCD .............................................. 174 
Capítulo 11 ....................................................................................... 177 
Tipos de Dados Avançados ................................................................... 177 
11.1 - Matrizes de Dados .................................................................. 177 
Capítulo 12 ....................................................................................... 179 
Displays de 7 segmentos ...................................................................... 179 
 
_________________________________________________________________________ 
10 – Carlos Eduardo Sandrini Luz 
 
12. 1- Os displays de 7 segmentos .................................................... 179 
12.2 – O 74HC595 ........................................................................... 181 
12.4 – Varredura dos displays de 7 segmentos ................................... 182 
12.5 – Primeiro exemplo com displays de 7 segmentos. ...................... 183 
Código fonte arquivo Ex20.c ......................................................... 183 
Entendendo o código .................................................................... 186 
12.6 – Segundo exemplo com displays de 7 segmentos. ...................... 189 
Circuito: ...................................................................................... 189 
Código fonte arquivo Ex21.c ......................................................... 190 
Entendendo o código .................................................................... 193 
Capítulo 13 ....................................................................................... 197 
Comunicação Serial .............................................................................. 197 
13.1 – USART .................................................................................. 197 
13.2 - Modo de Transmissão/Recepção no modo Assíncrono ................ 197 
13.3 - EUSART ................................................................................. 198 
13.3.1 - Auto-Wake-Up quando da recepção de um caractere. ......... 198 
13.3.2- Ajuste automático de baud rate; ....................................... 198 
13.3.3 - Transmissão de um caractere break contendo 12 bits. ........ 198 
13.4 - Registradores de controle e operação para EUSART ................... 199 
13.5 - Suporte à comunicação serial no CCS ....................................... 201 
13.6 - Funções para comunicação serial ............................................. 202 
13.7 – Primeiro exemplo utilizando comunicação serial. ....................... 205 
Circuitos:..................................................................................... 206 
Código fonte arquivo Ex22.c ......................................................... 207 
13.7.1 - Testando o código com software monitor serial .................. 207 
13.8 - Segundo exemplo utilizando comunicação serial. ....................... 209 
Circuitos:..................................................................................... 210 
Código fonte arquivo Ex23.c ......................................................... 211 
Funcionamento: ........................................................................... 212 
 
Curso Linguagem C para microcontroladores PIC - 11 
Capítulo 14 ....................................................................................... 215 
Memória de dados EEPROM .................................................................. 215 
14.1 - EEPROM ................................................................................ 215 
14.2 - Processo de escrita na EEPROM ............................................... 216 
14.3 - Processo de leitura da EEPROM ............................................... 217 
14.4 - Acesso à EEPROM interna pelo CCS.......................................... 217 
14.5 – Utilizando a EEPROM .............................................................. 218 
Circuito: ...................................................................................... 218 
Código fonte arquivo Ex24.c ......................................................... 219 
Capítulo 15 ....................................................................................... 221 
MSSP – Master Synchronous Serial Port .................................................
221 
15.1 Visão geral do módulo MSSP...................................................... 221 
15.2 - Registros de controle .............................................................. 221 
15.3 - Protocolo SPI ......................................................................... 221 
15.3.1 - Registradores envolvidos .................................................. 223 
15.3.2 - Operação em modo SPI.................................................... 225 
15.3.3 - Habilitando o modo SPI .................................................... 226 
15.3.4 - Modo Mestre ................................................................... 227 
15.3.5 - Modo Escravo .................................................................. 228 
15.3.6 - Memória serial 25LC256 ................................................... 229 
15.3.6.1 - Princípios de operação da memória serial .................... 230 
15.3.6.2 - Operação de Escrita .................................................. 231 
15.3.6.3 - Operação de leitura ................................................... 233 
15.3.7 - Protocolo SPI utilizando o compilador CCS ......................... 233 
15.3.8 - Exemplo utilizando o protocolo de comunicação SPI............ 236 
Circuito: ...................................................................................... 237 
Código fonte arquivo Ex25.c ......................................................... 237 
15.3.9 – O Conversor Digital Analógico MCP4921 ............................ 239 
15.3.9.1 – Exemplo utilizando o MCP4921 .................................. 242 
Código fonte arquivo Ex26.c ..................................................... 242 
 
_________________________________________________________________________ 
12 – Carlos Eduardo Sandrini Luz 
 
15.4 - Protocolo de comunicação I2C ................................................. 244 
15.4.1 - Registradores envolvidos .................................................. 245 
15.4.2 - Operação em modo I2C Mestre ......................................... 249 
15.4.2.1 - Transmissão em modo Mestre .................................... 251 
15.4.2.2 - Recepção em modo Mestre ........................................ 251 
15.4.3 - Endereçamento em 7 bits para o dispositivo escravo ........... 251 
15.4.4 - Sequência de transmissão de dados .................................. 252 
15.4.5 - Protocolo I2C utilizando o compilador CCS .......................... 253 
15.4.5.1 - Funções CCS para comunicação utilizando o protocolo I2C
 .............................................................................................. 254 
15.4.6 – Memória EEPROM Serial .................................................. 254 
15.4.6.1 – Operação de Escrita.................................................. 256 
15.4.6.2 – Operação de Leitura ................................................. 256 
15.4.6.3 – Exemplo utilizando a memória EEPROM 24LC512 ........ 257 
Código fonte arquivo Ex27.c ..................................................... 257 
15.4.7 - Relógio de Tempo Real DS1307 ........................................ 259 
15.4.7.1 - Princípio de funcionamento do DS1307 ....................... 260 
15.4.7.2 – Exemplo utilizando o RTC DS1307 ............................. 261 
Circuito: .................................................................................. 262 
Código fonte arquivo Ex28.c ..................................................... 262 
Arquivo ds1307.c ..................................................................... 265 
15.4.7.3- Entendendo o código ds1307.c .................................... 268 
Capítulo 16 ....................................................................................... 275 
Módulo PWM ....................................................................................... 275 
16.1 - PWM (Pulse Width Modulation) ................................................ 275 
16.2 - Geração do sinal de PWM ........................................................ 275 
16.3 - Cálculo do Período de PWM ..................................................... 276 
16.4 - Resolução PWM ...................................................................... 277 
 
Curso Linguagem C para microcontroladores PIC - 13 
16.5 - Funções para o módulo PWM no compilador CCS ...................... 278 
16.6 – Primeiro programa utilizando o módulo PWM 1 ......................... 279 
Circuito: ...................................................................................... 280 
Código fonte arquivo Ex29.c ......................................................... 280 
16.6 – Segundo programa utilizando o módulo PWM 1 ........................ 281 
Circuito: ...................................................................................... 281 
Código fonte do arquivo EX30.c ..................................................... 281 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_________________________________________________________________________ 
14 – Carlos Eduardo Sandrini Luz 
 
Introdução 
 
Este curso é baseado no microcontrolador PIC18F4520 da microchip 
(www.microchip.com), e utilizando o compilador em linguagem C CCS módulo 
PCWHD. 
O compilador CCS módulo PCWHD é desenvolvido pela CCS Inc. 
(www.ccsinfo.com) e abrange toda a linha de microcontroladores PIC. Este 
compilador possui uma interface própria onde é possível criar projetos, editar 
o código fonte, compilar e, utilizando-se do Gravador e Depurador ICD-U64 
(desenvolvido pela própria CCS), é possível a programação e depuração do 
microcontrolador diretamente pela interface. 
O compilador CCS também pode ser integrado ao MPLAB® através de um 
software ‘plug-in’ que pode ser baixado sem custo através do link 
www.ccsinfo.com/download. Através desta integração é possível editar, 
compilar, programar e depurar os projetos diretamente na interface de 
desenvolvimento MPLAB®, assim é possível a utilização de ferramentas que 
podem ser integradas a este software, como por exemplo, o gravador e 
depurador ICD3®, PICKIT3®, etc.. 
A CCS oferece uma versão de demonstração de seu compilador válida por um 
período de 45 dias sem limite no tamanho do programa e totalmente funcional 
para toda a linha de microcontroladores PIC. Para baixar a versão de 
demonstração basta seguir o link: http://www.ccsinfo.com/ccsfreedemo.php, 
lembrando que é necessário o preenchimento de um formulário de cadastro 
pelo usuário. 
Neste curso, apresentaremos os exemplos feitos na interface PCWHD, porém 
em alguns casos utilizaremos a integração ao MPLAB®. 
Todos os circuitos e exemplos de projetos criados, foram desenvolvidos e 
testados pelo autor na placa ACEPIC PRO V6.0 e também foram utilizados em 
aulas práticas ministradas na ACEPIC Tecnologia. 
Apesar de este curso ter como base o PIC18F4520, as explicações e programas 
podem ser adaptados facilmente para outros microcontroladores da Microchip. 
 
 
 
 
Setembro - 2018 
http://www.microchip.com/
http://www.ccsinfo.com/
 
Curso Linguagem C para microcontroladores PIC - 15 
Downloads 
 
Plug-In de integração CCS – MPLAB®: 
http://www.ccsinfo.com/downloads.php 
 
Versão de demonstração CCS – PCWHD: 
http://www.ccsinfo.com/ccsfreedemo.php 
 
Exemplos do Livro: 
http://www.acepic.com.br/suporte/Exemplos_Livro_CCS.zip 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
http://www.ccsinfo.com/downloads.php
http://www.ccsinfo.com/ccsfreedemo.php
 
_________________________________________________________________________ 
16 – Carlos Eduardo Sandrini Luz 
 
Linguagem C 
É uma linguagem de programação de propósito geral, estruturada, imperativa, 
procedural de alto e baixo nível, criada em 1972 por Dennis Ritchie no AT&T 
Bell Labs, para desenvolver o sistema operacional UNIX (que foi originalmente 
escrito em Assembly).
Desde então, espalhou-se por muitos outros sistemas e 
tornou-se uma das linguagens de programação mais usadas influenciando 
muitas outras linguagens, especialmente o C++, que foi desenvolvida como 
uma extensão para C. 
Fonte: WIKIPEDIA 
 
Programação de Microcontroladores em linguagem C 
Atualmente, a maioria dos microcontroladores existentes no mercado, contam 
com compiladores em C para o desenvolvimento de software, pois a linguagem 
C permite a construção de programas e aplicações muito mais complexas do 
que o Assembly. 
O compilador C tem a capacidade de “traduzir” com alto grau de inteligência e 
velocidade o código em C para o código de máquina, portanto podemos dizer 
que a linguagem C possui grande eficiência. 
Essa eficiência da linguagem C faz com que o programador se preocupe mais 
com a programação em si e o compilador assume responsabilidades como 
localização da memória, operações matemáticas e lógicas, verificação de 
bancos de memórias e outros. 
 
 
Curso Linguagem C para microcontroladores PIC - 17 
Capítulo 01 
Introdução aos Microcontroladores PIC 
 
1.1 – Microcontroladores PIC 
Os microcontroladores PIC são desenvolvidos pela Microchip Technology e seu 
nome real é PICmicro (Peripheral Interface Controller), porém é mais conhecido 
somente como PIC. 
Todos os microcontroladores PIC utilizam a arquitetura Harvard, ou seja, 
utilizam duas memórias distintas, uma para o armazenamento das instruções 
e outra para o gerenciamento de dados. 
Na composição dos microcontroladores PIC, podemos encontrar o processador 
(CPU), a memória ROM, a Memória RAM e as linhas de comunicação (bus de 
dados), além das portas de entrada/saída, periféricos, módulos de 
comunicação, comparadores, conversores analógico/digitais, memória 
EEPROM, etc. Conforme a figura 1.1 a seguir: 
 
 
Fig.: 1.1 – Composição de um microcontrolador PIC 
 
1.2 - Memória ROM 
A memória ROM (Read Only Memory) também conhecida como memória de 
programa é do tipo não volátil, ou seja, os seus dados não são perdidos quando 
o microcontrolador não está energizado. Esta memória pode ter capacidade de 
512 bytes a 128 Kbytes nos microcontroladores PIC de 8 bits. 
Esta memória é do tipo Flash, assim é possível escrever e ler em múltiplos 
endereços numa só operação, permitindo que os microcontroladores sejam 
reprogramados no próprio circuito (in-circuit) sem a necessidade de retirá-los 
da placa. 
 
_________________________________________________________________________ 
18 – Carlos Eduardo Sandrini Luz 
 
1.3 - Memória RAM 
A memória RAM (Random Access Memory) é do tipo volátil, assim seus dados 
serão perdidos ao retirar a alimentação do microcontrolador. Esta memória é 
destinada a armazenar variáveis e dados temporários que serão utilizados pelo 
microcontrolador para cálculos ou outro tipo de operações lógicas. A memória 
RAM divide-se em dois setores: 
 
1.3.1 – Registradores 
Os registradores são pequenas porções de memória e seu tamanho é medido, 
geralmente, em bits (8 bits, 16 bits, 32 bits). São representados por um valor 
numérico, porém podemos dar um nome aos registradores no código de 
programação para facilitar a identificação e o acesso a eles. 
 
1.3.2 - Registradores de Propósito Geral 
(GPR – General Porpose Registers) - Espaço destinado à criação das variáveis 
criadas pelo usuário e as variáveis do próprio compilador. 
 
1.3.3 - Registradores de Funções Especiais 
(SFR - Special Function Registers) – Espaço que contém os bits de configuração 
e controle dos periféricos do microcontrolador. 
Para os microcontroladores PIC de 8 bits, podemos encontrar memórias RAM 
com capacidades de 32 bytes até 4 Kbytes. 
 
1.4 - CPU 
A Unidade Central de Processamento (CPU – Central Processing Unit), é a 
unidade responsável por monitorar e controlar todos os processos dentro do 
microcontrolador (Figura 1.2). 
A CPU possui vários módulos e podemos destacar alguns de grande 
importância: 
 Decodificador de instruções – Responsável por decodificar cada 
instrução; 
 Contato de Programa (PC – Program Counter) – Controla a sequência 
do programa; 
 
Curso Linguagem C para microcontroladores PIC - 19 
 Unidade Lógica Aritimética (ALU – Arithmetical Logical Unit) – 
Responsável pelos cálculos e operações lógicas dos dados; 
 Acumulador – É um registrador de função especial relacionado às 
operações da ALU. É utilizado para armazenar todos os dados sobre 
os quais serão realizados uma operação (adição, mudança, 
movimento, etc). Também armazena os resultados para uso em 
outros processamentos. Um registrador relacionado ao acumulador 
para exibir o estado deste é o registrador de função especial chamado 
STATUS. 
 
 
Fig. 1.2: CPU 
 
1.4.1 - Funcionamento da CPU 
Primeiramente, antes de falarmos sobre o funcionamento da CPU, devemos 
saber que todas as instruções são sequências de bits 1 e 0 que informam o que 
a CPU deve fazer. Essas sequências de bits são conhecidas como opcodes (ou 
operation codes). Então, por exemplo, para a instrução RESET para um 
microcontrolador da família PIC18, teremos um código formado por 16 bits 
referente a esta instrução, ou seja, o opcode 00000000111111112. 
A CPU fará a leitura do opcode da memória de programa, onde a sua posição 
é controlada pelo Contador de Programa (PC), o código será decodificado pelo 
Decodificador de Instruções e em seguida a instrução será processada. Nesse 
momento, vários módulos da CPU serão incluídos no processo para que seja 
possível a realização da operação desejada. Após a execução da tarefa 
desejada, simplesmente teremos o resultado que pode ser escrito em um 
registrador interno da CPU. Podemos ter também a alteração de um valor na 
memória RAM ou até mesmo a alteração do contador de programa para que 
sejam gerados saltos ou laços, etc. 
A figura 1.3 a seguir mostra os ciclos de execução de uma instrução. 
 
 
_________________________________________________________________________ 
20 – Carlos Eduardo Sandrini Luz 
 
 
Fig.: 1.3 – Sequência de processamento realizado pelo PIC 
 
 
Curso Linguagem C para microcontroladores PIC - 21 
Capítulo 02 
Introdução à Linguagem C 
2.1 - Palavras Reservadas 
Toda linguagem de programação possui um conjunto de palavras definidas 
para interpretação do próprio compilador, sendo assim, essas palavras não 
deverão ser utilizas pelo usuário para outras finalidades além das definidas pelo 
compilador. 
Essas palavras são chamadas de Reservadas e em linguagem C, temos as 
seguintes: 
 
auto do goto signed unsigned 
break double if sizeof void 
case else int static volatile 
char enum long struct while 
const extern register switch 
continue float return typedef 
default for short union 
 
2.2 - Identificadores 
Os identificadores são nomes dados às funções, variáveis, constantes, etc. 
Estes não devem conter caracteres acentuados, espaços, cê-cedilha(ç) e, 
devem sempre começar com uma letra ou o símbolo underline (_) que é tratado 
como letra. 
 
2.3- Tipos de dados 
Os tipos de dados suportados pela linguagem C e utilizados no compilador CCS 
são identificados pelas palavras reservadas: char, int, float e void. A tabela 
2.2 exibe os tipos de dados e o seu tamanho correspondente em bits. 
 
Tipo de dado Tamanho 
char 8 bits 
int 8 bits 
float 32 bits 
void 0 
Tabela 2.1 – Tipos de dados 
O tipo char representa caracteres ASCII de 8 bits, sendo que cada variável do 
tipo char pode representar somente um caractere ASCII. 
 
_________________________________________________________________________ 
22 – Carlos Eduardo Sandrini Luz 
 
O tipo int representa números inteiros de 8 bits. 
O tipo float representa números fracionários de 32 bits, sendo que este tipo 
de dado deve ser evitado tendo em vista o seu tamanho e a complexidade de 
operações para o microcontrolador envolvendo variáveis do tipo float . 
O tipo void é normalmente
utilizado em funções para declarar que ela não 
deve retornar nenhum valor. 
 
2.4 - Modificadores de Tipo 
Além dos tipos de dados acima, podemos utilizar comandos especiais para 
modificá-los e esses comandos são chamados de modificadores de tipo, sendo 
eles: signed, unsigned, short e long. 
O modificador de tipo signed pode ser utilizado para representar um número 
positivo ou negativo, assim um tipo de dado signed int pode representar 
valores de -127 a 128. 
O modificador unsigned define um tipo de dado sem sinal, ou seja, somente 
a parte positiva de uma variável, então o tipo de dados unsigned int 
representa valores de 0 a 255. 
O modificador short é utilizado para definir um valor menor do que o tipo 
modificado, ou seja, ao declaramos uma variável com o tipo short int, a 
variável tem seu tamanho reduzido para 1 bit. 
O modificador long é o contrário, ou seja, amplia o tamanho de uma variável, 
então uma variável declarada com o tipo de dado long int passa a ter o tamanho 
de 16 bits. 
A seguir, temos a tabela 2.2 com as informações de todos os tipos de dados e 
seus modificadores disponíveis para o compilador CCS. 
 
Tipo Tamanho Valores 
short int, int1, boolean 1 bit 0 ou 1 
char 8 bits 0 a 255 
int, int8 8 bits -128 a 127 
signed int 8 bits -128 a 127 
unsigned int 8 bits 0 a 255 
 
Curso Linguagem C para microcontroladores PIC - 23 
long int, int16 16 bits -32768 a 32767 
signed long int, signed int16 16 bits -32768 a 32767 
unsigned long int, unsigned int16 36 bits 0 a 65535 
int32 32 bits -2147483648 a 2147483647 
signed int32 32 bits -2147483648 a 2147483647 
unsigned int32 32 bits 0 a 4294967295 
float 32 bits 1,5-45 a 3,438 
Tabela 2.2 – Tipos de dados e seus modificadores 
 
2.5 -Variáveis 
As variáveis são uma representação simbólica onde são armazenados dados do 
programa ou dados externos como uma tecla pressionada ou uma tensão lida, 
etc. As variáveis, como vimos acima, podem conter letras e números, sempre 
começando com letras e não devem ter nome de palavras reservadas pelo 
compilador como, por exemplo, for, do, int, etc. 
 
2.5.1 - Declaração de Variáveis 
Declarar uma variável é simplesmente informar ao compilador que uma variável 
chamada “X” é do tipo “Y” e é declarada da seguinte forma: 
 
<tipo> + <nome da variável>; 
 
Podemos também declarar e inicializar uma variável da seguinte forma: 
 
<tipo> + <nome da variável> = <valor da variável>; 
 
Exemplos: 
 
unsigned int x = 123; 
int conta; 
short x1; 
 
 
 
_________________________________________________________________________ 
24 – Carlos Eduardo Sandrini Luz 
 
2.5.2 - Variáveis Globais 
São declaradas no início de nosso código e que podem ser acessadas em 
qualquer ponto do programa: 
 
Exemplo: 
 
int conta; 
unsigned int c; 
 
void main() 
{ 
conta = 10; 
c = 2; 
while(true); 
} 
 
2.5.3 - Variáveis Locais 
São declaradas dentro de uma função e somente existe durante a execução da 
função. Elas são descartadas depois de executada a função: 
 
Exemplo: 
 
void main() 
{ 
int conta; 
conta = conta++; 
while(true); 
} 
 
2.6 - Operadores 
Temos, na linguagem C, vários operadores e podemos verificá-los a seguir: 
 
2.6.1 - Operadores de Atribuição 
São utilizados para atribuir valores às variáveis: 
 
 
 
Curso Linguagem C para microcontroladores PIC - 25 
Operador Descrição Exemplo 
= Associa um valor à variável a = 2 
 
2.6.2 – Operadores Aritméticos 
Operador Descrição Exemplo 
+ Soma dos argumentos a + b 
- Subtração dos argumentos a - b 
* Multiplicação dos argumentos a * b 
/ Divisão dos argumentos a / b 
% Resto da divisão (só pode ser utilizado com valores inteiros) a % b 
++ Soma 1 ao argumento a++ 
-- Subtrai 1 ao argumento a-- 
 
2.6.3 – Operadores Relacionais 
São utilizados para comparação entre argumentos e retornam uma resposta 
verdadeira ou falsa. Como em linguagem C não existe uma variável booleana 
para um resultado verdadeiro ou falso, todo valor igual a 0 será considerado 
falso e todo valor diferente de 0 (qualquer valor) será considerado verdadeiro. 
 
Operador Descrição Exemplo 
== Compara se igual a a == 5 
!= Compara se diferente de a != 5 
> Compara se maior que a > 5 
< Compara se menor que a < 5 
>= Compara se maior ou igual a a >= 5 
<= Compara se menor ou igual a a <= 5 
 
 
 
 
_________________________________________________________________________ 
26 – Carlos Eduardo Sandrini Luz 
 
2.6.4 - Operadores lógicos bit-a-bit 
Operador Descrição 
& E (AND) 
| OU (OR) 
^ OU EXCLUSIVO (XOR) 
~ Complemento (NOT) 
>> Deslocamento à direita 
<< Deslocamento à esquerda 
 
2.6.5 - Operadores lógicos relacionais: 
Operador Descrição 
&& Comparação lógica E (AND) 
|| Comparação lógica OU (OR) 
! Comparação lógica Complemento (NOT) 
 
2.7 - Declarações de controle 
2.7.1 - Comando if 
O comando if é um comando de decisão e é utilizado para avaliar uma 
determinada condição e determinar se ela é verdadeira, caso seja, executa o 
bloco contido dentro desta condição. Sua forma geral é: 
 
if (exp) comando; 
 
Se o resultado da condição referente à expressão (exp) for verdadeiro, o 
comando será executado, caso contrário, o programa segue sem executar o 
comando. 
 
if (exp) 
 { 
 comando1; 
 comando2; 
 
Curso Linguagem C para microcontroladores PIC - 27 
 } 
 
Para o caso acima, a mesma explicação anterior se aplica, sendo que agora, se 
a condição da expressão for verdadeira, serão executados comando1 e 
comando2. 
 
Exemplos: 
 
if (conta>50) conta = 0; 
 
Neste caso, se a variável conta atingir um valor maior que 50, o comando conta 
= 0 será executado e a variável conta será zerada. 
 
if (conta>50) 
 { 
 conta = 0; 
 conta1++; 
 } 
 
Neste caso, se a variável conta atingir um valor maior que 50, os comandos 
conta = 0 e conta1++ serão executados e assim a variável conta será zerada 
e a variável conta1 será incrementada em 1, respectivamente. 
 
2.7.2 - Comandos if-else 
Neste caso, a condição if é utilizada da mesma forma anterior, sendo que agora, 
se a condição da expressão for falsa a condição else será executada, ou seja, 
neste caso existe a possibilidade de escolha de uma entre duas opções. Sua 
forma é: 
 
if (exp) comando1; 
else comando2; 
 
Caso a expressão seja verdadeira, o comando1 será executado, caso seja falsa, 
o comando2 será executado. 
 
Exemplo: 
 
if (conta>0) 
 { 
 conta = 0; 
 conta1++; 
 
_________________________________________________________________________ 
28 – Carlos Eduardo Sandrini Luz 
 
 } 
else conta++; 
 
Para o exemplo, se o valor da variável conta for maior que 0, então os 
comandos conta = 0 e conta1++ serão executados, porém caso o valor da 
variável conta seja 0 ou menor que 0, então o comando conta++ será 
executado. 
 
2.7.3 - Comandos switch-case 
Quando existem muitos valores para testar de uma só variável, o comando IF 
pode ficar meio confuso ou sem muita eficiência, para isso podemos utilizar os 
comandos switch-case e para finalizar o teste da variável, utilizamos a cláusula 
break. Veja a seguir a forma de utilização destes comandos: 
 
switch(variável) 
 { 
 case valor1: comando1; 
 break; 
 case valor2: comando2; 
 break; 
 default: comandoN; 
 } 
 
Neste caso, a variável será testada e se o valor dela for igual a valor1, o 
comando1 será executado, se for igual ao valor2, o comando2 será executado 
e assim por diante, agora se o valor for diferente de qualquer caso (case), o 
comandoN será executado. 
 
Exemplo: 
 
switch(conta) 
 { 
 case 10: conta1++; 
 break; 
 case 15: conta2++; 
 break; 
 case 20: conta1++; 
 conta2++;
break; 
 default: conta3++; 
 } 
 
Curso Linguagem C para microcontroladores PIC - 29 
Neste caso, se o valor da variável conta for igual a 10, a variável conta1 será 
incrementada, se o valor da variável conta for igual a 15, o valor da variável 
conta2 será incrementado, caso o valor de conta seja igual a 20, tanto os 
valores de conta1 quanto de conta2 serão incrementados, para todos outros 
valores diferentes para a variável conta, o valor de conta3 será incrementado. 
Note que após cada comando, temos a cláusula break, cuja função é encerrar 
o teste da variável tendo em vista já ter sido satisfeita a condição, assim se a 
variável conta tem seu valor igual a 10, o comando de incremento da variável 
conta1 será executado, ou seja, a condição já foi atendida e não é preciso 
testar mais a variável conta. Então, a cláusula break, encerra os testes feitos 
por case e, assim, o programa continua na próxima instrução após a estrutura 
switch. 
 
2.7.4 - Laço for 
Este é um dos comandos de laço (loop ou repetição) disponíveis na linguagem 
C, a seu formato é: 
 
for(inicialização;condição(término);incremento) 
{ 
 comando1; 
 comando2; 
} 
 
onde: 
inicialização: essa seção conterá uma inicialização para a variável; 
condição: responsável por contar a condição de finalização do laço; 
incremento: conterá a expressão para incremento da variável. 
 
Exemplo: 
 
int conta; 
int a = 0; 
 
for (conta=0;conta<10;conta++) a++; 
 
Neste exemplo, a variável conta será iniciada com o valor 0, a variável a será 
incrementada e, como o resultado da expressão (conta<10) ainda é verdadeiro, 
a variável conta será incrementada (conta++), assim como novamente a 
variável a. Essa repetição ou laço se dará enquanto o resultado da expressão 
for verdadeiro. 
 
_________________________________________________________________________ 
30 – Carlos Eduardo Sandrini Luz 
 
2.7.5 - Laço while 
Neste laço, os comandos serão repetidos enquanto a expressão for verdadeira, 
sua forma de utilização é a seguinte: 
 
while (exp) comando; 
 
Exemplo: 
 
int x = 0; 
 
while(x<10) x++; 
 
O programa ficará no laço de repetição while, enquanto a variável x for menor 
que 10 e só continuará quando o valor de x for maior ou igual a 10. 
 
int x = 0, y=0; 
 
while(y<10) 
 { 
 x++; 
 y++; 
 } 
 
Neste exemplo, temos duas variáveis (x e y) que serão incrementadas 
enquando o valor da variável y for menor que 10. 
 
2.7.6 - Laço do-while 
Este laço é uma variação do laço while, sendo que, neste caso, o comando será 
executado antes de testar se a condição é verdadeira. Sua forma é: 
 
do 
 { 
 comando; 
 } while(exp); 
 
O comando será executado pelo menos uma vez antes de verificar a condição 
da expressão. 
 
 
 
Curso Linguagem C para microcontroladores PIC - 31 
Exemplo: 
 
int x = 0; 
int y = 10; 
do 
 { 
 x++; 
 y--; 
 } while(y!=1); 
 
Neste exemplo, pode-se verificar que a variável x vai se incrementar e a variável 
y será decrementada até enquanto seu valor for diferente de 1. 
 
2.8- Notação numérica 
Em linguagem C, podemos usar as 4 formas de representação numérica, 
decimal, binária, hexadecimal e octal, sendo as mais comuns somente as 3 
primeiras. 
 
Notação decimal: a representação desta notação é direta: 
Ex.: x = 10; 
 
Notação binária: esta representação vem precedida de 0b ou 0B, indicando 
a notação: 
Ex.: x = 0B00001010; 
 
Notação Hexadecimal: esta representação vem precedida de 0x ou 0X: 
Ex.: x = 0x0A; 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_________________________________________________________________________ 
32 – Carlos Eduardo Sandrini Luz 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso Linguagem C para microcontroladores PIC - 33 
Capítulo 03 
O PIC 18F4520 
3.1 - Introdução 
O PIC 18F4520 é baseado na arquitetura Harvard com instruções do tipo RISC 
(Conjunto reduzido de instruções). Este microcontrolador utiliza a tecnologia 
nanoWatt desenvolvida pela Microchip, permitindo menor consumo de 
energia. Veja suas características abaixo: 
 
 O modelo utilizado no curso possui 40 pinos, sendo que 35 
podem ser configurados como portas de entrada/saída (I/O) e 1 
como entrada; 
 Frequência de operação: DC a 40 MHz; 
 Memória Flash de 32KB; 
 Memória de dados RAM de 1536 bytes; 
 Memória de dados EEPROM de 256 bytes; 
 20 fontes de interrupção; 
 13 canais de conversão analógico-digital (A/D) de 10 bits cada; 
 1 módulo de comparação, captura e PWM (CCP); 
 1 módulo de comparação, captura e PWM melhorado (ECCP); 
 1 módulo SPI; 
 1 módulo I2C; 
 2 comparadores analógicos; 
 1 timer de 8 ou 16 bits (TIMER0), 2 times de 16 bits (TIMER1 e 
TIMER3) e 1 timer de 8 bits (TIMER2); 
 1 comunicação EUSART (modo USART melhorado); 
 1 módulo de detecção de alto-baixa tensão (HLVD). 
 
 
 
 
 
 
 
 
 
 
 
 
_________________________________________________________________________ 
34 – Carlos Eduardo Sandrini Luz 
 
3.2 - Pinagem do PIC 18F4520 
 
Fig. 3.1 – Pinagem do PIC 18F4520 
 
3.2.1 - Nomenclatura dos pinos 
Pino Nome Tipo Descrição 
1 MCLR/VPP/RE3 E 
 
Master Clear Reset/ Entrada de tensão de 
programação/ Entrada de uso geral (bit 3 PORTA 
E). 
2 RA0/AN0 E/S Entrada/saída de uso geral (bit 0 PORTA A) / 
Entrada do canal analógico 0 
3 RA1/AN1 E/S Entrada/saída de uso geral (bit 1 da PORTA A) / 
Entrada do canal analógico 1. 
4 RA2/AN2/VREF-
/CVREF 
E/S Entrada/saída de uso geral (bit 2 da PORTA A) / 
Entrada do canal analógico 2 / Entrada de tensão 
negativa de referência para o conversor A/D / 
Saída de Vref do comparador analógico. 
5 RA3/AN3/VREF+ E/S Entrada/saída de uso geral (bit 3 da PORTA A) / 
Entrada do canal analógico 3 / Entrada de tensão 
positiva de referência para o conversor A/D. 
6 RA4/T0CKI 
/C1OUT 
E/S Entrada/saída de uso geral (bit 4 da PORTA A) / 
Entrada de clock externo para o TIMER0 / Saída do 
comparador 1. 
 
Curso Linguagem C para microcontroladores PIC - 35 
7 RA5/AN4/SS 
/HLVDIN/C2OUT 
E/S Entrada/saída de uso geral (bit 5 da PORTA A) / 
Entrada do canal analógico 4 / Seleção para o 
modo SPI escravo / Entrada do módulo de 
detecção de alta tensão / Saída do comparador 2. 
8 RE0/RD/AN5 E/S Entrada/saída de uso geral (bit 0 da porta E) / 
Controle de leitura para comunicação paralela / 
Entrada do canal analógico 5. 
9 RE1/WR/AN6 E/S Entrada/saída de uso geral (bit 1 da porta E) / 
Controle de escrita para comunicação paralela / 
Entrada do canal analógico 6. 
10 RE2/CS/AN7 E/S Entrada/saída de uso geral (bit 2 da porta E) / 
Controle de seleção para comunicação paralela / 
Entrada do canal analógico 7. 
11 VDD Alimentação positiva do microcontrolador. 
12 VSS Terra (Referência de alimentação). 
13 OSC1/CLKI/RA7 E/S Entrada do cristal oscilador / Entrada para fonte de 
clock externo / Entrada/saída de uso geral (bit 7 da 
porta A). 
14 OSC2/CLKO/RA6 E/S Saída do cristal oscilador / No Modo RC é 
configurado como saída com ¼ da frequência de 
CLKI/ Entrada/saída de uso geral (bit 6 da porta 
A). 
15 RC0/T1OSO/ 
T13CKI 
E/S Entrada/saída de uso geral (bit 0 da porta C) / 
Saída do oscilador para o TIMER1 / Entrada para 
clock externo para o TIMER1 e TIMER3. 
16 RC1/T1OSI/CCP2 E/S Entrada/saída de uso geral (bit 1 da porta C) / 
Entrada do oscilador para o TIMER1 / Entrada para 
o módulo capture2 e saídas para os módulos de 
compare2 e PWM2 (entrada padrão). 
17 RC2/CCP1/P1A E/S Entrada/saída de uso geral (bit 2 da porta C) / 
Entrada para o módulo capture1 e saídas para os 
módulos compare1 e PWM1 / Saída do módulo 
CCP1 estendido. 
18 RC3/SCK/SCL E/S Entrada/saída de uso geral (bit 3 da porta C) / 
Entrada/ saída do módulo serial síncrono SPI / 
Entrada/saída
do módulo serial síncrona I2C. 
19 RD0/PSP0 E/S Entrada/saída de uso geral (bit 0 da porta D) / 
Entrada/saída de dados para comunicação 
paralela. 
20 RD1/PSP1 E/S Entrada/saída de uso geral (bit 1 da porta D) / 
Entrada/saída de dados para comunicação 
paralela. 
 
_________________________________________________________________________ 
36 – Carlos Eduardo Sandrini Luz 
 
21 RD2/PSP2 E/S Entrada/saída de uso geral (bit 2 da porta D) / 
Entrada/saída de dados para comunicação 
paralela. 
22 RD3/PSP3 E/S Entrada/saída de uso geral (bit 3 da porta D) / 
Entrada/saída de dados para comunicação 
paralela. 
23 RC4/SDI/SDA E/S Entrada/saída de uso geral (bit 4 da porta C) / 
Saída de dados para o módulo SPI / Entrada/saída 
de dados para o módulo I2C. 
24 RC5/SDO E/S Entrada/saída de uso geral (bit 5 da porta C) / 
Saída de dados para o módulo SPI 
25 RC6/TX/CK E/S Entrada/saída de uso geral (bit 6 da porta C) / 
Transmissão para o módulo assíncrono USART 
estendido / Clock para o módulo síncrono USART 
estendido. 
26 RC7/RX/DT E/S Entrada/saída de uso geral (bit 7 da porta C) / 
recepção para o módulo assíncrono USART 
estendido / dado para o módulo síncrono USART 
estendido. 
27 RD4/PSP4 E/S Entrada/saída de uso geral (bit 4 da porta D) / 
Entrada/saída de dados para comunicação 
paralela. 
28 RD5/PSP5/P1B E/S Entrada/saída de uso geral (bit 5 da porta D) / 
Entrada/saída de dados para comunicação paralela 
/ Saída do módulo CCP1 estendido. 
29 RD6/PSP6/P1C E/S Entrada/saída de uso geral (bit 6 da porta D) / 
Entrada/saída de dados para comunicação paralela 
/ Saída do módulo CCP1 estendido. 
30 RD7/PSP7/P1D E/S Entrada/saída de uso geral (bit 7 da porta D) / 
Entrada/saída de dados para comunicação paralela 
/ Saída do módulo CCP1 estendido. 
31 VSS Terra (Referência de alimentação). 
32 VDD Alimentação positiva do microcontrolador. 
33 RB0/INT0/FLT0/ 
AN12 
E/S Entrada/saída de uso geral (bit 0 da porta B) / 
Interrupção externa 0 / Entrada de falha para o 
módulo PWM estendido. / Entrada do canal 
analógico 12. 
34 RB1/INT1/AN10 E/S Entrada/saída de uso geral (bit 1 da porta B) / 
Interrupção externa 1 / Entrada do canal analógico 
10. 
 
Curso Linguagem C para microcontroladores PIC - 37 
35 RB2/INT2/AN8 E/S Entrada/saída de uso geral (bit 2 da porta B) / 
Interrupção externa 2 / Entrada do canal analógico 
8. 
36 RB3/AN9/CCP2 E/S Entrada/saída de uso geral (bit 3 da porta B) / 
Entrada do canal analógico 9 / Entrada para o 
módulo capture2 e saídas para os módulos de 
compare2 e PWM2 (entrada alternativa). 
37 RB4/KBI0/AN11 E/S Entrada/saída de uso geral (bit 4 da porta B) / Pino 
de interrupção na mudança de estado / Entrada do 
canal analógico 11. 
38 RB5/KBI1/PGM E/S Entrada/saída de uso geral (bit 5 da porta B) / Pino 
de interrupção na mudança de estado / Pino de 
ativação para a programação ICSP em baixa 
tensão. 
39 RB6/KBI2/PGC E/S Entrada/saída de uso geral (bit 6 da porta B) / Pino 
de interrupção na mudança de estado / Entrada de 
clock para a programação ICSP. 
40 RB7/KBI3/PGD E/S Entrada/saída de uso geral (bit 7 da porta B) / Pino 
de interrupção na mudança de estado / Pino de 
dados para a programação ICSP. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_________________________________________________________________________ 
38 – Carlos Eduardo Sandrini Luz 
 
3.3 - Estrutura interna do PIC 18F4420 e 18F4520 
 
Fig. 3.2 - Estrutura interna do PIC 18F4420 e 18F4520 
 
 
 
Curso Linguagem C para microcontroladores PIC - 39 
3.4 - Oscilador 
No PIC18F4520, podemos encontrar 10 tipos de osciladores que podem ser 
configurados através dos bits de configuração. Estes bits de configuração 
também são conhecidos como fuses. 
Os tipos de osciladores são: 
 
 LP – Cristal de baixa frequência; 
 XT – Cristal com frequências intermediárias; 
 HS – Cristal de alta frequência; 
 HSPLL – Cristal de alta frequência com PLL; 
 RC – Oscilador RC externo com saída de clock dividido por 4 no pino 
RA6; 
 RCIO – Oscilador RC externo com o pino RA6 como pino de 
entrada/saída; 
 INTIO1 – Oscilador interno com saída de clock no pino RA6 e pino RA7 
como entrada/saída; 
 INTIO2 – Oscilador interno com os pinos RA6 e RA7 como pinos de 
entrada/saída; 
 EC – Oscilador externo com entrada de clock no pino RA7 e saída 
dividida por 4 no pino RA6; 
 ECIO – Oscilador externo com entrada de clock no pino RA7 e com 
RA6 como entrada/saída. 
Nos tipos LP, XT e HS é utilizado oscilador a cristal e a frequência destes 
podem ser verificadas nos datasheets dos microcontroladores. 
No tipo HSPLL, o sinal de clock é utilizado como sincronismo para um circuito 
PLL (Phase Locked Loop) que gera na saída deste circuito um sinal de 4 vezes 
a frequência do sinal de referência. Neste caso, é possível, por exemplo, que o 
microcontrolador opere em 40MHz utilizando um cristal de 10MHz. 
Nos tipos RC e RCIO são utilizados um circuito RC externo, sendo que para o 
RC, é gerado um sinal no pino RA6 com uma frequência dividida por 4 da 
frequência originada pela fonte de clock. 
Nos tipos INTIO1 e INTIO2, o sinal de clock é interno e gerado a partir de 
um oscilador RC interno. O usuário pode escolher clocks de 31,25KHz, 125KHz, 
250KHz, 500KHz, 1MHz, 2MHz, 4 MHz e 8MHz. Os sinal de 4MHz e 8MHz podem 
ser aplicados ao PLL e assim, obter frequências de 16MHz e 32MHZ, 
respectivamente. No tipo INTIO1, o sinal de clock pode ser obtido no pino RA6. 
 
_________________________________________________________________________ 
40 – Carlos Eduardo Sandrini Luz 
 
Nos tipos EC e ECIO, o microcontrolador receberá um sinal de clock gerado 
por um oscilador externo no pino RA7 e no tipo EC, este sinal dividido por 4 
poderá ser obtido no pino RA6. 
 
Os registradores de controle responsáveis pela seleção e controle dos 
osciladores, são OSCTUNE e OSCCON. 
 
3.5 - RESET 
O PIC18F4520, assim como a linha 18F, possui diversas fontes de reset, 
conforme segue: 
 
 POR (Power-on-reset): Quando da detecção da alimentação do 
microcontrolador; 
 Nível 0 no pino MCLR; 
 Nível 0 no MCLR com o microcontrolador em modo sleep; 
 Estouro do Watchdog; 
 BOR (Brown-out-reset): Queda de tensão de alimentação; 
 Instrução RESET; 
 Estouro da pilha. 
 
3.6 - Memória 
Os microcontroladores PIC têm basicamente 3 tipos de memórias, sendo esta 
memória de programa, memória de dados e memória EEPROM. 
Na memória de programa são armazenadas as instruções (código do 
programa). Essa memória é do tipo não volátil, ou seja, seus dados não serão 
perdidos se a alimentação do microcontrolador for retirada. 
Na figura 3.3, temos o mapa da memória de programa para os PICs 
18F2420/2520/4420/4520. 
 
 
Curso Linguagem C para microcontroladores PIC - 41 
 
Fig. 3.3 – Mapa de memória dos PICs 18F2420/2520/4420/4520 
 
A memória de dados é responsável pelos dados dos registradores de funções 
especiais (Special Function Registers – SFR) e também pelos registradores de 
propósito gerais (General Purpose Registers – GPR). Esta memória é do tipo 
volátil, ou seja, os seus valores armazenados serão perdidos na retirada de 
alimentação do microcontrolador. 
 
Obs.: Os SFRs contém a configuração, controle e status dos periféricos e portas de 
entrada e saída e os GPRs conterá os dados do usuário. 
Na figura 3.4, podemos ver o mapa de memória de dados para os PICs 18F2520 e 
18F4520. 
 
 
_________________________________________________________________________ 
42 – Carlos Eduardo Sandrini Luz 
 
 
Fig. 3.4 – Mapa de memória de dados para os PICs 18F2520 e 18F4520 
 
A seguir, na figura 3.5, é visto o mapa dos registradores de funções especiais 
(SFRs). 
 
 
Curso Linguagem C para microcontroladores PIC - 43 
 
Fig. 3.5 – mapa de registradores de funções especiais para o PIC 18F4520 
 
A memória EEPROM que também é do tipo não volátil, permite
o 
armazenamento e manipulação de dados. 
 
 
 
 
 
 
 
 
 
 
_________________________________________________________________________ 
44 – Carlos Eduardo Sandrini Luz 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso Linguagem C para microcontroladores PIC - 45 
Capítulo 04 
Criando o primeiro programa 
4.1 - O compilador CCS – PCWHD 
 
Fig. 4.1 - Interface de desenvolvimento do compilador CCS - PCWHD 
 
4.1.1 - Criando um programa utilizando o compilador CCS 
Para criar um projeto, pode-se utilizar a 
função PIC Wizard que está no menu 
File->New da interface CCS, conforme 
mostrado na figura 4.2, porém, neste 
curso, criaremos somente o arquivo 
com extensão c (*.c). 
 
 
 
Fig. 4.2 - Utilizando o PIC Wizard para criar 
 um projeto no CCS 
 
 
 
_________________________________________________________________________ 
46 – Carlos Eduardo Sandrini Luz 
 
Para criarmos os programas com o 
compilador CCS, clique sobre o menu 
File, em seguida escolha a opção New e 
logo em seguida, selecione Source File, 
conforme a figura 4.3: 
 
 
 
 
 
 Fig. 4.3 - Criando um arquivo *.c 
 
Escolha a pasta onde será armazenado o seu arquivo e dê um nome a ele com 
a extensão “.c”, conforme mostrado na figura 4.4 e salve o arquivo. 
 
 
Fig. 4.4 - Salvando o arquivo EX01.c 
 
Após isso, teremos um 
editor de texto onde 
será escrito o código do 
programa. Neste editor, 
digite o código de 
acordo com a figura 4.5: 
 
 
 Fig. 4.5 - Escrevendo o código fonte 
 
 
Curso Linguagem C para microcontroladores PIC - 47 
Após escrever o código, pressione as 
teclas Ctrl+Alt+F9 no computador ou 
clique no menu Compile e em seguida 
no botão Compile conforme a figura 
4.6: 
 
 
 
 Fig. 4.6 - Compilando o programa 
 
Com isso, o código será compilado: 
 
 
Fig. 4.7 - Compilando o programa 
 
Após a compilação, a janela Output e Memory Use (uso da memória) serão 
exibidas, de acordo com a figura 4.8: 
 
 
Fig. 4.8 - Programa compilado sem erros 
 
Note que a quantidade de memória RAM e a memória ROM estão em 0%. 
Bem, esse primeiro programa foi feito somente para verificarmos a maneira de 
escrever um código fonte e compilá-lo diretamente na interface do compilador 
 
_________________________________________________________________________ 
48 – Carlos Eduardo Sandrini Luz 
 
CCS – PCWHD. 
 
4.2 - Estrutura de um programa em C 
Em linguagem C, os programas podem ter uma ou mais funções, isso faz com 
que tenhamos uma estrutura modular, ou seja, com que tenhamos blocos que 
podem ser acessados em qualquer parte do programa facilitando a visualização 
e o entendimento do programa. 
Todo programa C tem uma função principal (main) e a partir dela o programa 
será inicializado. 
 
Estrutura básica de um programa em C no compilador CCS: 
 
#include<18F4520.h> /*Inclusão do arquivo header (*.h) para o 
 microcontrolador utilizado*/ 
#use delay (clock=8000000) /*Definição da frequência do cristal para 
 cálculo dos delays*/ 
#fuses HS, NOWDT, PUT, BROWNOUT, NOLVP //Configuração dos bits de controle 
 
void main() 
{ //Inicio da função. 
 
 //Este é o bloco principal do programa. 
 
while(true); //Loop infinito 
 
} //Final da função. 
 
Dentro da função principal void main(), serão escritos os códigos de 
inicialização para o microcontrolador, ou seja, os ajustes dos periféricos. Esta 
função também pode conter uma ou mais chamadas às outras funções, porém 
todo o processamento do microcontrolador se dá à partir da função principal. 
Na função main temos também o laço while com a condição sempre verdadeira 
(true), este laço é chamado de laço infinito e é o responsável por manter o 
processamento. 
Uma função sempre se inicializa com uma chave, em seguida vem o bloco 
principal do programa (onde o código será escrito) e finalizamos a função 
fechando a chave. 
Note também as duas barras (//) antes das explicações. Essas barras iniciam 
um comentário e tudo que vier após estas barras não será compilado pelo 
 
Curso Linguagem C para microcontroladores PIC - 49 
programa. 
 
Uma outra maneira de incluir comentários pode ser vista a seguir: 
 
/*Temos aqui outra forma de comentário no programa. Esta maneira é indicada quando 
precisamos escrever um comentário com mais de uma linha.*/ 
 
Neste caso, o comentário tem seu início com /* e é finalizado com */. 
 
4.3 – Diretivas 
As Diretivas são comandos internos e que não são compilados, sendo estas 
dirigidas ao pré-processador e executadas pelo compilador antes da execução 
do processo de compilação. 
 
#include<18F4520.h> /*Inclusão do arquivo header (*.h) para o 
 microcontrolador utilizado*/ 
#use delay (clock=8000000) /*Definição da frequência do cristal para 
 cálculo dos delays*/ 
#fuses HS, NOWDT, PUT, BROWNOUT, NOLVP //Configuração dos bits de controle 
 
A primeira diretiva #include insere um arquivo ao programa ou ao projeto, no 
nosso caso, estamos incluindo o arquivo “18F4520.h” que é um arquivo tipo 
‘header’ (cabeçalho) cuja finalidade é definir o endereço na memória de 
algumas funções e identificações para o microcontrolador PIC18F4520. Este 
arquivo, geralmente, está localizado em C:\Arquivos de 
Programas\PICC\Devices. 
 
A diretiva #use delay informa ao compilador a velocidade de clock do sistema, 
sendo necessária para as funções de atraso (delay_us() e delay_ms()) e 
outras funções que envolvem tempo de atraso. O valor informado na diretiva 
é especificado em Hertz. 
 
A diretiva #fuses é utilizada para a configuração dos bits de controle 
(conhecidos como fusíveis). Estes bits de controle são responsáveis por 
informar ao microcontrolador como deverá ser o seu funcionamento, ou seja, 
que tipo de oscilador será utilizado, se terá algum tipo de proteção ou não, 
algumas opções de reset e temporização, etc. 
 
#fuses HS, NOWDT, PUT, BROWNOUT, NOLVP //Configuração dos bits de controle 
 
 
_________________________________________________________________________ 
50 – Carlos Eduardo Sandrini Luz 
 
HS = Oscilador HS (oscilador a cristal >= 4MHz); 
NOWDT = Watchdog desabilitado; 
PUT = Power Up Time habilitado; 
BROWNOUT = Brownout reset habilitado; 
NOLVP = Desabilitada programação por baixa tensão. 
 
Como podemos notar, temos somente 5 bits de controle configurados, porém 
existem mais bits de controle que precisam ser configurados para que o 
funcionamento do microcontrolador seja adequado. 
Na realidade, o compilador CCS já possui uma pré-configuração destes bits e 
para que possamos vê-las, basta clicar no menu Compile e, em seguida, no 
botão C/ASM List. 
Esta opção nos mostrará o código compilado em Assembly e, no final deste 
arquivo, temos a informação Configuration Fuses, conforme a figura a 4.20: 
 
 
Fig. 4.20 - Configurações dos bits de controle – fuses 
 
Verifica-se, através das configurações mostradas na figura que agora temos 
todos os bits de controle configurados. Note que as configurações, que fizemos 
pela diretiva fuses, se mantêm e, as que não foram definidas nesta diretiva, 
serão feitas automaticamente pelo compilador mantendo um padrão inicial. 
 
Curso Linguagem C para microcontroladores PIC - 51 
Para ver o padrão utilizado pelo compilador, apenas comente a linha da diretiva 
fuses, compile novamente o arquivo e verifique o código em Assembly. 
 
Veja todas as opções de configuração
dos bits de controle para o 
microcontrolador PIC 18F4520 a seguir: 
 
 
Fuse Descrição 
LP Oscilador LP (< 200 KHz) 
XT Oscilador XT (Oscilador a cristal <= 4MHz) 
HS Oscilador HS (oscilador a cristal >= 4MHz) 
H4 Habilita módulo PLL -> Freq x 4 
EC Clock externo com CLKOUT 
EC_IO Clock externo 
INTRC_IO Oscilador RC interno, sem CLKOUT 
INTRC Oscilador RC interno 
RC_IO Oscilador RC com CLKOUT 
RC Oscilador RC (Resistor/Capacitor) 
NOWDT Watchdog desabilitado 
WDT Watchdog habilitado 
WDT1 Postscale watchdog em 1:1 
WDT2 Postscale watchdog em 1:2 
WDT4 Postscale watchdog em 1:4 
WDT8 Postscale watchdog em 1:8 
WDT16 Postscale watchdog em 1:16 
 
_________________________________________________________________________ 
52 – Carlos Eduardo Sandrini Luz 
 
WDT32 Postscale watchdog em 1:32 
WDT64 Postscale watchdog em 1:64 
WDT128 Postscale watchdog em 1:128 
WDT256 Postscale watchdog em 1:256 
WDT512 Postscale watchdog em 1:512 
WDT1024 Postscale watchdog em 1:1024 
WDT2048 Postscale watchdog em 1:2048 
WDT4096 Postscale watchdog em 1:4096 
WDT8192 Postscale watchdog em 1:8192 
WDT16384 Postscale watchdog em 1:16384 
WDT32768 Postscale watchdog em 1:32768 
CCP2C1 Define o pino RC1 como pino de entrada/saída a ser utilizado 
pelo módulo CCP2 
CCP2B3 Define o pino RB3 como pino de entrada/saída a ser utilizado 
pelo módulo CCP2 
NOPBADEN Configura os pinos RB0, RB1, RB2, RB3 e RB4 como pinos de 
entrada/saída 
PBADEN Configura os pinos RB0, RB1, RB2, RB3 e RB4 como canais de 
entrada analógicos AN12, AN10, AN8, AN9 e AN11, 
respectivamente 
NOPUT Temporizador Power-up desligado 
PUT Temporizador Power-up ligado 
NOLTP1OSC TIMER1 configurado para operação em alta potência 
 
Curso Linguagem C para microcontroladores PIC - 53 
LPT1OSC TIMER1 configurado para operação em baixa potência 
NOMCLR Master Clear desabilitado, pino 1 configurado como entrada 
(RE3) 
MCLR Master Clear habilitado 
NOPROTECT Proteção de código desabilitada 
PROTECT Proteção de código habilitada 
NOBROWNOUT Reset por queda de tensão desabilitado 
BROWNOUT Reset por queda de tensão habilitado 
BROWNOUT_NOSL Reset por queda de tensão habilitado durante a operação e 
desabilitado durante o modo SLEEP 
BROWNOUT_SW Reset por queda de tensão controlado via software 
BORV20 Reset por queda de tensão abaixo de 2,0V 
BORV27 Reset por queda de tensão abaixo de 2,7V 
BORV42 Reset por queda de tensão abaixo de 4,2V 
BORV45 Reset por queda de tensão abaixo de 4,5V 
NOLVP Programação em baixa tensão desabilitada 
LVP Programação em baixa tensão habilitada. 
NOCPD Proteção da EEPROM habilitada 
CPD Proteção da EEPROM desabilitada 
NOIESO Mudança do oscilador interno/externo desabilitada 
IESO Mudança do oscilador interno/externo habilitada 
NOFCMEN Desabilita o monitoramento do sinal de clock 
FCMEN Habilita o monitoramento do sinal de clock 
 
_________________________________________________________________________ 
54 – Carlos Eduardo Sandrini Luz 
 
NOSTVREN Desabilita o reset por Stack Full/Underflow 
STVREN Habilita o reset por Stack Full/Underflow 
NOXINST Set de instruções estendido e modo de endereçamento indexado 
desabilitado 
XINST Set de instruções estendido e modo de endereçamento indexado 
habilitado 
NOCPB Código no bloco boot não protegido 
CPB Código no bloco boot (000000-007FFFh) protegido 
NOCPD Código na EEPROM não protegido 
CPD Código na EEPROM protegido 
NOWRT Proteção da memória de programa desabilitada 
WRT Proteção da memória de programa habilitada 
NOWRTB Proteção de escrita no bloco boot não habilitada 
WRTB Proteção de escrita no bloco boot (000000-007FFFh) habilitada 
NOWRTC Proteção de escrita no registrador de configuração não habilitada 
WRTC Proteção de escrita no registrador de configuração 
(300000-30000FFh) habilitada 
NOWRTD Proteção de escrita na EEPROM não habilitada 
WRTD Proteção de escrita na EEPROM habilitada 
NOEBTR Proteção contra comando de leitura da tabela executado por 
outro bloco desabilitada 
EBTR Proteção contra comando de leitura da tabela executado por 
outro bloco 
 
Curso Linguagem C para microcontroladores PIC - 55 
NOEBTRB Proteção contra comando de leitura do bloco boot executado por 
outro bloco desabilitada 
EBTRB Proteção contra comando de leitura do bloco boot executado por 
outro bloco 
NODEBUG Depuração pelo ICD desabilitada 
DEBUG Depuração pelo ICD habilitada 
 
Pode-se visualizar todos os bits de controle disponíveis para um 
microcontrolador específico o menu View e pressionando o botão Config Bits 
(figura 4.21). 
 
 
Fig. 4.21 – Acesso aos bits de controle disponíveis 
 
Na janela que será aberta, escolha o microcontrolador desejado para visualizar 
todos bits de controle disponíveis e as suas descrições, conforme mostra a 
figura 4.22 a seguir. 
 
 
_________________________________________________________________________ 
56 – Carlos Eduardo Sandrini Luz 
 
 
Fig. 4.22 – Bits de controle e descrição 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso Linguagem C para microcontroladores PIC - 57 
Capítulo 05 
Entradas e saídas (I/O) 
5.1 - Ciclo de Máquina 
A entrada de clock para o microcontrolador, seja ela interna ou externa, é 
dividida internamente por 4, gerando, assim, 4 fases (Q1, Q2, Q3 e Q4). 
Internamente, o contador de programa (program counter – PC) é incrementado 
na fase Q1 onde a instrução é localizada na memória de programa e carregada 
no registro de instrução na fase Q4, então a instrução é decodificada e 
executada durante os ciclos Q2, Q3 e Q4. 
 
 
Fig. 5.1 – Ciclos de máquina 
 
Conforme podemos ver na figura 5.1, cada ciclo de máquina executa duas 
funções ao mesmo tempo, ou seja, no mesmo tempo em que uma instrução é 
executada, a próxima instrução é localizada e carregada no registro de 
instrução. A essa tecnologia é dado o nome de PIPELINE e que resulta no 
aumento da velocidade de processamento. 
Sendo assim, para obtermos a frequência para o cálculo do ciclo de máquina, 
é necessário dividir o sinal de entrada de clock interno ou externo por 4. 
 
Por exemplo: 
Supondo que contamos com um cristal de 8MHz como fonte de clock para o 
microcontrolador, então teremos: 
 
Frequência de operação: 
𝐹𝑟𝑒𝑞 =
8𝑀𝐻𝑧
4
= 2𝑀𝐻𝑧 
 
 
 
_________________________________________________________________________ 
58 – Carlos Eduardo Sandrini Luz 
 
Ciclo de máquina: 
𝐶𝑖𝑐𝑙𝑜 =
1
𝐹𝑟𝑒𝑞
=
1
2𝑀𝐻𝑧
= 0,5𝑢𝑠 
 
5.2 - Portas de entrada/saída (I/O) 
No PIC18F4520, cinco portas estão disponíveis, nomeadas como A, B, C, D e 
E, sendo que alguns pinos dessas portas podem ter outras funções. 
De modo geral, quando o pino é utilizado para outra função, este não poderá 
ser utilizado com pino de I/O. 
Cada porta tem 3 registradores para sua correta operação: 
- Registrador TRISx, que é o responsável pelo direcionamento (entrada ou 
saída) das portas, onde se um bit estiver em 0, o pino referente será um pino 
de saída e se o bit estiver em 1, o pino referente será um pino de entrada; 
- Registrador PORTx, responsável por escrever ou ler o nível dos pinos 
associados à porta; 
- Registrador LATx, responsável por armazenar o valor do último comando 
de escrita. 
 
Obs.: x representa uma das portas disponíveis para o microcontrolador. 
 
5.2.1 - Registrador TRISx 
O registrador TRISx, como já vimos, é o responsável pelo direcionamento no 
sentido do fluxo de dados de uma determinada porta. Esse registrador possui 
8 bits, sendo cada bit correspondente a um determinado pino de I/O. 
Podemos identificar os registradores de acesso como TRISA, TRISB, TRISC, 
TRISD e TRISE. 
O compilador CCS, por padrão, faz automaticamente o direcionamento dos 
pinos dos registradores TRISx através das funções de saída ou de entrada, 
porém o programador pode desabilitar esta forma de configuração e fazer, via 
programação, o direcionamento dos pinos.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando