DS1302驱动程序

来源:本站
导读:目前正在解读《DS1302驱动程序》的相关信息,《DS1302驱动程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《DS1302驱动程序》的详细说明。
简介:本程序在Freescale的8位单片机上调试通过,如果MCU用其它的品牌型号,只需要把下面的宏定义改改就行了。

#defineCLR_CE()(PTDD_PTDD3 = 0)

#defineSET_CE()(PTDD_PTDD3 = 1)

#defineCLR_CLK()(PTDD_PTDD1 = 0)

#defineSET_CLK()(PTDD_PTDD1 = 1)

#defineCLR_IO()(PTDD_PTDD2 = 0)

#defineSET_IO()(PTDD_PTDD2 = 1)

#define INPUT_IO()(PTDDD_PTDDD2 = 0)

#define OUTPUT_IO()(PTDDD_PTDDD2 = 1)

#define READ_IO()(PTDD_PTDD2)

#define NOP(){ __asm NOP; __asm NOP; }

下面是程序全文:

//*****************************************************************************

#defineCLR_CE()(PTDD_PTDD3 = 0)

#defineSET_CE()(PTDD_PTDD3 = 1)

#defineCLR_CLK()(PTDD_PTDD1 = 0)

#defineSET_CLK()(PTDD_PTDD1 = 1)

#defineCLR_IO()(PTDD_PTDD2 = 0)

#defineSET_IO()(PTDD_PTDD2 = 1)

#define INPUT_IO()(PTDDD_PTDDD2 = 0)

#define OUTPUT_IO()(PTDDD_PTDDD2 = 1)

#define READ_IO()(PTDD_PTDD2)

#define NOP(){ __asm NOP; __asm NOP; }

#defineSETBIT(x,y) (x |= (1 << y)) //set bit y in byte x

#defineCLRBIT(x,y) (x &= (~(1 << y))) //clear bit y in byte x

#defineGETBIT(x,y) (x & (1 << y)) //check bit y in byte x

#defineBCD2HEX(x)((10 * (x >> 4)) + (x & 0x0f))

#defineHEX2BCD(x)(((x / 10) << 4) + (x % 10))

//*****************************************************************************

void Ds1302_Write(u8 Data)

{

u8 i;

for(i = 0; i < 8; i++)

{

CLR_CLK();

NOP();

if(GETBIT(Data , i))

SET_IO();

else

CLR_IO();

NOP();

SET_CLK();//上升沿,发送数据

}

}

//*****************************************************************************

u8 Ds1302_Read(void)

{

u8 RecvData = 0;

u8 i;

INPUT_IO();//设置IO口方向

for(i = 0; i < 8; i++)

{

SET_CLK();

NOP();

CLR_CLK();//下降沿接收数据

NOP();

if(READ_IO())

SETBIT(RecvData , i);

}

OUTPUT_IO();

return RecvData;

}

//*****************************************************************************

void Ds1302_Write_Byte(u8 Addr, u8 Data)

{

SET_CE();

Ds1302_Write(Addr);

Ds1302_Write(Data);

CLR_CE();

}

//*****************************************************************************

u8 Ds1302_Read_Byte(u8 Addr)

{

u8 RecvData = 0;

SET_CE();

Ds1302_Write(Addr);

RecvData = Ds1302_Read();

CLR_CE();

return RecvData;

}

//*****************************************************************************

void DS1302_Init(void)

{

u8 i;

i = Ds1302_Read_Byte(0x81);

if(i & 0x10)

{

Ds1302_Write_Byte(0x8e, 0x00);//取消写保护

Ds1302_Write_Byte(0x80, 0x00);//启动时钟

}

}

//*****************************************************************************

void RTC_Get(u8 *RecvBuff)

{

u8 i;

u8 Addr = 0x81;

for (i = 0; i < 7; i++)

{

//*RecvBuff++ = BCD2HEX(Ds1302_Read_Byte(Addr));

*RecvBuff++ = Ds1302_Read_Byte(Addr);

Addr += 2;

}

}

//*****************************************************************************

void RTC_Set(u8 *SentBuff)

{

u8 i;

u8 Addr = 0x80;

Ds1302_Write_Byte(0x8e, 0x00);//取消写保护

for(i = 0; i < 7; i++)

{

Ds1302_Write_Byte(Addr, HEX2BCD(*SentBuff));

SentBuff++;

Addr += 2;

}

Ds1302_Write_Byte(0x8e, 0x80);//设置写保护

}

这个程序可以直接用的,用之前最好把DS1302的数据手册仔细研究研究。

提醒:《DS1302驱动程序》最后刷新时间 2024-03-14 01:05:41,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《DS1302驱动程序》该内容的真实性请自行鉴别。