⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd2000.c

📁 C8051F120 _AD开发过程中的一些代码和文档
💻 C
字号:
#include<intrins.h>
#include "C8051f.h"
#include "Sd2000.h"
#include "Timer.h"
#include "App.h"

unsigned char bdata temp_p;

sbit DD_7 = temp_p^7;
sbit DD_0 = temp_p^0;

void Start()
{
	RT_SCL = 0;
	RT_SDA = 1;
	Delay5us();
	RT_SCL = 1;
	Delay5us();
	RT_SDA = 0;
	Delay5us();	
	RT_SCL = 0;
}


void Stop()
{
	RT_SCL = 0;
	RT_SDA = 0;
	Delay5us();
	RT_SCL = 1;
	Delay5us();
	RT_SDA = 1;
	Delay5us();
	RT_SCL = 0;
}

/***************************************************************************/
/*
void Ack()
{
	RT_SDA = 0;
	RT_SCL = 1;
	Delay5us();
	RT_SCL = 0;
	RT_SDA = 1;
	Delay5us();
}
*/
/***************************************************************************/
/*
void NoAck() 
{
	RT_SDA = 1;
	RT_SCL = 1;
	Delay5us();
	RT_SCL = 0;
	Delay5us();
}
*/
/***************************************************************************/
void TestAck()
{
/*	bit ErrorBit;
	RT_SDA = 1;
	RT_SCL = 1;
	Delay5us();
	ErrorBit = SDA;
	RT_SCL = 0;
	Delay5us();
	return(ErrorBit);
	*/
}

void SendBit(bit mm)
{
	RT_SDA = 0;
	RT_SCL = 0;
	_nop_();
	RT_SDA = mm;
	Delay5us();
	RT_SCL = 1;
	Delay5us();
	RT_SCL = 0;
}

bit LoadBit()
{ 
	bit mm;
	RT_SDA = 1;
	RT_SCL = 0;
	Delay5us();
//	mm=SDA;
//	delay5us();
	RT_SCL = 1;
	Delay5us();
	mm = RT_SDA;
	_nop_();
	RT_SCL = 0;
	return(mm);
}
/***************************************************************************/
void Write8Bit(unsigned char input)
{
	unsigned char temp_2;

	temp_p = input;
	for(temp_2 = 8; temp_2 != 0; temp_2--)
	{
//		SendBit(DD_0);
		RT_SDA = 0;
		RT_SCL = 0;
		_nop_();
		RT_SDA = DD_0;
		Delay5us();
	
		RT_SCL = 1;
		Delay5us();
	
		RT_SCL = 0;
		temp_p = temp_p>>1;
		
	}
//	LoadBit();
		RT_SDA = 1;
		RT_SCL = 0;
		Delay5us();
	
//	mm=SDA;
//	delay5us();
		RT_SCL = 1;
		Delay5us();
	
		DD_0 = RT_SDA;
		_nop_();
		RT_SCL=0;
}

/***************************************************************************/
void Write8BitCOMM(unsigned char input)
{
	unsigned char temp_2;

	temp_p = input;
	for(temp_2 = 8; temp_2 != 0; temp_2--)
	{
//		SendBit(DD_7);
		RT_SDA = 0;
		RT_SCL = 0;
		_nop_();
		RT_SDA = DD_7;
		Delay5us();

		RT_SCL = 1;
		Delay5us();
	
		RT_SCL = 0;
		temp_p = temp_p<<1;
		
	}
//	LoadBit();
	RT_SDA = 1;
	RT_SCL = 0;
	Delay5us();

//	mm=SDA;
//	Delay5us();
	RT_SCL = 1;
	Delay5us();
	
	DD_0 = RT_SDA;
	_nop_();
	RT_SCL = 0;
}

/***************************************************************************/
unsigned char Read8Bit()
{
	unsigned char temp_2;
	unsigned char rbyte = 0;

	for(temp_2 = 8; temp_2 != 0; temp_2--)
	{
		temp_p = temp_p>>1;
//		DD_7=LoadBit();
		RT_SDA = 1;
		RT_SCL = 0;
		Delay5us();
	
//  	mm=SDA;
//		delay5us();
		RT_SCL = 1;
		Delay5us();
	
		DD_7 = RT_SDA;
		_nop_();
		RT_SCL = 0;
	}
	return(temp_p);
}

void ResetSD()
{
	EA = 0;
	Start();
	Write8BitCOMM(ResetSD2000);
//	TestAck();
	Stop();
	Delay5us();		
	EA = 1;
}

void InitSD(void)
{
	EA = 0;
	RT_SCL = 0;
	RT_SDA = 0;
	Delay5us();
	Delay5us();
	if(ReadStateRegSD()>0x7f)
	{
		Delay1ms(200);
		if(ReadStateRegSD()>0x7f)
		{
			ResetSD();
		}	
	}	
	Delay5us();
	Delay5us();
	WriteStateRegSD(0xc0);
	EA = 1;
}

unsigned char ReadStateRegSD()
{	
	unsigned tempd;
	EA = 0;
	Start();
	Write8BitCOMM(ReadStateReg);
//	TestAck();
	tempd = Read8Bit();
	SendBit(0);
//	TestAck();
	Stop();
	Delay5us();
	EA = 1;
	return(tempd);
}

void WriteStateRegSD(unsigned char state)
{
	EA = 0;
	Start();
	Write8BitCOMM(WriteStateReg);
//	TestAck();
	Write8Bit(state);
//	TestAck();
	Stop();
	Delay5us();
	EA = 1;
}

void ReadTimeSD(unsigned char *time)
{ 
	unsigned char tempp;

	EA = 0;
	Start();
	Write8BitCOMM(ReadTime);
//	TestAck();
	for(tempp = 0; tempp < 7; tempp++)
	{
		time[tempp] = Read8Bit();
		SendBit(0);
//		TestAck();
	}		
	Stop();
	Delay5us();
	EA = 1;
}

void WriteTimeSD(unsigned char * time)
{
	unsigned char tempp;

	EA = 0;
	Start();
	Write8BitCOMM(WriteTime);
//	TestAck();
	for(tempp = 0; tempp<7; tempp++)
	{
		Write8Bit(time[tempp]);
//		TestAck();		
	}
	Stop();
	Delay5us();
	EA = 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -