adaptar codigo a MSP

Que tal, Espero que alguien me pueda ayudar con el siguiente codigo: el codigo está en PICC y lo quiero portar para el msp430. De antemano lo agradezco.

unsigned int const disp[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,};
int x=0,unidad=0,decena=0,centena=0;
//long contador=0;
set_tris_a(0x00); //Puerto A como salidas
set_tris_b(0x00); //Puerto B como salidas
T_unidad=1; //Se prenden los dos displays
T_decena=1; //y muestran cero.

for(;;) //Entra a ciclo infinito
{
portb=disp[unidad]; //Se muestra el valor de unidad
delay_ms(10); //Retardo de 10mS
T_unidad=0; //Apaga el display de unidad
T_decena=1; //Prende el display de decena
portb=disp[decena]; //Muestra el valor de decena
delay_ms(10); //Retardo de 10mS
T_decena=0; //Apaga el display de decena
T_unidad=1; //Prende display de unidad
x++; //Incrementa X para controlar el tiempo
//De conteo
if(x==30) //Si han pasado 600mS mas o menos
{
unidad++; //Aumenta unidad
if(unidad==10) //Si unidad es = 10
{
unidad=0; //Unidad=0
decena++; //Decena se incrementa en 1
centena=0;
if(decena==10) //Si decena es = 10
{ unidad=0; //Unidad = 0
decena=0; //Decena = 0
centena++;
}
if (centena==10)
unidad=0;
decena=0;
centena=0;
}
x=0; //X vuelve a 0 para poder contar
} //De nuevo

}
}
 
veo que aqui las subrutinas se pueden mantener asi como las variables tipo int otra cosa aqui que veo es que hay que ver en que modo vas a trabajar el oscilador y a que frecuencia el mclock porque de eso dependeran tus rutinas de tiempo y el valor de recarga por ejemplo si la frecuencia fuera 2.4567mhz aproximadamente entonces tu ciclo de jecucion de instruccion seria de 1.6uS para ello tendras que calcular tu retardo a ese valor y en cuanto a los puertos nomas de redefinir a que puerto usaras aqui otra pregunta que msp430 estas usando porque de eso tambien depende a que puerto lo redefinas aqui la instruccion tris no existe de modo que hay que usar los PDIR de el puerto a usar, este lo estas copiando del compilador ccs porlo que veo.... es necesario que comentes que msp vas a usar porque de eso depende la definicion de tu programa
 
modifique este ejemplo para que veas como se redefine una variable para los segmentos en el puerto2
en puerto1 estan los transistores

PHP:
//******************************************************************************
//  MSP430x1xx Demo - Software Toggle P1.0
//
//  Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
//  ACLK = n/a, MCLK = SMCLK = default DCO
//
//                MSP430x1xx
//             -----------------
//         /|\|              XIN|-
//          | |                 |
//          --|RST          XOUT|-
//            |                 |
//            |             P1.0|-->LED
//
//  A. Dannenberg
//  Texas Instruments, Inc
//  January 2006
//  Built with IAR Embedded Workbench Version: 3.40A
//******************************************************************************

#define LED1 BIT1
#define LED2 BIT2

#define LED3 BIT3
#define LED4 BIT4

#define LED5 BIT5
#define LED6 BIT6
#define LED7 BIT7

#define TRANSISTOR_DECENAS BIT1 // TRANSISTOR CONECTADO EN P1.0
#define TRANSISTOR_UNIDADES BIT2 // TRANSISTOR CONECTADO EN P1.1



#include "msp430.h"
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  P1DIR |= 0x01;                        // Set P1.0 to output direction

  for (;;)
  {
    volatile unsigned int i;            // volatile to prevent optimization
    
    P1OUT = TRANSISTOR_DECENAS |TRANSITOR_UNIDADES; //CONFIGURO COMO SALIDAS
    
    
        // SEGMENTOS
          // a   b     c    d    e    f    g 
    P2DIR = LED1|LED2 |LED3|LED4|LED5|LED6|LED7; // INICIALIZA LOS PINES COMO SALIDA 
    
    P1OUT = TRANSITOR_UNIDADES; 
    P2OUT = LED1|LED2 |LED3|LED4|LED5|LED6;   // con esto lo enciendes para el numero cero
    
    P1OUT = TRANSITOR_DECENAS;    
    
    P2OUT = LED1|LED2 ;   // con esto lo enciendes para el numero UNO  
    

  
    while (1); //AQUI FINALIZA EL PROGRAMA Y SE QUEDA CICLADO
  }
}
te incluyo el manual de un seminario

curioso207 dijo:
modifique este ejemplo para que veas como se redefine una variable para los segmentos en el puerto2
en puerto1 estan los transistores

//******************************************************************************
// MSP430x1xx Demo - Software Toggle P1.0
//
// Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430x1xx
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// A. Dannenberg
// Texas Instruments, Inc
// January 2006
// Built with IAR Embedded Workbench Version: 3.40A
//******************************************************************************

#define LED1 BIT1
#define LED2 BIT2

#define LED3 BIT3
#define LED4 BIT4

#define LED5 BIT5
#define LED6 BIT6
#define LED7 BIT7

#define TRANSISTOR_DECENAS BIT1 // TRANSISTOR CONECTADO EN P1.0
#define TRANSISTOR_UNIDADES BIT2 // TRANSISTOR CONECTADO EN P1.1



#include "msp430.h"
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)
{
volatile unsigned int i; // volatile to prevent optimization

P1OUT = TRANSISTOR_DECENAS |TRANSITOR_UNIDADES; //CONFIGURO COMO SALIDAS


// SEGMENTOS
// a b c d e f g
P2DIR = LED1|LED2 |LED3|LED4|LED5|LED6|LED7; // INICIALIZA LOS PINES COMO SALIDA

P1OUT = TRANSITOR_UNIDADES;
P2OUT = LED1|LED2 |LED3|LED4|LED5|LED6; // con esto lo enciendes para el numero cero

P1OUT = TRANSITOR_DECENAS;

P2OUT = LED1|LED2 ; // con esto lo enciendes para el numero UNO



while (1); //AQUI FINALIZA EL PROGRAMA Y SE QUEDA CICLADO
}
}
 

Adjuntos

  • Seminario MSP430.pdf
    1.7 MB · Visitas: 21
Última edición por un moderador:
nuevamente solicitando tu ayuda, ya que aun no logro hacer funcionar el contador. Haber si me puedes explicar un poco sobre el programa. El micro es el msp430g2231
 
el programa te compila aun para ese micro no se si tengas conectada la herramienta al debuguer de hecho ya lo compile para ese micro

en cuanto al programa

aqui se redefine para usar en estos pines
#define LED1 BIT1si checas el archivo del micro a compilar en el IAR en la parte donde aparece la carpeta output encontraras la definicion para la variable BIT1,BIT2 etc




#define LED2 BIT2

#define LED3 BIT3
#define LED4 BIT4

#define LED5 BIT5
#define LED6 BIT6
#define LED7 BIT7


aqui le decimos a que pin del puerto estara conectado el transitor


#define TRANSISTOR_DECENAS BIT1 // TRANSISTOR CONECTADO EN P1.0
#define TRANSISTOR_UNIDADES BIT2 // TRANSISTOR CONECTADO EN P1.1


este programa no es un contador todavia es para que aprendas ha hacer barrido y como redefinir pines y una forma rapida de como manipular el micro



aqui traslade el codigo a iar no tuve tiempo de checarlo debuguealo paso a paso para ver como te funciona

//******************************************************************************
// MSP430x1xx Demo - Software Toggle P1.0
//
// Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430x1xx
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// A. Dannenberg
// Texas Instruments, Inc
// January 2006
// Built with IAR Embedded Workbench Version: 3.40A
//******************************************************************************

#include "msp430.h"

int x;
unsigned int const disp[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,};
int x=0,unidad=0,decena=0,centena=0;
long contador=0;
unsigned int T_unidad=1; //Se prenden los dos displays
unsigned int T_decena=1; //y muestran cero.


// set_tris_a(0x00); //Puerto A como salidas
// set_tris_b(0x00); //Puerto B como salidas


#define portb P1OUT


int delay_ms(int x){
for(x=0;x<=7000;x++);
return 0; }










int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0xFF; // Set P1.0 to output direction
volatile unsigned int i; // volatile to prevent optimization


for (;;)
{








portb=disp[unidad]; //Se muestra el valor de unidad
delay_ms(10); //Retardo de 10mS



T_unidad=0; //Apaga el display de unidad
T_decena=1; //Prende el display de decena



portb=disp[decena]; //Muestra el valor de decena
delay_ms(10); //Retardo de 10mS
T_decena=0; //Apaga el display de decena
T_unidad=1; //Prende display de unidad
x++; //Incrementa X para controlar el tiempo
//De conteo
if(x==30) //Si han pasado 600mS mas o menos
{
unidad++; //Aumenta unidad

if(unidad==10) //Si unidad es = 10
{
unidad=0; //Unidad=0
decena++; //Decena se incrementa en 1
centena=0;

if(decena==10) //Si decena es = 10
{ unidad=0; //Unidad = 0
decena=0; //Decena = 0
centena++;
}

if (centena==10)
unidad=0;
decena=0;
centena=0;
}

x=0; //X vuelve a 0 para poder contar
} //De nuevo

}

}

pero ya compila sin errores
 
Última edición:
Atrás
Arriba