Ejercicios de práctica INEL4206

  1. José compró el MSP001 ya que éste sólo cuesta 1¢. Tiene pendiente un proyecto y ahora descubre que este modelo sólo tiene 2 registros de uso general y no tiene RAM. Por razones fuera de su control necesita intercambiar el contenido de los registros R4 y R5. Escriba las instrucciones necesarias para intercambiar el contenido de R4 con el de R5, en assembly de MSP430. (Consejo: leer http://en.wikipedia.org/wiki/XOR_swap_algorithm). Asegure entender por qué este algoritmo funciona.
  2. Escriba una subrutina que calcule A mod B. Adicionalmente, si A es divisible por B, encienda la luz verde. La subrutina puede asumir que P1.6 ha sido inicializado y está LOW al ésta ser llamada.
  3. Diana compró un panel LCD y lo quiere usar para mostrar números. Al leer el datasheet descubre que debe codificarlos en ASCII para colocarlos en la pantalla. Escriba una subrutina que tome un dígito (número entre 0 y 9) y devuelva el código ASCII que lo representa. No puede utilizar saltos. Puede asumir que el número dado a la subrutina correctamente es del 0 al 9. Idealmente, la subrutina tendrá como máximo 3 instrucciones. Bono: escriba un programa que utilice esta subrutina para codificar el string "1337" en un formato compatible con char*, comenzando en 0x200.
  4. Escriba una subrutina que calcule A / B (división entera). Debe devolver el resultado y el residuo.
  5. Hector compró un display LED de 7-segmentos porque quería hacer un contador. Pensó que el display aceptaba valores en binario, pero ese no es el caso. Aprendió leyendo https://secure.wikimedia.org/wikipedia/en/wiki/Seven-segment_display que necesita controlar cada segmento aparte para hacer aparecer números. El datasheet indica que un segmento se activa colocando un 1 en la entrada. ¿Qué forma de conectar el display a los pines de P1 facilita utilizar los números suplidos en wikipedia? Escriba un programa que utilizando este arreglo, haga que el display cuente desde 0 hasta F.
  6. Escriba una subrutina que sume un número F1.2 con un número F1.1 y devuelva el resultado como F1.1 (pérdida de precisión) y otra que devuelva el resultado en formato F1.2.
  7. Luis es un fanático de la electrónica y creó un panel de 64 LEDs en un arreglo 8x8. Este panel se controla con dos decodificadores de 3-bit, uno que controla la fila y uno para la columna, con los Enable permanentemente activos. Por ejemplo: para encender el LED de la esquina superior izquierda, se colocaría 000 en ambos decodificadores. Describa la forma óptima de conectar los decodificadores a P1 para codificar coordenadas como un byte 00xxxyyy, donde x son los bits de columna y y los de fila. Con este arreglo óptimo, ese formato se traduce a un mov. Escriba esa línea de código, necesaria para prender el LED en la posición codificada por 00011110.
  8. Escriba un programa como el que ha escrito mil veces (espero que se lo sepa de memoria ya) de alternar entre el LED rojo y el verde, pero que apretar el botón haga que alternen más rápido (hasta que alternen tan rápido que no se vea). Luego escriba uno donde el botón cicle entre varias velocidades (como un abanico), volviendo a lento luego de ir bien rápido.