# Interrupciones con MSP430 (Low Power microcontroller)



## laufer (Mar 19, 2007)

¡Hola a todos!

Estoy desarrollando un programa para controlar un microcontrolador, el msp430 (concretamente el msp430F1232). Lo estoy programando en C con el IAR Embedded Workbench Kickstart (de  IAR systems). Tengo un problema con las interrupciones ya que no se que sintaxis de usas exactamente para ejecutar un codigo de interrupción. Lo necesito para que al desbordar el timer ejecute unos comenados y es vital para el programa.

Si alguien pudiera ayudarme lo agradecería muchismo.

Gracias


----------



## Perromuerto (Mar 22, 2007)

Una interrupción es generada por el hardware. Para que puedas usarla, debes habilitar
las interrupciones del microcontrolador en el registro de control. Luego debes habilitar
la generación de la interrupción el en periférico en cuestión. Por último debes declarar
la rutina de interrupción como del tipo "interrupt" y poner su dirección en la tabla de
interrupciones. Cuando se produzca el desborde del timer, el hardware automáticamente
guardará el apuntador de interrupciones y saltará al código de la rutina de atención
de interrupciones.
Aquí hay un ejemplo de como escribir una rutina de atención de interrupción con
el compilador IAR para el MSP430, en el capítulo 3 de:
http://www.ece.uah.edu/~raskovd/cpe421/manuals/TUTOR.PDF
En todo caso puedes usar un pequeño sistema operativo para microcontroladores:
http://www.frertos.org
Es gratuito. Hay una versión para el MPS430 y el compilador IAR


----------



## D0k0 (Oct 17, 2007)

Hola a todos/as, la pagina http://www.frertos.org no entra da error de pagina hay alguna direccion alternativa donde buscar mas información de la programacion del MPS430?

Gracias


----------



## Andres Cuenca (Oct 17, 2007)

La dirección correcta es:

http://www.freertos.org/

Saludos.


----------



## dark_soul (Ene 15, 2010)

Saludos, tengo una duda respecto al manejo de las interrupciones con el msp430f2012, lo que necesito es habilitar mas de una interrupcion en el puerto 1 (P1), por ejemplo habilitar interrupciones por P1.0 y P1.1, donde P1.0 prende el Led y P1.1 apaga el led, mi rutina es la siguiente:

*BOTON* bic.b #BIT0+BIT1,&P1IFG 
bit.b #BIT0,&P1IN 
jnz BTN2 
*NBT1* call #Time
bit.b #BIT0,&P1IN
jz NBT1
bis.b #BIT2,&P1OUT
jmp SALIR
*BTN2* bit.b #BIT1,&P1IN
jnz SALIR
*NBT2* call #Time
bit.b #BIT1,&P1IN
jz NBT1
bic.b #BIT2,&P1OUT 
*SALIR* RETI 

Time es una rutina de tiempo para antirrebotes del boton, el texto en negritas son etiquetas, no puedo darle el espacio correspondiente aqui para que se distingan.

Esa rutina que implemente no me funciona ya que con el boton destinado a apagar el led, prende y apaga el LED, que puedo hacer?

Por todo muchas gracias


----------



## Palvulito (Jun 2, 2010)

¡que puedo hacer con mi msp430?, lo que quiero decir es que me pueden proporcionar una idea o un aplicacion para desarrolarla.


----------



## penrico (Jun 3, 2010)

Palvulito dijo:


> ¡que puedo hacer con mi msp430?, lo que quiero decir es que me pueden proporcionar una idea o un aplicacion para desarrolarla.



Los MSP430 están muy buenos por su bajo consumo y tensión. Fijate de hacer cosas alimentadas con pilas. Hay proyectos de sensores de alarmas, medidores de consumo de gas. El tema de "Energy Harvesting" está muy bueno (a mi me gusta jejeje), podés "robar" energía del medio ambiente y hacer funcionar esos micros. Por ejemplo, en los alambrados de los campos, podés usarlos como antenas enormes, y alimentar esos micros utilizando las señales de radio que hay en el ambiente para alimentar estos bichos...


----------



## humbert182 (Jun 22, 2011)

En esta pagina ( http://todomcu.scienceontheweb.net ) te explican como hacer las interrupciones con los MSP430 en ensamblador ademas puedes enviar tus dudas y te las responden en menos de una semana. 
En C debes utilizar directivas pragma, por lo regular por ejemplo para el timer_A la ISR la declaras asi:

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  .
  .
  .
}

Para los puertos puedes usar el siguiente codigo:


#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
.
.
.
}

Espero haber sido de ayuda y en verdad deberian visitar esa pagina.


----------

