Depurarlo usted mismo
#include?
#define?DS1302_DIRP1DIR
#define?DS1302_IN?P1IN
#define?DS1302_OUTP1OUT
#define?DS1302_RSTBIT1
#define?DS1302_SCLKBIT3
#define?DS1302_SDIBIT2//Definir el puerto MSP320
#define?DS1302_RST_LODS1302_OUT?&=?~DS1302_RST
#define?DS1302_RST_HIDS1302_OUT?|=?DS1302_RST
#define?DS1302_SCLK_LODS1302_OUT?&=?~DS1302_SCLK
#define?DS1302_SCLK_HIDS1302_OUT?|=?DS1302_SCLK
#define?DS1302_SDI_LODS1302_OUT?&=?~DS1302_SDI
#define?DS1302_SDI_HIDS1302_OUT?|=?DS1302_SDI p>
p>
void?DS1302_Delay(unsigned?int?dtime);
void?DS1302_Reset(void);
void?DS1302_WriteOneByte(unsigned?char? w_dat);
p>void?DS1302_WriteData(unsigned?char?addr,unsigned?char?w_dat);
void?DS1302_SettingData(void);
void?DS1302_GetData(unsigned?char ?*str);
unsigned?char?DS1302_ReadOneByte(void);
unsigned?char?DS1302_ReadData(unsigned?char?addr); p>
unsigned?char?Setting_Time[7]={?//bit7?bit6?bit5?bit4?bit3?bit2?bit1?bit0 0x08,//--------Diez dígitos--- ----|-- -----dígito de las unidades--------|Año (actualmente 08) 0x01,//|-----dígito de las unidades-----|semana (lunes actual ) 0x09,//| Lugar de las decenas|-------Lugar de las unidades--------|Mes (actualmente septiembre) 0x15,//?|--Lugar de las decenas---|---- ---Lugar de las unidades --------|Fecha (actualmente 01) 0x00,//-12H||--Dígito de las decenas---|-------Dígito de las unidades------ --|Hora (actualmente a las 11 en punto) 0x19,//|-----decenas-----|-------unidades de lugar--------|minuto (actualmente 09 minutos) 0x00// |-----Dígito de la decena-----|-------Dígito de la unidad--------|Segundos (actualmente 21 segundos)
}; p>
unsigned?char?ReadingData[7];//Los datos leídos son los mismos que la definición y el formato de SetData
/******
************************
void?main(void)
{ WDTCTL?=?WDTPW ?+ ?WDTHOLD; DS1302_Reset(); //DS1302_SettingData(); mientras(1) {
DS1302_GetData(ReadingData);
_NOP();
}
******************************/
// Función de retardo
void?DS1302_Delay(unsigned?int?dtime)?
{ while(dtime--);
}
//Restablecimiento de DS1302
void?DS1302_Reset(void)?
{ DS1302_DIR?|=?(DS1302_RST?+?DS1302_SCLK_LO; DS1302_RST_LO;
}
//Escribir un byte en DS1302
void?DS1302_WriteOneByte(unsigned?char?w_dat)?
{ unsigned? char ?temp; DS1302_RST_HI; DS1302_DIR?|=?DS1302_SDI; para(temp=8;temp>0;temp--)?
{
DS1302_SDI_LO;
if(w_dat&BIT0)?DS1302_SDI_HI;
DS1302_SCLK_LO;
DS1302_Delay(10);
DS1302_SCLK_HI;
DS1302_Delay(10) ;
w_dat?>>=1; }?
}
//Leer un byte de DS1302
unsigned? DS1302_ReadOneByte(void)?{? unsigned?char?temp,rdata; rdata?=?0x00; DS1302_RST_HI; DS1302_DIR?&=?~DS1302_SDI; 1;//Ponga el cambio al frente, de lo contrario no se podrá leer el bit más alto
DS1302_SCLK_HI;
DS1302_Delay(10);
DS1302_SCLK_LO ; p>
DS1302_Delay(10);
if((DS1302_IN&DS1302_SDI)==DS1302_SDI) rdata?|=?BIT7;
//rdata?>>= 1; } return(rdata);?
}
//Escribe la dirección en DS1302 y luego escribe los datos
void?DS1302_WriteData(unsigned?char ?addr ,¿sin firmar?char?w_dat)?{ DS1302_RST_LO (dirección);/
/Escribir dirección DS1302_WriteOneByte(w_dat); //Escribir datos DS1302_SCLK_HI; DS1302_RST_LO;
}?
//Después de escribir la dirección en DS1302, leer datos de DS1302
unsigned?char?DS1302_ReadData(unsigned?char?addr)?{ unsigned?char?r_dat; DS1302_RST_LO; DS1302_SCLK_LO; DS1302_RST_HI; DS1302_WriteOneByte(addr);//Escribir dirección r_dat?=?DS1302_ReadOneByte(); 1302_SCLK_LO ; DS1302_RST_LO; return(r_dat);
}
//Establezca la hora de DS1302 de acuerdo con la configuración de SettingData
void?DS1302_SettingData( void)? { unsigned?char?temp; unsigned?char?addr?=?0x8C; DS1302_WriteData(0x8E,0x00);// Comando de control de escritura, deshabilitar la protección contra escritura para (temp=0;temp<7;temp++)? >
DS1302_WriteData(addr,Setting_Time[temp]);
addr?-=?2; } DS1302_WriteData(0x8E,0x80);// Comando de control de escritura, habilitar protección contra escritura
}
//Leer el tiempo DS1302 en ReadingData
void?DS1302_GetData(unsigned?char?*str)?{ unsigned?char?temp; unsigned?char?addr?= ?0x8D; for(temp=0;temp<7;temp++)?{
str[temp]?=?DS1302_ReadData(addr);//año
addr?-= ?2; }
}
void?main(void)
{ WDTCTL?=?WDTPW?+?WDTHOLD();
//?DS1302_SettingData(); mientras(1) {
DS1302_GetData(ReadingData);
_NOP() }; p>
}<; /p>