ds1302.c
来自「avr系列单片机访问ds1302的驱动程序」· C语言 代码 · 共 124 行
C
124 行
#include "main.h"
void ds1302_init(void)
{
DS1302_CLK_DIR_OUT;
DS1302_RST_DIR_OUT;
DS1302_IO_DIR_OUT;
}
void ds1302_reset(void)
{
DS1302_CLK_0;
nop();
DS1302_RST_0;
nop();
DS1302_RST_1;
nop();
}
void ds1302_write_byte(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
DS1302_CLK_0;
nop();
if(data&0x01)
DS1302_IO_1;
else
DS1302_IO_0;
nop();
DS1302_CLK_1;
nop();
data>>=1;
}
}
unsigned char ds1302_read_byte(void)
{
unsigned char i,data;
data=0;
for (i=0;i<8;i++)
{
DS1302_CLK_0;
nop();
data>>=1;
if (DS1302_IO_IN)
data|=0x80;
nop();
DS1302_CLK_1;
nop();
}
return data;
}
void ds1302_write(unsigned char reg,unsigned char data)
{
DS1302_IO_DIR_OUT;
ds1302_reset();
ds1302_write_byte(reg);
ds1302_write_byte(data);
DS1302_CLK_0;
nop();
DS1302_RST_0;
nop();
}
unsigned char ds1302_read(unsigned char reg)
{
unsigned char data;
DS1302_IO_DIR_OUT;
ds1302_reset();
ds1302_write_byte(reg);
DS1302_IO_DIR_IN;
data=ds1302_read_byte();
DS1302_CLK_0;
nop();
DS1302_RST_0;
nop();
return data;
}
void gettime(unsigned char *nowtime)
{
unsigned char i;
DS1302_IO_DIR_OUT;
ds1302_reset();
ds1302_write_byte(0xbf);
DS1302_IO_DIR_IN;
for(i=0;i<7;i++)
{
nowtime[i]=ds1302_read_byte();
}
DS1302_CLK_0;
nop();
DS1302_RST_0;
nop();
}
void settime(unsigned char *settime)
{
unsigned char i;
ds1302_write(0x8e,0);
ds1302_reset();
ds1302_write_byte(0xbe);
for(i=0;i<7;i++)
{
ds1302_write_byte(settime[i]);
}
ds1302_write_byte(0);
DS1302_CLK_0;
nop();
DS1302_RST_0;
nop();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?