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