📄 1302.c
字号:
#include<pic.h>
#include"1302.h"
//ds1302的初始化函数
void init_1302(void)
{
DS1302CK_O;
DS1302CE_O;
DS1302CE_0;
DS1302CK_0;
DS1302IO_1;
DS1302IO_I;
}
//DS1302的读函数
unsigned char Read_DS1302(unsigned char Address)
{
unsigned char i;
unsigned int temp;
DS1302CE_0;
DS1302CK_0;
DS1302IO_O;
asm("nop");
asm("nop");
DS1302CE_1;
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
if(Address & 0x01)DS1302IO_1;
else DS1302IO_0;//DS1302高低电平都有效
asm("nop");
asm("nop");
DS1302CK_1;
asm("nop");
asm("nop");
DS1302CK_0;
asm("nop");
asm("nop");
Address>>=1;
}
DS1302IO_1;
asm("nop");
asm("nop");
DS1302IO_I;
asm("nop");
asm("nop");
temp=0;
if(DS1302IO_D)temp|=0x8000;
temp>>=1;
for(i=7;i>0;i--)//为什么是7,而不是8
{
asm("nop");
asm("nop");
DS1302CK_1;
asm("nop");
asm("nop");
DS1302CK_0;
asm("nop");
asm("nop");
if(DS1302IO_D)temp|=0x8000;
temp>>=1;
}
DS1302CE_0;
temp<<=1;
return(temp/256);
}
//DS1302的写函数
void Write_DS1302(unsigned char Address,unsigned char Data)
{
unsigned char i;
DS1302CE_0;
DS1302CK_0;
DS1302IO_0;
asm("nop");
asm("nop");
DS1302CE_1;
asm("nop");
asm("nop");
for(i=8;i>0;i--)//一个字符八个字节,故要执行八次
{
if(Address & 0x01)DS1302IO_1;
else DS1302IO_0;
asm("nop");
asm("nop");
DS1302CK_1;
asm("nop");
asm("nop");
DS1302CK_0;
asm("nop");
asm("nop");
Address>>=1;
}
for(i=8;i>0;i--)
{
if(Address & 0x01)DS1302IO_1;
else DS1302IO_0;
asm("nop");
asm("nop");
DS1302CK_1;
asm("nop");
asm("nop");
DS1302CK_0;
asm("nop");
asm("nop");
Data>>=1;
}
DS1302CE_0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -