WWW.CLOCKSIZE.BLOGSPOT.COM
CODIGOS FONTE PARA MICROCONTROLADOR PIC16F628A, E XEMPLOS PRATICOS:
10 EXEMPLOS FUNCIONAIS EM LINGUAGEM C
1- Acendendo um led: 2 - Acionando led por chave: 3 - Pisca-pisca: 4 - Corredor de leds: 5 - Botão de trava: 6 - Acionando led por botão: 7 - Vai e volta de leds: 8 - Contador de 0 á 9 com display: 9 - Contador de 0 á 9 com display ll: 10 - Pisca-pisca acionado por botão:
WWW.CLOCKSIZE.BLOGSPOT.COM
1- Acendendo um led: Neste exemplo o objetivo é acender um led sem o auxilio de chaves ou botões, para isso utiliza-se uma única saída do pic16f628a , esta saída por sua vez esta ligada através de um resistor a um led que indica o funcionalidade do exemplo. U1 16 15 4
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT
RA1/AN1 RA2/AN2/VREF
RA5/MCLR
RA3/AN3/CMP1 RA4/T0CKI/CMP2 RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8
R1 360R
9 10 11 12 13
PIC16F628A
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ output_high(pin_b0);
}
D1 LED-BIGY
2 - Acionando led por chave: Como o próprio titulo diz o exemplo a seguir tem como função ligar e desligar um led. O que diferencia do exemplo anterior é que agora alem da saída referente ao led tem também uma entrada acomoda a chave liga e desliga.
R2 360R
U1 16 15 4
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT
RA1/AN1 RA2/AN2/VREF
RA5/MCLR
RA3/AN3/CMP1 RA4/T0CKI/CMP2 RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8
R1 360R
9 10 11 12 13
PIC16F628A
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ while(1){ if((input(pin_a0))==1){ output_high(pin_b0); } else output_low(pin_b0); } }
D1 LED-BIGY
3 - Pisca-pisca: A seguir temos o exemplo de um pisca pisca pisca feito com leds, como poderá ser ser visto no código fonte este ira piscar a cada 350 ms(milisegundos), e colocara a saída do pic em nível lógico alto ou baixo.
U1 16 15 4
RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR
RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2
RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8 9 10 11 12 13
R1 100
PIC16F628A
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ while(true){ output_b(0b00000001); delay_ms(350); output_b(0); delay_ms(350); } }
D1 LED-BIRY
4 - Corredor de leds: O circuito referente ao exemplo usa todas todas as saídas do port_b totalizando 8 pinos (saídas), o exemplo tem como finalidade reproduzir uma corrida de leds continua que sempre volta onde começou o ciclo.
D1 D2
U1 16 15 4
RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR
RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2
RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A
LED-GREEN
17 18 1 2 3 6 7 8 9 10 11 12 13
D3
LED-GREEN
R1 R2 R3 100R R4 100R R5 100R R6 100R R7 100R R8 100R 100R 100R
D4
LED-GREEN
D5 LED-GREEN
D6
LED-GREEN
D7
LED-GREEN
D8
LED-GREEN
LED-GREEN
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ int d=0; while(true){ output_b(d); delay_ms(100); output_b(0); d=d<<1; if (d == 256) d=0;
} }
5 - Botão de trava: Este exemplo usa duas duas chaves, ligadas ligadas a duas entradas do microcontrolador e consequentemente um led ligado numa saída do port_b, sua funcionalidade é a seguinte, o led só ira acender se for ligado e desligado a primeira chave, mais desde que não seja apertado o botão 2, assim exemplificando um sistema de trava, pois se o botão 2 permanecer apertado o led não acende.
R2 100R
U1 16 15 4
RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR
RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2
RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8 9 10 11 12 13
R1 100R
PIC16F628A
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ while(true){ if((input(pin_a0)) == 1){ delay_ms(10); if(input(pin_a0) == 0){ output_high(pin_b0); } if(input(pin_a1) == 1){ output_low(pin_b0); } } } }
D1 LED-GREEN
6 - Acionando led por botão: Semelhante ao exemplo 2 este tem a função de acionar um led por botão não é chave, semelhante também ao exemplo anterior o led somente ira acender quando for solto o botão e ira apagar quando for apertado e solto novamente.
R1 100R
U1 16 15
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT
RA1/AN1 RA2/AN2/VREF
4
RA5/MCLR
RA3/AN3/CMP1 RA4/T0CKI/CMP2 RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8
R2 100R
9 10 11 12 13
PIC16F628A
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ int chave=0; while(true){ if(input(pin_a0)==1 && chave ==0){ while(chave==0){ if(input(pin_a0)==0){ output_high(pin_b0); chave=1; } } } if(input(pin_a0)== 1 && chave ==1){
D1 LED-GREEN
while(chave ==1){ if(input(pin_a0)== 0){ output_low(pin_b0); chave==0; } } } } }
7 - Vai e volta de leds: Assim como o exemplo 4 este este utiliza o port_b inteiro, não utiliza nenhum botão ou chave. Seu funcionamento é simples ao clicar em play no simulador Proteus disponível no site, o led b0 acende, depois de um delay de alguns milisegundos o led a seguir acende e não apaga o anterior, isso ocorre até todos acenderem,até que o led do pino b7 apaga e depois de um delay o led b6 apaga e isso ocorre gradativamente em seqüência até que o ciclo se inicie novamente e infinitamente. D1
R1 R2 100R
U1 16 15 4
D3
LED-YELLOW
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT RA5/MCLR
D2
LED-YELLOW
RA1/AN1 RA2/AN2/VREF
RA3/AN3/CMP1 RA4/T0CKI/CMP2
17 18
R3 100R
1 2
R4 100R
3
R5 100R
6
R6 100R
D4
LED-YELLOW
D5
LED-YELLOW RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
7 8 9 10 11 12 13
R7 100R R8 100R
D6
LED-YELLOW
D7
LED-YELLOW 100R
D8
LED-YELLOW PIC16F628A LED-YELLOW
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ int i =1; while(true){ while(i <=255){ output_b(i); i= (i<<1)+ 1; delay_ms(100); if(i == 255){ output_b(i); delay_ms(100); while(i <= 255){ i = (i>>1) ; output_b(i); delay_ms(100);
if(i == 1) break; } } } } }
8 - Contador de 0 á 9 com display: Este exemplo não utiliza nenhum botão ou chave e usa todo o port_b do microcontrolador. Ao port_b é ligado um display de 7 segmentos de catodo comum que por conseqüência ira reproduzir um contador de 0 á 9 que será repetido infinitamente. U1 16 15 4
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT
RA1/AN1
RA5/MCLR
RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8 9 10 11 12 13
R1 R2 R3 330R R4 330R R5 330R R6 330R R7 330R 330R 330R
PIC16F628A
Código Fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ int tabela [ ]= {0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111100, 0b0000111, 0b1111111, 0b1100111}; int i = 0; while(true){
output_b(tabela[i]); delay_ms(350); i++; if(i == 10) i = 0; } }
9 - Contador de 0 á 9 com display ll: Este exemplo executa a mesma função do exemplo anterior, porventura utiliza somente 4 saidas do port_b assim viabilizando o uso das outra saídas para outra funções. Para tanto a modificação do circuito é necessária, por se dizer utiliza-se um outro componente, se trata t rata do 4511 usado como driver de display, as modificações do circuito podem ser vista no circuito abaixo. Outra característica para essa mudança se nota no código onde a declaração dos pinos do display são representados por código hexadecimal, (decimal não funciona neste caso). U1 16 15 4
RA7/OSC1/CLKIN
RA0/AN0
RA6/OSC2/CLKOUT
RA1/AN1 RA2/AN2/VREF
RA5/MCLR
RA3/AN3/CMP1 RA4/T0CKI/CMP2 RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
PIC16F628A
17 18 1 2 3
U2
6
7
7
1
8
2
9
6
10 11
3
12
4
13
5
A
QA
B
QB
C
QC
D
QD QE
LT
QF
BI
QG
13 12 11 10 9 15 14
LE/STB 4511
Código fonte
#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP #use delay (clock=4000000) void main(){ int tabela[]= {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9}; {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9}; int i = 0; while(true){ output_b(tabela[i]); delay_ms(350); i++; if(i == 10) i = 0; } }
10 - Pisca-pisca acionado por botão: Semelhante ao exemplo do pisca-pisca este tem a mesma função só que o acionamento do processo é controlado pelo uso de uma chave.
R1 330R
U1 16
RA7/OSC1/CLKIN RA6/OSC2/CLKOUT
15
RA0/AN0 RA1/AN1 RA2/AN2/VREF
4
RA5/MCLR
RA3/AN3/CMP1 RA4/T0CKI/CMP2 RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI
17 18 1 2 3 6 7 8
R2 330R
9 10 11 12 13
PIC16F628A
Código Fonte
#include <16f628a.h> #use delay(clock=4000000 delay(clock=4000000)) #fuses INTRC,NOWDT,NOPROTECT,NOMCL INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP R,NOLVP void main(){ while(1){ if (input(pin_a1) == 1){ output_high(pin_b0); delay_ms(200); output_low(pin_b0); delay_ms(200); } else { output_low(pin_b0); } } }
D1 LED-GREEN
WWW.CLOCKSIZE.BLOGSPOT.COM
CODIGOS FONTE PARA MICROCONTROLADOR PIC16F628A, E XEMPLOS XEMPLOS PRATICOS:
10 EXEMPLOS FUNCIONAIS EM LINGUAGEM C
1- Acendendo um led: 2 - Acionando led por chave: 3 - Pisca-pisca: 4 - Corredor de leds: 5 - Botão de trava: 6 - Acionando led por botão: 7 - Vai e volta de leds: 8 - Contador de 0 á 9 com display: 9 - Contador de 0 á 9 com display ll: 10 - Pisca-pisca acionado por botão:
WWW.CLOCKSIZE.BLOGSPOT.COM