?? ds1302.lst
字號:
C51 COMPILER V7.50 DS1302 06/05/2008 21:18:58 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CH\ds1302.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ds1302.lst) OBJECT(ds1302.obj
-)
line level source
1 /*********************************************************************
2
3 模塊名稱:dS1302.c
4 功 能:實時時鐘模塊 時鐘芯片型號:dS1302
5 說 明:
6 *********************************************************************/
7 #include"includes.h"
8 //unsigned char ucCurtime[7]; /*讀取當前7字節
9 /**************函數聲明***********************/
10
11 static void InputByte1302(unsigned char d);
12 static unsigned char OutputByte1302(void);
13 static void W1302(unsigned char ucAddr, unsigned char ucda);
14 static unsigned char R1302(unsigned char ucAddr);
15 /********************************************************************
16
17 函 數 名:ds1302_init()
18 功 能:DS1302初始化
19 說 明:DS1302初始化函數
20 入口參數:無
21 返 回 值:無
22 ***********************************************************************/
23 extern void ds1302_init()
24 {
25 1 T_CLK=0; /*拉低時鐘信號*/
26 1 T_RST=0; /*復位DS1302*/
27 1 T_RST=1; /*使能DS1302*/
28 1 InputByte1302(0x8e); /*發控制命令*/
29 1 InputByte1302(0); /*允許寫DS1302*/
30 1 T_RST=0; /*復位*/
31 1 }
32 /********************************************************************
33
34 函 數 名:InputByte1302()
35 功 能:實時時鐘寫入一字節
36 說 明:往dS1302寫入1Byte數據 (內部函數)
37 入口參數:d 寫入的數據
38 返 回 值:無
39 ***********************************************************************/
40 void InputByte1302(unsigned char d)
41 {
42 1 unsigned char i;
43 1 ACC = d;
44 1 for(i=8; i>0; i--)
45 1 {
46 2 T_IO = ACC0; /*相當于匯編中的 RRC */
47 2 T_CLK = 1;
48 2 T_CLK = 0;
49 2 ACC = ACC >> 1;
50 2 }
51 1 }
52 /********************************************************************
53
54 函 數 名:OutputByte1302()
C51 COMPILER V7.50 DS1302 06/05/2008 21:18:58 PAGE 2
55 功 能:實時時鐘讀取一字節
56 說 明:從dS1302讀取1Byte數據 (內部函數)
57 入口參數:無
58 返 回 值:ACC
59 ***********************************************************************/
60 unsigned char OutputByte1302(void)
61 {
62 1 unsigned char i;
63 1 for(i=8; i>0; i--)
64 1 {
65 2 ACC = ACC >>1; /*相當于匯編中的 RRC */
66 2 ACC7 = T_IO;
67 2 T_CLK = 1;
68 2 T_CLK = 0;
69 2 }
70 1 return(ACC);
71 1 }
72 /********************************************************************
73
74 函 數 名:W1302()
75 功 能:往dS1302某地址寫入數據
76 說 明:先寫地址,后寫命令/數據 (內部函數)
77 調 用:InputByte1302() , OutputByte1302()
78 入口參數:ucAddr: dS1302地址, ucdata: 要寫的數據
79 返 回 值:無
80 ***********************************************************************/
81 void W1302(unsigned char ucAddr, unsigned char ucda)
82 {
83 1 T_RST = 0;
84 1 T_CLK = 0;
85 1 T_RST = 1;
86 1 InputByte1302(ucAddr); /* 地址,命令 */
87 1 InputByte1302(ucda); /* 寫1Byte數據*/
88 1 T_CLK = 1;
89 1 T_RST = 0;
90 1 }
91 /********************************************************************
92
93 函 數 名:R1302()
94 功 能:讀取dS1302某地址的數據
95 說 明:先寫地址,后讀命令/數據 (內部函數)
96 調 用:InputByte1302() , OutputByte1302()
97 入口參數:ucAddr: dS1302地址
98 返 回 值:ucdata :讀取的數據
99 ***********************************************************************/
100 unsigned char READ1302(unsigned char ucAddr)
101 {
102 1 unsigned char ucdata;
103 1 T_RST = 0;
104 1 T_CLK = 0;
105 1 T_RST = 1;
106 1 InputByte1302(ucAddr); /* 地址,命令 */
107 1 ucdata = OutputByte1302(); /* 讀1Byte數據 */
108 1 T_CLK = 1;
109 1 T_RST = 0;
110 1 return(ucdata);
111 1 }
112 /********************************************************************
113
114 函 數 名:BurstWRITE1302TIME()
115 功 能:往dS1302寫入時鐘數據(多字節方式)
116 說 明:先寫地址,后寫命令/數據
C51 COMPILER V7.50 DS1302 06/05/2008 21:18:58 PAGE 3
117 調 用:InputByte1302()
118 入口參數:pWClock: 時鐘數據地址 格式為: 秒 分 時 日 月 星期 年 控制
119 8Byte (BCd碼)1B 1B 1B 1B 1B 1B 1B 1B
120 返 回 值:無
121 ***********************************************************************/
122 extern void BurstWRITE1302TIME(unsigned char *pWClock)
123 {
124 1 unsigned char i;
125 1 W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作*/
126 1 T_RST = 0;
127 1 T_CLK = 0;
128 1 T_RST = 1;
129 1 InputByte1302(0xbe); /* 0xbe:時鐘多字節寫命令 */
130 1 for (i = 8; i>0; i--) /*8Byte = 7Byte 時鐘數據 + 1Byte 控制*/
131 1 {
132 2 InputByte1302(*pWClock); /* 寫1Byte數據*/
133 2 pWClock++;
134 2 }
135 1 T_CLK = 1;
136 1 T_RST = 0;
137 1 }
138 /********************************************************************
139
140 函 數 名:BurstREAD1302TIME()
141 功 能:讀取dS1302時鐘數據
142 說 明:先寫地址/命令,后讀數據(時鐘多字節方式)
143 調 用:InputByte1302() , OutputByte1302()
144 入口參數:pRClock: 讀取時鐘數據地址 格式為: 秒 分 時 日 月 星期 年
145 7Byte (BCd碼)1B 1B 1B 1B 1B 1B 1B
146 返 回 值:無
147 ***********************************************************************/
148 extern void BurstREAD1302TIME(unsigned char *pRClock)
149 {
150 1 unsigned char i;
151 1 T_RST = 0;
152 1 T_CLK = 0;
153 1 T_RST = 1;
154 1 InputByte1302(0xbf); /* 0xbf:時鐘多字節讀命令 */
155 1 for (i=8; i>0; i--)
156 1 {
157 2 *pRClock = OutputByte1302(); /* 讀1Byte數據 */
158 2 pRClock++;
159 2 }
160 1 T_CLK = 1;
161 1 T_RST = 0;
162 1 }
163 /********************************************************************
164
165 函 數 名:BurstWRITE1302REG()
166 功 能:往dS1302寄存器數寫入數據(多字節方式)
167 說 明:先寫地址,后寫數據(寄存器多字節方式)
168 調 用:InputByte1302()
169 入口參數:pWReg: 寄存器數據地址
170 返 回 值:無
171 ***********************************************************************/
172 extern void BurstWRITE1302REG(unsigned char *pWReg)
173 {
174 1 unsigned char i;
175 1 W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作*/
176 1 T_RST = 0;
177 1 T_CLK = 0;
178 1 T_RST = 1;
C51 COMPILER V7.50 DS1302 06/05/2008 21:18:58 PAGE 4
179 1 InputByte1302(0xfe); /* 0xfe:寄存器多字節寫命令 */
180 1 for (i=31; i>0; i--) /* 31Byte 寄存器數據 */
181 1 {
182 2 InputByte1302(*pWReg); /* 寫1Byte數據*/
183 2 pWReg++;
184 2 }
185 1 T_CLK = 1;
186 1 T_RST = 0;
187 1 }
188 /********************************************************************
189
190 函 數 名:BurstRRITE1302REG()
191 功 能:讀取dS1302寄存器數據
192 說 明:先寫地址,后讀命令/數據(寄存器多字節方式)
193 調 用:InputByte1302() , OutputByte1302()
194 入口參數:pRReg: 寄存器數據地址
195 返 回 值:無
196 ***********************************************************************/
197 extern void BurstR1302REG(unsigned char *pRReg)
198 {
199 1 unsigned char i;
200 1 T_RST = 0;
201 1 T_CLK = 0;
202 1 T_RST = 1;
203 1 InputByte1302(0xff); /* 0xff:寄存器多字節讀命令 */
204 1 for (i=31; i>0; i--) /*31Byte 寄存器數據 */
205 1 {
206 2 *pRReg = OutputByte1302(); /* 讀1Byte數據 */
207 2 pRReg++;
208 2 }
209 1 T_CLK = 1;
210 1 T_RST = 0;
211 1 }
212 /********************************************************************
213
214 函 數 名:Set1302()
215 功 能:設置初始時間
216 說 明:先寫地址,后讀命令/數據(寄存器多字節方式)
217 調 用:W1302()
218 入口參數:pClock: 設置時鐘數據地址 格式為: 秒 分 時 日 月 星期 年
219 7Byte (BCd碼)1B 1B 1B 1B 1B 1B 1B
220 返 回 值:無
221 ***********************************************************************/
222 extern void Set1302(unsigned char *pClock)
223 {
224 1 unsigned char i;
225 1 unsigned char ucAddr = 0x80;
226 1 W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作*/
227 1 for(i =7; i>0; i--)
228 1 {
229 2 W1302(ucAddr,*pClock); /* 秒 分 時 日 月 星期 年 */
230 2 pClock++;
231 2 ucAddr+=2;
232 2 }
233 1 W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護*/
234 1 }
235 /********************************************************************
236
237 函 數 名:Get1302()
238 功 能:讀取dS1302當前時間
239 說 明:
240 調 用:R1302()
C51 COMPILER V7.50 DS1302 06/05/2008 21:18:58 PAGE 5
241 入口參數:ucCurtime: 保存當前時間地址。當前時間格式為: 秒 分 時 日 月 星期 年
242 7Byte (BCd碼) 1B 1B 1B 1B 1B 1B 1B
243 返 回 值:無
244 ***********************************************************************/
245 extern void Get1302(unsigned char ucCurtime[])
246 {
247 1 unsigned char i;
248 1 unsigned char ucAddr = 0x81;
249 1 for (i=0; i<7; i++)
250 1 {
251 2 ucCurtime[i] = READ1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */
252 2 ucAddr += 2;
253 2 }
254 1 }
255
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 303 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -