Escolar Documentos
Profissional Documentos
Cultura Documentos
Tecnica Programacao Fluxograma
Tecnica Programacao Fluxograma
FLUXOGRAMA
PIC - Microchip
Fluxograma
Introdução
Conhecer e até dominar uma linguagem de programação (seus comandos e funções) é relativamente simples.
Este conhecimento permite que programas simples ou complexos possam ser escritos e tarefas sejam
realizadas. Então podemos concluir que fazer um programa que realiza tarefas também é simples. É claro
que precisamos conhecer como as tarefas são realizadas e obviamente,escrevermos uma seqüência de
instruções (ou comandos) para que isso aconteça.
- Telefone celular: Considerando apenas o fato do aparelho ligado, existe uma constante troca de
informações com uma estação radio-base (ERB) utilizando o canal de sinalização que identifica o
aparelho, o assinante, a qualidade de sinal recebido e a localização física. Um programa específico no
processador interno se encarrega de realizar estas tarefas. Se houver uma ligação, mais dois canais são
ativados (controle e voz) e outros programas vão realizar as tarefas envolvidas na manutenção da
conexão e na codificação e decodificação da voz.
Foram expostos acima apenas dois fatos comuns, que no dia a dia facilita a vida da maioria das pessoas e
ninguém percebe, e ainda envolve algum tipo de programa que realiza inúmeras tarefas (simples ou
complexas). Com a evolução da tecnologia da construção de semicondutores, processadores complexos
tiveram seu custo drásticamente reduzidos e como conseqüência, seu uso em aparelhos e dispositivos
domésticos com larga aplicação tornou-se comum.
O técnico atual necessita conhecer como funcionam os processadores e naturalmente, ter condições de
escrever e/ou alterar programas em qualquer modelo disponível no mercado. A técnica de programação mais
interessante que se pode utilizar é o fluxograma. Para utilizá-lo não é necessário nenhum conhecimento de
linguagem de programação de um modelo especifico de processador. O importante é conhecer o processo
que se deseja controlar e então realizar o fluxograma.
Antes de atacar o problema,é importante que as três leis dos controladores/processadores sejam conhecidas:
“Uma figura vale mais que mil palavras” - (atribuída a Fred R. Barnard – executivo de vendas em 1921 -
que disse ser um provérbio chinês)
Fluxograma é uma ferramenta originalmente criada na indústria de computadores para mostrar os diversos
passos envolvidos em um programa. Provavelmente é o método mais antigo criado para representar uma
seqüência de atividades ou comandos.
É constituído por um diagrama que utiliza figuras geométricas (quadrados, retângulos, losangos, círculos
etc.) conectados por linhas e flechas, onde cada figura representa um passo no programa e as flechas
representam a seqüência em que os passos ocorrem.
Texto explicativo de alguns trechos de comandos/instruções podem (e devem) ser incluídos, mas devem ser
breves.
A combinação de fluxograma e textos explicativos costuma ser bastante eficiente na compreensão e solução
de problemas.
a) Início de um fluxograma:
- Diagrama funcional: contendo os sinais de entrada (vindos do campo – sensores,botões etc.) e saída
(retornam para o campo – lampadas, relés etc.).
- Tabela de Estado ou Tabela Verdade: indica todas as possibilidades que os sinais de entrada/saída
podem assumir.
- Gráfico Funcional: mostra como os diversos elementos de entrada e saída se relacionam no tempo.
- Descritivo funcional: conhecimento e descrição do processo a ser controlado detalhadamente.
b) Montagem de um fluxograma:
O fluxograma é a seqüência de um raciocínio lógico portanto, também deve ter uma disposição dos diversos
símbolos de forma lógica.
O uso dos símbolos também segue algumas regras. Evitar criar novos símbolos e, se não houver alternativa,
explicar a função do novo símbolo detalhadamente.
1 - Os símbolos possuem apenas uma entrada e uma saída (com exceção do símbolo de decisão) como
mostra a fig.2:
2 - O símbolo de decisão possui apenas 1 entrada, mas pode ter 2 ou 3 saídas de acordo com as
necessidades da lógica. A fig. 3 mostra as opções possíveis.
não <= =
3 – Toda a lógica admite vários caminhos para atingir uma mesma solução. Portanto, escolher um
caminho lógico entre vários exige uma decisão com o emprego do símbolo adequado (losango), como
mostra a fig.4a. O desvio a partir de uma linha de interligação (fig.4b) não é possível.
sim não
5 - Podemos verificar que as figuras 2, 3, 4 e 5 mostram símbolos lógicos conectados por linhas de
interligação, e nestas foram colocadas flechas de sentido, indicando com clareza o fluxo do raciocínio
lógico ou da informação. É importante o uso da flecha de sentido (não deve haver dúvida quanto à
direção do raciocínio).
6 - A função/instrução ou operação desejada deve ser escrita no interior do símbolo e deve ser sucinta,
compacta, suficiente para total compreensão. Se houver necessidade de maior detalhe, este pode ser
escrito externamente ao símbolo como um comentário.
7 - A fig.6 mostra a disposição dos símbolos lógicos na área de uma página. Não se trata de uma norma
mas uma regra que a experiência mostra ser bastante funcional. A disposição do fluxograma em uma
folha (A4) pode ser em três ou quatro colunas onde a coluna central recebe o fluxo principal do
raciocínio. Derivações ou retornos ocupam as demais colunas. Observe que nesta disposição surgem
áreas para comentários ou observações, ao mesmo tempo em que mantém o trabalho organizado. Se a
apresentação for por meio eletrônico, a disposição pode ser modificada e ocupar menos área.
ATIVA
TEMPO t1 Inicia tempo para
modo "SLEEP"
(baixo consumo)
ATIVA
TEMPO t2
t2 = 10s
t2 = 10s ?
t2 < 10s
F_CH = 0 CH = 1 ?
C
=0
(ABERTA)
=1
(FECHADA) Verifica estado da chave CH:
=1 - se permanece fechada
(CONTINUA FECHADA APÓS 10s) para t 2 >=10s
F_CH = 1 ?
- se abriu ao menos uma vez
para t 2 <10s
=0
(ABRIU - PRIMEIRA VEZ)
ABRE
VÁLVULA
A
Vai p/ Pg..2/10
Para iniciar um fluxograma é necessário que tenhamos um projeto, conhecimento do funcionamento deste
projeto e o seguinte material:
Por maior que seja seu conhecimento do processo ou funcionamento do projeto,o fluxograma não nasce
pronto. Começa de uma idéia simples e vai crescendo e evoluindo até que atenda a todos (todos mesmo) os
requisitos funcionais do processo.
Logo, muita coisa vai ser desenhada, escrita, apagada, redesenhada, reescrita etc., etc, e mais alguns etc..
O trabalho está confuso, atrapalhado enfim, uma bagunça difícil de entender, é hora de redesenhar
organizadamente todo o fluxograma desenvolvido e estudá-lo novamente.
Todo o documento/informação substituído por um documento novo ou redesenhado não deve ser jogado
fora. Em várias ocasiões o raciocínio original contém a melhor solução.Não tenha o mesmo trabalho duas
vezes. Quando tudo estiver terminado (testado, retestado, funcionando), descartar os documentos antigos ou
modificados.
Para facilitar a compreensão e organizar o projeto, desenhou-se a entrada à esquerda e a saída à direita. O
retângulo denominado MCU (microcontroller unit - microcontrolador) representa a unidade de controle que
deve produzir uma saída em função de um estado da entrada. No caso do diagrama funcional da fig.7, a
entrada é representada pelo botão B1, e a saída é representada pelo led L1.
R1
MCU
RA2
RB1
R2
B1
L1
Considerando como o botão B1 e o led L1 devem operar no circuito, devemos elaborar uma Tabela de
Estados como mostra a fig. 8:
Livre 1
B1
Pressionado 0
Apagado 0
L1
Aceso 1
A função desta tabela é determinar os níveis lógicos (0 ou 1) que os dispositivos de entrada e saída vão
operar. O que pode parecer óbvio ao olharmos o diagrama funcional, quando fizermos a análise de operação
no fluxograma podem surgir muitas dúvidas e erros. Portanto, a elaboração da Tabela de Estado é
importante.
- O botão B1 (tipo NA – normal aberto) mantém seu contato aberto quando seu acionamento estiver
livre (ou não pressionado). De acordo com a fig.7, a entrada do microcontrolador fica conectada ao
positivo da fonte (Vdd) através do resistor R1, logo, o nível lógico da entrada quando B1 estiver livre
(não pressionado) será 1 (um). Quando o botão B1 tiver seu acionamento pressionado o contato deve
se fechar, fazendo com que o negativo da fonte (Vss) se ligue à entrada do controlador logo, o nível
lógico da entrada quando B1 estiver pressionado será 0 (zero). Atenção para o fato que, nesta
situação,deve circular uma corrente pelo resistor R1. Para que o consumo do circuito não seja
elevado e, ao mesmo tempo, a resistência de contato de B1 não interfira no circuito, sugerimos que
R1 seja dimensionado para uma corrente não menor que 1mA.
- O led L1 fica apagado se não houver tensão sobre R2, o que implica nível de tensão nulo na saída do
controlador logo, o nível lógico da saída quando L1 estiver apagado será 0 (zero). Quando L1 estiver
aceso é porque existe tensão na saída do controlador logo, o nível lógico da saída quando L1 estiver
aceso será 1 (um).
O simples fato de possuirmos o diagrama funcional (fig.7) e a tabela de estado (fig.8) não nos possibilitam
entender como o circuito deve funcionar.É necessário que haja uma descrição das operações ou seqüências
que se desejam realizar. A descrição operacional deve conter a seqüência (ou seqüências) de funcionamento
que o conjunto deve realizar. O grau de detalhamento deve ser suficiente para que todas as operações de
funcionamento sejam analisadas.A fig.9 procura mostrar um exemplo:
DESCRITIVO OPERACIONAL
1- Energizar o dispositivo com B1 livre, L1 apagado.
2- Mantendo B1 livre, L1 permanece apagado.
3- Pressionando B1, L1 acende.
4- Mantendo B1 pressionado, L1 permanece aceso.
5- Liberando B1, L1 apaga.
A forma de expor a operação ou seqüência lógica é simples e direta. A descrição da fig.9 poderia ser
resumida de uma forma mais direta,ainda:
Elaborar uma Tabela Verdade também ajuda a visualizar as diversas situações e principalmente, permite
estipular todas as combinações possíveis que as entradas podem assumir e estabelecer as combinações
possíveis que as saídas podem ter. No caso do Projeto 1, a Tabela Verdade tem o aspecto da fig.10:
Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 10/38
B1 L1
0 1
1 0
A Tabela Verdade coloca de forma simples e objetiva o descrito na Tabela de Estado e no Descritivo
Operacional.
Uma outra forma de descrever a operação de um sistema, principalmente envolve temporizações (a Tabela
Verdade não consegue trabalhar intervalos de tempo de forma eficiente), é a utilização de gráficos.
A fig.11 mostra o gráfico que representa o funcionamento do sistema do Projeto 1 exatamente de acordo
com o Descritivo Operacional e a Tabela Verdade.
B1 Pressionado
B1 Pressionado
B1 Livre
B1 Livre
B1 Livre
1
B1
0 t
L1
0 t
L1 Apagado
L1 Apagado
L1 Apagado
L1 Aceso
L1 Aceso
Vamos observar que o o diagrama é um retrato mais claro e objetivo do funcionamento do Projeto 1 do que
o Descritivo Operacional e a Tabela Verdade. Óbviamente que os parametros de funcionamento já foram
definidos anteriormente na fig.8 portanto, fica fácil entender o texto do Descritivo e a Tabela Verdade. Os
comentários incluídos relativos ao funcionamento de cada componente (B1 Livre, L1 Aceso etc.) tem apenas
o objetivo de melhorar a compreensão dos diversos estados lógicos durante o funcionamento. Não são
obrigatórios, mas podem ser úteis.
Para iniciarmos o fluxograma, devemos recorrer aos símbolos da fig.1 e utilizar aqueles que atendam às
nossas necessidades. Portanto, mãos à obra.
Um fluxograma tem que possuir um início então,devemos começar com o símbolo que representa o início,
como mostra a fig.12:
ROT_PRINC
Na fig.9 o Descritivo Operacional especifica como o circuito deve operar desde as condições iniciais.
Portanto, para fazermos com que L1 esteja apagado (nível lógico zero), precisamos saber qual é o estado do
botão B1.
Para saber o estado de qualquer dispositivo (interno ou externo), precisamos “olhar” para o dispositivo. E
“olhar” para o dispositivo implica em perguntar o seu estado lógico naquele instante. Se existe uma
pergunta, existe uma decisão (o estado lógico do dispositivo está alto - 1 ou baixo - 0). Vamos incluir no
fluxograma esta pergunta na fig.13:
ROT_PRINC
SIM
B1 = 1 ?
(B1 livre)
NÃO
(B1 pressionado)
Dentro do símbolo que representa “decisão” e que, logicamente, é uma pergunta, colocamos a questão:
B1 = 1?
Ou seja, perguntamos se o estado lógico do botão B1 é igual a 1 (um) .Na fig.8 encontra-se a Tabela de
Estados que determina como raciocinar o estado lógico do botão B1. Como o botão B1 só pode assumir dois
estados, somente duas respostas são possíveis. Então, no símbolo de decisão assumimos duas saídas onde
respondemos à questão proposta:
Após cada resposta, uma instrução deve ser dada. Na fig.14 acrescentamos as duas instruções necessárias
para cumprir o Descritivo Operacional:
ROT_PRINC
SIM
B1 = 1 ? L1 = 0
(B1 livre)
NÃO
(B1 pressionado)
L1 = 1
Ao que tudo indica, o fluxograma está completo. O Descritivo Operacional foi atendido integralmente e
portanto, a fig.14 representa o fluxograma do projeto 1.
Vamos olhar com mais atenção o fluxograma da fig.14. Vamos seguir o caminho lógico que ele representa,
simulando cada uma das opções de caminho disponível, como podemos ver na fig.14a onde estabelecemos a
condição:
a) Inicia em ROT_PRINC.
L1 = 1
Fig. 14a
Observe que, ao tomarmos a decisão de B1 = 0, adotamos o desvio para L1 = 0 ou seja, descartamos a outra
opção B1 = 1. Como não existe nenhuma linha de interligação após a instrução L1 = 0, paramos nesta
posição e não vamos para nenhum outro caminho (eternamente). Se neste período B1 mudar de estado (B1 =
1) nunca saberemos.
Vamos ver a outra opção de caminho, mostrada na fig.14b porém, com a seguinte condição:
a) Inicia em ROT_PRINC.
L1 = 1
Fig. 14b
O mesmo problema acontece se adotarmos o desvio para L1 =1, ou seja, descartando a opção B1 = 0. Após a
instrução L1 = 1, não vamos para lugar nenhum.
ROT_PRINC
SIM
B1 = 1 ? L1 = 0
(B1 livre)
NÃO
(B1 pressionado)
L1 = 1
Agora podemos verificar constantemente o estado do botão B1 e, a partir desta verificação, podemos ligar ou
desligar o led L1.
Simulando a operação do Projeto 1 na fig.15a, partindo das condições abaixo (na fig.11 o gráfico mostra a
condição inicial de cada componente):
a) Inicia em ROT_PRINC.
SIM
b) Verifica o estado do botão B1:
B1 = 1 ?
(B1 livre)
L1 = 0 # B1 livre (B1 = 1): segue para comando
Fica claro porque o sistema é dinâmico: enquanto B1 estiver livre (B1 = 1) o ciclo operacional vai percorrer
sempre este caminho escolhido. O outro caminho possível é ignorado (como se não existisse).
Agora vamos simular a operação do Projeto 1 considerando que o botão B1 foi pressionado. O caminho a ser
seguido vai considerar as condições:
a) Inicia em ROT_PRINC.
Da mesma forma que o Primeiro Caminho, enquanto B1 estiver pressionado (B1 = 0) o ciclo operacional vai
percorrer sempre este caminho escolhido. O outro caminho possível é ignorado (como se não existisse).
Notar que:
- Início.
- Decisão (ou desvio).
- Instrução/operação.
Para analisar o uso e onde colocar um desvio interno – ou flag (bandeira) – vamos adotar o Projeto 2 – Ligar
e Desligar por Toque. A fig.16 mostra o diagrama funcional do Projeto 2 contendo as informações dos sinais
de entrada e saída.
R1
MCU
RA2
RB1
R2
B1
L1
Olhando a fig.7 - Projeto 1 - verificamos que o diagrama funcional é idêntico ao da fig.16 – Projeto 2 -
portanto, são válidas as mesmas considerações feitas para a fig.7 - Projeto 1.
Livre 1
B1
Pressionado 0
Apagado 0
L1
Aceso 1
Da mesma forma, a fig.17 é igual à fig.8. A fig.18 mostra o Descritivo Operacional do projeto 2:
DESCRITIVO OPERACIONAL
1- Energizar dispositivo com B1 livre, L1 apagado.
2- Mantendo B1 livre, L1 permanece apagado.
3- Pressionado B1, L1 acende.
4- Mantendo B1 pressionado, L1 permanece aceso.
5- Liberando B1, L1 permanece aceso.
6- Mantendo B1 livre, L1 permanece aceso.
7- Pressionando B1, L1 apaga.
8- Mantendo B1 pressionado, L1 permanece apagado.
9- Liberando B1, L1 permanece apagado.
Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 16/38
10- Mantendo B1 livre, L1 permanece apagado.
Agora, a comparação da fig.18 com a fig.9 mostra que o funcionamento de cada um dos dispositivos é
completamente distinto, apesar de possuírem o diagrama funcional (fig.7 e16) e a tabela de estados (fig.8 e
17) idênticos.A diferença vai ocorrer na unidade de controle (MCU) que conterá a lógica adequada a cada
função.
B1 L1
0 0
1 1
0 1
1 0
0 0
Para atender à nova situação, a Tabela Verdade mostra uma seqüência de operação, uma vez que a saída L1
pode assumir dois estados distintos para o mesmo estado na entrada B1. Isto se deve porque o Projeto 2 é um
circuito bi-estável, ou seja, a mudança de estado da saída é estável, mesmo que a entrada retorne ao estado
original. O gráfico da fig.20 torna a operação descrita na fig.18 mais clara (observe no gráfico que o tempo
que B1 fica pressionado não interfere na operação de L1).
B1 Pressionado
B1 Pressionado
B1 Pressionado
B1 Pressionado
B1 Livre
B1 Livre
B1 Livre
B1 Livre
B1 Livre
B1
0 t
L1
0 t
L1 Apagado
L1 Apagado
L1 Apagado
L1 Aceso
L1 Aceso
Com todas as informações disponíveis, vamos começar a desenhar o fluxograma. Em uma primeira análise,
podemos observar que B1 livre não tem nenhuma ação (nem liga L1 ou desliga L1). Então podemos
começar o fluxograma exatamente nesta ação:
ROT_PRINC
SIM
B1 = 1 ?
(B1 livre)
NÃO
(B1 pressionado)
De acordo com a fig.21 iniciamos o processo em ROT_PRINC e verificamos o estado do B1. Considerando
que B1 está livre (portanto B1 = 1), retornamos à verificação do estado de B1 novamente.
Lembre-se sempre que o processo é dinâmico e não pára simplesmente após uma condição satisfeita.
Portanto, deve-se retornar à supervisão porque em algum momento o estado do botão B1 pode ser alterado.
Vamos observar a Tabela Verdade da fig.19 e o gráfico funcional da fig.20. Podemos ver que, se o botão B1
for pressionado, isto é, B1 = 1, duas ações distintas podem ser adotadas:
Como não há conhecimento prévio do estado do led L1, é necessário verificar seu estado e só depois, agir.
Com base neste raciocínio, o fluxograma será acrescentado com a decisão (pergunta) para verificação do
estado do led L1:
ROT_PRINC
SIM
B1 = 1 ?
(B1 livre)
NÃO
(B1 pressionado)
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
L1 = 0 L1 = 1
a) Inicia em ROT_PRINC.
NÃO
(B1 pressionado)
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
L1 = 0 L1 = 1
a) Inicia em ROT_PRINC.
L1 = 0 L1 = 1
a) Inicia em ROT_PRINC.
L1 = 0 L1 = 1
Ora, sob todos os aspectos, atendemos plenamente os requisitos de funcionamento propostos. Atendemos
mesmo? Verificamos efetivamente todos os aspectos de funcionamento? Testamos todas as possibilidades?
Então, retornando à fig.22b e considerando que B1 está pressionado (B1 = 0), na seqüência vamos verificar
o estado do led L1 que, para efeito de raciocínio, está desligado (L1 = 0). A ação adotada será ligar L1 (L1 =
1) e retornar para a verificação do estado do botão B1.
Vamos considerar que, por um motivo qualquer, B1 permanece pressionado (não foi liberado, logo, B1
continua igual a 0). Como B1 continua pressionado (fig.22c), voltamos a verificar o estado do led L1 que,
agora, se encontra aceso(L1 = 1). A ação adotada será desligar L1 (L1 = 0) e retornar para verificação do
botão B1.
Como B1 ainda está pressionado (fig.22b), voltamos a verificar o estado do led L1 que, agora, está apagado
(L1 = 0). A ação adotada será ligar o led L1 e retornar para...
Enquanto o botão B1 se mantiver pressionado, o led L1 será aceso e apagado constantemente (pisca-pisca).
Se considerarmos a velocidade que a informação gira no fluxograma é muito alta, o led L1 ficará “meio”
aceso aos nossos olhos. Quando liberarmos o botão B1 (B1 fica igual a 1) o led L1 assume o último
comando (ou instrução) dado e, como podemos perceber, não sabemos se o led ficará aceso ou apagado.
Como o caminho para as ambas as situações é o mesmo (possui o mesmo número de instruções e consome o
mesmo número de ciclos de máquina) a possibilidade de termos o led L1 aceso é de 50%.
Podemos tentar uma outra solução no fluxograma para contornar o problema de L1 piscar enquanto B1
estiver pressionado, ao mesmo tempo em que seja certa a função de Ligar ou Desligar o led L1.
ROT_PRINC
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Comparando o fluxograma da fig.22 com o fluxograma da fig.23 podemos observar o aumento do número
de instruções para realizar a mesma tarefa.
a) Inicia em ROT_PRINC.
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
a) Inicia em ROT_PRINC.
Como podemos ver, ao percorrer o caminho da fig.23b a Lampada L1 foi acendida (L1 = 1).
Vamos considerar que ao retornar para verificar L1 (em ROT_PRINC), o botão B1 tenha sido liberado (B1 =
1). Então vamos percorrer o caminho mostrado na fig.23c que inicia nas condições de:
a) Inicia em ROT_PRINC.
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
a) Inicia em ROT_PRINC.
Agora, se considerarmos que o botão B1 permanece pressionado (B1 = 0) por tempo suficiente para
completar o ciclo com retorno a ROT_PRINC, podemos facilmente verificar que a Lampada L1 também
entra no processo de piscar, da mesma forma que o fluxograma da fig.22.
ROT_PRINC ROT_PRINC
L1 = 0 L1 = 1 L1 = 0 L1 = 1
Fig.23b – Análise Segundo Caminho – Projeto 2 Fig.23d – Análise Quarto Caminho – Projeto 2
Uma solução para este problema seria criar um desvio tal que o fluxo lógico só passa por um determinado
caminho uma única vez enquanto uma condição não retornar à posição original.
Para criar um desvio condicional, utiliza-se o artifício do “flag”, ou seja, o programa sinaliza que passou por
aquele caminho específico uma vez, não devendo retornar a ele até que a condição que gerou o desvio seja
desfeita.
Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 23/38
O termo “flag” significa “bandeira” (rígida ou não) e, nos sistemas ferroviários, sinaliza o estado do desvio
em uma via para as composições que trafegam. Da mesma forma em um fluxograma, o “flag”tem a função
de sinalizar o estado do desvio em uma lógica.
Um “flag” é colocado dentro de uma seqüência lógica de acordo com a sua necessidade, pode ser acionado
por um elemento externo (botão, chave, sensor etc..) ou por um elemento interno, mas não faz nenhum
controle externo.
Não existe regra para a colocação de um ou vários “flags” em um fluxograma, mesmo para o local exato do
desvio e das instruções/comandos para acionar ou não o desvio.
A necessidade, a localização e o modo de operar são determinados pela lógica do processo, o que pode levar
ao procedimento de tentativas e erros para a colocação de um “flag”.
No caso das figuras 22 e 23, é necessário que verifiquemos os estados do botão B1 (fig.22) e do led (fig.23)
para adotarmos a ação correta porém, uma vez escolhida a opção, este caminho lógico deve ser percorrido
uma única vez.
ROT_PRINC
NÃO
B1 = 1 ? FLAG = 0
(B1 livre)
SIM
(B1 pressionado)
SIM
FLAG = 1 ?
(Acionado)
NÃO
(Não Acionado)
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
a) Inicia em ROT_PRINC.
NÃO
B1 = 1 ? FLAG = 0 b) Verifica estado do botão B1:
(B1 livre)
# B1 livre (B1 = 1): segue para comando.
SIM
(B1 pressionado)
c) Comando:
#Desliga FLAG (FLAG = 0).
SIM
FLAG = 1 ?
(Acionado)
d) Retorna para verificar B1 em ROT_PRINC.
NÃO
(Não Acionado)
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
Enquando forem mantidas as condições iniciais, o caminho seguido será sempre o marcado na fig.24a.
Para ligar o Led L1 é necessário pressionar o botão B1. Portando, vamos consideramos as condições:
SIM
c) Verifica estado do FLAG
FLAG = 1 ?
(Acionado) # FLAG não acionado (FLAG = 0): segue para
verificar L1.
NÃO
(Não Acionado)
d) Verifica estado de L1
# L1 apagado (L1 = 0): segue para comando.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
e) Comando:
# Acende L1 (L1 = 1).
L1 = 0 L1 = 1
# Liga FLAG (FLAG = 1).
Após ligar L1 e acionar o FLAG e retornando para verificar o estado de B1 (em ROT_PRINC), vamos
encontrar a seguinte situação:
SIM
c) Verifica estado do FLAG
FLAG = 1 ?
(Acionado) # FLAG acionado (FLAG = 1): retorna para
verificar B1.
NÃO
(Não Acionado)
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
Mantendo B1 pressionado (B1 = 0), vamos observar que o caminho da fig.24b só será percorrido uma única
vez devido ao acionamento do FLAG (como mostra a fig.24c).
Liberando o botão B1 (fazendo B1 = 1), voltamos a percorrer o caminho da fig.24a, com o retorno do FLAG
ao nível lógico zero (FLAG = 0) mas agora as seguintes condições são encontradas:
Observar que o retorno do FLAG ao nível lógico zero (FLAG = 0) prepara o caminho para apagar a lampada
L1 quando B1 for pressionado novamente.
Acionando novamente o botão B1 para apagar L1, percorremos o fluxograma com as condições:
B1 = 1 ?
NÃO
FLAG = 0 b) Verifica estado do botão B1:
(B1 livre) # B1 pressionado (B1 = 0): segue para verificar
SIM FLAG.
(B1 pressionado)
FLAG = 1 FLAG = 1
O caminho para comando do led L1 vai ficar bloqueado pelo flag enquanto o botão B1 permanecer
pressionado. Ao liberar B1, desligamos o flag (flag = 0) e permitimos o acesso ao comando do led L1 na
próxima vez que B1 for pressionado.
Agora, vamos incluir o flag no fluxograma da fig.23, obtendo a fig.25 e analisar os resultados.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)
NÃO NÃO
FLAG = 0 FLAG = 0
(B1 pressionado) (B1 pressionado)
SIM SIM
FLAG = 1 ? FLAG = 1 ?
(Acionado) (Acionado)
NÃO NÃO
(Nao Aciionado) (Não Aciionado)
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
No fluxograma da fig.25, como o estado do botão B1 é que controla a operação do dispositivo, optou-se
colocar o desvio através do flag após a verificação do estado de B1 (semelhante ao fluxograma da fig.24).
Como são dois caminhos lógicos independentes (um para ligar o led L1 e outro para desligar), cada caminho
recebeu o desvio do flag.
Para analisar a lógica do fluxograma da fig.25a (Primeiro Caminho) devemos considerar que o sistema está
nas condições iniciais:
a) Inicia em ROT_PRINC.
SIM NÃO
b) Verifica estado de L1:
L1 = 1 ?
(Ligado) (Desligado) # L1 apagado (L1 = 0): segue para
verificar B1.
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
Agora vamos pressionar o botão B1 e analisar o caminho seguido na fig.25b, observando as condições:
a) Inicia em ROT_PRINC.
e) Comando:
NÃO NÃO
(Nao Aciionado) (Não Aciionado)
# Acende L1 (L1 = 1)
# Liga FLAG (FLAG = 1).
L1 = 0 L1 = 1
Assim que ligamos o led L1, mudamos o estado do FLAG. Se ao retornarmos a ROT_PRINC para verificar
o estado de L1 novamente, e mantivermos o botão B1 pressionado (B1 =1), vamos encontrar as seguintes
condições:
a) Inicia em ROT_PRINC.
NÃO NÃO
(Nao Aciionado) (Não Aciionado)
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
O fato de termos o FLAG acionado faz com que tenhamos o desvio de retorno para ROT_PRINC antes de
acionarmos o comando de desligar o led L1. Portanto, enquanto mantivermos o botão B1 pressionado (B1 =
0), o caminho seguido será o da fig.25c.
Observar que o estado do FLAG não será mais verificado quando o botão B1 for liberado.
a) Inicia em ROT_PRINC.
SIM SIM
c) Verifica estado do Botão B1
(B1 livre)
B1 = 1 ? B1 = 1 ?
(B1 livre)
# B1 livre (B1 = 1): segue comando.
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
Como podemos ver, com o botão B1 livre, o FLAG é desligado o que permitirá, na próxima vez que o botão
B1 for pressionado, desligar o led L1. Para tanto, as condições serão:
a) Inicia em ROT_PRINC.
NÃO NÃO
e) Comando:
(Nao Aciionado) (Não Aciionado) # Apaga L1 (L1 = 0)
# Liga FLAG (FLAG = 1).
L1 = 0 L1 = 1
a) Inicia em ROT_PRINC.
SIM NÃO
b) Verifica estado de L1:
(Ligado)
L1 = 1 ?
(Desligado) # L1 apagado (L1 = 0): segue para
verificar B1.
SIM SIM
c) Verifica estado do Botão B1
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) # B1 pressionado (B1 = 0): segue
para verificar FLAG.
NÃO NÃO
FLAG = 0 FLAG = 0
(B1 pressionado) (B1 pressionado) d) Verifica estado do FLAG
# FLAG ligado (FLAG = 1):
SIM SIM
(Acionado)
FLAG = 1 ? FLAG = 1 ?
(Acionado)
retorna para verificar L1.
NÃO NÃO
(Nao Aciionado) (Não Aciionado)
L1 = 0 L1 = 1
FLAG = 1 FLAG = 1
Se liberarmos o botão B1 (B1 = 1), voltamos ao caminho representado pela fig.25 a, repetindo todos os
caminhos novamente.
Alguns comentários podem ser feitos a partir das soluções apresentadas para o Projeto 2:
c) Podem ser utilizados vários flags, tantos quantos forem necessários para resolver o problema.
d) Um mesmo flag pode ser empregado para funções/destinos distintos desde que os retornos não sejam
entrelaçados.
e) A utilização do flag não é obrigatória nem indispensável, como pode ser visto na comparação entre os
fluxogramas das figuras 22 e 24 e das figuras 23 e 25. Houve um aumento de instruções/comandos
com acréscimo do flag.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
ROT_PRINC
Primeiro Caminho (fig.26a):
a) Inicia em ROT_PRINC.
SIM
L1 = 1 ?
NÃO
b) Verifica o estado de L1:
(Ligado) (Desligado)
# L1 apagado (L1 = 0): segue para verificar B1.
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Para ligar o led L1 será necessário pressionar o botão B1. Nesta condição, o fluxograma será analisado a
partir de:
a) Inicia em ROT_PRINC.
Observe que não voltamos para verificar o estado de L1 mas o estado de B1, diferente dos fluxogramas
anteriores. Se mantivermos B1 pressionado (B1 = 0), o caminho seguido será o demonstrado na fig. 26c:
ROT_PRINC
Terceiro Caminho (fig.26c):
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Se B1 permanecer pressionado (B1 = 0), o caminho seguido será sempre o da fig.26c. Agora vamos liberar o
botão B1 (fazendo B1 = 1) e ver como fica o fluxograma na fig.26d:
a) Comando:
# Acende L1 (L1 = 1).
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
b) Verifica estado do botão B1:
# B1 livre (B1 = 1): retorna para verificar L1.
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Ao liberar o botão B1, voltamos para verificação do estado do led L1. Notar para o fato de que passamos
pelo comando acendendo L1 (L1 = 1). Portanto, quando houver a verificação do estado de L1, o desvio
utilizado será para SIM - L1 ligado. A fig.26e mostra o novo caminho seguido para as condições:
ROT_PRINC
Quinto Caminho (fig.26e):
a) Retorna em ROT_PRINC.
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
É a mesma situação encontrada na fig.26a porém, com o led L1 acesa. Pressionando o botão B1, agora para
apagar L1, teremos a seguinte situação:
c) Comando:
SIM SIM
(B1 livre)
B1 = 1 ? B1 = 1 ?
(B1 livre)
# Apaga L1 (L1 = 0).
L1 = 0 L1 = 1
Da mesma forma que na fig.26b, não voltamos para verificar o estado de L1 mas o estado de B1. Se
mantivermos B1 pressionado (B1 = 0), o caminho seguido será o demonstrado na fig. 26g:
ROT_PRINC
Sétimo Caminho (fig.26g):
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Se B1 permanecer pressionado (B1 = 0), o caminho seguido será sempre o da fig.26g (verifique que é
semelhante à fig.26c). Agora vamos liberar o botão B1 (fazendo B1 = 1) e ver como fica o fluxograma na
fig.26h:
a) Comando:
# Apaga L1 (L1 = 0).
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
b) Verifica estado do botão B1:
# B1 livre (B1 = 1): retorna para verificar L1.
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Novamente, liberando o botão B1, voltamos para verificação do estado do led L1. Notar para o fato de que
passamos pelo comando apagando L1 (L1 = 0). Portanto, quando houver a verificação do estado de L1, o
desvio utilizado será para NÃO - L1 desligado. A fig.26i mostra o novo caminho seguido para as condições:
a) Inicia em ROT_PRINC.
SIM
L1 = 1 ?
NÃO
b) Verifica o estado de L1:
(Ligado) (Desligado)
# L1 apagado (L1 = 0): segue para verificar B1.
NÃO NÃO
(B1 pressionado) (B1 pressionado)
L1 = 0 L1 = 1
Como pode ser verificado, bastou uma modificação no retorno após a instrução para acender ou apagar L1
retornando para a verificação de B1 (e não mais para a verificação de L1), que eliminamos o flag e
atingimos o objetivo de atender aos requisitos descritivos nas fig.16 a 20.
Ficou claro, nessas longas análises, que o fluxograma não é uma forma rígida e única para solucionar um
problema. Dependendo do ponto de vista do projetista, várias soluções podem ser encontradas para o mesmo
problema. Escolher qual solução será empregada no projeto final depende exclusivamente do projetista.