Você está na página 1de 38

TÉCNICAS DE PROGRAMAÇÃO

FLUXOGRAMA
PIC - Microchip

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 1/38
Técnicas de programação

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.

Hoje qualquer aplicação envolve equipamentos e dispositivos eletrônicos, e em muitos casos,envolve um


programa para que funcionem da maneira esperada pelo usuário.

Alguns exemplos simples


- Bilhete único: processo de pagamento de passagem no transporte urbano utilizando-se um cartão que
contém valores, datas e horários gravados. Considerando apenas o item “valor da passagem”, a
aproximação do cartão do leitor faz com que o valor seja debitado do cartão e um novo saldo seja
gravado. É claro que outras operações são realizadas em conjunto e isto envolve a aplicação de um
componente eletrônico, tanto no cartão como no leitor capaz de trocar informações entre si, o que
obriga a existência de uma complexa seqüência de tarefas que são realizadas a partir de um programa
gravado no componente do cartão e no componente do leitor. Tudo isso para o simples ato de pagar
uma passagem de ônibus.

- 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:

1ª - Um controlador/processador cumpre exatamente as instruções dadas, sem discussão.

2ª - Um controlador/processador não toma iniciativa em nenhuma ocasião, mesmo quando o desastre é


iminente.

3ª - Um controlador/processador jamais erra, quem erra é o programador.


Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 2/38
Definição

“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)

Um fluxograma é a representação gráfica da definição, análise ou solução de um problema onde símbolos


são utilizados para representar operações, dados, fluxos, equipamentos etc..

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.

A utilização de fluxograma apresenta algumas vantagens:

- São fáceis de fazer e compreender (melhor que um texto descritivo).

- Demonstram claramente o fluxo do programa ou atividade usando símbolos padronizados.

- Facilmente atualizados ou modificados.

A quantidade de informação que se coloca no fluxograma é suficiente para a compreensão do comando,


instrução ou processo.

O detalhamento deve ser evitado em favor da compreensão rápida.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 3/38
Símbolos
Os símbolos utilizados na construção de um fluxograma são básicamente os mostrados na fig.1:

Começo/fim – indica o começo e o fim de uma seqüência de comandos ou instruções.

Processo/comando/instruções – indica um procedimento ou operação.

Decisão – ponto em que dois ou três caminhos podem ser escolhidos.

Sub-rotina – indica outro fluxograma contendo uma seqüência de comandos ou


instruções.

Quebra de página – indica que o fluxograma continua em outra página.

Retorno de página – indica que em vem de outro fluxograma em outra página.

Flecha de sentido – indica direção que o fluxo de comandos ou instruções seguem

Linha de interligação – conecta os diversos símbolos do fluxograma

Fig. 1 – Símbolos usualmente empregados em fluxograma.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 4/38
Regras Básicas
Clareza e simplicidade na construção de um fluxograma são essenciais. Logo, detalhes de sistema ou
complexidades devem ser evitados logo no início do desenvolvimento do fluxograma.

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:

A primeira providencia é executar o projeto eletro-eletrônico completo com as seguintes informações:

- 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.

Então, algumas regras simples devem ser seguidas:

1. Iniciar do topo para a base da folha.

2. Desenvolvimento lateral deve ser da esquerda para a direita, preferencialmente.

3. Nas quebras de página, identificar numéricamente a página de destino/retorno.

4. Sempre empregar as flechas de sentido para maior clareza do fluxo de raciocínio.

5. Numerar as páginas seqüencialmente.

6. Escrever as operações dentro dos símbolos de forma clara e compacta.

7. Fazer comentários quando a descrição das operações não for suficiente.

c) Uso dos símbolos:

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:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 5/38
Fig.2 – Entra/saída de símbolos funcionais.

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.

sim >= < >

não <= =

Fig. 3 - Opções de saída para símbolo decisã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

a) Desvio Correto b) Desvio Não Possível

Fig. 4 – Opção Correta de desvio ou derivação lógica.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 6/38
4 – Vários caminhos lógicos convergindo para uma única solução é comum e, como já foi observado, a
um símbolo lógico associa-se uma única entrada. Conseqüência, os vários caminhos convergentes se
unem sobre uma linha de interligação (fig.5a). Evitar o uso igual ao da fig.5b para maior clareza e
organização do fluxograma.

a) Forma Adequada a) Forma não Adequada

Fig.5 – Convergência de Caminhos lógicos.

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.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 7/38
ROT_PRINC
Vem da Pg..2/10

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

Fig. 6 - Exemplo de fluxograma

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 8/38
d) Fazendo o fluxograma

Para iniciar um fluxograma é necessário que tenhamos um projeto, conhecimento do funcionamento deste
projeto e o seguinte material:

- Papel (preferencialmente rascunho) em quantidade.


- Lápis (vários) ou lapiseira (com muita carga) – não usar canetas.
- Borracha (grande).

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.

Fluxograma Básico – Projeto 1


Vamos adotar o Projeto 1 - Acionamento de um Led - como início do nosso procedimento. A fig.7 mostra o
diagrama funcional do projeto contendo as informações dos sinais de entrada e saída.

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

Fig. 7 - Diagrama funcional - Projeto 1

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:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 9/38
Tabela de Estados

Livre 1
B1
Pressionado 0

Apagado 0
L1
Aceso 1

Fig.8 - Tabela de Estados - Projeto 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.

Analisando o caso da fig.8, podemos afirmar que:

- 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.

Fig.9 - Descritivo Operacional - Projeto 1

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:

- Aperta o botão, acende o led.


- Solta o botão, apaga o led.

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

Fig.10 - Tabela Verdade – Projeto 1

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

Fig. 11 – Gráfico Funcional – Projeto 1.

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.

As figuras 7 e 11 dispõem de todas as informações necessárias para o desenvolvimento do fluxograma


lógico do Projeto 1 - Acionamento de um Led.

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

Fig.12 - Início fluxograma - Projeto 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 11/38
Observar que foi colocado um nome dentro do símbolo de início - Rot_Princ. Este nome (pode ser qualquer
um) é uma referencia ou endereço quando o programa do controlador for escrito.

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)

Fig.13 – Determinação do estado de B1 – Projeto 1

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:

Sim – B1 livre (logo B1 = 1)


Não – B1 pressionado (logo B1 = 0)

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

Fig.14 – Acréscimo das Instruções - Projeto 1


Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 12/38
Então, se B1 = 1 (sim - B1 livre) devemos desligar o led L1(L = 0) .Se B1 = 0 (não - B1 pressionado)
devemos ligar o led L1 (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:

1) Botão B1 está livre (B1 = 1).

ROT_PRINC Primeiro Caminho (fig.15a):

a) Inicia em ROT_PRINC.

SIM b) Verifica o estado do botão B1:


B1 = 1 ? L1 = 0
(B1 livre) # B1 livre (B1 = 1): segue para comando
NÃO
c) Apaga L1 (L1 = 0).
(B1 pressionado)

L1 = 1
Fig. 14a

Fig.14a – Análise Primeiro Caminho – Projeto 1

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:

1) Botão B1 está pressionado (B1 = 0).

ROT_PRINC Segundo Caminho (fig.15a):

a) Inicia em ROT_PRINC.

SIM b) Verifica o estado do botão B1:


B1 = 1 ? L1 = 0
(B1 livre) # B1 pressinado (B1 = 0): segue para comando
NÃO
(B1 pressionado)
c) Acende L1 (L1 = 0).

L1 = 1
Fig. 14b

Fig.14b – Análise Segundo Caminho – Projeto 1

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.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 13/38
Se quisermos saber se o estado de B1 sofreu alteração, será necessário voltar ao ponto do fluxograma
imediatamente anterior à pergunta sobre o estado do botão B1. E este retorno deve ser feito por ambos os
caminhos lógicos propostos. A fig.15 mostra o retorno anterior à verificação do estado do botão B1:

ROT_PRINC

SIM
B1 = 1 ? L1 = 0
(B1 livre)

NÃO
(B1 pressionado)

L1 = 1

Fig.15 - Fluxograma Completo - Projeto 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):

1) Botão B1 está livre (B1 = 1).


2) Led L1 apagado (L1 = 0).

ROT_PRINC Primeiro Caminho (fig.15a):

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

NÃO c) Apaga L1 (L1 = 0).


(B1 pressionado)
d) Retorna para verificar estado de B1 em
L1 = 1
ROT_PRINC
Fig.15a

Fig.15a – Análise Primeiro Caminho – Projeto 1

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:

1) Botão B1 pressionado (B1 = 0).


2) Led L1 apagado (L1 = 0).

A fig.15b mostra o caminho analisado:


Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 14/38
ROT_PRINC Segundo Caminho (fig.15b):

a) Inicia em ROT_PRINC.

SIM b) Verifica o estado do botão B1:


B1 = 1 ? L1 = 0
(B1 livre) # B1 pressionado (B1 = 0): segue para comando

NÃO c) Acende L1 (L1 = 1).


(B1 pressionado)

d) Retorna para verificar estado de B1 em


L1 = 1 ROT_PRINC.
Fig.15b

Fig.15b – Análise Primeiro Caminho – Projeto 1

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:

- O fluxograma é um ciclo fechado dinâmico, supervisionando constantemente o estado das entradas e


acionando as saídas de acordo com a lógica proposta.
- Através do fluxograma todas as opções possíveis de operação são analisadas e testadas.
- A partir do fluxograma é possível escolher os caminhos lógicos que envolvem o menor número de
instruções, isto é, o caminho mais curto ou o código-fonte mais eficiente.

Para a realização do fluxograma da fig.15 empregamos apenas três símbolos:

- Início.
- Decisão (ou desvio).
- Instrução/operação.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 15/38
Desvio Interno – Flag. – Projeto 2
Existem situações que exigem desvio no processo lógico, e estes não podem depender de um agente externo
ligado a uma entrada. A existência de um dispositivo externo implica na necessidade de algo ou alguém
interferindo no processo. Um desvio interno é provocado exclusivamente por processos internos. Apenas a
seqüência lógica determina a sua utilização ou não, independente de uma ação externa.

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

Fig.16 – Diagrama funcional Projeto – 2

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.

Elaborando a Tabela de Estados na fig.17:


Tabela de Estados

Livre 1
B1
Pressionado 0

Apagado 0
L1
Aceso 1

Fig.17 - Tabela de estados – Projeto 2.

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.

Fig.18 - Descritivo Operacional – Projeto 2.

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.

De maneira simples, o descritivo operacional da fig.18 pode ser resumido como:

- Aperta o botão para acender o led.


- Aperta o botão para apagar o led.

A Tabela Verdade para o Projeto 2 fica de acordo com a fig.19:

B1 L1
0 0
1 1
0 1
1 0
0 0

Fig.19 - Tabela Verdade – Projeto 2.

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

Fig.20 – Gráfico funcional - Projeto 2.

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:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 17/38
Início, verificação do estado de B1.

ROT_PRINC

SIM
B1 = 1 ?
(B1 livre)

NÃO
(B1 pressionado)

Fig.21 – Determinação do estado de B1.

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:

- Se o led L1 estiver apagado (L1 = 0), deve-se acendê-lo.


- Se o led L1 estiver aceso (L1 = 1), deve-se apagá-lo.

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

Fig.22 – Determinação do estado de L1 + ação correspondente.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 18/38
Agora o fluxograma da fig.22 está completo e atende aos requisitos de funcionamento descritos nas fig.18,19
e 20. Vamos fazer a análise do funcionamento do dispositivo a partir do fluxograma da fig.22:

Primeiro Caminho (fig.22a):


ROT_PRINC

a) Inicia em ROT_PRINC.

b) Verifica o estado do botão B1:


SIM
B1 = 1 ? # B1 livre (B1 = 1): retorna para verificar B1.
(B1 livre)

NÃO
(B1 pressionado)

SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)

L1 = 0 L1 = 1

