- 1
- 0
- 约5.4千字
- 约 10页
- 2017-12-22 发布于河南
- 举报
演示程序SD24- 430 C语言
演示程序SD24- 430 C语言
#define SET_CLOCK_CLK P2OUT |= BIT4
#define CLR_CLOCK_CLK P2OUT = ~BIT4
#define SET_CLOCK_DAT P2OUT |= BIT3
#define CLR_CLOCK_DAT P2OUT = ~BIT3
#define GET_CLOCK_DAT (P2IN BIT3)
#define ENABLE_CLOCK P2REN |= BIT3|BIT4//P3OUT |= BIT7
#define DISABLE_CLOCK P2REN = ~(BIT3|BIT4)//P3OUT = ~BIT7
#define ENABLE_GET_CLOCK_DATA P2DIR = ~BIT3;P2OUT |= BIT3
#define DISABLE_GET_CLOCK_DATA P2DIR |= BIT3
void WriteTimeOn(void);
void WriteTimeOff(void);
#define FLASH_DELAY for(junk=0; junk10; junk++)
void I2CStart(void)
{
ENABLE_CLOCK;
SET_CLOCK_DAT;
SET_CLOCK_CLK;
FLASH_DELAY;
CLR_CLOCK_DAT;
FLASH_DELAY;
CLR_CLOCK_CLK;
FLASH_DELAY;
}
void I2CStop(void)
{
CLR_CLOCK_DAT;
SET_CLOCK_CLK;
FLASH_DELAY;
SET_CLOCK_DAT;
FLASH_DELAY;
CLR_CLOCK_CLK;
FLASH_DELAY;
DISABLE_CLOCK;
}
void I2CAck(void)
{
CLR_CLOCK_DAT;
FLASH_DELAY;
SET_CLOCK_CLK;
FLASH_DELAY;
CLR_CLOCK_CLK;
FLASH_DELAY;
}
void I2CNoAck(void)
{
SET_CLOCK_DAT;
FLASH_DELAY;
SET_CLOCK_CLK;
FLASH_DELAY;
CLR_CLOCK_CLK;
FLASH_DELAY;
}
char I2CWaitAck(void)
{
char ret;
ENABLE_GET_CLOCK_DATA;
SET_CLOCK_CLK;
FLASH_DELAY;
FLASH_DELAY;
ret = GET_CLOCK_DAT;
CLR_CLOCK_CLK;
FLASH_DELAY;
DISABLE_GET_CLOCK_DATA;
if(ret)
ret = ret;
return ret;
}
void I2CSendByte(unsigned char data)
{
int i;
CLR_CLOCK_CLK;
FLASH_DELAY;
for(i=0; i8; i++)
{
if(data0x80)
SET_CLOCK_DAT;
else
CLR_CLOCK_DAT;
SET_CLOCK_CLK;
FLASH_DELAY;
CLR_CLOCK_CLK;
FLASH_DELAY;
data = 1;
}
}
void I2CReceiveByte(unsigned char *data)
{
int i;
*data = 0;
ENABLE_GET_CLOCK_DATA;
FLASH_DELAY;
for(i=0; i8; i++)
{
*data = 1;
CLR_CLOCK_CLK;
FLASH_DELAY;
SET_CLOCK_CLK;
FLASH_DELAY;
if(GET_CLOCK_DAT)
*data |= 1;
}
CLR_CLOCK_CLK;
DISABLE_GET_CLOCK_DATA;
}
void I2CReadDate(BYTE *date)
{
BYTE n;
I2CStart();
I2CSendByte(0x65);
I2CWaitAck();
for(n=0;n7;n++)
{
I2CReceiveByte(date+n);
if (n!=6) //最后一个数据不应答
{
I2CAck();
}
}
I2CNoAc
原创力文档

文档评论(0)