Você está na página 1de 85

INTRODUO PROGRAMAO nfase em Projetos de Sistemas Embarcados

Prof.: Joel Augusto dos Santos

CENTRO FEDERAL DE EDUCAO TECNOLGICA DE MINAS GERAIS


Coordenao de Eletrnica

ver.: 2013

INTRODUO PROGRAMAO nfase em Projeto de Sistemas Microcontrolados

Justificativa

A sociedade atual decorrente da evoluo tecnolgica e seus desdobramentos na produo e na rea da informao exige uma reestruturao permanente do processo educativo, pois a velocidade do desenvolvimento cientfico e tecnolgico torna o conhecimento adquirido rapidamente superado, sendo necessrio um processo de atualizao continuado. O mundo do trabalho exige indivduos cada vez mais qualificados, dotados de competncias relacionadas com a inovao, a criatividade, o trabalho em equipe e a autonomia na tomada de decises. Cabe educao profissional o desenvolvimento de competncias que proporcionem condies de laboralidade, de forma que o trabalhador possa manter-se em atividade produtiva em contextos socioeconmicos instveis. Torna-se fundamental a busca por situaes de aprendizagem inovadoras, sequncias didticas e projetos que mobilizem menos o processo de memorizao e mais o raciocnio, potencializando a interao professoraluno e aluno-aluno, na busca de formas coletivas de construo do conhecimento. A contextualizao dos contedos e a interdisciplinaridade promovem um ambiente frtil retirando o aluno da condio de espectador, propiciando aprendizagens mais significativas no mbito da vida pessoal, social, cultural e produtiva. Esse trabalho busca atingir tais objetivos atravs do uso da metodologia de projetos aplicativos fomentando a inovao e a pesquisa de forma ordenada e estruturada, promovendo e incentivando a transformao dos conhecimentos adquiridos pelos alunos em ativos permanentes.

Prof. Joel Augusto dos Santos

"A educao seria muito mais efetiva se seu propsito fosse assegurar que quando eles deixassem a escola, todo menino e menina deveriam saber o quanto eles no sabem, e serem imbudos com um desejo vitalcio de sab-lo." Sir William Haley

Conhecimento:
Conhecer os conceitos bsicos de algoritmos, programao estruturada e linguagem C padro ANSI, aplicada a sistemas baseados em microcontroladores.

Habilidades adquiridas:
Transformar a soluo de problemas reais em mquina de estados e algoritmos, utilizando conceitos e tcnicas aplicadas programao de sistemas; Programar os sistemas projetados utilizando linguagem estruturada C padro ANSI.

Atitudes:
Compreender a importncia das tcnicas de programao nos atuais sistemas microcontrolados, bem como o uso destas tecnologias com ganho de performance e custo, no projeto de equipamentos embarcados nas diversas reas de aplicao.

CENTRO FEDERAL DE EDUCAO TECNOLGICA DE MINAS GERAIS


MAIO - 2013 3

ndice do contedo

Introduo Bit-01- A Lei de Moore est Chegando ao Fim? Captulo 1 - Representao de Nmeros em Sistemas Computacionais 1.1 Nmeros Naturais 1.2 Nmeros Inteiros 1.3 Nmeros Reais 1.4 Overflow e Underflow 1.5 Ponto Flutuante 1.6 Cdigos Binrios 1.6.1 Cdigos BCD 1.6.2 Cdigo Hexadecimal 1.6.3 Cdigo ASCII Exerccios 01 Captulo2 Modelagem de Sistemas Computacionais 2.1 Mquina de Estado Finito 2.1.1 Modelo Moore 2.2.2 Modelo Mealy Projeto Porto de Garagem Automtico Exerccio 02 Bit-02 - Rob Audiob Captulo 3 Lgica de Programao - Algoritmos 3.1 A tcnica Top-Down 3.2 Descrio Narrativa 3.3 Fluxogramas Exerccio 03

5 9 10 10 10 12 13 14 17 17 18 18 22 23 23 27 27 29 31 32 33 34 34 35 37

3.4. Pseudocdigo 3.4.1 Estrutura do Pseudocdigo 3.4.2 Linearizao de expresses Exerccio 04 Bit 03 Visualg Exerccios para Lgica de Programao Captulo 4 Introduo Linguagem de Programao C 4.1 Processo de Criao de um Programa 4.2 A Estrutura da Linguagem C 4.3 Variveis e Tipos de Dados 4.4 Operadores 4.4.1 Operador de Atribuio 4.4.2 Operadores Aritmticos 4.4.3 Operadores de Relao e Lgicos 4.4.4 Incremento e Decremento 4.4.5 - Precedncia 4.5 Estruturas de Controle de Fluxo 4.5.1 Comando if 4.5.2 comando if-else-if 4.5.3 switch 4.5.4 loop for 4.5.5 while 4.5.6 do while 4.5.7 break Exerccio 05 4.6 Matrizes e Vetores 4.6.1 vetores 4.6.2 matrizes

38 39 40 44 45 46 46 48 51 52 52 52 52 53 54 54 54 55 56 57 58 58 59 60 62 62 65

4.7.3 strings Exerccio 06 Bit-04 ANSI e ISO C Captulo 5 Desenvolvimento de Projetos com Microcontroladores 5.1 Metodologia de Projeto de Sistemas Embarcados 5.2 Projeto Pisca Led com MSP430 5.2.1 Escopo do Projeto 5.2.2 Descrio do Hardware 5.2.3 Desenvolvimento do Cdigo Fonte 5.3 Projeto Sensor de Temperatura com LM35 5.3.1 Escopo do Projeto 5.3.2 Justificativa 5.3.3 Fundamentao Terica 5.3.4 Cdigo do Programa

66 68 69 70 73 74 74 74 74 79 79 79 79 82

Introduo

Em 1958, um jovem engenheiro chamado Jack Kilby foi trabalhar para a empresa Texas Instruments, que j possua uma grande reputao em inovao. Ele trabalhava com uma tcnica de micro mdulos (dispositivos empilhados como pratos) e imaginou a possibilidade de, ao invs de empilhar os componentes, fabric-los no mesmo pedao de material. O primeiro prottipo era um oscilador de deslocamento de fase, um circuito simples que convertia corrente contnua em corrente alternada. Ao invs de utilizar vrios componentes discretos, fabricou ento uma tira fina de germnio com quatro terminais de mais o terminal de terra, sendo composto por um transistor, um capacitor e trs resistores. Todo o material era unido atravs de cera como mostra a figura 1 e foi patenteado em 1959.

Figura 1 Primeiro circuito integrado Texas Instruments, 1959

Era o incio de uma grande evoluo tecnolgica sem data para terminar. A escala de integrao dos circuitos integrados foi alcanando gradativamente nveis cada vez mais elevados, constituindo 4 grupos principais: SSI (Small Scale Integration) Integrao em pequena escala: So os Circuitos Integrados com menos componentes, e os primeiros da histria. Podem dispor de at 30 dispositivos por pastilha (chip). MSI (Medium Scale Integration) Integrao em mdia escala: Corresponde aos Circuitos Integrados com vrias centenas de componentes, podendo
7

possuir de 30 a 1000 dispositivos por pastilha Estes circuitos incluem descodificadores, contadores, etc. LSI (Large Scale Integration) Integrao em larga escala: Contm milhares de componentes podendo possuir de 1000 at 100 000 dispositivos por pastilha. Estes circuitos normalmente executam funes lgicas complexas, tais como toda a parte aritmtica de uma calculadora, um relgio digital, etc. VLSI (Very Large Scale Integration) Integrao em muito larga escala: o grupo de Circuitos Integrados com um nmero de componentes compreendido entre 100 000 e 10 milhes de dispositivos por pastilha. Estes circuitos so utilizados na implementao de dispositivos programveis como microprocessadores, microcontroladores, processadores digitais de sinais e circuitos de aplicao com hardware reconfigurvel ou Dispositivos Lgicos Reprogramveis (Programmable Logic Device - PLD) que inclui, por exemplo, o FPGA - Field Programmable Gate Array. Os microcontroladores esto presentes em quase tudo o que envolve a eletrnica nos dias atuais, diminuindo o tamanho, facilitando a manuteno e gerenciando tarefas internas de aparelhos eletroeletrnicos. Um microcontrolador pode efetuar vrias funes que necessitariam de um grande nmero de outros componentes discretos. Assim, conhecer as tcnicas de programao e aprender a programar microcontroladores significa aprender a desenvolver circuitos para suprir exigncias de projetos para as mais diversas aplicaes como sistemas de segurana, controle industrial, equipamentos mdicos, automao residencial, entretenimento e outros. Por meio da abordagem dos aspectos tericos e prticos de linguagens de programao, possvel desenvolver projetos e implementar sistemas microcontrolados de pequeno mdio e grande porte. O quadro apresentado na figura 2, mostra uma inusitada aplicao de um dispositivo microcontrolado e prova que o uso desses dispositivos somente limitado pela criatividade de cada um. CHUVEIRO COM SHOW DE LUZES
Mais do que apenas inovador e bonitinho, esse chuveiro realmente til. As luzes emitidas pelo chuveiro indicam a temperatura da gua para voc nunca mais se queimar ou tomar um susto com a gua gelada de novo. As luzes vo do verde (quando a temperatura est inferior a 32 graus) ao vermelho intenso (mais de 45 graus). Entre os dois extremos, o chuveiro varia entre azul, laranja, roxo e rosa.
Fonte: http://gerundioinsano.blogspot.com/2011/06/10-chuveirosabsurdamente-tecnologicos.html

Figura 2 Exemplo de aplicao de microcontroladores


8

Fonte: http://olhardigital.uol.com.br/produtos/digital_news/noticias/a-lei-de-moore-esta-chegando-ao-fim

A Lei de Moore est chegando ao fim?


Cientista afirma que, a partir de 2020, o conceito de duplicao do poder dos processadores a cada 18 meses deve acabar
Stephanie Kohn A Lei de Moore bastante conhecida no mundo da tecnologia. Criada em 1965 pelo ento presidente da Intel, Gordon E. Moore, esse conceito sugere que o nmero de transistores em um processador dobraria a cada 18 a 24 meses ao mesmo custo. O padro se mantm h anos, mas, segundo o cientista Michio Kaku, autor de diversos livros sobre fsica e futurologia, no deve se perpetuar por muito tempo. De acordo com o cientista, a famosa lei, que serve de parmetro no somente para os computadores domsticos, mas para qualquer dispositivo digital, deve acabar em breve. A previso que a partir de 2020, a Lei de Moore no seja mais aplicvel. Em seu mais recente livro, "A Fsica do Futuro", Kaku afirma que os transistores sero to pequenos que entraro em coliso com as leis fsicas. Um bit de informao se resumir a um tomo, o que ir impor um limite fsico ao desenvolvimento dos computadores. Com isso, Kaku acredita que o Vale do Silcio, regio da Califrnia (Estados Unidos) onde se concentram as maiores empresas de tecnologia, poder entrar em colapso. O motivo simples: sem a Lei de Moore, no haver nada que impulsione o aumento no poder de processamento na computao e, consequentemente, no haver interesse do consumidor em adquirir novos produtos. Esses argumentos apresentados pelo cientista no so exatamente novos e j foram discutidos at mesmo pelo prprio criador do conceito, em 2005. Outro pesquisador da rea de concepo de computadores da IBM, Carl Anderson, tambm sugeriu que a Lei de Moore teria um breve fim. No entanto, Anderson acredita que o fim da lei deve ocorrer por outros motivos. Ele destaca que os engenheiros, atualmente, desenvolvem sistemas que exigem cada vez menos recursos do processador e que os custos para pesquisas de novos processadores esto cada vez mais altos. De acordo com o pesquisador, trs novas tecnologias - mais rpidas, sofisticadas e econmicas - de processadores emergentes tambm podem significar o trmino da Lei de Moore. So elas: os chips com conexes pticas; os processadores 3D (com circuitos tridimensionais empilhados uns em cima dos outros); e os processadores com sistemas aceleradores. O outro lado da moeda Se para alguns a Lei de Moore deve acabar, para outros, como o professor de engenharia da Universidade de Stanford, Jonathan Koomey, o conceito de Gordon poderia ser ampliado. A nova mxima aposta que o consumo de bateria ir diminuir com o tempo, mas a eficincia no desempenho deve continuar crescendo. De acordo com o site Technology Review, a teoria de Koomey se baseia nos aparelhos mveis como tablets e smartphones. Mesmo menores em tamanho, os equipamentos continuam recebendo melhorias em desempenho. O professor acredita que as atualizaes no teriam limites e dependeriam, exclusivamente, da inteligncia humana. "A ideia que com uma carga fixa na computao, a quantidade de bateria que voc precisa ir diminuir por duas vezes a cada ano e meio", comentou Jonathan Koomey. No fim de 2010, a Intel levantou, por meio de anlises e pesquisas, doze assuntos que iriam pautar o mercado de tecnologia no ano que vem. A companhia compartilhou um pouco da opinio de Koomey. "Inovaes e tcnicas de manufatura continuaro a desafiar os cticos que dizem que a Lei de Moore est morta. Isso significa que nos prximos anos, enquanto bilhes de novos dispositivos adquirem capacidade de computao e conectividade Internet, eles tero melhor desempenho com mais caractersticas embarcadas no silcio, ao mesmo tempo em que reduziro dramaticamente o consumo de energia e ampliaro a durao da bateria", dizia a pesquisa. Em maio deste ano, a Intel anunciou um avano cientfico e uma inovao histrica, apresentando transistores chamados Tri-Gate, que sero adotados na tecnologia de produo dos prximos processadores. Para o CEO da companhia, esse marco vai muito alm do acompanhamento do ritmo da Lei de Moore."Os benefcios da baixa voltagem e do baixo consumo de energia ampliam em muito o que normalmente vemos com a transio de um processo tecnolgico para o prximo", concluiu o CEO.

Captulo 1
Representao de Nmeros em Sistemas Computacionais

Foi a dificuldade de representar um dgito decimal, um nmero inteiro entre 0 e 9, em componentes eltricos que determinou o uso da base 2 nos primeiros computadores at os dias de hoje. A lgica booleana, baseada na representao binria, foi usada na implementao dos circuitos eltricos a partir do sculo XX e ainda hoje continua sendo a lgica utilizada nos modernos computadores, tablets, celulares, TV digital e todo tipo de equipamento que a moderna tecnologia nos proporciona.

1.1 - Nmeros Naturais A forma mais intuitiva de representar nmeros em um sistema computacional seria atravs da converso do nmero decimal para seu correspondente em binrio. Como os computadores operam sempre em binrio, essa seria a forma mais imediata e eficiente. Quando representamos nmeros desta forma, no temos nmeros negativos. Logo, nenhum nmero possui sinal algum. Por isso, chamamos tais nmeros de unsigned (sem sinal). Atualmente, a maioria das mquinas possui representao numrica de 32 bits. Isso significa que seus nmeros so compostos por 32 dgitos. Com uma representao destas, o menor nmero binrio sem sinal que podemos representar 00000000000000000000000000000000 e o maior 1111111111111111111111111111111. Convertendo tais valores para decimal, chegamos concluso que a maioria dos computadores s lida com nmeros sem sinal cujo valor esteja entre 0 e 4.294.967.295 - que so os equivalentes decimais destes nmeros. Para descobrir qual o equivalente decimal de um nmero binrio de 32 bits, usa-se a frmula abaixo: N0 * 232 + N1 * 231 + N2 * 230 + N3 * 229 + (...) + N29 * 23 + N30 * 22 + N31 * 21 + N32 * 20 onde N0 o dgito mais significativo e N32 o bit menos significativo. 1.2 - Nmeros Inteiros S que os nmeros podem ser positivos ou negativos. Um aspecto primordial a ser definido seria ento como representar o sinal. Nesta representao foi definida a utilizao de mais um bit na representao (o bit mais representativo ou significativo), representando o sinal, com a seguinte conveno:
10

bit 0 ==> sinal positivo bit 1 ==> sinal negativo A tabela 01 apresenta alguns exemplos de nmeros e sua representao em binrio:

Valor decimal +9 -9 +127 -127

Valor binrio com 8 bits (7 + bit de sinal) 00001001 (bit inicial 0 significa positivo) 10001001 (bit inicial 1 significa negativo) 01111111 (bit inicial 0 significa positivo) 11111111 (bit inicial 1 significa negativo)

Tabela 01 representao binria com sinal Assim, uma representao em binrio com n bits teriam disponveis para a representao do nmero n-1 bits (o bit mais significativo representa o sinal). Essa representao tem o nome de representao em sinal e magnitude. sinal magnitude

Figura 3 representao sinal e magnitude Entretanto, tal forma de representao j foi abandonada h muito tempo. Um dos principais motivos para o abandono desta representao est no fato de sempre termos que verificar o primeiro bit para descobrir como efetuar uma soma ou subtrao entre dois nmeros. Alm disso, tal representao tornaria possvel um "+0" e um "-0". A forma de se representar nmeros inteiros em computadores modernos chamada de Representao em Complemento de 2. Ela feita da seguinte forma: Os 31 bits mais esquerda representam sempre nmeros positivos. Calculamos o que eles representam com a mesma frmula vista acima. Entretanto, o primeiro bit representa sempre "0" se o seu valor for "0" ou " 232 se o seu valor for "1". Assim, a frmula para se calcular o que representa um nmero binrio inteiro em decimal : N0 * 232 + N1 * 231 + N2 * 230 + N3 * 229 + (...) + N29 * 23 + N30 * 22 + N31 * 21 + N32 * 20 onde N0 o dgito mais significativo e N32 o bit menos significativo. A representao em complemento de 2 boa pelos seguintes motivos:
11

Para somar dois nmeros inteiros, usa-se o mesmo mtodo. No precisamos verificar o sinal deles. Com isso, podemos criar um circuito digital mais rpido; Descobrir o inverso de um nmero tambm simples. Basta invertermos todos os bits e, em seguida, somarmos 1. Sempre funciona; O "0" sempre "0". No existe uma verso negativa ou positiva deste nmero. Por meio desta notao, nmeros to pequenos como -4.294.967.296 e to grandes como 4.294.967.295 podem ser representados.

1.3 - Nmeros Reais

Tambm muito til que computadores possam representar nmeros reais. Vamos estudar agora como eles costumam ser representados em sistemas computacionais. A forma mais lgica e verstil de representarmos um nmero real por meio da notao cientfica. Um nmero decimal em notao cientfica sempre toma a seguinte forma: N * 10M onde N sempre um nmero real maior ou igual a 1 e menor que 10 que pode ser positivo ou negativo enquanto M um nmero inteiro qualquer (que pode ser positivo ou negativo). Por exemplo: 3,15756 * 109 representa aproximadamente quantos segundos existe em um sculo enquanto 1,00000 * 10 9 representa quantos segundos existem em um nanossegundo. Alternativamente, podemos representar tambm nmeros em notao cientfica utilizando uma base binria: 1,00000 * 10 1. Lembre-se que esse "10" significa na verdade "2" em representao decimal. Ou seja, o nmero representado na verdade 0,5 e no 0,1. Enfim, quando temos um nmero em notao cientfica binria, ele sempre tem a seguinte forma: S * 1,XXXXX * 10YYYYY , onde "S" representa o sinal (que pode ser positivo ou negativo), "XXXXX" so as partes fracionrias do nmero e "YYYYYY" representa o expoente. Ento, para representarmos nmeros reais, precisamos representar no espao de 32 bits os valores do sinal, frao e expoente. Isso feito da seguinte forma: S -- E E E E E E E E -- F F F F F F F F F F F F F F F F F F F F F F F

12

O Sinal representado em um nico bit (1 para negativo e 0 para positivo), o expoente representado por 8 bits e a frao representada por 23 bits. Assim, o exemplo 1,00000 * 10 1 (ou 1/2 em decimal) representado: 0 -- 1 1 1 1 1 1 1 1 -- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Com esta representao, nmeros quase to pequenos como 238 ou quase to grandes como 238 podem ser armazenados. Entretanto, note que a nossa preciso no perfeita. Existem muitos nmeros que no podem ser representados desta forma. Por isso, sempre preciso realizar arredondamentos. E quanto mais operaes realizamos, mais erros acabam sendo acumulados. Por essa razo, a maioria dos computadores possui tambm uma forma mais precisa de representao de nmeros reais. Essa forma normalmente ocupa o dobro do espao do que costuma ocupar. Uma representao deste tipo ocupa 64 bits. Ela funciona da seguinte forma: S -- E E E E E E E E E E E -- F F F F F F F F F F F F F F F F F F F F F F F F F FFFFFFFFFFFFFFFFFFFFFFFFFFF Apesar de gastarmos o dobro do espao de armazenamento desta forma, aumentamos consideravelmente a faixa de valores representados e a preciso com a qual podemos represent-los. 1.4 - Overflow e Underflow Overflow o nome do resultado incorreto ao qual chegamos quando tentamos somar nmeros grandes demais e o resultado no pode ser armazenado e nem representado em 32 bits. Ele pode ocorrer quando efetuamos as seguintes operaes: Somamos dois nmeros positivos Somamos dois nmeros negativos Subtramos um nmero negativo de um positivo. de responsabilidade do hardware sempre verificar se ocorreu um overflow nestes casos. Normalmente, para fazer a verificao basta conferir os sinais dos nmeros. Em caso afirmativo, ele deve ativar um sinal de exceo. O que feito caso uma exceo seja detectada, depende de cada programa. Em linguagens de alto nvel, o comportamento depende da linguagem usada. C, por exemplo, ignora todos os Overflows. Ao contrrio de Fortran que requer que o programa sempre seja avisado.

13

Underflow o que acontece quando lidamos com um nmero real to prximo de 0 que o valor do expoente no pode ser corretamente representado. Quando um programa requer uma preciso to grande assim, recomenda-se o uso de pontos flutuantes de dupla preciso (double) para evitar este inconveniente. 1.5 - Ponto Flutuante Ponto flutuante (floating point) ou vrgula flutuante um formato de representao digital de nmeros reais. O nmero dividido numa mantissa (M) e um expoente (E). O valor representado obtido pelo produto: M 2E Desta forma possvel cobrir um largo espectro de nmeros, maximizando o nmero de bits significativos e consequentemente a preciso da aproximao. Esta forma de representao foi criada por Konrad Zuse ( 1910 - 1995), Cientista e inventor alemo, para os seus computadores Z1 e Z3. O nmero de bits alocados para representar a mantissa e o expoente depende da norma utilizada. A maioria dos sistemas que operam com ponto flutuante utilizam representaes definidas na norma IEEE 754, publicada em 1985 pelo Institute of Electrical and Electronics Engineers. A Norma IEEE 754-2008 define os formatos adequados para representar nmeros em ponto flutuante de preciso simples (32 bits) e de preciso dupla (64 bits). O formato de ponto flutuante de preciso simples (32 bits) consiste num bit de sinal (s), 8 bits de expoente (e) e uma mantissa de 23 bits (m). O bit de sinal (s) 0 (zero) para nmeros positivos e 1 para nmeros negativos. O campo de expoente (e) corresponde soma de 127 com o expoente de base 2 do nmero representado. O campo de mantissa (m) corresponde parte fracionria da mantissa do nmero representado. Considera-se a sempre a mantissa normalizada entre 1 e 2. Desta forma a sua parte inteira sempre apenas um bit igual a 1 (um) que no necessrio representar. v = S M 2E Onde: S=12s M = 1.m = 1 + m 223 E = e 127 Por exemplo, a frao decimal: 0,125 representada por: 1/10 + 2/100 + 5/1000.
14

Da mesma forma, a frao binria: 0,001 tem valor: 0/2 + 0/4 + 1/8. Os dois valores so idnticos, sendo o primeiro escrito na base 10 e o segundo na base 2.

Valor

S M 2E

IEEE 754 - Single Precision

1 1 20

0x00

127 0 0111 1111 000 0000 0000 0000 0000 0001

-1

-1 1 20

0x00

127 1 0111 1111 000 0000 0000 0000 0000 0001

0,5

1 1 21

0x00

126 0 0111 1110 000 0000 0000 0000 0000 0000

-0,5

-1 1 21

0x00

126 1 0111 1110 000 0000 0000 0000 0000 0000

0,15625 1 1,25 23 0 0x200000 124 0 0111 1100 010 0000 0000 0000 0000 0000

Tabela2 Representao IEE 754 padro simples

15

As notaes com os bits do campo expoente (e) todos a um ou todos a zero so reservadas para valores especiais. O zero representado com e=0 e m=0. Outros valores de m com e=0 indicam nmeros no normalizados. Nestes casos considera-se a mantissa entre 0 e 1.

IEEE 754 - Single Precision Valor s e m

0 0000 0000 000 0000 0000 0000 0000 0000

+0 Zero

1 0000 0000 000 0000 0000 0000 0000 0000

-0

0 1111 1111 000 0000 0000 0000 0000 0000

+Inf

Infinito Positivo

1 1111 1111 000 0000 0000 0000 0000 0000

-Inf

Infinito Negativo

0 1111 1111 010 0000 0000 0000 0000 0000

+NaN Not a Number

1 1111 1111 010 0000 0000 0000 0000 0000

-NaN

Tabela 3 Representao IEE 754 padro simples Muitas fraes decimais no podem ser representadas exatamente como fraes binrias finitas. Por consequncia, diversos nmeros armazenados na mquina em vriveis do tipo ponto flutuante (float, double, real) so apenas aproximaes. Considere, por exemplo, a frao 1/3. Uma aproximao decimal seria: 0,3 ou, melhor: 0,33 ou, ainda melhor: 0,333 e assim por diante. No existe uma frao finita capaz de resultar em exatamente 1/3.

16

Um outro exemplo interessante a frao 1/10. Em muitas linguagens de programao, apesar de rotinas de impresso mostrar o valor 0,100000, se exibirmos o nmero com maior preciso (por exemplo, 20 casas decimais), veremos que o valor real armazenado ser algo aproximado de: 0,10000000149001612000 (o valor pode mudar segundo o hardware e a linguagem utilizada).

1.6 - Cdigos binrios


O sistema binrio ou base 2, um sistema de numerao posicional em que todas as quantidades se representam com base em dois numeros, com o que se dispe das cifras: zero e um (0 e 1). Os computadores digitais trabalham internamente com dois nveis de tenso, pelo que o seu sistema de numerao natural o sistema binrio (aceso, apagado). Com efeito, num sistema simples como este possvel simplificar o clculo, com o auxlio da lgica booleana. Em computao, chama-se um dgito binrio (0 ou 1) de bit, que vem do ingls Binary Digit. Um agrupamento de 8 bits corresponde a um byte (Binary Term). Um agrupamento de 4 bits chamado de nibble. O sistema binrio base para a lgebra booleana (de George Boole - matemtico ingls), que permite fazer operaes lgicas e aritmticas usando-se apenas dois dgitos ou dois estados (sim e no, falso e verdadeiro, tudo ou nada, 1 ou 0, ligado e desligado). Toda eletrnica digital e computao est baseada nesse sistema binrio e na lgica de Boole, que permite representar por circuitos eletrnicos digitais (portas lgicas) os nmeros, caracteres, realizar operaes lgicas e aritmticas. Os programas de computadores so codificados sob forma binria e armazenados nas mdias (memrias, discos, etc) sob esse formato. Dado um nmero N, binrio, para express-lo em decimal, deve-se escrever cada nmero que o compe (bit), multiplicado pela base do sistema (base = 2), elevado posio que ocupa. Uma posio esquerda da vrgula representa uma potncia positiva e direita uma potncia negativa. A soma de cada multiplicao de cada dgito binrio pelo valor das potncias resulta no nmero real representado. Exemplo: 101,01(2) = 1x22 + 0x21 + 1x20, 0x2-1 + 1x2-2 = 4 + 0 + 1 , 0/21 + 1/22 = 5,25(10) Alguns cdigos porm, so desenvolvidos tendo em vista um objetivo especfico como a transmisso de dados entre sistemas, deteco de falhas de transmisso ou representao da informao em uma interface homem/mquina IHM.

1.6.1 - Cdigo BCD


um cdigo binrio que expressa os nmeros decimais, Decimal Codificado em Binrio. Como s existem 10 dgitos no sistema decimal (0 at 9) a tabela verdade do cdigo BCD vai da linha 0 at a linha 9 somente. Este tipo de cdigo usado, por exemplo, para mostrar ao ser humano o resultado das operaes com nmeros binrios feito pelos computadores e circuitos digitais. 17

Para representar um nmero decimal no cdigo BCD cada nmero decimal gera 1 nmero binrio de 4 dgitos, como no exemplo abaixo: N=123 escrito em BCD resulta: 1 0001 2 0010 3 0011

N= 0001 0010 0011 Observe que o cdigo BCD requer mais dgitos binrios para representar o mesmo nmero decimal que o correspondente cdigo binrio. Por exemplo para representar o nmero N=12 no cdigo binrio N=1100 no cdigo BCD N= 0001 0010. 1.6.2 Cdigo Hexadecimal O sistema hexadecimal um sistema de numerao posicional que representa os nmeros em base 16. Representado pelos smbolos: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Ele muito utilizado para representar nmeros binrios de uma forma mais compacta, pois muito fcil converter binrios pra hexadecimal e vice-versa. Dois dgitos hexadecimais correspondem exatamente a um byte.Dessa forma, esse sistema bastante utilizado em aplicaes de computadores e microprocessadores (programao, impresso e displays). Exemplo: 1011 1101 B D

1.6.3 - Cdigo ASCII


Este cdigo usado para transmitir informaes alfanumricas. nmeros binrios expressa uma letra, nmero ou smbolo usado cdigo usado na transmisso dos dados entre o teclado e o exemplo, e tambm pode ser usado por programas de computao tecla que foi pressionada. A sequncia de na escrita. Este computador, por para identificar a

O cdigo ASCII um cdigo de 8 Bits, 7 bits so usados para transmitir a informao e o oitavo bit pode ser usado para informar a paridade ou pode ser levado para o valor zero. Todo caractere tem sua representao em 8 bits, mas um conjunto de 8 bits pode caracterizar tambm uma instruo. Como ficou estabelecido a representao de um caracter alfa numrico ser expresso em 8 bits, ou vrios grupos de 8 bits aglutinados. Definiu-se que qualquer conjunto de 8 bits ser chamado de byte (BinarY TErm, ou termo binrio). 18

Ao ser criado o ASCII - American Standard Code for Information Interchange (Cdigo Americano Padro para Troca de Informaes) utilizava apenas 127 cdigos diferentes, para representar um conjunto de caracteres de controle para o fluxo de dados, alm de caracteres imprimveis, de uso corrente na lngua inglesa (letras maisculas e minsculas de A at Z; os dgitos de 0 a 9, e sinais grficos de pontuao).

cdigo 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031

caracter CTRL-@ CTRL-A CTRL-B CTRL-C CTRL-D CTRL-E CTRL-F CTRL-G CTRL-H CTRL-I CTRL-J CTRL-K CTRL-L CTRL-M CTRL-N CTRL-O CTRL-P CTRL-Q CTRL-R CTRL-S CTRL-T CTRL-U CTRL-V CTRL-W CTRL-X CTRL-Y CTRL-Z CTRL-[ CTRL-\ CTRL-] CTRL-^ CTRL-_

cdigo 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063

caracter (BRANCO) ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

cdigo 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095

caracter @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _

cdigo 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

caracter ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DEL

Tabela 4 Tabela ASCII original


Com o surgimento dos microcomputadores pessoais e sua popularizao mundial, ficou patente a necessidade de se representar caracteres acentuados (com diacrticos) em funo de aquelas mquinas estarem atingindo mercados no concebidos originalmente, e que se utilizavam de uma gama maior de tipos imprimveis. Foi desta forma que a IBM ao lanar o seu PC (Personal Computer) ampliou a tabela ASCII dando a ela a capacidades de 256 caracteres codificados, incluindo ento alm de diacrticos uma srie de caracteres semi-grficos.

19

Tabela 4 - Tabela ASCII estendida de 1981 (hoje CP 437)


Esta ampliao da tabela ASCII, como pode ser observado, contemplava muitos caracteres acentuados, porm ainda no acomodava todas as possibilidades de diacrticos, principalmente para os idiomas de origem latina (p. ex.: ; ; ; ; etc.). Ainda se carecia de alguns caracteres maisculos acentuados, sem deixar de lembrar do uso do til nas vogais "a" e "o". Com esta necessidade fervilhando no mercado, a Microsoft implementou o conceito de Pginas de Cdigo, onde haveriam diversas tabelas ASCII estendidas para cada necessidade. Aquela original recebeu a denominao de ASC 437 (Cdigo de Pgina para US) e aquela que melhor nos serve para os pases da Amrica Latina recebeu a denominao ASC 850 (Cdigo de Pgina Latin I), que mostrada na tabela a seguir.

20

cdigo 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159

caracter

cdigo 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

caracter _ _ _ + + +

cdigo 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223

caracter + + + + + + i + + _ _ _

cdigo 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

caracter _ _

Tabela 5 - Tabela ASCII estendida CP 850

21

EXERCCIO-01

1 - Pesquise: a) limite mximo e mnimo para o expoente em preciso simples. b) limite mximo e mnimo para o expoente em preciso dupla. 2. Mostre a representao binria do nmero -0,7510 nas precises simples e dupla no padro IEEE 754 3 - Dados os nmeros abaixo, informe quantos bits so necessrios para represent-los. a) 5.467 b) 67.894 c) 23.546 d) 18.769 e) 33.098 f) 21.345 g) 65.535 h) 133.054 i) 1.048.577 j) 500.786 k) 43.629 l) 3.021.392 m) 37.639.478

4 - Para os nmeros a seguir, apresente suas correspondentes representaes nos cdigos BCD e hexadecimal.

a) 57 b) 2048 c) 72374 d) 9000

22

Captulo 2
Modelagem de Sistemas Computacionais

O rpido crescimento da capacidade computacional das mquinas resultou na demanda por sistemas de software cada vez mais complexos. O surgimento de sistemas de software mais complexos por sua vez, trouxe a necessidade de buscar por novas formas de desenvolver sistemas e consequentemente, as tcnicas utilizadas para a construo de sistemas computacionais tm evoludo de forma impressionante, notavelmente no que tange modelagem de sistemas. At meados da dcada de 1990, as trs metodologias de modelagem mais populares entre os profissionais da rea de engenharia de software eram: o mtodo de Booch, o mtodo OMT (Object Modeling Technique) de Jacobson e o mtodo OOSE (Object-Oriented Software Engineering) de Rumbaugh. A unio dessas metodologias resultou na UML - Unified Modeling Language - ou Linguagem de Modelagem Unificada. uma linguagem visual utilizada para modelar sistemas computacionais. Deve ficar bem claro, no entanto, que a UML no uma linguagem de programao, mas uma linguagem de modelagem, cujo objetivo auxiliar os engenheiros de software a definir as caractersticas do software, tais como seus requisitos, seu comportamento, sua estrutura lgica, a dinmica de seus processos e at mesmo suas necessidades fsicas em relao ao equipamento sobre o qual o sistema dever ser implantado. Todas essas caractersticas so definidas por meio da UML antes de o software comear a ser realmente desenvolvido. Um dos diagramas utilizados pela UML para modelagem do sistema o Diagrama de Mquina de Estados.

2.1 - Mquina de Estados Finitos Mquina de Estados Finitos um modelo de descrio de um processo (de hardware ou software) que parte da seguinte premissa: Um dispositivo que possui um conjunto finito de estados e aceita um finito nmero de entradas, pode produzir um finito numero de diferentes sadas. Este dispositivo deve ter uma memria que possa armazenar a sequncia de entradas recebidas, de forma que a sada seja dependente destas entradas.
23

Mquina de Estados Finitos- Finite State Machines - FSM , provavelmente, a ferramenta mais utilizada pelos desenvolvedores de jogos e programas de computador em geral para selecionar o comportamento de cada agente dentro do jogo. Um exemplo bem simples de uma FSM um boto liga/desliga como mostrado na figura 4. Esta forma de representao grfica uma das mais utilizadas.

Figura 4 Diagrama de estados de uma chave liga/desliga As linhas representam as transies de estado, enquanto os crculos representam o estado. O crculo pintado indica qual o estado inicial. J em um jogo normalmente uma FSM no to simples assim, visto que geralmente os agentes podem ter um conjunto muito maior de estados. Para aumentar nosso entendimento sobre esta tcnica, vamos tomar como exemplo um jogo antigo, mas muito popular. Um clssico dos jogos at hoje, lanado inicialmente no incio dos anos 80, o Pac-man cuja tela pode ser vista na figura 5.

Figura 5 - Tela do jogo Pac-MAN A mecnica do jogo simples: o jogador controla uma cabea redonda (uma pizza faltando uma fatia) com uma boca que se abre e fecha, posicionada em um labirinto repleto de pastilhas e 4 fantasmas que o perseguem. O objetivo comer todas as pastilhas sem ser alcanado pelos fantasmas. 1 - A transio de estado ocorre sempre que o jogador consegue alguma plula de energia.
24

2 - A implementao da ao caar de cada fantasma diferente. Eles possuem 3 comportamentos: Caar (Chase) Fugir (Evade) Dispersar (Scatter) 3 - Os tempos para que ocorra transio entre os eventos so diferentes, dependendo do comportamento. Assim, a partir destes dados e definido os tempos, possvel elaborar o diagrama de estado geral de funcionamento conforme mostrado na figura 6.

Figura 6 FSM do jogo Pac-MAN Na verdade cada estado, neste caso, pode originar outra mquina de estado mais especfica para definir o comportamento do fantasma dentro daquele estado. Vamos pegar como exemplo o comportamento de dispersar.

1 mover em direo aos cantos; 2 ficar andando em crculos.

Figura 7 comportamento de dispersar


25

Usa-se ento o conceito de Mquina de Estado Finita Hierrquica- HFSMonde cada estado pode ser uma nova FSM de acordo com a figura 8.

Figura 8 exemplo de implementao de uma HFSM

A Tcnica de Mquina de Estado aplicada igualmente ao projeto de circuitos lgicos. Nesse caso uma FSM um modelo de comportamento de um determinado circuito ou processo lgico composto por estados, transies e sadas. ESTADOS -> comporta-se como uma memria, armazena as informaes sobre as sadas em um determinado momento; TRANSIO -> a condio para que ocorra a mudana de estado para outro; SADA -> Descreve a atividade que deve ser realizada em um determinado estado. Dois tipos de modelamentos so amplamente utilizados, o modelo Moore e o modelo Mealy.

26

2.1.1 - Modelo Moore

Figura 8 Mquina Moore As sadas so uma funo do estado atual; As sadas mudam sincronizadas com as mudanas de estado. A vantagem do modelo de Moore a simplificao do comportamento. Consideremos por exemplo uma FSM Moore de uma porta de elevador com 4 estados "Aberta", "Fechada", "Abrindo", "Fechando". A mquina de estados reconhece dois comandos: "comando_abrir" e "comando_fechar" que disparam a alterao de estado. A ao de entrada no estado "Abrindo" liga o motor que abre a porta; a ao de entrada no estado "Fechando" liga o motor na outra direo, fechando a porta. Os estados "Aberto" e "Fechado" no Desempenham nenhuma ao.

2.1.2 - Mquina de Estado modelo Mealy

Figura 9 Mquina Mealy


27

Mudanas nas entradas podem causar mudanas na sada imediatamente; Variveis de estado (vetor de estado) mantm o estado do circuito Armazenado em registros; A Lgica de combinaes calcula o prximo estado e sadas; O prximo estado uma funo do estado atual e entradas; O uso de uma Mquina de Mealy normalmente leva a uma reduo no nmero de estados. Por exemplo uma FSM Mealy implementando o mesmo comportamento visto no exemplo anterior, existem duas input actions: 1 - inicie o motor para fechar a porta se o comando_fechar chegar e 2 - inicie o motor na direo oposta para abrir a porta se o comando_abrir chegar. Outro exemplo simples de uma mquina de estados seria um semforo (sinal de trnsito) como pode ser visto na figura 10. Cada estado corresponde a uma situao que ocorrer. Quando verde, os carros podem prosseguir na via. Passado um tempo, acionada a tarefa de mudar para amarelo. Ento o semforo passa de verde para amarelo. Aqui os carros ficam em estado de ateno e j aguardam a prxima transio. O prximo passo passar para vermelho. Nesse estado, os carros esto parados na via. De vermelho, o prximo estado somente ser verde, assim, os carros podem voltar a trafegar na via.

Figura 10 Semforo simples Uma sugesto de uma FSM para este caso, pode ser visto na figura 11.

28

Vamos, finalmente, desenvolver passo a passo um exemplo atravs de um projeto aplicativo.

Projeto: Porto de Garagem Automtico Objetivo: Controlar remotamente um porto de garagem atravs de um controle remoto que possui um nico boto de acionamento. A figura 12 mostra o diagrama geral do sistema.

Figura 12 - Sistema de controle para porto de garagem

Passo 1 o primeiro passo construir uma tabela de estados relacionando as variveis de entrada e as variveis de sada;

Tabela 6 Tabela relacionando entrada/sada


29

Passo 2 Identificar na tabela todos os estados no vlidos para simplificao;

Tabela 7 Identificao dos estados no vlidos

Passo 3 Identificar as aes correspondentes aos estados vlidos.

Tabela 8 Identificao das aes vlidas Passo 4 Identificar a sequencia de todos os estados possveis.

Tabela 9 Identificao da sequncia dos estados

30

Passo 5 Construir agora o mapa de estado correspondente.

Figura 13 Mapa de estados do controle para porto de garagem

EXERCCIO-02

1 - Modele o comportamento de um flip-flop tipo D utilizando uma FSM 2 - Modele o comportamento de um flip-flop tipo JK utilizando uma FSM. 3 considere o diagrama em blocos que representa as conexes entre dois sistemas digitais, possibilitando um correto sincronismo na transferncia de dados de 8 bits do sistema A para o sistema B.
DATA BUS formado por oito linhas (conexes), permite que uma informao binria seja transferida do sistema A para o sistema B; STROBE sinal de habilitao, gerado pelo sistema A, que avisa ao sistema B que uma informao est pronta no DATA BUS para ser capturada e armazenada; BUSY sinal gerado pelo sistema B para avisar ao sistema A que o sistema B se encontra ocupado e portanto, indisponvel para receber informaes. ACKNOWLEDGE sinal gerado pelo sistema B para avisar ao sistema A que uma informao foi capturada e armazenada.

Construa um mapa de estado para o sistema proposto.


31

Fonte: http://www.mecatronicaatual.com.br/secoes/leitura/1152 Em: 26/04/2013

AUTOMAO / Robtica
Rob Audiob
O rob a ser apresentado neste artigo tem sua montagem tanto eletrnica como mecnica bem simples, sendo recomendado ao nosso leitor iniciante e tambm ao mais experiente. O rob pode ser aproveitado em feiras e mostras em escolas/faculdades e tambm para diverso por parte daqueles que desejam apenas uma montagem simples e sem o uso de microcontroladores.
Mrcio Jos Soares

O que o rob capaz de fazer? Esta deve ser a primeira pergunta do leitor, antes de qualquer montagem, seja ela robtica ou outra. Assim, fica garantido que os objetivos sero alcanados. O Audiob um rob capaz de responder ao bater de palmas ou a um outro som curto qualquer, como o estalar dos dedos para seu controle. Ele realiza seus movimentos de acordo com uma seqncia lgica. Veja a figura 1.

A cada sinal (som emitido) recebido, o rob modifica seu estado interno e executa um determinado movimento. Assim possvel movimentar o rob frente, faz-lo parar, executar um desvio (com o giro do mesmo), par-lo novamente e depois seguir em frente novamente. O controle deste rob utiliza lgica digital discreta CMOS empregando contadores -mquinas de estado. Sendo assim, este rob torna-se um forte candidato para uma mostra ou feira em escolas visando demonstrar os conceitos aprendidos em disciplinas como lgica digital circuitos lgicos entre outras do gnero. Para aqueles que desejam apenas uma montagem simples, de um rob capaz de interagir com o usurio de uma forma tambm simples, a montagem igualmente indicada.

O CIRCUITO O circuito do Audiob, presente na figura 2, foi dividido em trs partes:

1) 2) 3)

