Documentos de Académico
Documentos de Profesional
Documentos de Cultura
double ordenada9 : struct (ipo#iudad8 (ipo7unto situacion9 c0ar nombre;60<9 :9 7ara almacenar varias ciudades, se construir. un vector de (ipo#iudad. /e pide construir una funci$n que, a partir de un vector de (ipo#iudad y dado el nombre de una ciudad, reordene ascendentemente el vector atendiendo a la distancia eucl+dea del resto de las ciudades con respecto a la elegida. 7or e-emplo, si elegimos =>ranada=, la ciudad con dic0o nombre deber. ponerse como la primera componente del vector9 la segunda ser. la ciudad m.s cercana a =>ranada= y as+ sucesivamente. "l prototipo de la funci$n ser.3
void Reordenar (TipoCiudad ciudades[ ! int num"ciudades! const c#ar nom$re"ciudad"referencia[ %&
Recordemos que la distancia eucl+dea entre dos puntos se define como la ra+z cuadrada de la suma de los cuadrados de las diferencias de las abscisas y las ordenadas. %o pueden usarse vectores auxiliares. 12) Una red de sensores inal.mbrica intercambia mensa-es entre sus nodos y esta comunicaci$n tiene diferentes caracter+sticas. *a comunicaci$n puede ser broadcast o unicast , multi0op o single 0op, el mensa-e se puede enviar o puede fallar su env+o, y el mismo puede ser recibido o no. "scriba una funci$n en #, que utilice un campo de bits, para representar que tipo de caracter+sticas tiene la comunicaci$n y si se pudo establecer o no. Realice un programa que genere ? valores al azar de un byte, y analice que tipo de comunicaci$n se estableci$. 1uestre por pantalla como result$ cada comunicaci$n. /ignificado de cada bit3 ' $roadcast! ( unicast! ) multi#op! * single #op! + enviado! , no enviado! reci$ido . / no reci$ido.
13) "scribir la funci$n paridad"par que recibe un byte y retorna un byte. "l byte devuelto debe ser igual al byte recibido o igual al byte recibido con el bit mas significativo modificado de forma tal que la configuraci$n del byte entregado contenga un n mero par de unos. 14) >enerar una funci$n unsigned get0its(unsigned 1!int p! int n% que retorne ad-ustado a derec0a los n bits de x, m.s a la izquierda que la posici$n indicada por p. &sumir que el bit menos significativo de x, ocupa la posici$n cero 0 y que n y p siempre asumen valores positivos, por e-emplo3 get@its(x,A,3! deber. retornar los 3 bits que ocupen las posiciones A, 6 y ? dentro de x 15) >enerar una funci$n unsigned rig#tRot(unsigned 1!int n% que rote a derec0a los ultimos n bits de x. &sumir que el bit menos significativo de x, ocupa la posici$n cero y que n siempre asume valores positivos. 16) >enerar una funci$n unsigned set0its(unsigned 1! int p% que setee ad-ustado a izquierda los p bits menos significativos de x. "l resto de los bits deben ser cero &sumir que el bit menos significativo de x, ocupa la posici$n cero y que p siempre asume un valor positivo que debe ser menor o igual a B.
Pg 2 de 11
Parte B "n los siguientes e-ercicios debe asumirse3 que los C bits de una variable PORT_OUT representan sendas salidas digitales de un microcontrolador (1#D!. "l menos significativos es el bit0 y el mas significativo es el bitB. "stas salidas se consideran en los enunciados finalmente conectadas a sendos leds. an.logamente, que los C bits de una variable PORT_IN representan sendas entradas digitales. "stas entradas se consideran en los enunciados finalmente conectadas a sendos pulsadores. que tanto 7'R(EF% como 7'R(E'D( operan con l$gica positiva. "s decir, un G1H en un bit de la variable 7'R(E'D( ocasionar. un valor elIctrico GaltoH (activo, prender. el led! en la salida del microcontrolador9 un valor GaltoH (activo, pulsador accionado! en una entrada producir. un G1H en el correspondiente bit de la variable 7'R(EF%. >enerar entonces3 Dna funci$n unsigned c#ar 2eerEntradas(% de forma tal que devuelva el valor decimal correspondiente al numero binario representado por el estado de los bits de 7'R(EF%. Dna funci$n void SetearSalidas(unsigned c#ar 3or4% de forma tal que se establezca 7'R(E'D( en correspondencia con los bits de 3or4. Dna funci$n void Iniciali5ar(% que setee par.metros que fuesen necesarios para el programa. Im !rtante" *uego de probar los e-ercicios en forma simulada en un compilador, adaptarlos convenientemente teniendo en cuenta las #aria$les de%initi#as a &tili'ar y el ti ! de l(gi)a conforme el microcontrolador destino. "n la elecci$n de salidas y entradas tener en cuenta tambiIn la disponibilidad f+sica de las salidas y entradas y los componentes asociados (leds y sJitc0s! acorde al Kit de desarrollo a utilizar en la prueba del programa. 17) Realizar un programa que active (produzca valores GaltosH! en los bits de posici$n par de 7'R(E'D( y desactive los de posiciones impares. 18) Realizar un programa que s$lo active un bit de 7'R(E'D( y vaya rotando dic0o bit encendido indefinidamente. #ada rotaci$n debe producirse cada ( mseg, siendo ( el tiempo necesario para e-ecutar aproximadamente 300.000 instrucciones. "-ecutarlo variando en mas y menos el valor de 300.000. 19) Reelaborar el e-ercicio 12 mostrando la codificaci$n all+ definida mediante leds. 20) Reelaborar y simular el problema 3 utilizando leds y pulsadores. 21) 1odificar el programa 18 de forma tal que, si ning n bit de 7'R(EF% est. activo, funcione de la manera descripta, pero si cualquiera de ellos se encuentra en estado activo (e-.3 mientras un pulsador este accionado! el sentido de rotaci$n sea inverso. 22) 1odificar el problema anterior para que la rotaci$n se alterne con cada pulsada (sin necesidad de mantener accionado el pulsador!. #ontrolar si el programa responde adecuadamente a cada pulsada.
Pg 3 de 11
23) Realizar un programa que muestre inicialmente todos los leds asociados a 7'R(E'D( encendidos y a medida que se vayan pulsando y soltando cualquiera de los sJitc0 asociados a 7'R(EF% se vayan apagando leds de forma tal que los leds apagados vayan codificando en binario el n mero de pulsaciones realizadas con limite en 16. &l final de la cuenta, una nueva pulsada enciende todos los leds y as+ siguiendo. #ontrolar si el programa responde adecuadamente siempre. 24) "l uso de pulsadores genera un problema conocido como GR"@'("H, que se seguramente se manifest$ en la e-ecuci$n de los programas anteriores. /olucionarlo considerando que solo se considerar. como que un pulsador 0a sido pulsado si su valor asociado asume el valor cero en dos lecturas consecutivas distanciadas en un tiempo ((mseg!. &sumir ( como el tiempo necesario para e-ecutar aproximadamente 50.000 instrucciones. 25) Realizar un programa que mediante distintas configuraciones de leds activados indique cual 0a sido el ltimo sJitc0 pulsado. 26) Realizar un programa que genere un contador circular que muestre los distintos valores espaciados un tiempo ( (necesario para e-ecutar 300.000 instrucciones!. "l incremento del contador ( de a 1, de a 2 , de a 3 .....! se establece seg n cual 0aya sido el ultimo pulsador accionado conforme su posici$n en 7'R(EF%. Soluciones propuestas *!l&)i(n e+er)i)i! 2"
int main() { int x = 10; int y = 20; int z = 30; int w; w=y; y=x; x=z; z=w; return 0; }
Pg 4 de 11
. . return 0;
Pg 5 de 11
F?8GH?AG=worI; 99 asumo Lue todos los :its de worI tienen corres+ondencia con F?8GH?AG .
9= >?@AB0?C B?C>0J,8ECJ? AC M0B8?F8?B,>EJ?8 J,G,8M0CEJ? N L lo1ica ne1ati!a (un +ulsador accionado +roduce un O0P; un O0P en una salida +rende el led) L solo hay Q +ulsadores dis+oni:les L solo hay Q leds dis+oni:les =9 #include 'deri!ati!e.h' 9= esto incluye la declaraciRn de re1istros y +eri%Sricos corres+ondientes al MBA=9 9= +rototi+os =9 !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); !oid main(!oid) { unsi1ned char >E@0JE; inicializar(); >E@0JE=0:10101010; 99ahora es al re!Ss +or la lo1ica ne1ati!a >etear>alidas(>E@0JE); %or(;;) { HH8,>,GHTEGBUJ?D(); 99 +or si el watchdo1 estV acti!ado . 9= el +ro1rama no de:e terminar nunca =9 . !oid inicializar (){ FGWJJ=0xWW; 99el +uerto W estV conectado a los leds$ asX Lue lo de%ino de salida. . !oid >etear>alidas (unsi1ned char worI){ 9= >Rlo los :its 0$1$Q y 7 tienen leds conectados =9 FGWJHFGWJ0=worI * 0:00000001 ; 99 interesa +rimer :it de worI worI=worI 1; 99 des+lazo ... FGWJHFGWJ1=worI * 0:00000001; 99... y com+aro con lo mismo worI=worI 1; FGWJHFGWJQ=worI * 0:00000001; worI=worI 1; FGWJHFGWJ7=worI * 0:00000001; .
9= >?@AB0?C D,C,8E@ =9 unsi1ned char F?8GH0C; unsi1ned char F?8GH?AG; 9= +rototi+os =9 !oid inicializar(!oid); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas (!oid); !oid es+era(lon1 Giem+oJe,s+era); !oid main(!oid) { unsi1ned char ,CG8EJE; unsi1ned char >E@0JE; inicializar(); >E@0JE=0:00000001; >etear>alidas(>E@0JE); %or(;;) {
Pg 6 de 11
,CG8EJE=@eer,ntradas(); i%(,CG8EJE == 0){ >E@0JE= >E@0JE << 1 ; i%(>E@0JE==0)>E@0JE=1; . else { >E@0JE= >E@0JE 1 ; i%(>E@0JE==0)>E@0JE=12<; . >etear>alidas(>E@0JE); es+era(300000); . .
!oid inicializar (){ return; 99 nada Lue inicializar . !oid >etear>alidas (unsi1ned char worI){ F?8GH?AG= worI; . unsi1ned char @eer,ntradas (){ return F?8GH0C; . !oid es+era(lon1 Giem+oJe,s+era){ lon1 contador= Giem+oJe,s+era; while(KKcontador){ . . 9= >?@AB0?C B?C>0J,8ECJ? AC M0B8?F8?B,>EJ?8 J,G,8M0CEJ? N L lo1ica ne1ati!a (un +ulsador accionado +roduce un O0P; un O0P en una salida +rende el led) L solo hay Q +ulsadores dis+oni:les L solo hay Q leds dis+oni:les =9 #include <hide%.h 9= %or ,na:le0nterru+ts macro =9 #include 'deri!ati!e.h' 9= include +eri+heral declarations =9 9= +rototi+os =9 !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas (); !oid es+era(int Giem+oJe,s+era); !oid main(!oid) { unsi1ned char ,CG8EJE; unsi1ned char >E@0JE; inicializar(); >E@0JE=0:11111011; >etear>alidas(>E@0JE); %or(;;) { ,CG8EJE=@eer,ntradas(); i%(,CG8EJE == 17){ 99solo hay Q +ulsadores$ con lo1ica ne1ati!a es+era(300000); >E@0JE= >E@0JE << 1 ; >E@0JE=>E@0JE ; 1; i%(>E@0JE==23Y)>E@0JE=27Q; >etear>alidas(>E@0JE);
Pg 7 de 11
HH8,>,GHTEGBUJ?D(); . else { es+era(300000); >E@0JE= >E@0JE 1 ; >E@0JE=>E@0JE ; 12<; i%(>E@0JE==277)>E@0JE=2Q6; >etear>alidas(>E@0JE); HH8,>,GHTEGBUJ?D(); . HH8,>,GHTEGBUJ?D(); . 9= loo+ %ore!er =9 9= +lease maIe sure that you ne!er lea!e main =9 . !oid inicializar (){ FGWJJ=0xWW; 99+uerto W como salida 9= +uerto D como entrada =9 FGDJ = (FGDJ * (unsi1ned char)50x2E) ; (unsi1ned char)0x77; 99 FGDF, FA@@ ,CE4@, 8,D0>G,8 9= FGDF,- FGDF,Z=1$FGDF,7=1$FGDF,Q=1$FGDF,3=1$FGDF,2=1$FGDF,1=1$FGDF,0=1 =9 FGDF, ;= (unsi1ned char)0x6W; 9= FGDJJ- FGDJJZ=0$FGDJJ7=0$FGDJJQ=0$FGDJJ3=0$FGDJJ2=0$FGDJJ1=0$FGDJJ0=0 =9 FGDJJ *= (unsi1ned char)50x6W; . !oid >etear>alidas (unsi1ned char worI){ FGWJHFGWJ0=worI * 0:00000001 ; worI=worI 1; FGWJHFGWJ1=worI * 0:00000001; worI=worI 1; FGWJHFGWJQ=worI * 0:00000001; worI=worI 1; FGWJHFGWJ7=worI * 0:00000001; . unsi1ned char @eer,ntradas (){ unsi1ned char worI; worI=FGDJHFGDJ0=1; worI= worI & FGDJHFGDJ1=2; worI= worI & FGDJHFGDJ2=Q; worI= worI & FGDJHFGDJ3=<; return worI; . !oid es+era(int Giem+oJe,s+era){ int contador= Giem+oJe,s+era; while(KKcontador){ HH8,>,GHTEGBUJ?D(); 99+or si el watchdo1 estV acti!o . .
9= >?@AB0?C B?C>0J,8ECJ? AC M0B8?F8?B,>EJ?8 J,G,8M0CEJ? N L lo1ica ne1ati!a (un +ulsador accionado +roduce un O0P; un O0P en una salida +rende el led) L solo hay Q +ulsadores dis+oni:les L solo hay Q leds dis+oni:les =9 #include 'deri!ati!e.h' 9= include +eri+heral declarations =9 !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas ();
Pg
de 11
!oid main(!oid) { unsi1ned char ,CG8EJE; unsi1ned char >E@0JE; unsi1ned char BantFulsos=0; unsi1ned char >enal; inicializar(); >E@0JE=0:00000000; >etear>alidas(>E@0JE); %or(;;) { ,CG8EJE=@eer,ntradas(); i%(,CG8EJE == 17){ >enal=0; . else { i%(>enal==0){ BantFulsos&&; i%(BantFulsos 17)BantFulsos=0; >E@0JE=BantFulsos; >etear>alidas(>E@0JE); >enal=1; . . HH8,>,GHTEGBUJ?D(); . 9= loo+ %ore!er =9 9= +lease maIe sure that you ne!er lea!e main =9 . !oid inicializar (){ FGWJJ=0xWW; [40F,=0x00; FGDJ = (FGDJ * (unsi1ned char)50x2E) ; (unsi1ned char)0x77; 99 FGDF, FA@@ ,CE4@, 8,D0>G,8 Fareceria ser Lue si no le +ones un 1 no toma :ien la lectura 9= FGDF,- FGDF,Z=1$FGDF,7=1$FGDF,Q=1$FGDF,3=1$FGDF,2=1$FGDF,1=1$FGDF,0=1 =9 FGDF, ;= (unsi1ned char)0x6W; 9= FGDJJ- FGDJJZ=0$FGDJJ7=0$FGDJJQ=0$FGDJJ3=0$FGDJJ2=0$FGDJJ1=0$FGDJJ0=0 =9 FGDJJ *= (unsi1ned char)50x6W; . !oid >etear>alidas (unsi1ned char worI){ FGWJHFGWJ0=worI * 0:00000001 ; worI=worI 1; FGWJHFGWJ1=worI * 0:00000001; worI=worI 1; FGWJHFGWJQ=worI * 0:00000001; worI=worI 1; FGWJHFGWJ7=worI * 0:00000001; . unsi1ned char @eer,ntradas (){ unsi1ned char worI; worI=FGDJHFGDJ0=1; worI= worI & FGDJHFGDJ1=2; worI= worI & FGDJHFGDJ2=Q; worI= worI & FGDJHFGDJ3=<; return worI; .
9= >?@AB0?C D,C,8E@ a+licada al ,2ercicio 22=9 unsi1ned char F?8GH0C; unsi1ned char F?8GH?AG; 9= +rototi+os =9
Pg 9 de 11
!oid inicializar(!oid); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas (!oid); unsi1ned char @eerEntire:ote(!oid); !oid es+era(lon1 Giem+oJe,s+era); !oid main(!oid) { unsi1ned char >E@0JE; int direccion=0; int cam:io=0; inicializar(); >E@0JE=0:00000001; >etear>alidas(>E@0JE); %or(;;) { i%(@eerEntire:ote()/=0){ i%( cam:io==0){ cam:io=1; direccion=5direccion; . . else cam:io=0; 99rotacion i% (direccion==0) { >E@0JE= >E@0JE << 1 ; i%(>E@0JE==0)>E@0JE=1; . else { >E@0JE= >E@0JE 1 ; i%(>E@0JE==0)>E@0JE=12<; . >etear>alidas(>E@0JE); es+era(300000); . .
!oid inicializar (){ return; 99 nada Lue inicializar . !oid >etear>alidas (unsi1ned char worI){ F?8GH?AG= worI; . unsi1ned char @eer,ntradas (){ return F?8GH0C; . unsi1ned char @eerEntire:ote(){ unsi1ned char aux1$aux2; aux1=@eer,ntradas(); es+era(Y0000); aux2=@eer,ntradas(); i% (aux1==aux2) return aux2; else return aux1; . !oid es+era(lon1 Giem+oJe,s+era){ lon1 contador= Giem+oJe,s+era; while(KKcontador){ .
Pg 10 de 11
Pg 11 de 11