¿Cómo conecta el chip de reloj DS1302 los registros del 1302 al microcontrolador? ¿Cómo transferir el contenido del registro en 1302 al chip único?

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>

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);

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)

};

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

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>