Fig.22a – Análise Primeiro Caminho – Projeto 2

Segundo Caminho (fig.22b):


ROT_PRINC

a) Inicia em ROT_PRINC.

b) Verifica estado do botão B1:


SIM
B1 = 1 ?
# B1 pressionado (B1 = 0): segue para verificar
(B1 livre) L1.
NÃO
c) Verifica o estado de L1:
(B1 pressionado)
# L1 apagado (L1 = 0): segue para comando.

SIM NÃO d) Comando: acende L1 (L1 = 1).


L1 = 1 ?
(Ligado) (Desligado)

e) Retorna para verificar B1.

L1 = 0 L1 = 1

Fig.22b – Análise Segundo Caminho – Projeto 2

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 19/38
ROT_PRINC
Terceiro Caminho (fig.22c):

a) Inicia em ROT_PRINC.

b) Verifica estado do botão B1:


SIM
B1 = 1 ? # B1 pressionado (B1 = 0): segue para verificar
(B1 livre)
L1.
NÃO
c) Verifica o estado de L1:
(B1 pressionado)
# L1 aceso (L1 = 1): segue para comando.

SIM NÃO d) Comando: apaga L1 (L1 = 0).


L1 = 1 ?
(Ligado) (Desligado)
e) Retorna para verificar B1.

L1 = 0 L1 = 1

Fig.22c – Análise Terceiro Caminho – Projeto 2

Alerta: Um fluxograma permite enxergar, analisar e simular todas as opções e possibilidades


que um sistema dispõe. Mesmo a situação mais absurda deve ser analisada.

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%.

Conclusão: Os requisitos de funcionamento proposto não foram atendidos.

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.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 20/38
Podemos desenhar um novo fluxograma onde verificamos o estado do led L1 para adotarmos a ação do
botão B1 em seguida:

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

Fig.23 – Nova solução para fluxograma da fig.22.

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.

Vamos fazer a análise do funcionamento do dispositivo utilizando o fluxograma da fig.23a considerando as


condições:

1) Botão B1 está livre (B1 = 1).


2) Led L1 apagado (L1 = 0).

ROT_PRINC Primeiro Caminho (fig.23a):

a) Inicia em ROT_PRINC.

b) Verifica o estado de L1:


SIM NÃO
L1 = 1 ? # L1 apagado (L1 = 0): segue para
(Ligado) (Desligado)
verificar B1.

c) Verifica estado do botão B1:


SIM SIM # B1 livre (B1 = 1): retorna para
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) verificar L1.

NÃO NÃO
(B1 pressionado) (B1 pressionado)

L1 = 0 L1 = 1

Fig.23a – Análise Primeiro Caminho – Projeto 2

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 21/38
Pressionado o botão B1, o fluxograma da fig.23b mostra o novo caminho para as condições:

1) Botão B1 pressionado (B1 = 0).


2) Led L1 apagado (L1 = 0).

ROT_PRINC Segundo Caminho (fig.23b):

a) Inicia em ROT_PRINC.

b) Verifica o estado de L1:


SIM
L1 = 1 ?
NÃO # L1 apagado (L1 = 0): segue para
(Ligado) (Desligado) verificar B1.

c) Verifica estado do botão B1:


SIM SIM # B1 pressionado (B1 = 0): segue para
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) comando.

NÃO NÃO d) Comando: desliga L1 (L1 = 0).


(B1 pressionado) (B1 pressionado)
e) Retorna para verificar L1.
L1 = 0 L1 = 1

Fig.23b – Análise Segundo Caminho – Projeto 2

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:

1) Botão B1 está livre (B1 = 1).


2) Led L1 aceso (L1 = 1).

ROT_PRINC Terceiro Caminho (fig.23c):

a) Inicia em ROT_PRINC.

b) Verifica o estado de L1:


SIM
L1 = 1 ?
NÃO # L1 aceso (L1 = 1): segue para verificar
(Ligado) (Desligado) B1.

c) Verifica estado do botão B1:


SIM SIM # B1 livre (B1 = 1): retorna para
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) verificar L1.

NÃO NÃO
(B1 pressionado) (B1 pressionado)

L1 = 0 L1 = 1

Fig.23c – Análise Terceiro Caminho – Projeto 2

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 22/38
Agora pressionamos B1 (B1 = 0) e seguimos o caminho da fig.23d com as condições:

1) Botão B1 pressionado (B1 = 0).


2) Led L1 aceso (L1 = 1).

ROT_PRINC Quarto Caminho (fig.23d):

a) Inicia em ROT_PRINC.

b) Verifica o estado de L1:


SIM
L1 = 1 ?
NÃO # L1 aceso (L1 = 1): segue para
(Ligado) (Desligado)
verificar B1.

c) Verifica estado do botão B1:


SIM SIM # B1 pressionado (B1 = 0): segue para
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) comando.

NÃO NÃO d) Comando: liga L1 (L1 = 1).


(B1 pressionado) (B1 pressionado)
e) Retorna para verificar L1.
L1 = 0 L1 = 1

Fig.23d – Análise Quarto Caminho – Projeto 2

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

SIM NÃO SIM NÃO


L1 = 1 ? L1 = 1 ?
(Ligado) (Desligado) (Ligado) (Desligado)

SIM SIM SIM SIM


B1 = 1 ? B1 = 1 ? B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) (B1 livre) (B1 livre)

NÃO NÃO NÃO NÃO


(B1 pressionado) (B1 pressionado) (B1 pressionado) (B1 pressionado)

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.

Fazendo a inclusão do flag no fluxograma da fig.22:

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

Fig.24 - Inclusão do flag no fluxograma da fig.22.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 24/38
Podemos observar na fig.24 que o desvio do flag foi incluído entre a verificação de estado do botão B1 e do
led L1.

Para a análise de funcionamento da fig.24a, consideramos as condições iniciais:

1) Botão B1 está livre (B1 = 1).


2) Flag tem nível lógico igual a zero (FLAG = 0).
3) Led L1 apagado (L1 = 0).

ROT_PRINC Primeiro Caminho (fig.24a):

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

Fig.24a – Análise Primeiro Caminho – Projeto 2

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:

1) Botão B1 foi pressionado (B1 = 1) - para ligar L1


2) Flag tem nível lógico igual a zero (FLAG = 0).
3) Led L1 apagado (L1 = 0).

e seguir o caminho lógico mostrado na fig.24b para ligar L1:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 25/38
ROT_PRINC Segundo Caminho (fig.24b):

a) Inicia no retorno em ROT_PRINC.


NÃO
B1 = 1 ? FLAG = 0
b) Verifica estado do botão B1:
(B1 livre)
# B1 pressionado (B1 = 0): segue para verificar
SIM
(B1 pressionado)
FLAG.

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).

e) Retorna para verificar B1.


FLAG = 1 FLAG = 1

Fig.24b – Análise Segundo Caminho – Projeto 2

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:

1) Botão B1 continua pressionado (B1 = 1).


2) Flag foi acionado (FLAG = 1).
3) Led L1 foi aceso (L1 = 1).

O novo caminho a ser seguido é mostrado na fig.24c:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 26/38
ROT_PRINC
Terceiro Caminho (fig.24c):

a) Inicia no retorno em ROT_PRINC.


NÃO
B1 = 1 ? FLAG = 0
(B1 livre)
b) Verifica estado do botão B1:
# B1 pressionado (B1 = 0): segue para verificar
SIM
(B1 pressionado)
FLAG.

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

Fig.24c – Análise Terceiro Caminho – Projeto 2

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:

1) Botão B1 está livre (B1 = 1).


2) Flag tem nível lógico igual a zero (FLAG = 0).
3) Led L1 aceso (L1 = 1) - na condição inicial estava apagado (L1 = 0).

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:

1) Botão B1 é pressionado (B1 = 0).


2) Flag tem nível lógico igual a zero (FLAG = 0).
3) Led L1 aceso (L1 = 1).

A fig.24d mostra o novo caminho:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 27/38
ROT_PRINC Quarto Caminho (fig.24d):

