You are on page 1of 6

#include <msp430.

h>
volatile unsigned int useg =0x000;
volatile unsigned int dseg =0x000;
volatile unsigned int umin =0x000;
volatile unsigned int dmin =0x000;
volatile unsigned int uhor =0x000;
volatile unsigned int dhor =0x000;
volatile unsigned int dato=0x000;
volatile unsigned int reg1=0x000;
volatile unsigned int reg2=0x000;
volatile unsigned int reg3=0x000;
volatile unsigned int reg4=0x000;
volatile unsigned int reg5=0x000;
volatile unsigned int reg6=0x000;
volatile unsigned int k=0;
volatile unsigned int contador=0;
volatile unsigned int copia=0;
void main(void)
{
configTIMER();

P1DIR = 0x7F; // All P1.x outputs


P1REN |= BIT7; // Enable internal pull-up/down resistors
P1OUT |= 0x00; //Select pull-down mode for P1.7
P1IE |= BIT7; // P1.7 interrupt enabled
P1IES |= BIT7; // P1.7 Hi/lo edge
P1IFG &= ~BIT7; // P1.7 IFG cleared
P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
contador=0;
copia = 0;

// Funcion de Conmutacin
while(1)
{
clock();
conmutacion();

}
}

void conmutacion(void){

switch(k){
case 0 :
P2OUT= 0x0FE;
P1OUT=reg1;
delayz();
k=1;
break;
case 1:
P2OUT=0x0FD;
P1OUT=reg2;
delayz();
k=2;
break;
case 2:
P2OUT=0x0FB;
P1OUT= reg3;
delayz();
k=3;
break;
case 3:
P2OUT=0x0F7;
P1OUT= reg4;
delayz();
k=4;
break;
case 4:
P2OUT=0x0EF;
P1OUT= reg5;
delayz();
k=5;
break;
case 5:
P2OUT=0x0DF;
P1OUT= reg6;
delayz();
k=0;
break;

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
WDTCTL= WDTPW+WDTHOLD;
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void){
if(copia==0x1){
contador++;
if(contador>5){
contador=0;
}
copia=0;
}

switch(contador){
case 0:
useg++;
break;

case 1:
dseg++;
dhor=0;
uhor=0;
dmin=0;
umin=0;
if(dseg>5){
dseg=0;
}
break;

case 2:
dhor=0;
uhor=0;
dmin=0;
umin++;
if(umin>9){
umin=0;
}
break;

case 3:
dhor=0;
uhor=0;
dmin++;
if(dmin>5){
dmin=0;
}
break;

case 4:
dhor=0;
uhor++;
if(uhor>9){
uhor=0;
}

break;

default :

dhor++;
if (uhor>3 & dhor>1){
dhor=0;
}else{
if(dhor>2){
dhor=0;
}
}
break;

}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
copia=1;
P1IFG &= ~BIT7; // P1.7 IFG cleared
}
//Funcion de Codificacion BCD-7seg
void comparacion (void){
switch(dato){
case 0:
dato=0x07E;
break;
case 1:
dato=0x030;
break;
case 2:
dato=0x06D;
break;
case 3:
dato=0x079;
break;
case 4:
dato=0x033;
break;
case 5:
dato=0x05B;
break;
case 6:
dato=0x05F;
break;
case 7:
dato=0x070;
break;
case 8:
dato=0x007F;
break;
case 9:
dato=0x073;
break;

//return(dato);
}

void clock (void){


if(useg < 10){
}else{
useg=0;
if(dseg < 5){
dseg++;
}else{
dseg=0;
if(umin<9){
umin++;
}else{
umin=0;
if(dmin<5){
dmin++;
}else{
dmin=0;
if(uhor<9 & dhor<2){
uhor++;
}else{
uhor=0;
if(dhor<2){
dhor++;
}else{
dhor=0;
uhor=0;
dmin=0;
umin=0;
dseg=0;
useg=0;
}
}
}
}
}
}
//------------------------
dato=useg;
comparacion();
reg1=dato;
//------------------------
dato=dseg;
comparacion();
reg2=dato;
//------------------------
dato=umin;
comparacion();
reg3=dato;
//------------------------
dato=dmin;
comparacion();
reg4=dato;
//------------------------
dato=uhor;
comparacion();
reg5=dato;
//------------------------
dato=dhor;
comparacion();
reg6=dato;
//------------------------

}
void delayz (void){
volatile unsigned int i;
for (i=1;i<400;i++) {

}
}
void configWDT(void){

WDTCTL =WDT_MDLY_0_5; // WDT 1s/4 interval timer


IE1 |= WDTIE; // Enable WDT interrupt
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
}
void configTIMER(void){
WDTCTL= WDTPW+WDTHOLD;
BCSCTL1|= DIVA_3;
BCSCTL3|= XCAP_3;
CCTL0=CCIE;
CCR0=511;
TACTL=TASSEL_1 + ID_3 + MC_1;
__bis_SR_register(GIE);
}

You might also like