terça-feira, 24 de julho de 2012

Flowcode - Sequêncial Automático de Led´s

Opa, voltando as postagens... vamos com algumas coisas mais práticas... Neste post temos uma demonstração de utilização do Flowcode, a programação para microcontroladores utilizando fluxogramas.

Achei muito interessante, principalmente para quem está iniciando no mundo da programação e para quem também entende a lógica, mas não tem tanta intimidade assim com programação, consegue otimizar muito o tempo de um programa. Utilizando o Flowcode v4.2.3.58 da Matrix Multimedia fiz um pequeno programa sequencial automático para 10 leds, utilizei o microcontolador PIC 16f877A e determinei que toda a Porta D fossem os Leds de 1 a 8 e os pinos 1 e 2 da Porta B fossem os Leds 9 e 10.

Na imagem é possível ver a programação, o fluxograma de funcionamento, é um básico fluxograma lógico, dos mesmos que encontramos nas aulas de lógica de programação. A única dificuldade é definir as portas correspondentes ao que deseja fazer, acionar Leds, botões,..., mas o programa trata isso de forma fácil e prática, além de ser possível simular o funcionamento de toda programação. No final do post tem o link para download do fluxograma que está bem comentado.


Mas como seria em c?... é possível ver o código que o programa gera, inclusive em Assembler e com os comentários que foram feitos...

void main()
{

//Iniciação
adcon1 = 0x07;


//Código de iniciação de interrupção
option_reg = 0xC0;


//Cálculo
//Cálculo:
//  contador = 1
FCV_CONTADOR = 1;


//Comentário:
//Coloca o valor 1 na variável contador...


//Ciclo
//Ciclo: Enquanto1
while (1)
{
//Comentário:
//loop infinito


//Saída
//Saída: contador -> PORTO D
trisd = 0x00;
portd = FCV_CONTADOR;


//Comentário:
//PortD recebe o valor da variável contador


//Atraso
//Atraso: 3 s
delay_s(3);


//Decisão
//Decisão: contador = 128?
if (FCV_CONTADOR == 128)
{
//Comentário:
//Vem para esta condição quando a variável contador chega a 128
//atingindo o ultimo Led do PortD e sendo necessário acionar os
//dois leds do PORTB


//Comentário:
//Esta condição só é acionada para ativar os dois ultimos leds da sequência


//Saída
//Saída: 0 -> PORTO D
trisd = 0x00;
portd = 0;


//Comentário:
//Zera o PortD para mudar o valor dos ultimos dois Leds


//Saída
//Saída: 1 -> PORTO B
trisb = 0x00;
portb = 1;


//Comentário:
//Aciono o Led 9


//Atraso
//Atraso: 3 s
delay_s(3);


//Saída
//Saída: 2 -> PORTO B
trisb = 0x00;
portb = 2;


//Comentário:
//Desligo o Led 9 e aciono o led 10


//Atraso
//Atraso: 3 s
delay_s(3);


//Saída
//Saída: 0 -> PORTO B
trisb = 0x00;
portb = 0;


//Cálculo
//Cálculo:
//  contador = 1
FCV_CONTADOR = 1;


//Comentário:
//Mudo o valor da variavel contador para 1


} else {
//Cálculo
//Cálculo:
//  contador = contador*2
FCV_CONTADOR = FCV_CONTADOR*2;


//Comentário:
//O contador tem seu valor multiplicado por 2(2, 4, 8, 16, 32, 64, 128)
//é utilizada a lógica de números binários com a variável contador,
//assim, quando mandar o valor para o portD será mostrado o valor da variável
//2(01000000)
//4(00100000)
//8(00010000)
//16(00001000)
//32(00000100)
//64(00000010)
//128(00000001)


}


}


mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}
Mais um programa simples e muito funcional para auxiliar o programador...já gravei PIC's para testar e funcionaram perfeitamente... Quem quiser pode baixar o fluxograma aqui...e por hoje é só pessoal...

Nenhum comentário:

Postar um comentário