You are on page 1of 2

Exemplo:

Comunicação serial → Transmissor:


//-------------------CONFIGURAÇÕES INICIAIS---------------------//
ƒ Transmissor // Nos Fuses...
#use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
//-------------------------------------------------------------//
→ Configuração: Unsigned int8 valor;
void main()
//Taxa de transmissão: 1200 bps {
//Pinos: C6 transmite e C7 recebe //Setups...
#use rs232(baud=1200,parity=N,xmit=PIN_c6,rcv=PIN_C7,bits=8)
while(1)
{
→ Utilização: if(input(pin_b0)==0)
{
printf("%c",variavel); valor = 10;
printf("%c",valor);
while(input(pin_b0)==0);
}
ƒ Receptor }
}
→ Configuração:
→ Receptor:
//Taxa de transmissão: 1200 bps //-------------------CONFIGURAÇÕES INICIAIS---------------------//
//Pinos: C6 transmite e C7 recebe // Nos Fuses...
#use rs232(baud=1200,parity=N,xmit=PIN_c6,rcv=PIN_C7,bits=8) #use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
//-------------------------------------------------------------//

→ Utilização: unsigned int8 recebe;

//É necessário utilizar uma interrupção, nesse caso, interrupção pela porta serial //-------------------INTERRUPÇÃO SERIAL-----------------------//
//Habilitações #int_RDA
enable_interrupts(INT_RDA); void RDA_isr(void)//funcao de interrupcao serial
enable_interrupts(GLOBAL); {
recebe = getc();
//Interrupção }
#int_RDA //-------------------------------------------------------------//
void RDA_isr(void)//funcao de interrupcao serial void main()
{ {
variavel = getc();//o comando getc() (get = pegar) captura o que foi enviado
} //-------------------CONFIGURAÇÕES DO PIC----------------------//
//Nos Setups...
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
//-------------------------------------------------------------//
while(1)
{
if(recebe == '1')
{
lcd_comando(linha1); Comunicação I2C
printf(lcd_escreve,"1");
}

if(recebe == '0')

D1(K)
R3 R4 R5
10k 10k 10k

{ RL1
12V

lcd_comando(linha1); U1 D1
1N4007

printf(lcd_escreve,"0");
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36

} 2
3
4
RA0/AN0
RA1/AN1
RB3/PGM
RB4
RB5
37
38
39
R1
1k
R2
1k
R6 Q1
BC337AP

}
RA2/AN2/VREF- RB6/PGC 10k
5 40
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 15

}
RA5/AN4/SS RC0/T1OSO/T1CKI
16
8
RC1/T1OSI/CCP2
17 U2
RE0/AN5/RD RC2/CCP1
9 18 14 4
RE1/AN6/WR RC3/SCK/SCL SCL P0
10 23 15 5
RE2/AN7/CS RC4/SDI/SDA SDA P1
24 6
RC5/SDO P2
25 13 7
RC6/TX/CK INT P3
26 9
RC7/RX/DT P4
1 10
A0 P5 D2
RD0/PSP0
19 C1 C2 2
A1 P6
11 R7
20 3 12

Agora desenvolva o exemplo. RD1/PSP1 10pF 10pF A2 P7


21 330
RD2/PSP2
22 PCF8574 LED-RED
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30

Exercícios:
RD7/PSP7
PIC16F877

1) Fazer um contador em que um PIC possua um botão para o incremento e, outro Esquemático para simulação no Proteus (comunicação I2C com CI que aumenta o
PIC receba o valor do contador e exiba o valor no LCD. número de portas de saídas)
2) Adicionar um botão de Reset no PIC que exibe o valor do contador. Pesquisar o CI PCF8574 e desenvolver o exemplo abaixo:

// Nos Fuses...
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)
void main()
R1
R2 {
10k
10k
//Setups...
LCD1
LM016L
LCD2
LM016L
while(1)
{
13
U1
OSC1/CLKIN RB0/INT
33 13
U2
OSC1/CLKIN RB0/INT
33 if(input(pin_a0)==0)
VDD

VDD
VSS

VEE

VSS

VEE

14 34 14 34
RW

RW
RS

RS
D0
D1
D2
D3
D4
D5
D6
D7

D0
D1
D2
D3
D4
D5
D6
D7
{
OSC2/CLKOUT RB1 OSC2/CLKOUT RB1
E

1 35 1 35
MCLR/Vpp/THV RB2 MCLR/Vpp/THV RB2
36 36
RB3/PGM RB3/PGM
1
2
3

4
5
6

7
8
9
10
11
12
13
14

1
2
3

4
5
6

7
8
9
10
11
12
13
14

2 37 2 37
RA0/AN0 RB4 RA0/AN0 RB4

i2c_start();
3 38 3 38
RA1/AN1 RB5 RA1/AN1 RB5
4 39 4 39
RA2/AN2/VREF- RB6/PGC RA2/AN2/VREF- RB6/PGC
5 40 5 40
RA3/AN3/VREF+ RB7/PGD RA3/AN3/VREF+ RB7/PGD
6 6

i2c_write(0x40);
RA4/T0CKI RA4/T0CKI
7 15 7 15
RA5/AN4/SS RC0/T1OSO/T1CKI RA5/AN4/SS RC0/T1OSO/T1CKI
16 16
RC1/T1OSI/CCP2 RC1/T1OSI/CCP2
8 17 8 17
RE0/AN5/RD RC2/CCP1 RE0/AN5/RD RC2/CCP1

i2c_write(0b11111110);
9 18 9 18
RE1/AN6/WR RC3/SCK/SCL RE1/AN6/WR RC3/SCK/SCL
10 23 10 23
RE2/AN7/CS RC4/SDI/SDA RE2/AN7/CS RC4/SDI/SDA
24 24
RC5/SDO RC5/SDO
25 25

i2c_stop();
RC6/TX/CK RC6/TX/CK
26 26
RC7/RX/DT RC7/RX/DT
19 19
RD0/PSP0 RD0/PSP0

delay_ms(300);
20 20
RD1/PSP1 RD1/PSP1
21 21
RD2/PSP2 RD2/PSP2
22 22
RD3/PSP3 RD3/PSP3
27 27

}
RD4/PSP4 RD4/PSP4
28 28
RD5/PSP5 RD5/PSP5
29 29
RD6/PSP6 RD6/PSP6
30 30
RD7/PSP7 RD7/PSP7
PIC16F877 PIC16F877
if(input(pin_a1)==0)
{
i2c_start();
i2c_write(0x40);
i2c_write(0b11111111);
i2c_stop();
Esquemático para simulação no Proteus (comunicação serial). delay_ms(300);
}
if(input(pin_a2)==0)
{
i2c_start();
i2c_write(0x40);
i2c_write(0b01111111);
i2c_stop();
delay_ms(300);}}}

You might also like