?? ds1302.c
字號:
#include "config.h"
#define SCLK 0x00000002 /* P0.1 */
#define IO 0x00000004 /* P0.2 */
#define RST 0x00000008 /* P0.3 */
#define OUT 0x0000000E
#define IN 0x0000000A
#define ds1302_sec_reg 0x80
#define ds1302_min_reg 0x82
#define ds1302_hr_reg 0x84
#define ds1302_date_reg 0x86
#define ds1302_month_reg 0x88
#define ds1302_day_reg 0x8A
#define ds1302_year_reg 0x8C
#define ds1302_control_reg 0x8E
#define ds1302_charger_reg 0x90
#define ds1302_clkburst_reg 0xBE
void delay_1nop(uint32 x)
{ uint32 j;
for(j=0;j<x;j++) ;
}
void write_data(uint8 command,uint8 data)
{ uint8 i;
IODIR=OUT;
IOCLR=RST;
IOCLR=SCLK;
IOSET=RST;
for(i=0; i<8; i++)
{ IOCLR=SCLK;
if((command&0x01)==0)
{ IOCLR=IO;
}
else
{ IOSET=IO;
}
delay_1nop(3);
IOSET=SCLK;
delay_1nop(5);
command=command>>1;
}
IOCLR=SCLK;
for(i=0; i<8; i++)
{ IOCLR=SCLK;
if((data&0x01)==0)
{ IOCLR=IO;
}
else
{ IOSET=IO;
}
delay_1nop(3);
IOSET=SCLK;
delay_1nop(5);
data=data>>1;
}
IOCLR=SCLK;
IOCLR=RST;
}
uint8 ReadData(uint8 command)
{ uint8 i;
uint32 r=0;
uint8 data=0x00;
IODIR=OUT;
IOCLR=RST;
IOCLR=SCLK;
IOSET=RST;
for(i=0; i<8; i++)
{ IOCLR=SCLK;
if((command&0x01)==0)
{ IOCLR=IO;
}
else
{ IOSET=IO;
}
delay_1nop(3);
IOSET=SCLK;
delay_1nop(5);
command=command>>1;
}
IODIR=IN;
for(i=0; i<8; i++)
{ IOCLR=SCLK;
r=IOPIN;
if((IOPIN&IO)!=0x00000004)
{ data|=0x00;
}
else
{ data|=0x80;
}
delay_1nop(3);
IOSET=SCLK;
delay_1nop(5);
data=data>>1;
}
IOCLR=SCLK;
IOCLR=RST;
return(data);
}
void reset1302(void)
//1302初始化,寫入秒,分,時,日,月,星期,年的數據
{
write_data(0x8E,0x00); //關閉寫保護
write_data(0x80,0x00);
write_data(0x82,0x59);
write_data(0x84,0x22);
write_data(0x86,0x27);
write_data(0x88,0x11);
write_data(0x8A,0x06);
write_data(0x8C,0x95);
write_data(0x8E,0x80); //打開寫保護
IOSET=SCLK;
IOCLR=RST;
}
int main(void)
{ uint8 i;
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IOCLR=RST;
IOCLR=SCLK;
reset1302();
while(1)
{
i=ReadData(0x8C);
}
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -