Professional Documents
Culture Documents
//É 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
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);}}}