a) Inicia no retorno em ROT_PRINC.

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)

c) Verifica estado do FLAG


FLAG = 1 ?
SIM # FLAG não acionado (FLAG = 0): segue para
(Acionado)
verificar L1.
NÃO
(Não Acionado) d) Verifica estado de L1
# L1 aceso (L1 = 1): segue para comando.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
e) Comando:
# Apaga L1 (L1 = 0).
L1 = 0 L1 = 1 # Liga FLAG (FLAG = 1).

e) Retorna para verificar B1.

FLAG = 1 FLAG = 1

Fig.24d – Análise Quarto Caminho – Projeto 2

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.

Conclusão: A colocação do flag no fluxograma da fig.22 eliminou o problema da incerteza de


funcionamento do dispositivo e L1 não pisca, ou seja, agora todos os requisitos descritos nas
figuras 16 a 20 foram atendidos.

Agora, vamos incluir o flag no fluxograma da fig.23, obtendo a fig.25 e analisar os resultados.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 28/38
ROT_PRINC

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

Fig.25 - Inclusão do Flag no fluxograma da fig.23.

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:

1) Led L1 apagado (L1 = 0).


2) Botão B1 está livre (B1 = 1).
3) Flag tem nível lógico igual a zero (FLAG = 0).

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 29/38
ROT_PRINC Primeiro Caminho (fig.25a):

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.

SIM SIM c) Verifica estado do Botão B1


B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) # B1 livre (B1 = 1): segue para
comando.
NÃO NÃO
FLAG = 0 FLAG = 0
(B1 pressionado) (B1 pressionado)
d) Comando:
# Desliga FLAG (FLAG = 0).
SIM SIM
FLAG = 1 ? FLAG = 1 ?
(Acionado) (Acionado)
e) Retorna para verificar L1 em
NÃO NÃO ROT_PRINC.
(Nao Aciionado) (Não Aciionado)

L1 = 0 L1 = 1

FLAG = 1 FLAG = 1

Fig.25a – Análise Primeiro Caminho

Agora vamos pressionar o botão B1 e analisar o caminho seguido na fig.25b, observando as condições:

1) Led L1 apagado (L1 = 0).


2) Botão B1 pressionado (B1 = 0).
3) Flag igual a zero (FLAG = 0).

ROT_PRINC Segundo Caminho (fig.25b):

a) Inicia em ROT_PRINC.

b) Verifica estado de L1:


SIM NÃO
L1 = 1 ? # L1 desligado (L1 = 0): segue para
(Ligado) (Desligado)
verificar B1.

c) Verifica estado do Botão B1


SIM SIM
B1 = 1 ? B1 = 1 ? # B1 pressionado (B1 = 0): segue
(B1 livre) (B1 livre)
para verificar FLAG.
NÃO NÃO
FLAG = 0 FLAG = 0
(B1 pressionado) (B1 pressionado) d) Verifica estado do FLAG
# FLAG desligado (FLAG = 0):
SIM
FLAG = 1 ? FLAG = 1 ?
SIM segue comando.
(Acionado) (Acionado)

e) Comando:
NÃO NÃO
(Nao Aciionado) (Não Aciionado)
# Acende L1 (L1 = 1)
# Liga FLAG (FLAG = 1).
L1 = 0 L1 = 1

f) Retorna para verificar L1 em


ROT_PRINC.
FLAG = 1 FLAG = 1

Fig.25b – Análise Segundo Caminho

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:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 30/38
1) Led L1 aceso (L1 = 1).
2) Botão B1 pressionado (B1 = 0).
3) Flag acionado (FLAG = 1).

O que nos leva a percorrer o caminho da fig.25c:

ROT_PRINC Terceiro Caminho (fig.25c):

a) Inicia em ROT_PRINC.

SIM NÃO b) Verifica estado de L1:


L1 = 1 ?
(Ligado) (Desligado) # L1 aceso (L1 = 1): 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
SIM SIM
# FLAG acionado (FLAG = 1):
(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

Fig.25c – Análise Terceiro Caminho

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.

Liberando o botão B1 (B1 = 1), as condições serão:

1) Led L1 aceso (L1 = 1).


2) Botão B1 livre (B1 = 1).

Observar que o estado do FLAG não será mais verificado quando o botão B1 for liberado.

O novo caminho a ser percorrido está na fig.25d:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 31/38
ROT_PRINC Quarto Caminho (fig.25d):

a) Inicia em ROT_PRINC.

b) Verifica estado de L1:


SIM NÃO
(Ligado)
L1 = 1 ?
(Desligado)
# L1 aceso (L1 = 1): segue para
verificar B1.

SIM SIM
c) Verifica estado do Botão B1
(B1 livre)
B1 = 1 ? B1 = 1 ?
(B1 livre)
# B1 livre (B1 = 1): segue comando.

NÃO NÃO d) Comando


FLAG = 0 FLAG = 0
(B1 pressionado) (B1 pressionado) # Desliga FLAG (FLAG = 0).
SIM SIM
FLAG = 1 ? FLAG = 1 ? e) Retorna para verificar L1 em
(Acionado) (Acionado)
ROT_PRINC.
NÃO NÃO
(Nao Aciionado) (Não Aciionado)

L1 = 0 L1 = 1

FLAG = 1 FLAG = 1

Fig.25d – Análise Quarto Caminho

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:

1) Led L1 aceso (L1 = 1).


2) Botão B1 pressionado (B1 = 0).
3) Flag desligado (FLAG = 0).

A fig.25e mostra como o caminho é seguido:

ROT_PRINC Quinto Caminho (fig.25e):

a) Inicia em ROT_PRINC.

b) Verifica estado de L1:


SIM NÃO
(Ligado)
L1 = 1 ?
(Desligado)
# L1 aceso (L1 = 1): segue para
verificar B1.

c) Verifica estado do Botão B1


SIM SIM
(B1 livre)
B1 = 1 ? B1 = 1 ?
(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 desligado (FLAG = 0):
SIM
FLAG = 1 ? FLAG = 1 ?
SIM
segue comando.
(Acionado) (Acionado)

NÃO NÃO
e) Comando:
(Nao Aciionado) (Não Aciionado) # Apaga L1 (L1 = 0)
# Liga FLAG (FLAG = 1).
L1 = 0 L1 = 1

f) Retorna para verificar L1 em


ROT_PRINC.
FLAG = 1 FLAG = 1

Fig.25e – Análise Quinto Caminho

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 32/38
Assim que desligamos 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:

1) Led L1 apagado (L1 = 0).


2) Botão B1 pressionado (B1 = 0).
3) Flag acionado (FLAG = 1).

O que nos leva a percorrer o caminho da fig.25f:

ROT_PRINC Sexto Caminho (fig.25f):

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

Fig.25f – Análise Sexto Caminho

Se liberarmos o botão B1 (B1 = 1), voltamos ao caminho representado pela fig.25 a, repetindo todos os
caminhos novamente.

Conclusão: A inclusão do flag no fluxograma da fig.23, produzindo o fluxograma da fig.25, eliminou o


problema da incerteza de funcionamento do dispositivo e L1 não pisca,ou seja,agora todos os
requisitos descritivos nas fig.16 a 20 foram atendidos.

Alguns comentários podem ser feitos a partir das soluções apresentadas para o Projeto 2:

a) Para o mesmo problema,vários fluxogramas podem ser desenvolvidos.

b) A aplicação de desvios condicionais (flags) não possui uma regra específica.

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.

Para confirmar o comentário, vamos observar a fig.26.


Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07
Pg. 33/38
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

Fig.26 – Solução sem flag para o fluxograma fig.23.

Vamos analisar o funcionamento do fluxograma da fig.26 para verificarmos se a retirada do flag e o


redirecionamento dos retornos operam da maneira adequada.

Portanto, estabelecendo as condições iniciais:

1) Led L1 apagado (L1 = 0).


2) Botão B1 livre (B1 = 1).

A fig.26a mostra o caminho:

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.

c) 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

Fig.26a – Análise Primeiro Caminho

Para ligar o led L1 será necessário pressionar o botão B1. Nesta condição, o fluxograma será analisado a
partir de:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 34/38
1) Led L1 apagado (L1 = 0).
2) Botão B1 pressionado (B1 = 0).

A fig.26b mostra o caminho seguido para ligar L1:

ROT_PRINC Segundo Caminho (fig.26b):

a) Inicia em ROT_PRINC.

SIM NÃO b) Verifica o estado de L1:


L1 = 1 ?
(Ligado) (Desligado) # L1 apagado (L1 = 0): segue para verificar B1.

c) Verifica estado do botão B1:


# B1 pressionado (B1 = 0): segue para comando.
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre) e) Comando:
# Acende L1 (L1 = 1).
NÃO NÃO
(B1 pressionado) (B1 pressionado)
e) Retorna para verificar B1.
L1 = 0 L1 = 1

Fig.26b – Análise Segundo Caminho

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):

a) Verifica estado do botão B1:


# B1 pressionado (B1 = 0): segue para comando.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
b) Comando:
# Acende L1 (L1 = 1).

c) Retorna para verificar B1.


SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)

NÃO NÃO
(B1 pressionado) (B1 pressionado)

L1 = 0 L1 = 1

Fig.26c – Análise Terceiro Caminho

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:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 35/38
ROT_PRINC
Quarto Caminho (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

Fig.26d – Análise Quarto Caminho

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:

1) Led L1 aceso (L1 = 1).


2) Botão B1 livre (B1 = 1).

ROT_PRINC
Quinto Caminho (fig.26e):

a) Retorna em ROT_PRINC.

SIM NÃO b) Verifica o estado de L1:


L1 = 1 ?
(Ligado) (Desligado) # L1 aceso (L1 = 1): segue para verificar B1.

c) Verifica estado do botão B1:


# B1 livre (B1 = 1): retorna para verificar B1.
SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)

NÃO NÃO
(B1 pressionado) (B1 pressionado)

L1 = 0 L1 = 1

Fig.26e – Análise Quarto Caminho

É 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:

1) Led L1 aceso (L1 = 1).


2) Botão B1 pressionado (B1 = 0).

A fig.26f mostra o caminho:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 36/38
ROT_PRINC
Sexto Caminho (fig.26f):

a) Verifica o estado de L1:


# L1 aceso (L1 = 1): segue para verificar B1.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
b) Verifica estado do botão B1:
# B1 pressionado (B1 = 0): segue para comando.

c) Comando:
SIM SIM
(B1 livre)
B1 = 1 ? B1 = 1 ?
(B1 livre)
# Apaga L1 (L1 = 0).

NÃO NÃO d) Retorna para verificar B1.


(B1 pressionado) (B1 pressionado)

L1 = 0 L1 = 1

Fig.26f – Análise Sexto Caminho

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):

a) Verifica estado do botão B1:


# B1 pressionado (B1 = 0): segue para comando.
SIM NÃO
L1 = 1 ?
(Ligado) (Desligado)
b) Comando:
# Apaga L1 (L1 = 0).

c) Retorna para verificar B1.


SIM SIM
B1 = 1 ? B1 = 1 ?
(B1 livre) (B1 livre)

NÃO NÃO
(B1 pressionado) (B1 pressionado)

L1 = 0 L1 = 1

Fig.26g – Análise Sétimo Caminho

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:

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 37/38
ROT_PRINC
Oitavo Caminho (fig.26):

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

Fig.26h – Análise OitavoCaminho

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:

1) Led L1 apagado (L1 = 0).


2) Botão B1 livre (B1 = 1).

Que nada mais é que a fig.26a do início da nossa análise:

ROT_PRINC Primeiro Caminho (fig.26i):

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.

c) 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

Fig.26i – Análise Primeiro Caminho

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.

Bento Alves Cerqueira Cesar Filho - R 1.4 - JUN_07


Pg. 38/38

Você também pode gostar