📄 ds1302.lst
字号:
C51 COMPILER V7.06 DS1302 05/09/2007 10:46:29 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************/
2 /* */
-
3 /*名称: ds1302读写+显示程序 */
-
-
4 /*功能: 读写DS1302,通过LCD12864显示出来。 */
-
5 /*难度等级: 高 */
-
6 /* 作者: zengrenliang */
7 /* 版权: http://www.51kaifa.com */
8 /*编写日期: 2006.05.21 */
-
-
9 /*****************************************************************/
10
11 #include<reg52.h>
12 #define uchar unsigned char
13
14 extern void delay(unsigned int i);
15 /*********************************************************************/
16 /* */
17 /* 实时时钟模块 时钟芯片型号:DS1302 */
18 /* */
19 /*********************************************************************/
20 sbit T_CLK = P1^0; /*实时时钟时钟线引脚 */
21 sbit T_IO = P1^2; /*实时时钟数据线引脚 */
22 sbit lck = P3^5;
23 sbit ACC0 = ACC^0;
24 sbit ACC7 = ACC^7;
25
26
27 /*********************************************************************/
28 /* */
29 /* 名称: v_RTInputByte */
30 /* 说明: */
31 /* 功能: 往DS1302写入1Byte数据 */
32 /* 调用: */
33 /* 输入: ucDa 写入的数据 */
34 /* 返回值: 无 */
35 /*********************************************************************/
36 void v_RTInputByte(uchar ucDa)
37 {
38 1 uchar i;
39 1 ACC = ucDa;
40 1 for(i=8; i>0; i--)
41 1 {
42 2 T_IO = ACC0; /*相当于汇编中的 RRC */
43 2 T_CLK = 1;
44 2 T_CLK = 0;
45 2 ACC = ACC >> 1;
46 2 }
47 1 }
48 /*********************************************************************/
C51 COMPILER V7.06 DS1302 05/09/2007 10:46:29 PAGE 2
49 /* */
50 /* 名称: uchar uc_RTOutputByte */
51 /* 说明: */
52 /* 功能: 从DS1302读取1Byte数据 */
53 /* 调用: */
54 /* 输入: */
55 /* 返回值: ACC */
56 /*********************************************************************/
57 uchar uc_RTOutputByte(void)
58 {
59 1 uchar i;
60 1 for(i=8; i>0; i--)
61 1 {
62 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
63 2 ACC7 = T_IO;
64 2 T_CLK = 1;
65 2 T_CLK = 0;
66 2 }
67 1 return(ACC);
68 1 }
69 /*********************************************************************/
70 /* */
71 /* 名称: v_W1302 */
72 /* 说明: 先写地址,后写命令/数据 */
73 /* 功能: 往DS1302写入数据 */
74 /* 调用: v_RTInputByte() */
75 /* 输入: ucAddr: DS1302地址, ucDa: 要写的数据 */
76 /* 返回值: 无 */
77 /*********************************************************************/
78 void v_W1302(uchar ucAddr, uchar ucDa)
79 {
80 1 lck = 0;
81 1 P1 = 0xdf;//RST = 0;
82 1 lck = 1;
83 1
84 1 T_CLK = 0;
85 1
86 1 lck = 0;
87 1 P1 = 0xff;//RST = 1;
88 1 lck = 1;
89 1 v_RTInputByte(ucAddr); /* 地址,命令 */
90 1 v_RTInputByte(ucDa); /* 写1Byte数据*/
91 1 T_CLK = 1;
92 1 lck = 0;
93 1 P1 = 0xdf;//RST = 0;
94 1 lck = 1;
95 1 }
96 /*********************************************************************/
97 /* */
98 /* 名称: uc_R1302 */
99 /* 说明: 先写地址,后读命令/数据 */
100 /* 功能: 读取DS1302某地址的数据 */
101 /* 调用: v_RTInputByte() , uc_RTOutputByte() */
102 /* 输入: ucAddr: DS1302地址 */
103 /* 返回值: ucDa :读取的数据 */
104 /*********************************************************************/
105 uchar uc_R1302(uchar ucAddr)
106 {
107 1 uchar ucDa;
108 1
109 1 lck = 0;
110 1 P1 = 0xdf;//RST = 0;
C51 COMPILER V7.06 DS1302 05/09/2007 10:46:29 PAGE 3
111 1 lck = 1;
112 1
113 1 T_CLK = 0;
114 1
115 1 lck = 0;
116 1 P1 = 0xff;//RST = 1;
117 1 lck = 1;
118 1 v_RTInputByte(ucAddr); /* 地址,命令 */
119 1 ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
120 1 T_CLK = 1;
121 1 lck = 0;
122 1 P1 = 0xdf;//RST = 0;
123 1 lck = 1;
124 1 return(ucDa);
125 1 }
126
127 /*********************************************************************/
128 /* */
129 /* 名称: v_Set1302 */
130 /* 说明: */
131 /* 功能: 设置初始时间 */
132 /* 调用: v_W1302() */
133 /* 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年*/
134 /* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B */
135 /* 返回值: 无 */
136 /*********************************************************************/
137 void v_Set1302(uchar *pSecDa)
138 {
139 1 uchar i;
140 1 uchar ucAddr = 0x80;
141 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
142 1 for(i =7;i>0;i--)
143 1 {
144 2 v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
145 2
146 2 pSecDa++;
147 2 ucAddr +=2;
148 2 }
149 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
150 1 }
151 /******************************************************************************/
152 /* */
153 /* 名称: v_Get1302 */
154 /* 说明: */
155 /* 功能: 读取DS1302当前时间 */
156 /* 调用: uc_R1302() */
157 /* 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 */
158 /* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B */
159 /* 返回值: 无 */
160 /******************************************************************************/
161 void v_Get1302(uchar ucCurtime[])
162 {
163 1 uchar i;
164 1 uchar ucAddr = 0x81;
165 1 for (i=0;i<7;i++)
166 1 {
167 2 ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
168 2 ucAddr += 2;
169 2 delay(100);
170 2 }
171 1 }
172 /**************************************结束**************************************/
C51 COMPILER V7.06 DS1302 05/09/2007 10:46:29 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 179 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
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 + -