Circuito de Clock - Disparo (entrada de som) Contador (flip-flops e portas lgicas adicionais) Controle de potncia (motores)

32

Captulo 3
Lgica de Programao - Algoritmos

A automatizao de tarefas um aspecto marcante da sociedade moderna. O aperfeioamento tecnolgico alcanado, teve como elementos fundamentais a anlise e a obteno de descries da execuo de tarefas em termos de aes simples o suficiente, tal que pudessem ser automatizadas por uma mquina especialmente desenvolvida para este fim, O COMPUTADOR. A partir da houve um processo de desenvolvimento simultneo de mquinas (hardware) e dos elementos que gerenciam a execuo automtica (software) de uma dada tarefa. E essa descrio da execuo de uma tarefa, como considerada acima, chamada algoritmo. Um algoritmo formalmente uma sequncia finita de passos que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequncia de instrues que levam a uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos eletrnicos, que explicam passo-a-passo os modos de operao. At mesmo as coisas mais simples, podem ser descritas por sequncias lgicas. Por exemplo: Somar dois nmeros quaisquer. Escreva o primeiro nmero no QUADRO-1 Escreva o segundo nmero no QUADRO-2 Some o nmero do QUADRO-1 com nmero do QUADRO-2 e coloque o resultado no QUADRO-3.

33

Os programas de computadores so algoritmos escritos numa linguagem especfica de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina programvel. 3.1 - A Tcnica Top-Down A tcnica denominada top-down consiste em atacar o problema de forma gradual. Aps o entendimento completo do problema, basta dividi-lo em partes menores para que os detalhes sejam tratados individualmente e a soluo como um todo seja alcanada com a unio das resolues de todas as partes. Escrever algoritmos usando top-down facilita a maneira de encarar os problemas, pois dividir um problema inicialmente complexo em partes de soluo trivial, propicia 'insights' mentais que nos revelam o caminho que o algoritmo deve seguir. A estratgia por trs do mtodo top-down (de cima para baixo) a descrita abaixo: ter uma viso geral do problema; dividi-lo em partes menores; resolver essas partes; refinar as partes se uma soluo ainda no foi encontrada; unir todos os refinamentos.

Um algoritmo pode ser representado de trs formas: Descrio Narrativa, Fluxograma e Pseudocdigo.

3.2 - Descrio Narrativa Faz uso da linguagem natural que utilizamos, com o objetivo de descrever os passos principais da soluo para um problema. Uma receita de bolo, por exemplo, uma descrio narrativa.
Bolo de cenoura
Ingredientes 3 ovos, 2 xcaras (ch) de acar 2 xcaras (ch) de farinha de trigo 1 colher (sopa) de fermento 1 xcara (ch) de leo de soja 3 cenouras mdias e cruas 1 pitada de sal.

Modo de fazer
Bata no liquidificador os ovos, as cenouras (em pedaos), o leo e o sal. Numa tigela, misture o acar, o fermento e a farinha. Despeje a mistura do liquidificador para a tigela e misture bem. Leve para assar em forma untada e polvilhada com farinha.

34

A grande desvantagem da descrio narrativa a impreciso, uma vez que a especificao pode no ficar clara ou ficar ambgua, ou seja, cada um pode interpretar de uma forma. Por exemplo, em algumas receitas de bolo voc pode encontrar a frase leve ao forno at assar. Algumas pessoas poderiam saber exatamente quando o bolo est assado, outras pessoas no. A definio cenoura mdia outro exemplo de impreciso. 3.3 - Fluxogramas Tentando eliminar a ambiguidade e procurando fazer uso de uma ferramenta j usada na rea de administrao,o fluxograma passou a fazer uso do conjunto de smbolos grficos padronizados para representar algoritmos. Nessa representao formas geomtricas diferentes implicam em aes, instrues ou comandos distintos. Isso pode ajudar no entendimento do algoritmo e a eliminando a ambiguidade e tornando o entendimento universal, independente da linguagem. Esta forma intermediria descrio narrativa e ao pseudocdigo que ser visto posteriormente, pois mais precisa do que a primeira, porm, no se preocupa ainda com detalhes de implementao do programa e com o ambiente de hardware onde ser executado. Os principais smbolos usados so apresentados na tabela 10. Alm desses smbolos, linhas e setas indicaro a direo do fluxo de execuo do algoritmo. E dentro de cada smbolo, deve ser escrito o que ocorrer naquela fase.

Incio ou final do fluxograma

Operao ou comando

Operao de entrada de dados

Operao de sada de dados

Deciso lgica

Elemento de conexo de fluxo

Tabela 10 Principais smbolos utilizados no fluxograma


35

Exemplo: Desenvolver um fluxograma capaz de obter as notas de duas avaliaes de um aluno e calcular a mdia aritmtica dessas notas. O algoritmo dever entregar como sada, se o aluno foi aprovado ou reprovado. A soluo est mostrada na figura 13.

Figura 13 Clculo da mdia

Apesar de mais claro para ler, evitando a ambiguidade, o fluxograma a d pouca ateno aos dados, no oferecendo recursos para descrev-los ou represent-los. Isso vai fazer diferena na hora de implementar um algoritmo em uma linguagem de programao especfica. Porm, esta caracterstica do fluxograma, o torna uma excelente ferramenta para ser usada na etapa inicial do desenvolvimento. Neste momento, o programador se concentrar apenas na lgica de programao, deixando os detalhes especficos como estrutura dos dados, para a etapa posterior, mas a ento a lgica j estar testada.

36

EXERCCIO- 03

1 - Em uma escola, a mdia final dada pela mdia aritmtica de trs notas. E a mesma tem o seguinte esquema de avaliao: MDIA 0 4,9 5 6,9 7 - 10 SITUAO DO ALUNO RECUPERAO PROVA FINAL PASSOU POR MDIA

Desenvolva um algoritmo que a partir da entrada das trs notas mostre a situao do aluno. No caso do aluno em recuperao e prova final, mostre tambm quanto o aluno ir precisar para passar. No caso da recuperao a nota necessria para passar dada por: 10 Mdia + 2 e na prova final dado por: 10 Mdia. 2 - Desenvolva um algoritmo capaz e encontrar o menor dentre 3 nmeros inteiros quaisquer dados por um operador atravs de um teclado. Dica: Para obter os nmeros, faa uso do comando leia. 3 - Elabore um algoritmo que leia as variveis C e N respectivamente cdigo e nmero de horas trabalhadas de um operrio. E calcule o salrio sabendo-se que ele ganha R$ 10,00 por hora. Quando o nmero de horas exceder a 50 calcule o excesso e pagamento armazenando-o na varivel E, caso contrrio zerar tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do processamento imprimir o salrio total e o salrio excedente 4 - A secretria de Meio Ambiente que controla o ndice de poluio mantm 3 grupos que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,25. Se o ndice sobe para 0,3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0,4 as indstrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas atividades. Faa um algoritmo que leia o ndice de poluio medido e emita a notificao adequada aos diferentes grupos de empresas.
37

3.4 Pseudocdigo Esse modelo de descrio de algoritmos surgiu para tentar suprir as deficincias das outras representaes. Consiste na definio de uma pseudolinguagem de programao, cujos comandos so em formato textual, mas j lembram um pouco a estrutura de uma linguagem de programao estruturada, ou seja, a pseudolinguagem se assemelha muito ao modo como os programas so escritos. Isso vai permitir que os algoritmos nela representados possam ser traduzidos, quase que diretamente, para uma linguagem de programao. Nele os verbos (aes) disponveis para utilizao so limitados e empregados no imperativo. Deve-se evitar as expresses excessivamente longas, estas restries visam eliminar a possibilidade de ambiguidade. A tcnica baseada em uma PDL (Program Design Language), que uma linguagem genrica na qual possvel representar um algoritmo de forma semelhante das linguagens de programao, portanto vamos ver como fica o exemplo de Calcular mdia dos alunos representado anteriormente, agora em pseudocdigo. algoritmo calcularMedia var N1, N2, Media : real inicio leia(N1, N2) Media <- (N1 + N2)/2 se media>=6 entao escreva(aprovado) senao escreva(reprovado) fimse fimalgoritmo

Observe bem as palavras em negrito. So palavras reservadas da linguagem ou seja, s podem ser utilizadas para as funes especficas que foram criadas. Essa caracterstica j parte do conceito de estrutura. Passa a ser obrigatrio o uso de padres e expresses pr-definidas na escrita do algoritmo. Tudo isso objetivando sempre que no haver ambiguidades ou situaes indefinidas.
38

3.4.1 - Estrutura do pseudocdigo A estrutura de um algoritmo em pseudocdigo pode variar um pouco de acordo com o autor ou com base na linguagem de programao que ser utilizada posteriormente, mas essas variaes ocorrem apenas na sintaxe, pois a semntica deve ser exatamente a mesma. A estrutura que empregaremos para a construo de nossos pseudocdigos ser baseada no programa Visualg 2.0. O Visualg (Visualizador de Algoritmo) um programa que edita, interpreta e executa algoritmos com uma linguagem prxima do portugus estruturado como um programa normal de computador. Foi criado pelo professor Cludio Morgado de Souza, programador/analista e professor universitrio no Rio de Janeiro. Algoritmo <nome do algoritmo> var < declarao de variveis> inicio < lista de comandos> fimalgoritmo

onde as palavras algoritmo e fimalgoritmo fazem parte da sintaxe da linguagem e sempre delimitam o inicio e fim de um algoritmo; a < declarao de variveis> a seo ou parte do algoritmo onde descrevemos os tipos de dados que sero usados na lista de comandos. Uma varivel var pode ser vista como uma caixa com um rtulo ou nome colado a ela, que num dado instante guarda um determinado valor. O contedo desta caixa no algo fixo, permanente. Na verdade, essa caixa pode ter seu contedo alterado diversas vezes. Contudo, o contedo deve ser sempre do mesmo tipo (real, inteiro, caracter). inicio indica o fim das declaraes e o incio da seo de comandos; < lista de comandos > apenas uma indicao de que entre as palavras inicio e fimalgoritmo podemos escrever uma lista com uma ou mais instrues ou comandos. importante salientar que, quando um algoritmo executado, as instrues ou comandos de um algoritmo so sempre executados na ordem em que aparecem no mesmo.

39

3.4.2 - Linearizao de expresses e operadores Para a construo de algoritmos que realizam clculos matemticos, todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em linhas, devendo tambm ser feito o mapeamento dos operadores da aritmtica tradicional para os do Portugus Estruturado usados no pseudocdigo. A tabela 11 mostra um exemplo de linearizao.

Tabela 11 Exemplo de expresso linearizada

As tabelas 12 e 13 seguintes mostram os operadores aritmticos usados e tambm os operadores lgicos relacionais.

Tabela 12 operadores aritmticos

Tabela 13 operadores relacionais


40

Os operadores relacionais realizam a comparao entre dois operandos ou duas expresses e resultam em valores lgicos (VERDADEIRO ou FALSO). Em expresses computacionais utilizamos somente parnteses "()" para escrever expresses. Na sintaxe do pseudocdigo podemos ter parnteses dentro de parnteses, como seriam os colchetes e as chaves na matemtica. Os parnteses indicam quais sub expresses, dentro de uma expresso, sero executados primeiro. A princpio, a execuo da esquerda para direita, mas alm dos parnteses, existem prioridades entre os operadores envolvidos na expresso. Tais prioridades so mostradas na tabela 14 .

Tabela 14 Prioridade de execuo das operaes Vamos seguir passo a passo a resoluo de uma simples proposta a partir da representao pseudocdigo. Proposta: Faa um programa que leia dois valores numricos, calcule e escreva a sua mdia aritmtica. Etapa 1 A mdia aritmtica de dois valores calculada como (a+b)/2, e sendo assim a primeira etapa j est pronta. Etapa 2 Os dados necessrios sero os dois valores, que colocaremos em duas variveis A e B, do tipo numrico, e uma terceira varivel, que chamaremos Mdia, que armazenar a mdia aritmtica calculada. Etapa 3 A obteno dos dados neste programa simples e direta. Basta pedir ao usurio que digite os valores.

41

Etapa 4 O processamento aqui o clculo da mdia, usando o mtodo citado acima, na etapa 1. O resultado do clculo ser armazenado na varivel Mdia. Etapa 5 Basta exibir o contedo da varivel Mdia.

Soluo apresentada para a proposta:

Algoritmo "Clculo de Mdia Aritmtica" VAR A,B,Media : REAL Inicio Escreva ("Programa que calcula a mdia aritmtica de dois valores.") Escreva ("Digite um valor :") Leia (A) Escreva ("Digite outro valor :") Leia (B) Media <- (A+B)/2 Escreva ("A mdia dos dois valores : ", Media) FimAlgoritmo

Observe que foi colocado na tela instrues para o usurio usando o comando Escreva. Esta uma boa tcnica de programao, ou seja, a interatividade com o operador. Da mesma forma, ao imprimir o resultado, no foi simplesmente escrito a mdia, mas foi gerado uma mensagem ao usurio identificando o que aquele valor significa. Todo programa possui uma estrutura sequencial determinada por um INCIO e FIM. Em um algoritmo, estes limites so definidos com as palavras Algoritmo e FimAlgoritmo.

42

Vejamos outro exemplo:

Escrever um programa que calcule a rea do tringulo.

algoritmo area_triangulo var base, altura, area: real inicio escreval(Digite o valor da base:) leia(base) escreva(Digite o valor da altura) leia(altura) area<-(base*altura)/2 escreva(A area do triangulo , area) fimalgoritmo

43

EXERCCIO- 04 1 - Escreva um algoritmo que l o valor do raio e calcule a rea do crculo Correspondente. (no precisa declarar o pi, pois j uma funo definida pelo programa Visualg). 2 - Leia uma temperatura dada na escala Celsius (C) e imprima o equivalente em Fahrenheit (F). (Frmula de converso: F = 9/5 * C + 32) 3 - O custo ao consumidor de um carro novo a soma do custo de fbrica com a porcentagem do distribuidor e dos impostos, ambos aplicados ao custo de fbrica.Supondo que a porcentagem do distribuidor seja de 12% e a dos impostos de 45%, prepare um algoritmo para ler o custo de fbrica do carro e imprimir o custo ao consumidor. 4 - O cardpio de uma lanchonete dado abaixo. Prepare um algoritmo que leia a quantidade de cada item que o cliente consumiu e calcule a conta final.
Hambrguer................. R$ 4,00 Cheeseburger.............. R$ 6,50 Fritas............................ R$ 3,00 Refrigerante................. R$ 3,50 Milkshake..................... R$ 6,20

5 - Uma companhia paga a seus empregados um salrio de R$ 1.500,00 por ms mais uma comisso de R$ 50,00 para cada item vendido e mais 5% do valor da venda. Elabore um algoritmo para calcular e imprimir o salrio do vendedor num dado ms. 6 - Cada item desta proposta dever ser realizado pelo programa a partir da escolha do operador.Solicite o mnimo de dados possvel ao usurio.
i. Calcular rea e permetro de um quadrado de lado l ii. Calcular rea e permetro do circulo de raio r iii. Calcular rea e permetro do retngulo de comprimento c e largura l iv. Calcular rea e volume do cubo de lado l v. Calcular rea e volume de um cone de raio r e altura h

44

Fonte: http://www.tinotec.com.br/blog/visualg-e-exercicios-para-logica-de-programacao-e-algoritmos/ Em: 01/05/2013

Visualg - exerccios para Lgica de Programao e Algoritmos


Publicado em: 21/04/2011 Por: Laurentino Mello

Todos grandes programadores comearam do zero. Isso fato! A Lgica de programao e os algoritmos fazem parte da vidas desses profissionais que cada vezdesenvolvem solues mais teis para nossas vidas. Um dos programas mais utilizados para exercitar essa matria o Visualg, que oferece uma linguagem de fcilcompreenso. muito comum que professores

de cursos tcnicos ou superiores realizem suas aulas atravs deste compilador. Abaixo, temos a descrio atribuda pelo site Baixaki ao Visualg 2.5 Porttil..
O Visualg um programa que interpreta e executa algoritmos como um programa normal de computador. Baseado em uma linguagem parecida com o Portugol ensinado em cursos em todo o Brasil, possui recursos como simulao da tela do computador, visualizao de variveis, breakpoints, ajuda on-line, impresso dos fontes e outras caractersticas que auxiliam o aprendizado das tcnicas de programao. Para facilitar a vida de quem quer utilizar este aplicativo, abaixo segue o link do Visualg. Assim voc pode execut-lo de qualquer mdia removvel ou computador. O trabalho fica bem mais prtico e cmodo.

DOWNLOAD http://ultradownloads.com.br/download/Visualg/

Tela do Visualg2.0

45

Captulo 4
Introduo Linguagem de Programao C

C uma linguagem de programao que foi projetada por Dennis Ritchie (1972) e continua sendo das mais utilizadas at hoje. Alm disso, Ritchie tambm foi um dos criadores do sistema operacional Unix, que deu origem ao Linux e o Mac OS X e o modernssimo Android. Alis, o prprio Unix foi escrito em C. uma linguagem de propsito geral, sendo adequada programao estruturada. No entanto mais utilizada para escrever compiladores, analisadores lxicos, bancos de dados, editores de texto, e atualmente, na elaborao de programas para serem embarcados em microcontroladores, que ser o foco da nossa aprendizagem. A linguagem C pertence a uma famlia de linguagens cujas caractersticas so: portabilidade, modularidade, compilao separada, recursos de baixo nvel, gerao de cdigo eficiente, confiabilidade, regularidade, simplicidade e facilidade de uso.

4.1 - Processo de criao de um programa A gerao do programa executvel a partir do programa fonte obedece a uma sequncia de operaes antes de tornar-se um executvel. Depois de escrever o mdulo fonte em um editor de textos, o programador aciona o compilador. Essa ao desencadeia uma sequncia de etapas, cada qual traduzindo a codificao do usurio para uma forma de linguagem de nvel inferior linguagem de mquina - que termina com a criao do cdigo executvel,criado pelo lincador, como visualizado na figura 14.

Figura 14 Processo de criao de um programa em C


46

Existem no mercado de software, vrias empresas que fornecem um ambiente integrado de desenvolvimento IDE (do ingls Integrated Development Environment) que rene caractersticas e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo. Geralmente os IDEs facilitam a tcnica de RAD (de Rapid Application Development, ou "Desenvolvimento Rpido de Aplicativos"), que visa a maior produtividade dos desenvolvedores. As caractersticas e ferramentas mais comuns encontradas nos IDEs so: Editor - edita o cdigo-fonte do programa escrito na linguagem suportada pela IDE; Compilador (compiler) - compila o cdigo-fonte do programa, editado em uma linguagem especfica e a transforma em linguagem de mquina; Linker - interliga os vrios "pedaos" de cdigo-fonte, compilados em linguagem de mquina, em um programa executvel que pode ser executado em um computador ou outro dispositivo computacional como um microcontrolador ou DSPs. Depurador (debugger) - auxilia no processo de encontrar e corrigir defeitos no cdigo-fonte do programa, na tentativa de aprimorar a qualidade do software; Modelagem (modeling) - criao do modelo de classes, objetos, interfaces, associaes e interaes dos artefatos envolvidos no software com o objetivo de solucionar as necessidades-alvo do software final. Gerao de cdigo - caracterstica mais explorada em Ferramentas CASE, a gerao de cdigo tambm encontrada em IDEs, contudo com um escopo mais direcionado a templates de cdigo comumente utilizados para solucionar problemas rotineiros. Todavia, em conjunto com ferramentas de modelagem, a gerao pode gerar todo ou praticamente todo o cdigo-fonte do programa com base no modelo proposto, tornando muito mais rpido o processo de desenvolvimento e distribuio do software; Distribuio (deploy) - auxilia no processo de criao do instalador do software, ou outra forma de distribuio, seja discos ou via internet. Testes Automatizados (automated tests) - realiza testes no software de forma automatizada, com base em scripts ou programas de testes previamente especificados, gerando um relatrio, assim auxiliando na anlise do impacto das alteraes no cdigo-fonte. Ferramentas deste tipo mais comuns no mercado so chamadas robs de testes. Refatorao (refactoring) - consiste na melhoria constante do cdigo-fonte do software, seja na construo de cdigo mais otimizado, mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. A
47

refatorao, em conjunto com os testes automatizados, uma poderosa ferramenta no processo de erradicao de "bugs", tendo em vista que os testes "garantem" o mesmo comportamento externo do software ou da caracterstica sendo reconstruda. A tabela 15 mostra alguns exemplos de IDEs para programao C/C++ mais utilizadas. IAR Embedded Workbench DEV-C++, Code::Blocks, Turbo C Gera cdigos em C e Assembly para programao de microcontroladores Geram cdigo para C e C++

Tabela 15 Ambientes Integrados de Desenvolvimento IDEs

4.2 - A estrutura da linguagem C

Na linguagem C, todo programa basicamente um conjunto de funes. Uma funo tem um nome e argumentos associados a ela e composta por declaraes de variveis e blocos de comandos incluindo, possivelmente, chamadas a outras funes. Um bloco de comandos composto por mais de um comando deve ser delimitado por um par de chaves. Em um programa C, se um nome no foi previamente declarado e ocorre em uma expresso sendo seguido por um parntese esquerdo, ele declarado pelo contexto como sendo o nome de uma funo. A funo de nome especial main (principal) contm os pontos de incio e trmino da execuo de um programa em C. Neste caso, todo programa em C deve ter pelo menos a funo main. Veja este primeiro exemplo:
int main(); O nome da funcao main { Printf(primeiro programa\n); /* escrever a string na tela */ }

Esse cdigo em C define uma funo denominada main com uma lista de argumentos vazia (nenhuma varivel entre os parnteses que a seguem). Todo programa C inicia sua execuo chamando a funo main(), sendo obrigatria a sua declarao no programa principal. Comentrios no programa so colocados entre /* e */ no sendo considerados na compilao.
48

Cada instruo encerra com ; (ponto e vrgula) que faz parte do comando. Existem funes bsicas de entrada/sada (I/O) que j esto definidas na biblioteca C. As funes printf() e scanf() por exemplo, permitem respectivamente escrever na tela e ler os dados a partir do teclado. O programador tambm pode criar novas funes em seus programas, como rotinas para clculos, impresso, etc. Neste primeiro exemplo, a chamada da funo printf() com o argumento primeiro programa\n, imprime na tela (terminal) ou outro destino se for especificado, a cadeia de caracteres que compem seu argumento. Uma sequncia de qualquer nmero de caracteres entre aspas chamada cadeia de caracteres ou simplesmente string. O argumento \n a diretiva para nova linha ou seja, provoca o avano do cursor para o incio da prxima linha, pois apenas a funo printf no fora uma nova linha. Alm do argumento |n, existem outros pr definidos que permitem formatar a sada de de dados de diversas formas, afim de atender a diversas necessidades de programao, como pode ser visto na tabela 16.

\n \t \b \" \\ \f \0 %x

nova linha tab retrocesso aspas barra salta formulrio nulo hexadecimal

%c %d %e %f %o %s %u

caractere simples decimal notao cientfica ponto flutuante octal cadeia de caracteres decimal sem sinal

Tabela 16 argumentos que podem ser associados funo printf Exemplo de aplicao:
main() { printf("Este o numero dois: %d",2); printf("%s est a %d milhes de milhas\ndo sol","Vnus",67); }

Quanto a funo scanf() tambm uma funo bsica j implementada em todos compiladores C. Ela o complemento de printf() e nos permite ler dados formatados da entrada padro (teclado). Sua sintaxe similar a printf(): scanf("expresso de controle", argumentos); A lista de argumentos deve consistir nos endereos das variveis. C oferece um operador para tipos bsicos chamado operador de endereo e referenciado pelo smbolo "&" que retorna o endereo do operando. A memria do computador dividida em bytes que so numerados de 0 at o limite da memria disponvel. Estas posies so chamadas de endereos. Toda
49

varivel ocupa uma certa localizao na memria, e seu endereo o primeiro byte ocupado por ela. Veja o seguinte exemplo:
main() { int num; printf("Digite um nmero: "); scanf("%d",&num); printf("\no nmero %d",num); printf("\no endereo e %u",&num); }

Duas outras funes so tambm interessantes para manipular caracteres em operaes de entrada/sada (I/O). So as funes getchar() e putchar(). A funo getchar() a funo original de entrada de caractere dos sistemas baseados em UNIX.getchar() armazena a entrada at que ENTER seja pressionada. Exemplo:
main() { char ch; ch=getchar(); printf("%c\n,ch); }

J a funo putchar() escreve na tela o argumento de seu caractere na posio corrente. Exemplo:
main() { char ch; printf("digite uma letra minscula : "); ch=getchar(); putchar(toupper(ch)); putchar('\n'); }

50

4.3 - Variveis e tipos de dados Uma varivel um nome simblico dado a uma regio da memria que armazena um valor a ser utilizado por uma funo. Palavras reservadas da linguagem C (como int, for e if) no podem ser utilizadas como nomes de variveis. O nome de uma varivel pode conter letras e nmeros, mas deve comear com uma letra. Observe que a linguagem C faz distino entre caracteres maisculos e minsculos. Toda varivel que for utilizada em uma funo em C deve ser previamente declarada, ou seja, associada a um dos tipos de dados disponveis. C apresenta dois tipos de dados principais: inteiro e caractere, denotados por int e char respectivamente. Os nmeros inteiros podem ser, portanto, criados atravs da declarao int e eles so manipulveis atravs de operaes como + (adio), (subtrao), * (multiplicao) e / (diviso). A remoo feita automaticamente. Observe que a diviso entre inteiros produz resposta inteira, com a parte fracionria truncada. Os tipos de dados ponto flutuante, denotado por float, e ponto flutuante de preciso dupla, denotado por double, so tambm oferecidos em C. Como a linguagem C no suporta o tipo de dado booleano, os valores booleanos so representados pelo tipo de dados inteiro, com o <0> denotando <FALSO> e valores diferentes de <0> denotando <VERDADEIRO>. O tipo de dados inteiro pode ser ainda qualificado com short, long ou unsigned para determinar o domnio de valores representveis. O domnio efetivo para cada qualificador dependente da mquina. Os qualificadores register, static e extern so utilizados para definir a classe de armazenamento das variveis. O qualificador register orienta o compilador a armazenar as variveis preferencialmente em registradores da UCP (pequena rea de memria interna ao processador) e o qualificador static indica que as variveis devem ter seus endereos fixos. O qualificador extern, por sua vez, mostra que as variveis devem ser definidas em algum outro lugar. Os tipos de dados no acompanhados por nenhum qualificador explcito so considerados automticos. Este exemplo apresenta algumas declaraes de variveis em C:
int i; /* variavel do tipo inteiro */ short int z1, z2; /* variavel do tipo inteiro, porem com metade de numero de palavras para representacao */ char c; /* variavel do tipo caractere */ unsigned short int j; /* variavel do tipo inteiro, curto e sem o sinal*/ long m; /* variavel do tipo inteiro, porem com o dobro de numero de palavras para representacao */ register char s; /* variavel do tipo caractere que deve ser colocado preferencialmente num registrador */ float x; /* variavel do tipo ponto flutuante com precisao simples */ double x; /* variavel do tipo ponto flutuante com precisao dupla */

51

Alm das representaes apresentadas, a linguagem C suporta tambm a representao exadecimal que ser bastante utilizada em aplicaes para microcontroladores. Qualquer sequncia de algarismos entre 0 e F que inicie com o prefixo 0x, ser aceita.

4.4 - Operadores

4.4.1 - Operador de atribuio O operador de atribuio em C o sinal de igual "=". Ao contrrio de outras linguagens, o operador de atribuio pode ser utilizado em expresses que tambm envolvem outros operadores.

4.4.2 - Aritmticos Os operadores *, /, + e - funcionam como na maioria das linguagens, o operador % indica o resto de uma diviso inteira.
i+=2; -> i=i+2; x*=y+1; -> x=x*(y+1); d-=3; -> d=d-3; Ex: main() {i nt x,y; x=10; y=3; printf("%d\n",x/y); printf("%d\n",x%y); }

4.4.3 - Operadores de relao e lgicos Relao refere-se as relaes que os valores podem ter um com o outro e lgico se refere s maneiras como essas relaes podem ser conectadas. Verdadeiro qualquer valor que no seja 0, enquanto que 0 falso. As expresses que usam operadores de relao e lgicos retornaro 0 para falso
52

e 1 para verdadeiro. Tanto os operadores de relao como os lgicos tem a precedncia menor que os operadores aritmticos. As operaes de avaliao produzem um resultado 0 ou 1. Relacionais maior que maior ou igual menor menor ou igual igual diferente Lgicos && || ! and or not

> >= < <= == !=

Tabela 17 operadores relacionais e lgicos Exemplo:


main() { int i,j; printf("digite dois nmeros: "); scanf("%d%d",&i,&j); printf("%d == %d %d\n",i,j,i==j); printf("%d != %d %d\n",i,j,i!=j); printf("%d <= %d %d\n",i,j,i<=j); printf("%d >= %d %d\n",i,j,i>=j); printf("%d < %d %d\n",i,j,i< j); printf("%d > %d %d\n",i,j,i> j); }

Veja um exemplo de aplicaa:


main() { int x=2,y=3,produto; if ((produto=x*y)>0) printf(" maior"); }

4.4.4 - Incremento e decremento O C fornece operadores diferentes para incrementar variveis. O operador soma 1 ao seu operando, e o decremento subtrai 1. O aspecto no usual desta notao que podem ser usado como operadores pr-fixo(++x) ou psfixo(x++). ++x incrementa x antes de utilizar o seu valor. x++ incrementa x depois de ser utilizado.

53

Exemplo:
main() { int x=0; printf("x= printf("x= printf("x= printf("x= }

%d\n",x++); %d\n",x); %d\n",++x); %d\n",x);

4.4.5- Precedncia O nvel de precedncia dos operadores avaliado da esquerda para a direita. Os parnteses podem ser utilizados para alterar a ordem da avaliao. ++ -- mais alta */% + - mais baixa

4.5 - Estruturas de Controle de Fluxo Os comandos de controle de fluxo so a essncia de qualquer linguagem, porque governam o fluxo da execuo do programa. So poderosos e ajudam a explicar a popularidade da linguagem. Podemos dividir em trs categorias. A primeira consiste em instrues condicionais if e switch. A segunda so os comandos de controle de loop o while, for e o do-while. A terceira contm instrues de desvio incondicional goto, quase no mais utilizada por programadores.

4.5.1 Comando If
sintaxe: if (condio) comando; else comando;

Se a condio avaliar em verdadeiro (qualquer coisa menos 0), o computador executar o comando ou o bloco, de outro modo, se a clusula else existir, o computador executar o comando ou o bloco que seu objetivo.
54

Exemplo:
main() {i nt a,b; printf("digite dois nmeros:"); scanf("%d%d",&a,&b); if (b) printf("%d\n",a/b); else printf("diviso por zero\n"); }

Observe outro exemplo:


#include <stdlib.h> #include <time.h> main(){ int num,segredo; srand(time(NULL)); segredo=rand()/100; printf("Qual e o numero: "); scanf("%d",&num); if (segredo==num) {printf("Acertou!"); printf("\nO numero e %d\n",segredo);} else if (segredo<num) printf("Errado, muito alto!\n"); else printf("Errado, muito baixo!\n");}

4.5.2 - If-else-if
Uma varivel testada sucessivamente contra uma lista de variveis inteiras ou de caracteres. Depois de encontrar uma coincidncia, o comando ou o bloco de comandos executado. Exemplo:
#include <stdlib.h> #include <time.h> main() { int num,segredo; srand(time(NULL)); segredo=rand()/100; printf("Qual e o numero: "); scanf("%d",&num); if (segredo==num) {printf("Acertou!");tg printf("\nO numero e %d\n",segredo);} else if (segredo<num) printf("Errado, muito alto!\n"); else printf("Errado, muito baixo!\n"); }

55

4.5.3 - Switch
sintaxe: switch(varivel)
{ case constante1: seqncia de comandos break; case constante2: seqncia de comandos break; default: seqncia de comandos }

Uma varivel testada sucessivamente contra uma lista de variveis inteiras ou de caracteres. Depois de encontrar uma coincidncia, o comando ou o bloco de comandos executado. Se nenhuma coincidncia for encontrada o comando default ser executado. O default opcional. A sequncia de comandos executada at que o comando break seja encontrado. Exemplo:
main() { char x; printf("1. incluso\n"); printf("2. alterao\n"); printf("3. excluso\n"); printf(" Digite sua opo:"); x=getchar(); switch(x) { case '1': printf("escolheu incluso\n"); break; case '2': printf("escolheu alterao\n"); break; case '3': printf("escolheu excluso\n"); break; default: printf("opo invlida\n"); } }

56

4.5.4 - Loop for


Sintaxe: for(inicializao;condio;incremento) comando; O comando for de alguma maneira encontrado em todas linguagens procedurais de programao. Em sua forma mais simples, a incializao um comando de atribuio que o compilador usa para estabelecer a varivel de controle do loop. A condio uma expresso de relao que testa a varivel de controle do loop contra algum valor para determinar quando o loop terminar. O incremento define a maneira como a varivel de controle do loop ser alterada cada vez que o computador repetir o loop. Exemplo:
main() { int x;for(x=1;x<100;x++)printf("%d\n",x);} Ex: main() { int x,y; for (x=0,y=0;x+y<100;++x,++y) printf("%d ",x+y); }

Um uso interessante para o for o loop infinito, como nenhuma das trs definies so obrigatrias, podemos deixar a condio em aberto. Exemplo:
main() { for(;;) printf("loop infinito\n"); }

Outra forma usual do for o for aninhado, ou seja, um for dentro de outro. Exemplo:
main() { int linha,coluna; for(linha=1;linha<=24;linha++) { for(coluna=1;coluna<40;coluna++) printf("-"); putchar('\n'); } }

57

4.5.5 - While
Sintaxe: while(condio) comando; Uma maneira possvel de executar um lao utilizando o comando while. Ele permite que o cdigo fique sendo executado numa mesma parte do programa de acordo com uma determinada condio: o comando pode ser vazio, simples ou bloco, ele executado desde que a condio seja verdadeira, testa a condio antes de executar o lao. Exemplo:
main() { char ch; while(ch!='a') ch=getchar(); }

4.5.6 - Do while
Sintaxe:
do { comando; } while(condio);

Tambm executa comandos repetitivos. Exemplo:


main() { char ch; printf("1. incluso\n"); printf("2. alterao\n"); printf("3. excluso\n"); printf(" Digite sua opo:"); do { ch=getchar(); switch(ch) { case '1': printf("escolheu inclusao\n"); break; case '2': printf("escolheu alteracao\n"); break; case '3':

58

printf("escolheu exclusao\n"); break; case '4': printf("sair\n"); } } while(ch!='1' && ch!='2' && ch!='3' && ch!='4'); }

4.5.7 Break
Quando o comando break encontrado em qualquer lugar do corpo do for, ele causa seu trmino imediato. O controle do programa passar ento imediatamente para o cdigo que segue o loop. Exemplo:
main() { char ch; for(;;) { ch=getchar(); if (ch=='a') break; } }

Existem ainda na linguagem C padro, dois comandos que no so usados regularmente. So eles, continue e goto. O comando continue relacionado com o break e executa a parte do teste imediatamente, quando usado dentro de um lao while. O comando goto desvia o fluxo da execuo para um ponto direcionado por um rtulo, mas formalmente o goto nunca necessrio e na prtica sempre fcil escrever cdigos sem us-lo. Por estas razes, no iremos aprofundar na anlise desses comandos.

59

EXERCCIO- 05

1 - O que faz o seguinte programa? #include <stdio.h> int main() { int x; scanf("%d",&x); printf("%d",x); return (0); } 2 - Escreva um programa que leia um caracter digitado pelo usurio, imprima o caracter digitado e o cdigo ASCII correspondente a este caracter. 3 - Explique porque est errado fazer if (num=10) ... O que ir acontecer?

4 - D o valor das variveis x, y e z depois da seguinte sequncia de operaes:

int x,y,z; x=y=10; z=++x; x=-x; y++; x=x+y-(z--);


5- Faa um programa que apresente na tela a tabela de converso de graus Celsius para Fahrenheit, de -100 C a 100 C. Use um incremento de 10 C. OBS: Farenheit = (9/5)*(Celsius) + 32.

60

6 - Calcule e imprima o valor em reais de cada kw o valor em reais a ser pago o novo valor a ser pago por essa residncia com um desconto de 10%. Dado: 100 kilowatts custa 1/7 do salrio mnimo; quantidade de kw gasto por residncia. 7 - Clculo de um salrio lquido de um professor . Sero fornecidos valor da hora aula, nmero de aulas dadas e o % de desconto do INSS. 8 - Solicitar salrio, prestao. Se prestao for maior que 20% do salrio, imprimir : Emprstimo no pode ser concedido. Seno imprimir Emprstimo pode ser concedido. 9 - Apresentar os quadrados dos nmeros inteiros de 15 a 200 10 - Apresentar todos os nmeros divisveis por 4 que sejam menores que 200. 11 - Elaborar um programa que efetue a leitura sucessiva de valores numricos e apresente no final o total do somatrio, a mdia e o total de valores lidos. O programa deve fazer as leituras dos valores enquanto o usurio estiver fornecendo valores positivos. Ou seja, o programa deve parar quando o usurio fornecer um valor negativo. 12 - Ler 3 nmeros e imprimir se eles podem ou no ser lados de um tringulo. A condio para isto que A<B+C e B<A+C e C<A+B. 13 - Solicitar a idade de vrias pessoas e imprimir: Total de pessoas com menos de 21 anos. Total de pessoas com mais de 50 anos. O programa termina quando idade for =-99. 14 - Faa um programa que, dado um nmero de conta corrente com trs dgitos, retorne o seu dgito verificador, o qual calculado da seguinte maneira: Exemplo: nmero da conta: 235 - somar o nmero da conta com o seu inverso: 235 + 532 = 767 - multiplicar cada dgito pela sua ordem posicional e somar estes resultados:

7 x 1 + 6 x 2 + 7 x 3 = 40

- o ltimo dgito desse resultado o dgito verificador da conta, isto o nmero zero.

61

4.6 - Matrizes e Vetores

Existe situaes em que os tipos de dados bsicos no so suficientes para resolver os problemas encontrados na prtica. Em muitas dessas situaes, podemos utilizar estruturas de dados homogneas do tipo vetor ou matriz. Um vetor/matriz uma coleo de variveis do mesmo tipo, que referenciada por um nome comum, sendo que para acessarmos um elemento especfico dentro desta coleo de variveis, utilizamos um ndice. 4.6.1 - Vetores Antes de iniciar o nosso assunto, importante algumas informaes. Visto que vetores, matrizes e strings so assuntos fundamentais da linguagem de programao C, um bom programador em C precisa ter domnio sobre esses contedos. Assim sendo, recomenda-se que voc dedique bastante ateno a esta aula. Aqui sero abordados: o uso de matrizes e strings, suas operaes fundamentais e suas aplicaes. Mais uma vez, vale salientar que, para que esse assunto seja bem absorvido, necessrio que o aluno tenha trabalhado bem com as atividades prticas dos contedos anteriores. Assim como nas aulas passadas, sero sugeridas atividades durante o desenvolvimento do texto e ao final do captulo, tudo isso para facilitar o aprendizado. Durante seus estudos, voc viu que uma varivel um espao na memria reservado para armazenar valores definidos de acordo com determinados tipos de dados (Aula 2). Por exemplo, variveis podem ser dos tipos de dados bsicos (float, int etc.), podendo armazenar apenas um valor. Entretanto, caso voc queira escrever um programa que solicita ao usurio a entrada das notas de 50 alunos de uma turma de sua escola, teria que declarar 50 variveis do tipo float, como visto no exemplo a seguir: float nota1; float nota2; ... float nota49; float nota50; Essa soluo, porm, no interessante. Para situaes como essa, podemos fazer uso de vetores, uma estrutura de dados homognea e indexada que pode armazenar diversos valores de um mesmo tipo de dado.

62

Vetor uma estrutura de dados homognea, ou seja, que armazena valores de um mesmo tipo. A figura 15 mostra a declarao de um vetor de 50 posies e sua representao na memria: float notas[50];

Figura 15 Exemplo de declarao de um vetor

O ndice representa a posio onde o dado est armazenado no vetor. Por exemplo, na figura anterior, o valor armazenado na segunda posio do vetor 9,0. Assim, diz-se que o vetor uma estrutura indexada. Da mesma forma que as demais variveis, os vetores devem ser declarados para que o compilador aloque espao na memria para elas. O modelo a forma geral de declarao de vetores segue abaixo: tipo nome_da_variavel[tamanho] Como exemplo, vamos declarar um outro vetor, agora de 100 elementos chamado material contendo elementos do tipo double: double material[100]; Os elementos de um vetor so identificados pelo nome da varivel e a posio que ele ocupa no vetor, da seguinte forma: nome_da_variavel[indice] Sendo que, na linguagem C, a primeira posio corresponde ao ndice 0 (zero). Portanto, os elementos do vetor material declarado anteriormente so identificados como mostrado a seguir:
material[ 0 ] /* zero */ material[ 1 ] um */ /* corresponde primeira posio no vetor, de ndice

corresponde segunda posio no vetor, de ndice

material[ 2 ], /* dois */ ... material[ 98 ] /* material[ 99 ]

corresponde terceira posio no vetor, de ndice

e assim por diante...

*/

63

Vamos observar o programa abaixo, onde carregada um vetor de inteiros com os nmeros de 0 a 99:
void main (void) { int x[100]; /* isto reserva 100 elementos inteiros */ int t; for( t=0; t<100; ++t ) x[ t ] = t; }

Vejamos outro exemplo: Preencher um vetor com nmeros inteiros (8 unidades); solicitar um nmero do teclado. Pesquisar se esse nmero existe no vetor. Caso exista, imprimir em qual posio do vetor. Se no, imprimir mensagem que no existe.
main() { int x, vet[8], num, achei=0; for(int x=0;x<8;x++) { printf("\n[%d] Digite um numero: ",x); scanf("%d",&vet[x]); } printf("\n\n"); printf("Digite um valor a ser pesquisado: "); scanf("%d",&num); for(int x=0;x<8;x++) if(vet[x]==num) { printf("\n O numero %d esta na posicao %d: ",num,x); achei=1; } if(achei!=1) printf("\n Este numero nao existe"); printf("\n\n"); system("pause"); return(0); }

Cada varivel ocupa um espao determinado na memria, em nmero de bits, de acordo com o seu tipo. Por exemplo, uma varivel char ocupa 8 bits. (tipos de dados segundo o padro ANSI). A quantidade de espao necessrio para armazenar um vetor relacionada ao seu tamanho e ao seu tipo. Para calcular o espao de memria ocupado em bytes por um vetor, temos a seguinte frmula: total em bytes = tamanho ocupado por um elemento do vetor * tamanho do vetor

64

4.6.2 - Matrizes

Um ponteiro de matriz representa o endereo de memria (ou seja, a indicao do local exato na memria do computador) onde a matriz est armazenada. Para gerar um ponteiro para o primeiro elemento de uma matriz, necessrio apenas especificar o nome da matriz, sem nenhum ndice. Segue um exemplo: int modelo [ 10 ]; Tambm possvel gerar um ponteiro para o primeiro elemento apenas usando o nome da varivel, no caso do exemplo, modelo. No exemplo a seguir, atribuise a p o endereo do primeiro elemento de modelo. int *p; int modelo [ 10 ]; p = modelo. Pode-se utilizar o smbolo & para especificar o endereo do primeiro elemento, mas isso no muito utilizado. Exemplo: modelo e &modelo [ 0 ] iro produzir o mesmo resultado. Em C, no possvel passar uma matriz inteira como argumento para uma funo. necessrio passar um ponteiro de uma matriz para uma funo, colocando o nome da matriz sem o ndice. No exemplo abaixo, vamos observar o endereo de i sendo passado para func1( ): void main (void)
{ int i [10]; func1 ( i ); ... }

Se uma funo recebe uma matriz unidimensional, o parmetro pode ser declarado de trs maneiras. Vamos observar isso tendo como exemplo a funo chamada func1( ) que est recebendo o argumento i no exemplo anterior. Essa funo poderia ser declarada da seguinte forma:

65

void func1 ( int { }

*x )

/* ponteiro */

Essa declarao est usando um ponteiro. Podemos fazer tambm:


void func1 ( int x [10] ) { ... } /* Matriz Dimensionada */

Essa declarao utiliza a declarao de matriz padro. Ainda pode ser feito:
void func1( int x [ ]) { ... } /* Matriz no-dimensionada */

Essa ltima declarao especifica que uma matriz do tipo int de algum tamanho ser recebida. Todos os trs mtodos produziram resultados similares, pois todos dizem ao compilador que um ponteiro inteiro ser recebido.

4.6.3 - Strings

Strings nada mais so que vetores de chars. O uso mais comum de matrizes unidimensionais como string de caracteres. A declarao geral para uma string : char nome_da_string [tamanho]; O tamanho de um string deve ser sempre um caractere mais longo do que o nmero de caracteres que se pretende que ele armazene. Isso porque, em todo string, ao final da sequncia de caracteres armazenada, adicionado um elemento especfico, que indica o fim de string, cujo valor '/0' (ou seja, nulo). Vamos observar o exemplo abaixo, em que para guardar uma matriz de 10 caracteres ser necessrio escrever:
66

char str [11]; Isso ir reservar o espao nulo ao final da string. Na linguagem C, no existe o tipo de dado String. Um string declarado como um vetor de char. Porm, possvel manipular constantes string. Uma constante string uma lista de caracteres entre aspas, vejamos: "Ol Brasil" O trecho acima representa uma constante string. Nesse caso, no ser necessrio adicionar o valor nulo ao final da string, pois o prprio compilador C far isso automaticamente. A funo gets( ) l uma string do teclado. Sua forma : gets (nome_da_string); No exemplo do programa abaixo, demonstrado o funcionamento da funo gets( ):
int main ( ) { char string[100]; printf ("Digite o seu nome: "); gets (string); printf ("\n\n Ola %s",string); return(0); }

Observe que vlido passar para a funo printf( ) o nome da string. Como o primeiro argumento da funo printf( ) uma string, tambm vlido fazer: printf (string); Isso simplesmente imprimir a string.

67

EXERCCIO- 06

1 - Preencher um vetor com os nmeros pares do nmero 2 a 20. 2 - Preencher um vetor com os nmeros pares do nmero 2 a 20. Preencher outro or com os nmeros de 10 a 19. Somar os dois vetores e mostrar o resultado na tela. 3 - Armazenar em Vetores, Nomes e Notas PR1 e PR2 de 6 alunos. Calcular a mdia de cada aluno e imprimir aprovado se a mdia for maior que 5 e reprovado se mdia for menor ou igual a 5. OBS.: 2 vetores para as notas tipo float. 1 vetor para os nomes. 1 vetor para a mdia. 1 vetor para situao. 4 - Fazer um programa em C que leia uma frase de at 50 caracteres(utilizar o comando gets) em minscula e imprima a frase em maiscula. 5 - Faa um programa que leia vrias palavras pelo teclado, e armazene cada palavra em uma string. Depois, concatene todas as strings lidas numa nica string. Por fim apresente esta como resultado ao final do programa.

6 - O que imprime o programa a seguir? Tente entend-lo e responder. A seguir, execute-o e comprove o resultado.

# include <stdio.h> int main() { int t, i, M[3][4]; for (t=0; t<3; ++t) for (i=0; i<4; ++i) M[t][i] = (t*4)+i+1; for (t=0; t<3; ++t) { for (i=0; i<4; ++i) printf ("%3d ", M[t][i]); printf ("\n"); } return(0); }

68

Fonte: http://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o) Em: 01/05/2013

ANSI C e ISO C
Durante os finais da dcada de 1970, a linguagem C comeou a substituir a linguagem BASIC como a linguagem de programao demicrocomputadores mais usada. Durante a dcada de 1980, foi adaptada para uso no PC IBM, e a sua popularidade comeou a aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente com outros nos laboratrios Bell, comeou a trabalhar num projecto onde se adicionavam construes de linguagens de programao orientada Ken Thompson e Dennis Ritchie (da esquerda para direita), os por objectos linguagem C. A linguagem criadores das linguagens B e C, respectivamente que eles produziram, chamada C++, nos dias de hoje a linguagem de programao de aplicaes mais comum no sistema operativoWindows da companhia Microsoft; C permanece mais popular no mundo Unix. Em 1983, o instituto norte-americano de padres (ANSI) formou um comit, X3J11, para estabelecer uma especificao do padro da linguagem C. Aps um processo longo e rduo, o padro foi completo em 1989 e ratificado como ANSI X3.159-1989 "Programming Language C". Esta verso da linguagem frequentemente referida como ANSI C. Em 1990, o padro ANSI C, aps sofrer umas modificaes menores, foi adotado pela Organizao Internacional para Padronizao (ISO) como ISO/IEC 9899:1990, tambm conhecido como C89 ou C90. Um dos objetivos do processo de padronizao ANSI C foi o de produzir um sobreconjunto do K&R C, incorporando muitas das caractersticas no-oficiais subsequentemente introduzidas. Entretanto, muitos programas tinham sido escritos e que no compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de funes no-padro e ao fato de alguns compiladores no aderirem ao ANSI C. Aps o processo da padronizao ANSI, as especificaes da linguagem C permaneceram relativamente estticas por algum tempo, enquanto que a linguagem C++ continuou a evoluir. (em 1995, a Normative Amendment 1 criou uma verso nova da linguagem C mas esta verso raramente tida em conta.) Contudo, o padro foi submetido a uma reviso nos finais da dcada de 1990, levando publicao da norma ISO 9899:1999 em 1999. Este padro geralmente referido como "C99".

69

Captulo 5
Desenvolvimento de Projetos com Microcontroladores

Em sistemas de Controle, superviso, medio, comunicao e Automao, so raros os exemplos em que no h necessidade do uso de alguma unidade de processamento. De fato, a no ser que o sistema possua uma lgica extremamente simples, se faz necessrio o uso de uma ou mais CPUs (Central Processing Unit). Isso inclui sistemas que apresentam desde uma simples interface com o usurio por meio de um display LCD (Liquid Cristal Display) at o complexo controle de um veculo aeroespacial. Estes sistemas so definidos como Sistemas embarcados e hoje se fazem presentes em praticamente todas as reas de atividade humana.

Figura 16 Exemplos de sistemas embarcados Entretanto, denida a necessidade de se empregar um elemento processador no sistema, resta o problema de denir qual plataforma utilizar. Entre as diversas disponveis, h CLPs (Controladores Lgico-Programveis), FPGAs (Field-Programmable Gate Array), DSPs (Digital Signal Processing), PCs (embarcados ou no), entre outras. Assim, a escolha do crebro do sistema deve se dar a partir de um compromisso entre as diversas necessidades do
70

projeto e as caractersticas apresentadas pelo elemento processador, como custo, capacidade de processamento, memria, linguagem de programao disponvel, capacidade de atuar em sistemas de controle em tempo real, consumo de energia, etc. Nesse contexto, os microcontroladores geralmente se apresentam como uma das alternativas de menor custo, conabilidade satisfatria, simplicidade, menor tempo de desenvolvimento e menor consumo; porm com limitada capacidade de processamento e memria. Em termos gerais, os microcontroladores podem ser denidos como processadores que foram encapsulados com memria, interface de entrada/sada de dados e dispositivos perifricos. Entre os perifricos esto conversores A/D (analgico/digital), temporizadores/contadores, interface para comunicao serial, Timer programvel, etc. Em outras palavras, so computadores encapsulados em um nico invlucro, como pode ser observado na arquitetura geral mostrada na figura 17.

Figura 17 Microcontrolador, arquitetura tpica Uma Linguagem de Programao na verdade uma forma de interao que possibilita que um determinado sistema (seja qual for, desde que programvel) compreenda o que deve ser feito atravs de comandos implementados de acordo com o que se conceitua "Lgica de Programao". Esta seria a viso up-down (do programador para o sistema). Numa viso down-up (do sistema para programador) uma Linguagem de Programao aquela que permite que o sistema receba os comandos desejados, de maneira ordenada e lgica, por parte do programador. Para muitos, este o trabalho do compilador e no da Linguagem de Programao. Um grande erro. O compilador apenas realiza o trabalho de traduo (da sintaxe utilizada de cdigos por ns compreendido, na linguagem de mquina). Ou seja, se voc no sabe como usar uma Linguagem de Programao e no tem ideia de como deve ser a Lgica de Programao para um determinado caso, no saber como usar um compilador (seja qual for). mais ou menos assim: de nada adianta ter um dicionrio bilingue em mos, se voc no souber como usar uma das Lnguas
71

presentes no mesmo. As IDEs disponveis para o desenvolvimento de aplicaes para microcontroladores, oferecem, basicamente, as funcionalidades mostradas na figura 17. O editor e compilador normalmente aceita receber cdigos em assembley que a linguagem nativa do microcontrolador alvo e tambm cdigos em uma linguagem de alto nvel como a linguagem C/C++ que uma das mais utilizadas. Existem IDEs que trabalham tambm em diversas outras linguagens como Basic (praticamente em desuso) e Java.

Figura 18 Configurao de uma IDE para microcontroladores Vamos ento desenvolver pequenas aplicaes em linguagem C para rodar em um microcontrolador, buscando atender as necessidades de um projeto. Vamos utilizar como processador alvo, microcontroladores da famlia MSP430 da Texas Instruments. Mais especificamente, todos os nossos projetos aplicativos estaro baseados no Kit para desenvolvimento LaunchPad MSP-EXP430G2, fornecido pela prpria Texas por ser de baixo custo (custa somente $4.30 Com frete gratuito), possuir vasta documentao e exemplos disponveis, o que o torna ideal para a aprendizagem nesse universo da programao e desenvolvimento de sistemas dedicados ( figura 19).

Figura 19 Ferramenta de Desenvolvimento - LaunchPad MSP-EXP430G2


72

5.1 - Metodologia de Projeto de Sistemas Embarcados

O projeto de sistemas embarcados deve seguir uma metodologia precisa. Trs razes principais justificam a importncia de se seguir uma metodologia de projeto: 1 - permitir que o cumprimento dos requisitos de projeto possam ser assegurados de maneira formal medida que o projeto avana; 2 - potencializar o uso de ferramentas de automatizao das tarefas,tais como ferramentas de IDE e CAD, uma vez que cada etapa conhecida e pode ser dividida em pequenas tarefas; 3 Documentao, visando facilitar a comunicao entre as equipes de desenvolvimento, j que o estabelecimento da metodologia tambm auxilia a repartio de responsabilidades, permitindo que cada equipe tome cincia das atribuies das demais e da maneira como esto vinculadas no projeto. Seja qual for a metodologia adotada, ela deve ser capaz de realizar trs aes comuns a todo projeto: especificao/modelagem, validao e sntese. O processo de especificao e modelagem de um sistema, sub-sistema ou componente, pode ser resumido como o processo que inicia com a descrio de uma especificao e termina com a descrio de um modelo. um modelo formal deve conter: Uma especificao funcional, sob a forma de um conjunto de relaes explcitas ou implcitas que envolvem entradas, sadas, e possveis estados internos; Um conjunto de propriedades que o projeto deve satisfazer, dadas na forma de um conjunto de relaes entre entradas, sadas e estados, que possam ser comparados com a especificao funcional; Um conjunto de ndices de desempenho que avaliem a qualidade do projeto em termos de custo, confiabilidade, velocidade, tamanho, etc., dados como um conjunto de equaes que envolvam, entre outras coisas, entradas e sadas; Um conjunto de restries sobre os ndices de desempenho. Dessa forma, o projeto durante o processo de especificao e modelagem pode ser visto como a sequncia de passos que implementam o modelo Especificado, cumprindo as formalidades descritas.

73

5.2 - PROJETO

Ttulo do projeto: Pisca Led com microcontrolador MSP4030 5.2.1 Escopo do projeto: Desenvolvimento do primeiro programa para ser gravado em um microcontrolador MSP430, mais especificamente o MSPG2231, usando a ferramenta de desenvolvimento LaunchPad e o port do GNU gcc para o MSP430. 5.2.2 Descrio do Hardware O MSPG2231 um microcontrolador da famlia MSP430, so dispositivos de baixo consumo de energia, com CPU RISC de 16-bit. Este microcontrolador possui um total de 14 pinos e o que acompanha a LaunchPad vem em encapsulamento DIP. Como todo microcontrolador, alm de CPU e de dispositivos de entrada e sada os microcontroladores desta famlia possuem uma srie de recursos como memria, timers, conversores analgico-digital e digital-analgico entre outros. No momento, vamos nos concentrar em usar as sadas para acender e apagar leds. O kit de desenvolvimento possui dois leds, um ligado ao pino zero da porta um (P1.0) em um ligado ao pino seis tambm da porta um (P1.6). Nosso cdigo far com que os dois leds fiquem piscando alternadamente, quando um estiver acesso, o outro estar apagado.

5.2.3 - Desenvolvimento do cdigo fonte

Cdigo fonte: pisca-led

74

A linha 1 contm apenas um comentrio, com o nome do arquivo e o que ele faz.
1 // blink.c - Exemplo de pisca led

A linha 2 uma diretiva para que o compilador considere o contedo do arquivo msp430x20x1.h durante a compilao deste cdigo.
2 #include <msp430x20x1.h>

A linha 4 a declarao da funo Delay, que de fato o tempo entre a alterao dos estados dos leds.
4 void Delay(void);

Na linha 6 iniciamos a funo principal do programa, que vai at a linha 15.


6 int main(void) {

A linha 7, serve para parar o Watchdog Timer (Um dispositivo de segurana que reinicia o microcontrolador caso exista algum problema como por exemplo um loop infinto. De fato caso o Watchdog esteja ativado ele reinicia o microcontrolador ao passar de um determinado tempo, sendo assim softwares mais elaborados, que fazem uso do Watchdog devem se preocupar em reiniciar esta contagem antes dela acabar uma forma de informar que o sistema est funcionando corretamente para que o microcontrolador no seja reiniciado).
7 WDTCTL = WDTPW | WDTHOLD;

A linha 8 a instruo que define que os pinos 0 e 6 da porta 1 sero utilizadas como pinos de sada. Na tabela abaixo isso se torna mais claro. O nmero 041 em hexadecimal pode ser escrito como 0b01000001 em notao binria, e cada bit corresponde a um pino da porta, onde 0 configura o pino como entrada e 1 como sada.

Representao de 041 em binrio 0 1 0

Pino da porta P1.7 P1.6 P1.5

Estado do pino Pino configurado como entrada Pino configurado como sada Pino configurado como entrada

75

Representao de 041 em binrio 0 0 0 0 1


8 P1DIR = 0x41;

Pino da porta P1.4 P1.3 P1.2 P1.1 P1.0

Estado do pino Pino configurado como entrada Pino configurado como entrada Pino configurado como entrada Pino configurado como entrada Pino configurado como sada

A linha 9 contm a instruo que leva os pinos da porta um para nvel alto ou nvel baixo de acordo com o valor atribudo P1OUT. Neste caso, como 040 pode ser representado por 0b01000000 em notao binria, neste instante apenas o pino 6 da porta 1 estar em nvel alto, o pino 1, que tambm est configurado como pino de sada, estar com nvel baixo, pois seu bit correspondente est com valor 0, como pode ser visto com maior clareza na tabela abaixo.

Representao de 040 em binrio 0 1 0 0 0 0 0 0


9 P1OUT = 0x40;

Pino da porta P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

Nvel de tenso no pino Nvel baixo Nvel alto Nvel baixo Nvel baixo Nvel baixo Nvel baixo Nvel baixo Nvel baixo

A instruo da linha 11 coloca o microcontrolador em um loop infinito, fazendo com que as instrues dentro deste lao sejam executadas enquanto o programa esteja rodando. While significa enquanto, ou seja, enquanto o resultado da operao entre parnteses for verdadeira, o microprocessador ficar executando as instrues entre as chaves, no caso as instrues da linha 11 at a linha 14.
76

Em C, qualquer inteiro diferente de 0 equivale a verdadeiro e um inteiro igual a 0 equivale a falso. Desta forma while(1) o mesmo que dizer ao microcontrolador para que fique executando as instrues dentro das chaves do while para sempre.
11 while(1){

Na linha 12, executamos novamente a instruo P1OUT para mudar o nvel de tenso nos pinos da porta P1. Vamos usar a funo lgica XOR (^) para modificar o bit 0 e o bit 6 da porta 1 (P1.0 e P1.6). Lembrando que o estado atual dos nveis de tenso da porta P1 esto definidos para 040, vamos executar XOR entre os pinos do estado atual (P1OUT) e 041 e em seguida atribuir o resultado desta operao ao estado da porta. Para facilitar o entendimento vejamos a operao XOR com os argumentos da operao em suas representaes binrias.

Numero em hexadecimal Estado atual da porta (P1OUT) Valor fixo usado na operao Resultado da operao XOR 040 041 001

Nmero em binrio 0b01000000 0b01000001 0b00000001

Desta forma uma vez que a instruo desta linha seja executada, caso o estado da porta seja 040 (em binrio 0b01000000, que equivale ao pino 6 da porta 1 em nvel alto) ao final da execuo o estado de P1OUT ser alterado para 001 (em binrio 0b00000001, que equivale ao pino 0 da porta 1 em nvel alto).
12 P1OUT = P1OUT ^ 0x41;

A linha 13, desvia o fluxo do programa para a funo Delay, que tem como nico objetivo gastar tempo, de forma que seja perceptvel a olho n a alterao dos estados dos leds.
13 Delay();

77

Entre as linhas 17 e 22 est a funo Delay. Esta funo no recebe nenhum argumento e no retorna nada, como j foi dito, sua utilidade gastar tempo e para isso toda vez que ela chamada, em seu escopo declarada uma varivel de valor inteiro e sem sinal igual a 30000 (unsigned int dly = 30000;) que decrementada atravs da instruo dly. Como condio do while o prprio valor de dly aps o decremento, assim que dly chegar a 0 a funo Delay encerrada, e o fluxo do programa redirecionado para a funo principal (main).
17 void Delay(void) { 18 19 20 21 22 } unsigned int dly = 30000; while(--dly); { // Nothing:D }

Aps retornar, o microcontrolador ir executar a instruo aps a instruo Delay da linha 13 que, neste caso por estar em um loop infinito, ser a instruo da linha 12. Novamente o XOR entre o estado atual da porta P1 (P1OUT) e 041. Desta vez P1OUT 001 e o resultado da operao XOR com 041 levar o estado de P1 de volta para 040. Assim, o lao infinito em que colocamos o microcontrolador ficar alternando os estados dos pinos P1.0 e P1.6 e em seguida gastando um determinado tempo para que possamos perceber esta alterao, e forma visual.

78

5.3 - PROJETO Ttulo do projeto: SENSOR DE TEMPERATURA COM LAUNCHPAD_MSP430 Baseado no artigo: SENSOR DE TEMPERATURA CON LAUNCHPAD MSP430 (TEXAS) W. Gmez (273558), J. Barrera (273219), C. Castaeda (416044), y K. Nez (274345) Facultad de Ingeniera, Ciencias, Fundamentos de Electricidad y Magnetismo Grupo 12 Universidad Nacional de Colombia, Bogot 19 de Junio de 2012

5.3.1 - Escopo do projeto: Medir a temperatura ambiente por meio de sensor LM35, cuja tenso de sada linearmente proporcional temperatura em graus centgrados. (-55 C a 150 C). O circuito baseado no Kit LaunchPad MSP430. Os dados da temperatura ser apresentado em um display LCD. 5.3.2 Justificativa

A temperatura uma das grandezas fsicas mais medida. Os sensores de temperatura convertem uma grandeza fsica em um valor de resistncia ou de tenso. O uso de sensores de temperatura muito amplo. Seja a temperatura ambiente, ou a medio precisa em um processo qumico industria, a medio muito importante. Os sensores de temperatura usam diferentes efeitos fsicos para converter uma temperatura em um parmetro eltrico. Microprocessadores so ideais para se obter estes valores e, atravs de um programa, realizar as adaptaes e converses necessrias, para a visualizao desses valores.

5.3.3 Fundamentao terica O incio do processo passa pela converso do sinal analgico vindo do sensor em um valor digital, para que possa ser tratado pelo software que ser desenvolvido. O circuito integrado LM35 um sensor de temperatura calibrado com uma preciso de 1 C com uma faixa que se estende a partir de -55 a 150 C. O LM35 um sensor de preciso, fabricado pela National Semiconductor que apresenta uma sada de tenso linear relativa temperatura em que ele se encontrar no momento em que for alimentado por uma tenso de 4-20Vdc, tendo em sua sada um sinal de 10mV para cada Grau Celsius de temperatura, sendo assim, apresenta uma boa vantagem com relao aos demais sensores de temperatura calibrados em KELVIN, no necessitando nenhuma subtrao de variveis para que se obtenha uma escala de temperatura em Graus Celsius.
79

O LM35 no necessita de qualquer calibrao externa ou trimming para fornecer com exatido, valores temperatura com variaes de C ou at mesmo C dentro da faixa de temperatura de 55C 150C. Este sensor poder ser alimentado com alimentao simples ou simtrica, dependendo do que se desejar como sinal de sada, mas independentemente disso, a sada continuar sendo de 10mV/C. O sensor LM35 apresentado com vrios tipos de encapsulamentos, sendo o mais comum o TO-92, que mais se parece com um transistor, e oferece tima relao custo benefcio, por ser o mais barato dos modelos e propiciar a mesma preciso dos demais. A grande diversidade de encapsulamentos se d devido alta gama de aplicaes deste integrado.

Figura 20 LM35 Os conversores A/D so dispositivos que estabelecem uma relao entre o valor do sinal analgico em sua entrada e a palavra digital obtida na sua sada. A relao estabelecida na maioria dos casos, com a ajuda de uma tenso de referncia. A converso A/D tem o seu fundamento terico no teorema da amostragem e os conceitos de quantizao e codificao. O processo para mudar o formato de sinal envolve as seguintes etapas: Amostragem - Sampling quantificao codificao Uma vez convertido, os dados devem ser tratados pelo programa e enviados para o display. Um mdulo de display de cristal lquido apesar de internamente possuir um microcontrolador dedicado para executar suas funes,tem uma operao muito simples. A maioria dos displays, encontrados no mercado, possuem recursos internos para facilitar ao mximo o controle dos mesmos, proporcionando uma interface com qualquer microcontrolador.
80

Assim quando usamos um mdulo LCD em um projeto, devemos preocuar apenas com os comandos necessrios para escrever um caractere, apagar uma linha, ligar o cursor, e muitos outros comandos possveis (de acordo com cada modelo). A tabela seguinte lista alguns padres utilizados com suas divises em relao a linhas e colunas.
Indicao do fabricante 16 16 16 20 40 x x x x x 1 2 4 4 2 Nmero de linhas 1 2 4 4 2 Nmero de colunas 16 16 16 20 40 Total de caracteres 16 32 64 80 80

O total de caracteres refere-se ao nmero total de elementos que podem ser demonstrados de uma nica vez, inclusive espaos em branco. Tambm importante salientar que existem muitos outros padres referentes ao nmero total de caracteres, sendo recomendvel uma consulta aos fabricantes. Sempre que possvel deve-se consultar os datasheets fornecidos pelo fabricante. Finalmente a figura 21 mostra o esquema geral de conexes para o projeto .

Figura 21 Diagrama geral do cicuito O programa de controle do termmetro, baseado no microcontrolador MSP430G2553 pode ser visto a seguir.

81

5.3.4 - Cdigo do Programa

// PROGRAMA DE CONTROLE DO TERMOMETRO COM LM35 E LCD #include "io430.h" #include <msp430g2553.h> #include "ADC10_2553.h" void write_SegC (char value) // LCD Port assignement #define LCD_DIR P1DIR #define LCD_OUT P1OUT // Lcd Pin assignement #define LCD_PIN_RS BIT5 //#define LCD_PIN_RW BIT7 #define LCD_PIN_EN BIT6 #define LCD_PIN_D4 BIT1 #define LCD_PIN_D5 BIT2 #define LCD_PIN_D6 BIT3 #define LCD_PIN_D7 BIT4 //#define MAT_PIN BIT6 #define forever for(;;) // Procedure to strobe data to LCD register void LCDPulseEN(void) { // Set Enable active __delay_cycles(20); LCD_OUT |= LCD_PIN_EN; __delay_cycles(20); // Release Strobe LCD_OUT &= (~LCD_PIN_EN); } // this send 4 bit of data void SendNibble(char data) { // Clear all data bit LCD_OUT &= ~(LCD_PIN_D4|LCD_PIN_D5|LCD_PIN_D6|LCD_PIN_D7); // Set data bit on port bit if(data & 0x01) LCD_OUT |= LCD_PIN_D4; if(data & 0x02) LCD_OUT |= LCD_PIN_D5; if(data & 0x04) LCD_OUT |= LCD_PIN_D6; if(data & 0x08) LCD_OUT |= LCD_PIN_D7; // Nibble set complete, send to LCD LCDPulseEN(); __delay_cycles(500); } // Send a byte of data to LCD register void SendByte(unsigned char data) { SendNibble((data>>4) & 0x0F); SendNibble((data) & 0x0F); __delay_cycles(500); } // send a byte to command register void SendInstruction(unsigned char data) { // Set Register to command LCD_OUT &= ~LCD_PIN_RS; SendByte(data); __delay_cycles(80000); } // Send a byte of data to LCD register void LCDputch(unsigned char data) { // Set Register to data

82

LCD_OUT |= LCD_PIN_RS; SendByte(data); __delay_cycles(500); } void InitLCD(void) { // clear all bit of LCD control & data Lines LCD_OUT &= ~(LCD_PIN_EN|LCD_PIN_RS); //|LCD_PIN_RW); // Set LCD pins to output LCD_DIR |=(LCD_PIN_EN|LCD_PIN_RS|LCD_PIN_D4|LCD_PIN_D5|LCD_PIN_D6|LCD_PIN_D7); // |LCD_PIN_RW // wait Powerup __delay_cycles(100000); // LCD can be in an unknown state so set to a known state sending 3 times LCD set to 8 bit mode SendNibble(3); __delay_cycles(16000); // Wait for init SendNibble(3); __delay_cycles(400); SendNibble(3); __delay_cycles(400); // now is 8 bit, sending 2 set mode to 4 bit (0x2n) SendNibble(2); __delay_cycles(800); // Now set to mode 4 bit 2 line 5x7 char SendInstruction(0x28); __delay_cycles(8000); // Make cursor visible one line set to 0x0c to invisible cursor SendInstruction(0x0e);//c __delay_cycles(800); // Clear screen SendInstruction(0x01); __delay_cycles(8000); // Increment address mode SendInstruction(0x06); __delay_cycles(8000); // Set write data address to 0 SendInstruction(0x80); } // Set write cursor to Row and Col void LCDSetPosition(char Row, char Col) { // if row is not 0 add 0x40 (4 line models require adding 0 20 60 //40) if(Row) Col+=0x40; SendInstruction(0x80 | Col); __delay_cycles(800); } // Clear LCD void LCDClear(void) { SendInstruction(0x01); __delay_cycles(100000); } // Lcd cursor to first row first column void LCDGoToHome(void) { SendInstruction(0x02); __delay_cycles(100000); } // Shift left mode void LCDShiftLeft(void) { SendInstruction(0x18); } // Shift right mode void LCDShiftRight(void) { SendInstruction(0x1C); } // Cursor blinking mode

83

void LCDBlinkCursor(void) { SendInstruction(0x0F); } // Print a text line to LCD screen void LCDPrintString(const char * Text) { while (*Text) LCDputch(*Text++); } void delay0(unsigned long i);//function for delays int temperatura; char temperaturad,temperaturau,temperaturaReal; char temperature; //char *pointer=&temperatura; void main (void) { WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; InitLCD(); ADC10_Init(); //configure TIMER A TACTL = TASSEL_2 + ID_3 + MC_1; SMCLK/8;

// Set up Timer A: Clock :

//Mode : Up (counts from zero to the value of CCR0) CCR0 = 65000; // TAR counts up to CCR0 and resets to 0 (313*8 = 2504 us : ~ 2.5 ms) CCTL0 = CCIE; // CCR0 interrupt enabled _EINT(); // enable interrupts

temperatura=ADC10_Read(0);///LECTURA DEL CANAL LCDClear(); ////////////////PROGRAMA PRINCIPAL forever{ temperature = (3.6*(float)temperatura*100)/1024.0; temperaturaReal=temperatura+48; //2-1; temperaturad=temperature/10+48; temperaturau= temperature%10+48; //LCDputch(temperature); //LCDputch(temperaturaReal); LCDputch('T'); LCDputch('e'); LCDputch('m'); LCDputch('p'); LCDputch('e'); LCDputch('r'); LCDputch('a'); LCDputch('t'); LCDputch('u'); LCDputch('r'); LCDputch('a'); LCDputch(':'); LCDSetPosition(2,1); LCDputch(temperaturad); LCDputch(temperaturau);

84

LCDputch('.'); LCDputch(temperaturau+2); LCDputch(temperaturad+3); LCDGoToHome(); delay0(140000); // LCDClear(); }//end forever }//end main void delay0(unsigned long i){ do (i--); while (i != 0); } //////////////////////////// Timer_A Interrupt Vector handler//////////////// #pragma vector=TIMER0_A0_VECTOR //Interrupt vector for channel CCR0 __interrupt void Timer_A(void) { temperatura=ADC10_Read(0); }

VER: MAIO-2013
85