寄存器宏定义详解.docx

上传人:b****5 文档编号:2904416 上传时间:2022-11-16 格式:DOCX 页数:36 大小:23.09KB
下载 相关 举报
寄存器宏定义详解.docx_第1页
第1页 / 共36页
寄存器宏定义详解.docx_第2页
第2页 / 共36页
寄存器宏定义详解.docx_第3页
第3页 / 共36页
寄存器宏定义详解.docx_第4页
第4页 / 共36页
寄存器宏定义详解.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

寄存器宏定义详解.docx

《寄存器宏定义详解.docx》由会员分享,可在线阅读,更多相关《寄存器宏定义详解.docx(36页珍藏版)》请在冰豆网上搜索。

寄存器宏定义详解.docx

寄存器宏定义详解

/******************寄存器宏定义********************/

#defineWRITE_DS1302_SECOND0X80//写入“秒”寄存器

#defineWRITE_DS1302_MINUTE0X82//写入“分”寄存器

#defineWRITE_DS1302_HOUR0X84//写入“小时”寄存器

#defineWRITE_DS1302_DAY0X86//写入“日”寄存器

#defineWRITE_DS1302_MONTH0X88//写入“月”寄存器

#defineWRITE_DS1302_WEEK0X8A//写入“星期”寄存器

#defineWRITE_DS1302_YEAR0X8C//写入“年”寄存器

#defineWRITE_DS1302_REINIT_ADDR0XC0//写入上电判断RAM寄存器

#defineREAD_DS1302_SECOND0X81//读出“秒”寄存器

#defineREAD_DS1302_MINUTE0X83//读出“分”寄存器

#defineREAD_DS1302_HOUR0X85//读出“小时”寄存器

#defineREAD_DS1302_DAY0X87//读出“日期”寄存器

#defineREAD_DS1302_MONTH0X89//读出“月”寄存器

#defineREAD_DS1302_WEEK0X8B//读出“星期”寄存器

#defineREAD_DS1302_YEAR0X8D//读出“年”寄存器

#defineREAD_DS1302_REINIT_ADDR0XC1//读出上电判断RAM寄存器

#defineWRITE_DS1302_Timing_Hour10XC2

#defineWRITE_DS1302_Timing_Min10XC4

#defineWRITE_DS1302_Timing_Hour20XC6

#defineWRITE_DS1302_Timing_Min20XC8

#defineWRITE_MODE_STA0XCA

#defineWRITE_WIN_STA0XCC

#defineREAD_DS1302_Timing_Hour10XC3

#defineREAD_DS1302_Timing_Min10XC5

#defineREAD_DS1302_Timing_Hour20XC7

#defineREAD_DS1302_Timing_Min20XC9

#defineREAD_MODE_STA0XCB

#defineREAD_WIN_STA0XCD

#defineDS1302_WRITE_PROTECT0X8E//写保护寄存器

#defineDS1302_Trickl_Charge0X90//慢速充电寄存器

/******************初始化日期时间宏定义********************/

//初始日期时间为“2011年10月09日星期日12点00分00秒”

//注意:

此处是十进制,下面“地址,数据发送子程序”中有转换

#defineINIT_SECONGD50

#defineINIT_MINUTE59

#defineINIT_HOUR22

#defineINIT_DAY9

#defineINIT_MONTH10

#defineINIT_WEEK7

#defineINIT_YEAR11

/******************写保护设置宏定义********************/

//注意:

此处是十进制,下面“地址,数据发送子程序”中有转换

#defineDS1302_WRITE_PROTECT_NO0//写保护禁止

#defineDS1302_WRITE_PROTECT_OFF128//写保护允许

/******************DS1302端口定义********************/

sbitDS1302_SCLK=P1^5;//DS1302时钟信号

sbitDS1302_DIO=P1^6;//DS1302数据信号

sbitDS1302_CE=P1^7;//DS1302片选信号

/********************充电方式宏定义*********************/

//TCSTCSTCSTCSDSDSRSRS

//慢速充电选择(TCS)位(位4~7)控制快速充电器的选择,只有1010模式才能使慢速充电器工作

//所有其它模式将禁止慢速充电器工作

//DS1302上电时,慢速充电器被禁止

//(DS)位(位2~3)选择是一个二极管(01)还是两个二极管(10),如果DS为“00”或“11”,则充电器被禁止

//RS位(位0~1)选择连接在VCC2与VCC1之间的电阻:

“00”无;“01”2K;“10”4K;“11”8K。

//如果RS为00,充电器被禁止,与TCS无关

//最大充电电流计算:

Imax=(5.0V-二极管压降)/R

#defineHold_DS1302_Charge160//=0XA5即10100101使用慢速充电器,选择一个二极管、一个电阻

/********************重新上电判断宏定义*********************/

#defineDS1302_REINIT_DATA3//=0x55即01010101

/********************标示位定义*********************/

bitDS1302_CH_flog=0;//1302时钟暂停标示位“=0”运行“=1”暂停

bitDS1302_CLK_WAY=0;//1302时钟工作方式标示位“=0”24小时方式“=1”12小时方式

externvoiddelayms(unsignedintxms);

/********************地址,数据发送子程序*********************/

voidWRITE_DS1302(unsignedcharaddr,dat)//注意:

为了方便此处的dat为十进制

{

unsignedchari,temp;

dat=(dat/10)*16+dat%10;//十进制转化成十六进制

DS1302_CE=0;//没有先前的低电平不能工作。

,,,DS1302_CE的高电平启动一次数据的传输

DS1302_SCLK=0;

DS1302_CE=1;//DS1302片选上跳变打开数据传输

for(i=0;i<8;i++)//循环8次位移

{

DS1302_SCLK=0;

temp=addr;

DS1302_DIO=(bit)(temp&0x01);//每次传送低字节

addr=addr>>1;//右移一位

delayms

(1);

DS1302_SCLK=1;

}

for(i=0;i<8;i++)//循环8次位移

{

DS1302_SCLK=0;

temp=dat;

DS1302_DIO=(bit)(temp&0x01);//每次传送低字节

dat=dat>>1;//右移一位

delayms

(1);

DS1302_SCLK=1;

}

DS1302_CE=0;////DS1302片选下跳变关闭数据传输

}

/********************数据读取子程序*********************/

unsignedcharREAD_DS1302(unsignedcharaddr)

{

unsignedchari,temp,dat;

DS1302_CE=0;//没有先前的低电平不能工作。

,,,DS1302_CE的高电平启动一次数据的传输

DS1302_SCLK=0;

DS1302_CE=1;//DS1302片选上跳变打开数据传输

for(i=0;i<8;i++)//循环8次位移

{

DS1302_SCLK=0;

temp=addr;

DS1302_DIO=(bit)(temp&0x01);//每次传送低字节

addr=addr>>1;//右移一位

delayms

(1);

DS1302_SCLK=1;

}

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

{

if(DS1302_DIO==1)

dat|=0x80;

DS1302_SCLK=1;

dat=dat>>1;

delayms

(1);

DS1302_SCLK=0;

}

DS1302_CE=0;//DS1302片选下跳变关闭数据传输

dat=(dat/16)*10+dat%16;//十六进制转化成十进制

returndat;//注意:

为了方便此处返回的值为十进制

}

/********************初始化DS1302子程序*********************/

voidINIT_DS1302()

{

if(READ_DS1302(READ_DS1302_REINIT_ADDR)!

=DS1302_REINIT_DATA)//判断是否是重新上电

{

WRITE_DS1302(DS1302_WRITE_PROTECT,DS1302_WRITE_PROTECT_NO);//禁止写保护

WRITE_DS1302(WRITE_DS1302_SECOND,INIT_SECONGD);//秒

WRITE_DS1302(WRITE_DS1302_MINUTE,INIT_MINUTE);//分

WRITE_DS1302(WRITE_DS1302_HOUR,INIT_HOUR);//小时

WRITE_DS1302(WRITE_DS1302_DAY,INIT_DAY);//日期

WRITE_DS1302(WRITE_DS1302_MONTH,INIT_MONTH);//月份

WRITE_DS1302(WRITE_DS1302_WEEK,INIT_WEEK);//星期

WRITE_DS1302(WRITE_DS1302_YEAR,INIT_YEAR);//年

WRITE_DS1302(DS1302_Trickl_Charge,Hold_DS1302_Charge);//充电方式设置

WRITE_DS1302(WRITE_DS1302_REINIT_ADDR,DS1302_REINIT_DATA);//用于主控制器重新上电判断

WRITE_DS1302(WRITE_DS1302_Timing_Hour1,6);

WRITE_DS1302(WRITE_DS1302_Timing_Min1,30);

WRITE_DS1302(WRITE_DS1302_Timing_Hour2,18);

WRITE_DS1302(WRITE_DS1302_Timing_Min2,20);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1