📄 ds1302.c
字号:
#include <LPC21xx.h>
#define ds1302_cs (1<<16)
#define ds1302_sck (1<<17)
#define ds1302_dio (1<<18)
//--------------------------------
//读DS1302的指定的地址单元中的内容函数
//--------------------------------
unsigned char read_ds1302_rtc(unsigned char rtc_address)
{
unsigned char i;
unsigned char temp;
IO0CLR|=ds1302_cs;
IO0CLR|=ds1302_sck; //sck=0
IO0SET|=ds1302_cs; //cs=1
IO0DIR|=ds1302_dio; //dio配置为输出
for(i=8;i>0;i--) //8次循环
{
if(rtc_address & 0x01) IO0SET|=ds1302_dio; //最低位为1,则dio=1;
else IO0CLR|=ds1302_dio; // 否则dio=0
rtc_address>>=1; // 右移1位
IO0SET|=ds1302_sck; //sck=1
IO0CLR|=ds1302_sck; // sck=0
}
IO0DIR&=~ds1302_dio; //dio配置为输入
temp=0;
if(0!=(IO0PIN & ds1302_dio)) temp+=0x80; //若dio为高电平,则移到最高位
for(i=7;i>0;i--)
{
temp>>=1;
IO0SET|=ds1302_sck;
IO0CLR|=ds1302_sck;
if(0!=(IO0PIN & ds1302_dio)) temp+=0x80;
}
IO0CLR|=ds1302_cs;
return(temp);
}
//--------------------------------
//向DS1302的指定的地址单元写数据函数
void write_ds1302_rtc(unsigned char rtc_address,unsigned char rtc_data)
{
unsigned char i;
IO0CLR|=ds1302_cs;
IO0CLR|=ds1302_sck;
IO0SET|=ds1302_cs;
IO0DIR|=ds1302_dio; //dio配置为输出
for(i=8;i>0;i--)
{
if(rtc_address & 0x01) IO0SET|=ds1302_dio;
else IO0CLR|=ds1302_dio;
rtc_address>>=1;
IO0SET|=ds1302_sck;
IO0CLR|=ds1302_sck;
}
for(i=8;i>0;i--)
{
if(rtc_data & 0x01)IO0SET|=ds1302_dio;
else IO0CLR|=ds1302_dio;
rtc_data>>=1;
IO0SET|=ds1302_sck;
IO0CLR|=ds1302_sck;
}
IO0CLR|=ds1302_cs;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -