7/25/2019 Apresentao Curso pic
1/165
Linguagem CAplicaes baseadas no KIT PIC Bsico 28P
7/25/2019 Apresentao Curso pic
2/165
Estrutura bsica de um microcontrolador; O PIC16F883; MPLAB IDE; Linguagem C;
Manipulao de I/O; Timers; Interrupes; Conversor A/D;
Comunicao Serial; Manipulao de memria EEPROM; Projeto.
7/25/2019 Apresentao Curso pic
3/165
Sistema Decimal Composto por algarismos de 0 a 9 (base 10)
Para representar uma quantidade por exemplo:
764d = 7*102 + 6*101+ 4*100
= 700 + 60+ 4= 764
7/25/2019 Apresentao Curso pic
4/165
Sistema Binrio Composto pelo algarismos 0 e 1(base 2).
Para representar uma quantidade utiliza estes dois
algarismos, por exemplo:
10101011b = 1*27 + 0*26 +1*25 +0*24 +1*23+0*22 + 1*21 + 1*20
= 128 + 0 + 32 + 0 +8 + 0 + 2 + 1
= 171(base 10)
7/25/2019 Apresentao Curso pic
5/165
Sistema Hexadecimal Composto por 16 algarismos (base 16) de 0 a F, ou
seja: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.
Para representar uma quantidade em hexadecimal:
5DCh = 5*162 + D*161 +C*160 0
= 5*256+ 13*16 +12
= 1500 (base 10)
7/25/2019 Apresentao Curso pic
6/165
7/25/2019 Apresentao Curso pic
7/165
Bit: 0 ou 1; Nibble: 4bits; Byte : 8 bits;
Word: 16 bits.
7/25/2019 Apresentao Curso pic
8/165
AND ou E:
7/25/2019 Apresentao Curso pic
9/165
OR ou OU:
7/25/2019 Apresentao Curso pic
10/165
NOT ou No:
7/25/2019 Apresentao Curso pic
11/165
XOR ou OU-EXCLUSIVO:
7/25/2019 Apresentao Curso pic
12/165
Basicamente, um microcontrolador constitudode quatro partes:
Memria de programa;
Memria de dados;
Unidade lgica Aritmtica (ULA);
Portas de I/O (Entrada e Sada);
7/25/2019 Apresentao Curso pic
13/165
7/25/2019 Apresentao Curso pic
14/165
Von-Neumann
7/25/2019 Apresentao Curso pic
15/165
Harvard
7/25/2019 Apresentao Curso pic
16/165
7/25/2019 Apresentao Curso pic
17/165
O PIC16F883 apresenta a seguintes caractersticas:
28 pinos sendo 24 para I/O; Freqncia mxima de operao: 20 MHz; Memria de programa: 4 Kwords;
Memria de dados: 256 bytes; Memria EEPROM: 256 bytes; Numero de Interrupes: 15; 3 Timers (2 X 8 bits, 1 X 16 bits); Comunicao serial: I2C, SPI, EUSART; 11 canais analgicos de 10 bits; 2 comparadores analgicos; 2 mdulos CCP(capture, compare e PWM); 35 instrues.
7/25/2019 Apresentao Curso pic
18/165
7/25/2019 Apresentao Curso pic
19/165
7/25/2019 Apresentao Curso pic
20/165
7/25/2019 Apresentao Curso pic
21/165
7/25/2019 Apresentao Curso pic
22/165
Freqncia do oscilador principal dividida por 4;
Exemplo:fosc
= 4MHzciclo de mquina = fosc /4 = 4Mhz / 4 = 1Mhztciclo = 1/1Mhz = 1s
7/25/2019 Apresentao Curso pic
23/165
7/25/2019 Apresentao Curso pic
24/165
Os microcontroladores PIC possuem alguns modos deosciladores disponveis para operao.
Tipos de osciladores:RC - RC externo;
INTOSC - RC interno;EC - fonte clock externa;HS - cristal/ressonador de alta frequncia (acima de 4MHZ);XT - cristal/ressonador de mdia frequncia;LP - cristal/ressonador de baixa frequncia(32 KHz)
7/25/2019 Apresentao Curso pic
25/165
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2
12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
CEXT
REXT
7/25/2019 Apresentao Curso pic
26/165
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B
23
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
XTAL
C1
C2
7/25/2019 Apresentao Curso pic
27/165
So divididas em 3 tipos:
ROM > Memria de Programa
RAM -> Memria de Dados
EEPROM -> Memria de Armazenamento
7/25/2019 Apresentao Curso pic
28/165
Memria do tipo FLASH; Dividida em duas pginas; Vetor de reset;
Vetor de interrupo;
7/25/2019 Apresentao Curso pic
29/165
7/25/2019 Apresentao Curso pic
30/165
Memria do tipo RAM;
Classificada em registradores de uso geral e de usoespecfico;
Dividida em bancos;
7/25/2019 Apresentao Curso pic
31/165
7/25/2019 Apresentao Curso pic
32/165
7/25/2019 Apresentao Curso pic
33/165
Memria no voltil;
Usada para armazenar valores que no podem serperdidos;
Escrita e apagada eletricamente;
256 bytes;
7/25/2019 Apresentao Curso pic
34/165
Reset externo; Quando aplicado nvel baixo ocorre o reinicio do
programa; Pino 1 RE3/MCLR
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
R110K
7/25/2019 Apresentao Curso pic
35/165
Co de guarda;
Contador de 8 bits;
Utilizado para verificar se o programa travou;
Reinicia(RESET) o microcontrolador quando ocorreoverflow da contagem;
Seu valor deve ser reiniciado durando o fluxo doprograma;
7/25/2019 Apresentao Curso pic
36/165
Detecta baixa tenso de alimentao;
Tenses configurveis : 4 V ou 2.1 V;
Caso tenso caia abaixo do valor configurado,ocorrer um reset no software;
7/25/2019 Apresentao Curso pic
37/165
Circuito interno que retarda o inicio da execuodo programa;
Garante estabilizao da tenso de alimentao;
Tempo: cerca 64ms aps o pino MCLR sercolocado em nvel alto;
7/25/2019 Apresentao Curso pic
38/165
7/25/2019 Apresentao Curso pic
39/165
7/25/2019 Apresentao Curso pic
40/165
7/25/2019 Apresentao Curso pic
41/165
7/25/2019 Apresentao Curso pic
42/165
7/25/2019 Apresentao Curso pic
43/165
7/25/2019 Apresentao Curso pic
44/165
7/25/2019 Apresentao Curso pic
45/165
7/25/2019 Apresentao Curso pic
46/165
7/25/2019 Apresentao Curso pic
47/165
Criar projeto, inserir cdigo fonte, compilar egravar no KIT.
7/25/2019 Apresentao Curso pic
48/165
7/25/2019 Apresentao Curso pic
49/165
Caractersticas:
Estruturada;
Alto nvel (comparada ao Assembly);
Facilidade de acesso ao hardware;
Portabilidade;
Curva de aprendizagem reduzida;
Reutilizao de cdigo;
7/25/2019 Apresentao Curso pic
50/165
So Utilizados para: Documentao do software; Excluso de linhas durante a compilao.
Comentrios de linha simples:
//este um comentrio de linha simples
Comentrios de Mltiplas linhas:
/*
este umcomentrio demltiplas linhas
*/
7/25/2019 Apresentao Curso pic
51/165
Nomes dados a variveis, funes ou outros elementos; So compostos por caracteres alfanumricos ou
numricos; Somente podem ser iniciados por uma letra ou _,
nunca por nmero; Podem possuir at 32 caracteres;
Exemplo: temperatura;
_tempo1;
velocidade_angular;
7/25/2019 Apresentao Curso pic
52/165
No podem ser utilizadas como identificadores
auto break case char const
continue default do double else
enum extern float for goto
if int long register return
struct switch typedef union unsigned
void volatile while
7/25/2019 Apresentao Curso pic
53/165
Tipo Tamanho em bits Intervalo
char 8 0 a 255
int 8 0 a 255
float 32 -1.5 x 1045
to 3.4 x 1038
void 0 Nenhum valor
7/25/2019 Apresentao Curso pic
54/165
signed signed int variavel_x;
unsigned
unsigned int variavel_x
short short int flag_x;
long long int variavel_x;
7/25/2019 Apresentao Curso pic
55/165
int1: especifica valores de 1 bit (equivale ao short int);
boolean: especifica valores de 1 bit (equivale ao short int e int1);
int8: especifica valores de 8 bits (equivale ao tipo int padro);
byte: especifica valores de 8 bits ( equivale ao int e ao int8);
int16: especifica valores de 16 bits ( equivale ao long int);
int32: especifica valores de 32 bits.
7/25/2019 Apresentao Curso pic
56/165
Bases:
Binria; Octal ; Decimal; Hexadecimal:
Exemplo:
Representao do numero 50 nas diferentes bases: 50 - Decimal 0x32- Hexadecimal 0b00110010 - Binrio 062- Octal
7/25/2019 Apresentao Curso pic
57/165
Declarao: const int valor1 = 100;
#define valor1 100
So declaradas no inicio do programa, fora dequalquer funo.
7/25/2019 Apresentao Curso pic
58/165
Declarao:
tipo nome_da_varivel;
tipo nome_da_varivel = valor_da_varivel;
Exemplo: declarar a varivel chamada temperatura, sendo de 8 bits nosinalizada:
unsigned int temperatura;
Ou apenas:
int temperatura;
Iniciando variveis do mesmo tipo em linha nica:
int temp1, temp2, temp3;ouint temp1=10, temp2 = 20, temp3 = 30;
7/25/2019 Apresentao Curso pic
59/165
So declaradas dentro do corpo de funes ou blocos de cdigo; Disponveis apenas dentro do bloco ou funo onde foi declarada;
Exemplo:
void main(){
int valor; //declara a varivel local da funo main
valor =0; //inicia com 0
while(true) //loop infinito
{
printf(%d, valor++); //imprime o valor incrementado
//da varivel na serial
}
}
7/25/2019 Apresentao Curso pic
60/165
Declaradas fora do corpo de qualquer funo; Todas as funes podem alterar ou usar o seu valor;
Exemplo:
int valor; //varivel global
void verifica_valor(void) //funo para verificar o valor do ad lido{
if(valor < 127) // se valor for menor que 127
RB0 = 1; //liga RB0
}
void main() //funo principal
{valor = read_adc(); //le valor do ad
verifica_valor(); //chama funo para verificar valor
}
7/25/2019 Apresentao Curso pic
61/165
Linguagem C possui grande quantidade deoperadores;
Operadores de alto e baixo nvel;
Tipos: Atribuio; Aritmticos;
Relacionais; Lgicos; Lgicos bit a bit;
7/25/2019 Apresentao Curso pic
62/165
Representado pelo caracter: =; Utilizado para atribuir um determinado valor a uma
varivel.
Exemplo: x = 10;
y = x+3;
7/25/2019 Apresentao Curso pic
63/165
Realizam operaes matemticas;OPERADOR AO
+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Resto de diviso inteira
++ Incremento
-- Decremento
7/25/2019 Apresentao Curso pic
64/165
operador % :x = 5%2;
Operador ++;x = 1;x++;
Operador --;x = 10;
x--;
7/25/2019 Apresentao Curso pic
65/165
Usados em testes condicionais para determinarrelaes entre dados.
OPERADOR AO
> Maior que
>= Maior ou igual que
< Menor que
7/25/2019 Apresentao Curso pic
66/165
So usados para realizar testes booleanos entreelementos em um teste condicional
OPERADOR AO
&& AND (E)
|| OR (OU)
! NOT (NO)
7/25/2019 Apresentao Curso pic
67/165
So utilizados para operaes lgicas entreelementos ou variveis.
OPERADOR AO
& AND(E)| OR(OU)
^ XOR (OU EXCLUSIVO)
~ NOT (NO)
>> Deslocamento direita
7/25/2019 Apresentao Curso pic
68/165
Abreviao entre a operao e atribuioForma expandida Forma reduzida
x = x + y x += y
x = x - y x -= y
x = x * y x *= y
x = x / y x /= y
x = x % y x %= y
x = x & y x &= y
x = x | y x |= yx = x ^ y x ^= y
x = x >= y
7/25/2019 Apresentao Curso pic
69/165
So divididas em dois grupos:
Testes condicionais;
Estruturas de repeties;
7/25/2019 Apresentao Curso pic
70/165
7/25/2019 Apresentao Curso pic
71/165
Utilizado quando h a necessidade de tomar umaao caso a condio for avaliada como falsa.
if (condio)comandoA;
else
comandoB;
Exemplo:
if (temperatura < setpoint)
rele = 1;
else
rele = 0;
7/25/2019 Apresentao Curso pic
72/165
Para executar um bloco de cdigos dentro da declarao if- else:if(condio){comandoA1; //bloco de cdigo para a condio verdadeiracomandoaA2;
...comandoAn;}else{comandoB1; //bloco de cdigo para a condio falsacomandoB2;...comandoBn;}
7/25/2019 Apresentao Curso pic
73/165
utilizado para a realizao de comparaes sucessivas de uma formaelegante, clara e eficiente.
switch(varivel){case constante1:
comandoA;
. . .break;case constante2:
comandoB;. . .
break;
. . .. . .default:comandoX;
}
7/25/2019 Apresentao Curso pic
74/165
Exemplo
switch(caracter_recebido)
{
case 1:
LED1 = 1;break;
case 2:
LED2 = 1;
break;
default:
LED1 = 0;
LED2 = 0;
}
7/25/2019 Apresentao Curso pic
75/165
Estrutura de repetio mais utilizada, sendo muitopoderosa na Linguagem C
Forma geral:for( inicializao;condio;incremento) comando;
Ou
for( inicializao;condio;incremento){
Comando1;
Comando2;. . .ComandoN;
}
7/25/2019 Apresentao Curso pic
76/165
Exemplo
for(x = 0;x
7/25/2019 Apresentao Curso pic
77/165
Repete um comando ou um conjunto de instruesenquanto uma condio for avaliada comoverdadeira.
Forma geral:while(condio){
comando1;
comando2;
...
comandoN;
}
7/25/2019 Apresentao Curso pic
78/165
x = 0;
while(x
7/25/2019 Apresentao Curso pic
79/165
Tem o funcionamento ligeiramente diferente dowhile.
Forma geral:do
{
comandoA;
comandoB;
...comandoN;
} while (condio);
7/25/2019 Apresentao Curso pic
80/165
Exemplo
do
{
led = 1;
delay_ms(500);
led = 0;
delay_ms(500);
x++;
}while(x
7/25/2019 Apresentao Curso pic
81/165
Funes so grupos de instrues que podem serutilizados uma ou mais vezes sem a necessidade derepetir a digitao do cdigo;
Em todo programa C existe ao menos uma funo funo main();
7/25/2019 Apresentao Curso pic
82/165
Caractersticas de funes
programa fica mais legvel e melhor estruturado;
Reutilizao de cdigo;
Cada funo tem um nome nico;
Os nomes de funes seguem as mesmas regras de nomenclatura
para variveis;
Podem ter qualquer nome exceto main.
7/25/2019 Apresentao Curso pic
83/165
O formato geral de uma funo :
Tipo_da_funo nome_da_funo (parmetros)
{
//bloco de comandos
Comando1;
Comando2;
...
return;
}
7/25/2019 Apresentao Curso pic
84/165
Tipo da funo -> especifica o tipo de dado deretorno;
Nome da funo -> identifica a funo e o nome
utilizado para a chamada da mesma.
Parmetros - > so argumentos onde sopassados para que a funo utilize durante suaexecuo;
7/25/2019 Apresentao Curso pic
85/165
Exemplo
int calcula_media(int A, int B){int media;media = (A + B)/2;return media;
}
void main (void){int nota_final;int nota1, nota2;
nota1 = 5;nota2 = 9;nota_final = calcula_media(nota1, nota2);
}
7/25/2019 Apresentao Curso pic
86/165
O compilador CCS possui varias funesprontas que auxiliam em:
Manipulao de I/O; Configurao de registradores; Leitura do conversor A/D; Configurao e uso dos timers; Delays;
PWM; Matemticas; .....
7/25/2019 Apresentao Curso pic
87/165
output_low()
output_low (PIN_B1); // coloca o pino RB1 em 0
output_high()
Output_high (PIN_A0); // coloca o pino RA0 em 1
output_bit()
Output_bit (pin_A0, 0);// coloca o pino RA0 em 0
output_x()
output_b (0xFF); // escreve o valor 0xFF no PORTB
input()
x = input(PIN_A0); // l o estado do pino RA0
input_x()
x = input_b(); // l o estado do PORTB
7/25/2019 Apresentao Curso pic
88/165
delay_cycles()
delay_cycles (1); // aguarda 1 us.
delay_us()
Delay_us (1); // aguarda 1 us.
delay_ms()
delay_ms (1); // aguarda 1 ms.
7/25/2019 Apresentao Curso pic
89/165
setup_adc_ports()
setup_adc_ports (AN0);//define RA0 como entrada analgica
set_adc_channel () set_adc_channel(2); //seleciona canal 2 para converso
read_adc ()
valor = read_adc(); //le o resultado da converso
adc_done ()
while (!adc_done()); //fica em loop at o fim da converso
7/25/2019 Apresentao Curso pic
90/165
asm endasm
Permite a incluso de cdigo assembly.
Exemplo:
#asmbsf PORTB,3 // estas duas instrues geram um
pulso
nop
bcf PORTB,3 // no pino RB3.
#endasm
7/25/2019 Apresentao Curso pic
91/165
case
Ativa a distino entre caracteres maisculos/minsculos.
define
Utilizado para substituir valores por identificadores ou atmesmo macro comandos.Exemplo:#define BT1 RB0
#define liga_led RC0 = 1
7/25/2019 Apresentao Curso pic
92/165
#include Insere arquivos externos
Exemplo: #include #include "PIC16F883_SFR.h
ROM Armazena valores na EEPROM durante a gravao
Exemplo: #rom 0x2100 = { 0x00, 0x25};
7/25/2019 Apresentao Curso pic
93/165
fuses
Configura os fusveis de funcionamento
Exemplo: #fuses XT,NOMCLR,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
Alguns Fusveis disponveis para o PIC16F883: 1.00 XT Crystal osc
7/25/2019 Apresentao Curso pic
94/165
ifdef endif
Permite compilao condicional
Exemplo:
#define OK.
.
#ifdef OK
delay_ms(200);
#endif
7/25/2019 Apresentao Curso pic
95/165
INT_XXXX
Indica para o compilador que o trecho a seguir refere-se auma rotina de interrupo
Algumas das interrupes reconhecidas so: INT_EXT (RB0/Int) INT_TIMER0 (Timer 0) INT_RB (RB4~7) INT_EEPROM (EEPROM interna) INT_AD (Conversor A/D interno) INT_DEFAULT (Caso entre na rotina de interrupo por engano)
7/25/2019 Apresentao Curso pic
96/165
use delay
Informa o clock do sistema Exemplo:
#use delay (clock=4000000)
byte
Permite o acesso a posies de RAM (Registros e memriageral) pela indicao de seu endereo real
Exemplo: #byte PORTB = 0x06
7/25/2019 Apresentao Curso pic
97/165
#bit Usado para definir um identificador para um bit de uma
varivel j definida. Exemplo:
int flags;#bit ST_BT1 = flag.0
7/25/2019 Apresentao Curso pic
98/165
7/25/2019 Apresentao Curso pic
99/165
7/25/2019 Apresentao Curso pic
100/165
7/25/2019 Apresentao Curso pic
101/165
Permitem a comunicao com o mundo exterior;
Organizados por PORTs;
Podem ser definidos como entrada ou sadasconforme a necessidade;
Dois registradores para manipulao: TRISX ePORTX;
7/25/2019 Apresentao Curso pic
102/165
Configurando direo do PINO:
Registrador TRISX0 = pino configurado como sada;
1 = pino configurado como entrada;
Exemplo:TRISA = 0b00000001; //define o RA0 como entrada digital
7/25/2019 Apresentao Curso pic
103/165
Lendo o estado do pino:if(RA0 == 0) //se pino RA0 estiver com valor zerocomandoX; //executa comando x
Lendo estado do PORT inteiro:int valor;
valor = PORTA;
If(PORTB == 128) //se Pino RB7 igual a 1
comandoY; //executa comando Y
7/25/2019 Apresentao Curso pic
104/165
Hardware:
R110K
+ 5V
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
7/25/2019 Apresentao Curso pic
105/165
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
R1
330R
D1LED-RED
Esquema 1
7/25/2019 Apresentao Curso pic
106/165
Esquema 2
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
R1330R
D1LED-RED
+5V
7/25/2019 Apresentao Curso pic
107/165
Execute o exemplo 1 e teste no KIT. Verifiqueseu funcionamento.
Simular no MPLAB.
7/25/2019 Apresentao Curso pic
108/165
Desenvolva uma aplicao onde faa a leitura dosquatros botes e ligue os LEDS em cdigo binriopara indicar qual tecla foi pressionada.
7/25/2019 Apresentao Curso pic
109/165
Quando uma tecla pressionada gera umcerto rudo:
Esse rudo pode causar interferncia nosoftware.
7/25/2019 Apresentao Curso pic
110/165
O exemplo 2 exibe como ler uma teclausando tcnica de Debounce.
7/25/2019 Apresentao Curso pic
111/165
Faa a leitura das 4 teclas usando a tcnicadeDEBOUNCE
de teclas. Os botes deveroter as seguintes funes:
BT1 incrementa valor nos leds;
BT2 decrementa valor nos leds; BT3 zera valor dos leds; BT4 inverte estado do RELE;
7/25/2019 Apresentao Curso pic
112/165
7/25/2019 Apresentao Curso pic
113/165
7/25/2019 Apresentao Curso pic
114/165
7/25/2019 Apresentao Curso pic
115/165
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9 RA6/OSC2/CLKOUT
10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
R1
330R
R2
330R
R3
330R
R4
330R
R5
330R
R6
330R
R7
330R
7/25/2019 Apresentao Curso pic
116/165
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT21
RB1/AN10/P1C/C12IN3-22
RB2/AN8/P1B23
RA7/OSC1/CLKIN9 RA6/OSC2/CLKOUT
10
RC0/T1OSO/T1CKI 11
RC1/T1OSI/CCP2 12
RB7/ICSPDAT 28
RB6/ICSPCLK 27
RB5/AN13/T1G 26
RB4/AN11/P1D 25
RC7/RX/DT 18
RC6/TX/CK 17
RC5/SDO 16
RC4/SDI/SDA 15
RC3/SCK/SCL 14
RC2/CCP1/P1A 13
RA3/AN3/VREF+/C1IN+5
RB3/AN9/PGM/C12IN2-24
RE3/MCLR/VPP1
U1
PIC16F883
R1
330R
R2
330R
R3
330R
R4
330R
R5
330R
R6
330R
R7
330R
+5V
7/25/2019 Apresentao Curso pic
117/165
Tabela para display ctodo comum
7/25/2019 Apresentao Curso pic
118/165
O Exemplo 3 mostra como acionar displays de 7segmentos.
7/25/2019 Apresentao Curso pic
119/165
Desenvolva uma aplicao para que o valor nodisplay seja incrementado ao apertar umadeterminada tecla e decrementado quandopressionado outra e uma outra tecla para reiniciar
o valor da contagem do display. O valor deve ir de0 a 9 .
7/25/2019 Apresentao Curso pic
120/165
7/25/2019 Apresentao Curso pic
121/165
Perifricos internos ao microcontrolador
So utilizados para: Contagem de tempos;
Contagem de eventos;
O PIC16F883 possui 3 timers: Timer0 - > 8 bits Timer1 - > 16 bits Timer2 -> 8 bits
7/25/2019 Apresentao Curso pic
122/165
Temporizador/ contador de 8 bits; Diagrama de Blocos:
7/25/2019 Apresentao Curso pic
123/165
7/25/2019 Apresentao Curso pic
124/165
Registradores associados:
7/25/2019 Apresentao Curso pic
125/165
Temporizador / Contador de 16 bits
7/25/2019 Apresentao Curso pic
126/165
7/25/2019 Apresentao Curso pic
127/165
Registradores associados:
7/25/2019 Apresentao Curso pic
128/165
Temporizador de 8 bits
7/25/2019 Apresentao Curso pic
129/165
7/25/2019 Apresentao Curso pic
130/165
Registradores associados:
7/25/2019 Apresentao Curso pic
131/165
O exemplo 4 exibe como usar o TIMER1 para criaruma base de tempo para um temporizador.
7/25/2019 Apresentao Curso pic
132/165
Utilize o TIMER0 para criar uma base de tempopara piscar um LED ou mais LEDs, faa o mesmoutilizando o TIMER2
obs.: Base de tempo de 1 segundo
7/25/2019 Apresentao Curso pic
133/165
7/25/2019 Apresentao Curso pic
134/165
Eventos assncronos; Desvia o programa automaticamente para o vetor
de interrupo (0x04);
So classificadas em dois grupos:
Convencionais ; Perifricos;
7/25/2019 Apresentao Curso pic
135/165
7/25/2019 Apresentao Curso pic
136/165
7/25/2019 Apresentao Curso pic
137/165
O exemplo 5A exibe a forma de se tratar interrupo com base nofluxograma de tratamento e o exemplo 5B exibe uma formautilizando os recursos do compilador para tratamento dainterrupo.
Os exemplos exibiro como usar a interrupo para a multiplexaode display de sete segmentos e os LEDS que esto ligados no mesmobarramento de dados usando a tcnica de varredura, ou seja,acenderemos um display por vez: primeiro o display 1, depois odisplay 2 e depois os LEDS e assim repetidamente.
Para que no percebermos o liga e desliga dos displaystrabalharemos com uma freqncia de varredura deaproximadamente 80 Hz, pois acima de 50 Hz temos a impresso detodos os displays ligados ao mesmo tempo.
7/25/2019 Apresentao Curso pic
138/165
Com base nos exemplos anteriores crie umcontador de segundos usando o TIMER0 para avarredura dos displays e o TIMER1 para a base detempo de um segundo. Utilize interrupes para
esse processo. O contador deve ir de 0 a 59 equando chegar em 60 deve-se reiniciar os displayse incrementar os LEDS.
7/25/2019 Apresentao Curso pic
139/165
7/25/2019 Apresentao Curso pic
140/165
Converte um sinal analgico em digital;
Resoluo dada por:
Vref : tenso de referncia do conversorn : numero de bits do conversor
7/25/2019 Apresentao Curso pic
141/165
Caractersticas
Conversor de 10 bits; 11 canais disponveis; Referncia interna; Referncia externa; Conversor por aproximaes sucessivas; Freqncia de converso ajustvel por software; Interrupo associada ao termino da converso.
7/25/2019 Apresentao Curso pic
142/165
7/25/2019 Apresentao Curso pic
143/165
Primeiramente configura a direo do pino comoentrada no registrador TRISX correspondente.
Definir o pino como entrada analgica
Registradores: ANSEL e ANSELH
Exemplo: TRISA = 0b00000001; //pino RA0 como entrada
ANSEL = 0b00000001; //pino RA0 funcionando como AN0
7/25/2019 Apresentao Curso pic
144/165
7/25/2019 Apresentao Curso pic
145/165
7/25/2019 Apresentao Curso pic
146/165
Clock
7/25/2019 Apresentao Curso pic
147/165
Resultado da converso
7/25/2019 Apresentao Curso pic
148/165
7/25/2019 Apresentao Curso pic
149/165
7/25/2019 Apresentao Curso pic
150/165
O exemplo 6 exibe como configurar o conversorA/D e como obter o resultado da converso. OResultado da converso exibido nos LEDS e ovalor de entrada analgica pode ser variado
utilizando o POT1.
7/25/2019 Apresentao Curso pic
151/165
Simule um sensor de temperatura com o POT2obedecendo a seguinte relao: 0 v 0 C 5 V 99C
Exibir o valor da temperatura nos displays.
7/25/2019 Apresentao Curso pic
152/165
7/25/2019 Apresentao Curso pic
153/165
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
Onde configurado o baud rate da comunicao e ospinos de transmisso e recepo de dados.
Neste caso temos a seguinte configurao: Baude rate = 9600 bps
Pino de transmisso: RC6
Pino de recepo: RC7
7/25/2019 Apresentao Curso pic
154/165
printf
Envia uma string(seqncia de caracteres) pela serial. Exemplo:
printf(hello world); //imprime na serial a string: hello world
putc
Envia apenas um caractere na serial.Exemplo:putc(f); //imprime na serial o caracter f
7/25/2019 Apresentao Curso pic
155/165
gets
L uma string da serial Exemplo:
char buffer[10]; //declara o vetor buffer para armazenamento da string
gets(buffer); //aguarda a chegada de string na serial
Getc
L um caracter da serial Exemplo:]
char c; //declara a varivel para armazenamento do caractere
c = getc(); // atribui a c quando caracter disponvel na serial
7/25/2019 Apresentao Curso pic
156/165
Kbhit
Retorna verdadeiro (1) se chegar um caractere pelaserial e falso(0) enquanto no houver caractere.
Exemplo:if(kbhit()) //se caracter na serial
{
c = getc(); //atribui o valor para c
}
7/25/2019 Apresentao Curso pic
157/165
O exemplo 7 exibe uma comunicao serial entreum computador e o microcontrolador. Nesteexemplo ser enviado pela serial o valor de tensosempre que houver a chegada do caractere
pela
serial.
7/25/2019 Apresentao Curso pic
158/165
Desenvolva um sistema onde seja possvel ligar oudesligar cada LED independentemente atravs decomandos enviados pelo terminal do computador.
7/25/2019 Apresentao Curso pic
159/165
7/25/2019 Apresentao Curso pic
160/165
write_eeprom (endereo, valor);
Exemplo:
#define END_VOLUME 10 // endereo na EEPROM
volume++; //incrementa o valor
write_eeprom(END_VOLUME,volume);//salva na EEPROM endereo 10
7/25/2019 Apresentao Curso pic
161/165
read_eeprom (endereo
Exemplo:
#define END_VOLUME 10 //endereo
volume = read_eeprom (END_VOLUME); //l o valor presente no
//Endereo 10 da EEPROM
7/25/2019 Apresentao Curso pic
162/165
O exemplo 8 mostra como armazenar e ler valoresna memria EEPROM. Ser armazenado o valor nodisplay e quando reiniciar o microcontrolador estevalor ser carregado no display novamente.
7/25/2019 Apresentao Curso pic
163/165
Desenvolva uma aplicao onde seja armazenadona EEPROM o valor de uma Varivel de 16 bits.
7/25/2019 Apresentao Curso pic
164/165
Desenvolver um controlador de temperatura dotipo ON/OFF, onde ser ajustado um valor paraser mantido no display e o sistema controlar asada para manter esta temperatura.
Recursos utilizados: Conversor A/D para leitura do sensor de temperatura; Interrupo; Varredura de displays;
Leitura de teclas; Acionamento de rele.
7/25/2019 Apresentao Curso pic
165/165
Fbio B. de Souza www.fbseletronica.wordpress.com [email protected]
mailto:[email protected]:[email protected]:[email protected]