Você está na página 1de 9

Experimento 01

Microprocessadores e microcontroladores
Lucas Hlion Santana de Souza 10/0111891
Faculdade do Gama Universidade de Braslia Braslia !F" Brasil lucas#elion$aluno%un&%&r
ResumoO experimento constitui-se do projeto de trs programas em linguagem C, que visam aperfeioar nos projetistas conceitos basicos da linguagem C, que so fundametais em aplicaes envolvendo microcontroladores !sses programas foram implementados integralmente em linguagem C, no laborat"rio de #icrocontroladores e #icroprocessadores Linguagem C; programao estruturada; microcontroladores

Feli'e !uarte (ac#ado 10/0010)*1


Faculdade do Gama Universidade de Braslia Braslia !F" Brasil +eli'e%duarte%mac#ado$,mail%com nvel com a utiliza45o de cAdi,o @ssem&l; no meio do cAdi,o +onte% @lm +atores citados" a lin,ua,em 7 'ossuia uma outra im'ortante caracterstica" 9ue sua 'ro3imidade do cAdi,o de m69uina" 9ue 'ermite 9ue um 'roEetista seEa ca'az de +azer al,umas 'revisFes de como o 'ro,rama ir6 se com'ortar" ao ser e3ecutado% 1ais caractersticas +azem da lin,ua,em 7" uma das utilizadas em a'lica4Fes e solu4Fes no cam'o de microcontroladores% ---% 0SG07-F-7@>?.

-%

.B/01-2.S

A. Objetivo geral 0ste e3'erimento visa a a'lica45o de conceitos &6sicos da lin,ua,em 7 na im'lementa45o de al,oritmos estruturados% 1ais conceitos s5o de relevante im'ort8ncia" uma vez 9ue s5o &astante utilizados no desenvolvimento de sistemas microcontrolados% B. Objetivos especficos !esenvolver e im'lementar um 'ro,rama em lin,ua,em 7 9ue rece&a um valor 9ual9uer entre 0 e 999" e a'resente como res'osta o al,arismo corres'ondente a centena" dezena e unidade% !esenvolver e im'lementar um 'ro,rama em lin,ua,em 7 9ue a'resente na tela os n:meros de 0 a 9 em +ormato dis'la;% !esenvolver e im'lementar um 'ro,rama em lin,ua,em 7 9ue rece&a um valor 9ual9uer entre 0 e 999" e im'rima na tela" em +ormato dis'la;" o al,arismo corres'ondente a centena" dezena e unidade% --% -<1=.!U>?.

. e3'erimento 01 trata de trHs 'ro,ramas em li,ua,em 7" 9ue +uncionam inde'endentes dos demais% A. rograma 01 . 'ro,rama 01 deve rece&er um n:mero 9ual9uer entre 0 e 999% 7omo res'ota ao usu6rio o 'ro,rama deve im'rimir na tela uma mensa,em 9ue indi9ue os al,arismos conrres'ondentes as centenas" dezenas e unidades% Um e3em'lo de +uncionamento desse 'ro,rama ilustrado na +i,ura 01%

Fi,ure 1% B.

03am'lo de +uncionamento do 'ro,rama 01%

@ lin,ua,em 7 uma lin,ua,em de 'ro,rama45o estruturada" 'rocedural" im'erativa e de 'ro'Asito ,eral% 0la +oi criada em 19)B 'or !ennis =itc#ie no @1C1 Bell La&s% -nicialmente" a lin,ua,em tin#a o 'ro'Asito de desenvolver o sistema o'eracional U<-D" 9ue +oi orinalmente escrito em @ssem&l;% @ lin,ua,em 7 'ossui caracterticas de lin,ua,em de alto nvel" ou seEa" 'ossvel desenvolver sistema em lin,ua,em 7 sem 9ue seEa necess6rio con#ecer o 'rocessador% 7oncomitantemente" a lin,u,em 7 'ermite acesso de &ai3o

rograma 0! . 'ro,rama 0B n5o rece&e nen#um 'ar8metro do usu6rio% 0le deve im'rimir na tela o n:meros de 0 ao 9% 0ntretanto" essa im'ress5o deve estar em +ormato dis'la;" con+orme Fi,ura 0B%

Fi,ure B% ".

-m'ress5o de 0 a 9 no +ormato dis'la;%

Fi,ure *%

0strutura de valida45o%

rograma 0# . 'ro,rama 0I 'ode ser visto como uma uni5o dos 'ro,ramas 01 e 0B% . 'ro,rama 0I deve rece&er um n:mero 9ual9uer entre 0 e 999% 7omo res'ota ao usu6rio o 'ro,rama deve im'rimir na tela os al,arismos corres'ondentes as centenas" dezenas e unidades% 0ssa im'ress5o" 'orm" deve estar de acordo com o +ormato a'resentado no 'ro,rama 0B% Um e3em'lo de +uncionamento desse 'ro,rma est6 ilustrado na +i,ura 0I%

@ se'ara45o de cada al,arismo o&tida atravs da raz5o do n:mero 'ela sua ordem de ,randeza% Gor e3em'lo" o al,arismo da centena o&tido 'ela raz5o 'or cem% 1al im'lementa45o est6 ilustrada na Fi,ura L%

Fi,ure L%

0strutura de o&ten45o dos al,arismos%

.&tidos os al,arismos" &asta im'rimir 'ara o usu6rio" usando a +un45o printf% B. rograma 0! 2isando a im'lementa45o do 'ro,rama 0B" de+inimos" inicialmente" o +ormato dis'la;% Gode se considerar uma ta&ela de cinco lin#as e 9uatro colunas 'ara re'resentar o +ormato dis'la;" sendo cada lacuna da ta&ela um se,mento do dis'la;% 0m lin,ua,em 7 essa ta&ela +oi im'lementada utilizando um vetor de vinte 'osi4Fes" sendo cada ndice do vetor uma lacuna da ta&ela" e conse9uentemente" um se,mento do dis'la; JFi,ura MK%

Fi,ure I%

03am'lo de +uncionamento do 'ro,rama 0I%

Fi,ure M%

1a&ela de ndices 9ue re'resenta o +ormato dis'la;%

-2%

-(GL0(0<1@>?.

1odos os 'ro,ramas a'resentados no e3'erimento 01 +oram im'lementados em lin,ua,em 7% A. rograma 01 @ im'lemeta45o do 'ro,rama 01 consiste" &asicamente" em +azer a leitura de um n:remo 9ual9uer do teclado" 'ara em se,uida validar esse n:mero" e +inalmente ,uadar cada al,arismo desse n:mero em vetor de trHs com'onentes" onde cada com'onente re'resenta um al,arismo% @ leitura realizada 'or meio da +un45o scanf% @ valida45o do n:mero Jisto " 'ara ,arantir 9ue est6 entre 0 e 999K consiste em utilizar estruturas de re'eti45o do$%&ile" con+orme +i,ura 0*%

Utilizando estruturas condicionais con+i,urou se uma se9uencia de zeros e uns 9ue" considerando o +ormato dis'la;" im'rima o n:mero deseEado JFi,ura )K%

Fi,ure )%

7on+i,ura45o do vetor do dis'la;

Utilizando estruturas de re'eti45o im'rime se o vetor na tela" no +ormato dis'la;% Foram im'lementadas trHs contadoresN um contador 9ue 'ercorre as lin#as" um contador 9ue 'ercorre as colunas" e um contador 9ue controla a 9uantidade de n:meros% @lm disso" ao invs de +azer a im'ress5o de zeros e

uns" utlizou se estruturas condicionais i+ else 'ara relacionar um caractere 'ara o n:mero 1 e outro caractere 'ara o n:mero 0 JFi,ura 08K%

Fi,ure 9%

7#amada de +un45o 9ue im'rime o +ormato dis'la;%

2%

G=.1.1-G@>?.

<o e3'erimento 01 n5o +oi necess6rio 'rototi'ar #ardPare% 1odos os o&Eetivos s5o atin,idos com o desenvolvimento de 'ro,ramas im'lementados em lin,ua,em 7" e e3ecutados em um com'utador% 2-% 7.<7LUSQ0S

Fi,ure 8% ".

-m'ress5o atravs de estruturas de re'eti45o%

@ realiza45o das atividades do e3'erimento 01 'ermitiram o a'er+ei4oamento de conceitos &ase da lin,ua,em 7 e 'ro,rama45o estrutura% 0sses conceitos tem relevante im'ort8ncia na resolu45o da 'ro&lem6tica no diz res'eito ao desenvolvimento de sistemas microcontrolados% @ &i&lioteca desenvolvida a 'artir do 'ro,rama 0B" em&ora ten#a sido desenvolvida 'ara ser utilizada em um com'utador Je seus diversos 'eri+ricosK" 'ode ser utilizada em diversos conte3tos" sendo o 'rinci'al a a'lica45o em um sistema microcontrolado 9ue ten#a como uma das sadas um dis'la;% =0F0=0<70S
R1S RBS RIS H% S#ildt" T7 7om'leto e 1otalU" Ia ed%" vol% Vnico% S5o GauloN (aWron BooWs" 199M% @% (% Guimar5es" T@l,oritmos e 0struturas de !adosU" =io de /aneiro" L17N B008% (% @ntonio" TGro,rama45o de (icrocontroladores G-7 usando Lin,ua,em 7U" 70F010S" 2itAria" B00M%

rograma 0# . 'ro,rama 0I +oi im'lementado +azendo a uni5o dos 'ra,ramas 01 e 0B% 7on+ome 'ro,rama 01" o 'ro,rama 0I rece&e um n:mero entre 0 e 999 e +az a se'ara45o dos al,arismo corres'ondentes O centenas" dezenas" e unidades% 0m se,uida" cada al,arismo 'assado como 'ar8metro 'ara o 'ro,rama 0B" 9ue +oi utilizado no 'ro,rama 0I como uma &i&lioteca JFi,ura 09K%

/* * * * * * * * *

Universidade de Brasilia Faculdade do Gama Microcontroladores e Microprocessadores Professor: Diogo Garcia Lucas Helion Santana de Souza - 10/0111891 Felipe Duarte Machado - 10/0010741 */

// Questao 01 #include <stdio.h> int main(){ int val, num[3]; do { printf("Digite um nmero entre 0 e 999 -> "); scanf("%d%*c", &val); } while (val<0 || val>999); num[0] = val/100; num[1] = (val-(num[0]*100))/10; num[2] = val - (num[0]*100 + num[1]*10); printf("\nCentenas = %d",num[0]); printf("\nDezenas = %d", num[1]); printf("\nUnidades = %d\n\n", num[2]); return 0; }

/* * * * * * * * *

Universidade de Brasilia Faculdade do Gama Microcontroladores e Microprocessadores Professor: Diogo Garcia Lucas Helion Santana de Souza - 10/0111891 Felipe Duarte Machado - 10/0010741 */

// Questao 02 #include <stdio.h> // Copia o vetor A para o vetor B void Copia( int *A, int *B){ int i; for (i=0; i<20; i++){ *(B+i) = *(A+i); } } // Retorna para o vetor codigo uma configuracao // correspondente ao inteiro numero void codifica( int *codigo, int numero){ switch (numero){ case (0):{ int pontos[]={1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (1):{ int pontos[]={0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,1}; Copia(pontos, codigo); break ; } case (2):{ int pontos[]={1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1}; Copia(pontos, codigo); break ; } case (3):{ int pontos[]={ 1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (4):{ int pontos[]={1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0}; Copia(pontos, codigo); break ; } case (5):{ int pontos[]={1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (6):{ int pontos[]={1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (7):{ int pontos[]={1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0}; Copia(pontos, codigo); break ; } case (8):{

int pontos[]={1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (9):{ int pontos[]={1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } } } void printer4x3(){ /* Display: * 00 01 02 03 * 04 05 06 07 * 08 09 10 11 * 12 13 14 15 * 16 17 18 19 * */ int pontos[10][20],i,j,k; for (i=0;i<10;i++){ codifica(&pontos[i],i); } // Imprime na tela de acordo com configuracao // recebida atraves da funcao codifica printf("\n\t"); for (k=0;k<20;k+=4){ for (i=0;i<10;i++){ for (j=0;j<4;j++){ if (pontos[i][j+k]==1) printf("%c", 'o'); else if (pontos[i][j+k]==0) printf("%c", ' '); } printf("\t"); } printf("\n\t"); } printf("\n\n"); } int main(){ printf("\nImprime do 0 ao 9\n"); printer4x3(); }

/* * * * * * * * *

Universidade de Brasilia Faculdade do Gama Microcontroladores e Microprocessadores Professor: Diogo Garcia Lucas Helion Santana de Souza - 10/0111891 Felipe Duarte Machado - 10/0010741 */

// Questao 03 #include <stdio.h> #include "Printer4_3.c" int main(){ int val, num[3]; do { printf("Digite um nmero entre 0 e 999 -> "); scanf("%d%*c", &val); } while (val<0 || val>999); num[0] = val/100; num[1] = (val-(num[0]*100))/10; num[2] = val - (num[0]*100 + num[1]*10); printf("\nCentenas ="); printer4x3(num[0]); printf("\nDezenas ="); printer4x3(num[1]); printf("\nUnidades ="); printer4x3(num[2]); return 0; }

/* * * * * * * * *

Universidade de Brasilia Faculdade do Gama Microcontroladores e Microprocessadores Professor: Diogo Garcia Lucas Helion Santana de Souza - 10/0111891 Felipe Duarte Machado - 10/0010741 */

// Biblioteca de Printer4x5 // Copia o vetor A para o vetor B void Copia( int *A, int *B){ int i; for (i=0; i<20; i++){ *(B+i) = *(A+i); } } // Retorna para o vetor codigo uma configuracao // correspondente ao inteiro numero void codifica( int *codigo, int numero){ switch (numero){ case (0):{ int pontos[]={1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (1):{ int pontos[]={0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,1}; Copia(pontos, codigo); break ; } case (2):{ int pontos[]={1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1}; Copia(pontos, codigo); break ; } case (3):{ int pontos[]={ 1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (4):{ int pontos[]={1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0}; Copia(pontos, codigo); break ; } case (5):{ int pontos[]={1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (6):{ int pontos[]={1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } case (7):{ int pontos[]={1,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0}; Copia(pontos, codigo); break ; } case (8):{ int pontos[]={1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1}; Copia(pontos, codigo);

break ; } case (9):{ int pontos[]={1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1}; Copia(pontos, codigo); break ; } } } void printer4x3( int valor){ /* Display: * 00 01 02 03 * 04 05 06 07 * 08 09 10 11 * 12 13 14 15 * 16 17 18 19 * */ int pontos[20],i; // Validacao if (valor<0 || valor>9){ printf("\nO numero deve estar entre 0 e 9.\n\n"); exit(1); } codifica(&pontos,valor); // Imprime na tela de acordo com configuracao // recebida atraves da funcao codifica printf("\n\t"); for (i=0;i<20;i++){ if (pontos[i]==1) printf("%c", 'o'); else if (pontos[i]==0) printf("%c", ' '); if (((i+1)%4)==0) printf("\n\t"); } printf("\n\n"); }