📄 clock.lst
字号:
C51 COMPILER V7.50 CLOCK 04/25/2007 20:35:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN .\CLOCK.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Src\CLOCK.C BROWSE DEFINE(DEVICE_TYPE_ICIDSERVER,USE_DEVICE_PCF8563) DEB
-UG OBJECTEXTEND PRINT(.\CLOCK.lst) OBJECT(.\CLOCK.obj)
line level source
1 /*
2 8563寄存器数据存储结构说明
3
4 02h 秒 00~59 BCD 码格式数
5 03h 分钟 00~59 BCD 码格式数
6 04h 小时 00~59 BCD 码格式数
7 05h 日 01~31 BCD 码格式数
8 06h 星期 0~6
9 07h 月/世纪 01~12 BCD 码格式数
10 08h 年 00~99 BCD 码格式数
11 */
12 #include <reg52.h>
13 #include "..\Include\ClockDEF.h"
14 #include "..\..\I2C\Include\I2C.h"
15
16 #define Clock_OK 0
17 #define Clock_ERR 1
18 /***************************************************************************
19 参数:读取命令类型clock_rmd(包含0x01,0x02,0x03,0x04), 接收数据区clock_rdate(最大7个字节)
20 0x01:读取日期 返回日期格式为:yymmdd
21 0x02:读取时间 返回时间格式为:hhmmss
22 0x03:读取星期 返回0--6之间的数值
23 0x04:读取日期时间 返回日期时间格式为:yymmdd hhmmss
24 注意:
25 1、 有定义EN_CLOCK_FIRSTLOWBYTE,"日期"、"时间"、"日期时间"的返回格式分别为:"ddmmyy"、"ssmmhh"、"ssmmhhddm
-myy"
26 2、 若要调用读取日期/读取时间需定义EN_CLOCK_READWRITEDATEORTIME
27 若要调用读取星期需定义EN_CLOCK_READWRITEWEEK
28 若要调用读取日期时间需定义EN_CLOCK_READWRITELONGDATETIME
29 3、返回值0x00:成功;0x01:失败
30 ***************************************************************************/
31
32 unsigned char Clock_Get(unsigned char clock_rcmd,unsigned char * clock_rdate)
33 {
34 1 #ifndef EN_CLOCK_FIRSTLOWBYTE
35 1 unsigned char tmp;
36 1 #endif
37 1 switch(clock_rcmd)
38 1 {
39 2 #ifdef EN_CLOCK_READWRITEDATEORTIME
40 2 case 0x01:
41 2 I2C_Read(clock_rdate,CLOCK_REG+3,4,CLOCK_DEVNO);
42 2 clock_rdate[1] = ( clock_rdate[2] & 0x1f ); //月
43 2 #ifdef EN_CLOCK_FIRSTLOWBYTE //返回日月年格式
clock_rdate[0] &= 0x3f; //日
clock_rdate[2] = clock_rdate[3]; //年
if( clock_rdate[0] <= 0x31 ) //位5为1时日期超过31天
return Clock_OK;
#else //返回年月日格式
49 2 clock_rdate[2] = ( clock_rdate[0] & 0x3f ); //日
50 2 clock_rdate[0] = clock_rdate[3]; //年
51 2 if( clock_rdate[2] <= 0x31) //位5为1时日期超过31天
52 2 return Clock_OK;
53 2 #endif
C51 COMPILER V7.50 CLOCK 04/25/2007 20:35:54 PAGE 2
54 2 break;
55 2 case 0x02:
56 2 I2C_Read(clock_rdate,CLOCK_REG,3,CLOCK_DEVNO);
57 2 clock_rdate[1] &= 0x7f; //分
58 2 #ifdef EN_CLOCK_FIRSTLOWBYTE //返回秒分时
clock_rdate[0] &= 0x7f; //秒
clock_rdate[2] &= 0x3f; //时
if( (clock_rdate[2]<0x24) &&
(clock_rdate[1]<0x60) &&
(clock_rdate[0]<0x60)
)
return Clock_OK;
#else //返回时分秒
67 2 tmp = clock_rdate[0];
68 2 clock_rdate[0] = ( clock_rdate[2] & 0x3f); //时
69 2 clock_rdate[2] = ( tmp & 0x7f ); //秒
70 2 if( (clock_rdate[0]<24) &&
71 2 (clock_rdate[1]<60) &&
72 2 (clock_rdate[2]<60)
73 2 )
74 2 return Clock_OK;
75 2 #endif
76 2 break;
77 2 #endif
78 2 #ifdef EN_CLOCK_READWRITEWEEK
79 2 case 0x03:
80 2 I2C_Read(clock_rdate,CLOCK_REG+4,1,CLOCK_DEVNO);
81 2 clock_rdate[0] &=0x07; //星期
82 2
83 2 if( clock_rdate[0] < 0x07 )
84 2 return Clock_OK;
85 2 break;
86 2 #endif
87 2 #ifdef EN_CLOCK_READWRITELONGDATETIME
88 2 case 0x04:
89 2 I2C_Read(clock_rdate,CLOCK_REG,7,CLOCK_DEVNO);
90 2 #ifdef EN_CLOCK_FIRSTLOWBYTE //返回秒分时日月年
clock_rdate[0] &= 0x7f;//秒
clock_rdate[1] &= 0x7f;//分
clock_rdate[2] &= 0x3f;//时
clock_rdate[3] &= 0x3f;//日
clock_rdate[4] = ( clock_rdate[5] & 0x1f);//月 clock_
clock_rdate[5] = clock_rdate[6];//年
if( clock_rdate[3] <= 0x31 ) //位5为1时日期超过31天
return Clock_OK;
#else //返回年月日时分秒
100 2 clock_rdate[4]=( clock_rdate[1] & 0x7f );//分
101 2 clock_rdate[1]=( clock_rdate[5] & 0x1f );//月
102 2 clock_rdate[5]=( clock_rdate[0] & 0x7f );//秒
103 2 clock_rdate[0]= clock_rdate[6];//年
104 2 tmp=clock_rdate[2];//暂存时
105 2 clock_rdate[2]=( clock_rdate[3] & 0x3f );//日
106 2 clock_rdate[3]=( tmp & 0x3f );//时
107 2 if( clock_rdate[2] <= 0x31 ) //位5为1时日期超过31天
108 2 return Clock_OK;
109 2 #endif
110 2 break;
111 2 #endif
112 2 }
113 1 return Clock_ERR;
114 1 }
115
C51 COMPILER V7.50 CLOCK 04/25/2007 20:35:54 PAGE 3
116 /***************************************************************************
117 描述:Clock_Set(unsigned char clock_wcmd,unsigned char *clock_date)设置时间函数
118 参数:设置命令类型clock_wcmd(包含0x01,0x02,0x03,0x04), 写入数据存储区clock_date(最大7个字节)
119 0x01:设置日期 返回日期格式为:yymmdd
120 0x02:设置时间 返回时间格式为:hhmmss
121 0x03:设置星期 返回0--6之间的数值
122 0x04:设置日期时间 返回日期时间格式为:yymmdd hhmmss
123 注意:
124 1、 若有定义EN_CLOCK_FIRSTLOWBYTE,"日期"、"时间"、"日期时间"的写入格式分别为:"ddmmyy"、"ssmmhh"、"ssmmhhd
-dmmyy"
125 2、 若要调用设置日期/读取时间需定义EN_CLOCK_READWRITEDATEORTIME
126 若要调用设置星期需定义EN_CLOCK_READWRITEWEEK
127 若要调用设置日期时间需定义EN_CLOCK_READWRITELONGDATETIME
128 3、返回值0x00:成功;0x01:失败
129 ***************************************************************************/
130 unsigned char Clock_Set(unsigned char clock_wcmd,unsigned char *clock_date)
131 {
132 1 unsigned char tmp;
133 1
134 1 switch(clock_wcmd)
135 1 {
136 2 #ifdef EN_CLOCK_READWRITEDATEORTIME
137 2 case 0x01:
138 2 #ifdef EN_CLOCK_FIRSTLOWBYTE //输入格式为日月年
clock_date[3] = clock_date[2]; //年
clock_date[2] = clock_date[1]; //月
#else
142 2 clock_date[3] = clock_date[0]; //年
143 2 clock_date[0] = clock_date[2]; //日
144 2 clock_date[2] = clock_date[1]; //月
145 2 #endif //输入格式为年月日
146 2 clock_date[1] = 0x01; //星期
147 2 I2C_Write(clock_date,CLOCK_REG+3,4,CLOCK_DEVNO);
148 2 I2C_Read(&tmp,CLOCK_REG+6,1,CLOCK_DEVNO); //检验年份
149 2 if( tmp == clock_date[3] )
150 2 return Clock_OK;
151 2 break;
152 2 case 0x02:
153 2 #ifndef EN_CLOCK_FIRSTLOWBYTE
154 2 tmp=clock_date[0]; //小时暂存
155 2 clock_date[0]= clock_date[2];
156 2 clock_date[2]= tmp;
157 2 #endif
158 2 I2C_Write(clock_date,CLOCK_REG,3,CLOCK_DEVNO);
159 2 I2C_Read(&tmp,CLOCK_REG+2,1,CLOCK_DEVNO); //存放校验时间
160 2 if( tmp == clock_date[2] ) ////测试
161 2 return Clock_OK;
162 2 break;
163 2 #endif
164 2 #ifdef EN_CLOCK_READWRITEWEEK
165 2 case 0x03:
166 2 I2C_Write(clock_date,CLOCK_REG+4,1,CLOCK_DEVNO); //星期
167 2 I2C_Read(&tmp,CLOCK_REG+4,1,CLOCK_DEVNO); //存放校验星期
168 2 if(tmp==clock_date[0])
169 2 return Clock_OK;
170 2 break;
171 2 #endif
172 2 #ifdef EN_CLOCK_READWRITELONGDATETIME
173 2 case 0x04:
174 2 #ifdef EN_CLOCK_FIRSTLOWBYTE
clock_date[6] = clock_date[5]; //年
clock_date[5] = clock_date[4]; //月
C51 COMPILER V7.50 CLOCK 04/25/2007 20:35:54 PAGE 4
#else
178 2 clock_date[6] = clock_date[0]; //年
179 2 clock_date[0] = clock_date[5]; //秒
180 2 clock_date[5] = clock_date[1]; //月
181 2 clock_date[1] = clock_date[4]; //分
182 2 tmp = clock_date[2]; //暂存日
183 2 clock_date[2] = clock_date[3]; //时
184 2 clock_date[3] = tmp; //日
185 2 #endif
186 2 clock_date[4] = 0x01; //星期
187 2
188 2 I2C_Write(clock_date,CLOCK_REG,7,CLOCK_DEVNO);
189 2 I2C_Read(&tmp,CLOCK_REG+2,1,CLOCK_DEVNO); //存放校验时
190 2 if( tmp==clock_date[2] ) ////测试
191 2 return Clock_OK;
192 2 break;
193 2 #endif
194 2 }
195 1 return Clock_ERR;
196 1 }
197
198 #ifdef EN_CLOCK_INITFUNC
unsigned char Clock_Init(unsigned char *temp) //初始化
{
#ifdef EN_CLOCK_FIRSTLOWBYTE
unsigned char code DATA[]={0x00,0x30,0x12};
#else
unsigned char code DATA[]={0x12,0x30,0x00};
#endif
if( Clock_Get(2,temp) )
return Clock_Set(2,DATA);
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 836 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -