1302.c

来自「该程序能是对DS1302时钟芯片的操作程序」· C语言 代码 · 共 113 行

C
113
字号
#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 + =
减小字号Ctrl + -
显示快捷键?