📄 sd2000.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 + -