Você está na página 1de 3

EDED - 2° SEMESTRE

Proposta de Aplicação

Projetar um sistema onde um botão quando acionado deve acrescentar uma


unidade ao valor binário mostrado por uma seqüência de LED´s e outro botão
quando acionado deve subtrair uma unidade do valor binário mostrado por uma
seqüência de LED´s.

1º PASSO – DEFINIÇÃO DO HARDWARE

20pF

XT 20pF
4MHz
R7 R6 R5 R4 R3 R2 R1 R0
330R 330R 330R 330R 330R 330R 330R 330R
PIC 16F877A

OSC1 PIC 16F877A B0


OSC2 B1
B2
+5 B3
Vcc B4
B5
+5
B6
Vcc
B7
R9/10
R8 1K
1K
C0

MCLR C1

BOTÃO
0

BOTÃO
1

2010
EDED - 2° SEMESTRE

2º PASSO – ELABORAÇÃO DA SOLUÇÃO LÓGICA

INICIO

Configuração

Valor = 0

1=1 Instrução: WHILE


Leia-se: ENQUANTO 1 for igual a 1
*implícito

SIM

Botão 0 está NÃO


Instrução: IF/ELSE (else pode ser omitido)
acionado? Leia-se: SE o botão 0 está acionado
Soma 1 à variável “valor”
SENÃO não faça nada
SIM
Valor = valor + 1

Botão 0 está NÃO Instrução: IF/ELSE (else pode ser omitido)


acionado? Leia-se: SE o botão 1 está acionado
Subtrai 1 da variável “valor”
SENÃO não faça nada
SIM
Valor = valor + 1

3º PASSO – DESENVOLVIMENTO DA APLICAÇÃO

2010
EDED - 2° SEMESTRE

//inicio da configuração
//cabeçalho
//inclui a biblioteca do hardware microC
#include <16f877a.h>
//informa ao compilador o clock do oscilador
#use delay (clock=4000000)
//informa ao compilador o uso de oscilador externo tipo xt (até 4Mhz)
#fuses xt
//informa ao compilador que o portB será configurado manualmente
#use fast_io (b)
//informa ao compilador que o portC será configurado manualmente
#use fast_io (c)
//variáveis globais
int8 valor;

//rotina principal
void main ()
{
set_tris_b (0x00); //configura portB como saída
set_tris_c (0xff); //configure portC como entrada
//variáveis locais
//não há
//final da configuração

//execução da solução
valor=0; //atribui valor “0” à variável, inicializa variável
//define loop infinito
while(true)
{
//testa se o botão0 está acionado para somar 1 à variável
if (!input(pin_c0))
valor=valor+1;
//teste se o botão1 está acionado para subtrair 1 da variável
if (!input(pin_c1))
valor=valor-1;
//tempo para mudança do status do botão
delay_ms(250);
delay_ms(250);
//envia valor de 8 bits ao portB onde estão os LED´s
output_B (valor);
}
//final do loop infinito
}
//final da rotina principal
//final da execução da solução

2010