?? ds1302.lst
字號:
171 1 Write(); //對DS1302寫命令字和地址
172 1 ds1302_dat = 1;
173 1 for(a=0;a<size;a++) //讀出DS1302數據
174 1 {
175 2 ACC_0 = ds1302_dat;
176 2 ds1302_clk = 1; ds1302_clk = 0; ACC_1 = ds1302_dat;
177 2 ds1302_clk = 1; ds1302_clk = 0; ACC_2 = ds1302_dat;
178 2 ds1302_clk = 1; ds1302_clk = 0; ACC_3 = ds1302_dat;
179 2 ds1302_clk = 1; ds1302_clk = 0; ACC_4 = ds1302_dat;
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 4
180 2 ds1302_clk = 1; ds1302_clk = 0; ACC_5 = ds1302_dat;
181 2 ds1302_clk = 1; ds1302_clk = 0; ACC_6 = ds1302_dat;
182 2 ds1302_clk = 1; ds1302_clk = 0; ACC_7 = ds1302_dat;
183 2 b = ACC;
184 2 *(buffer+a)=b;
185 2 ds1302_clk = 1; ds1302_clk = 0;
186 2 }
187 1 ds1302_rst = 0;
188 1 ds1302_clk = 1;
189 1 }
190
191 void WriteRam(uchar data * buffer,uchar size) //向RAM中寫入多個字節
192 {
193 1 register uchar a;
194 1 ds1302_clk = 0;
195 1 ds1302_rst = 0;
196 1 ds1302_rst = 1;
197 1 ACC = 0xfe; //命令字為FE
198 1 Write(); //對DS1302寫命令字和地址
199 1 for(a=0;a<size;a++)
200 1 {
201 2 ACC = *(buffer+a);
202 2 Write(); //對DS1302寫數據
203 2 }
204 1 ds1302_rst = 0;
205 1 ds1302_clk = 1;
206 1 }
207
208 void WriteRTC(uchar data * buffer,uchar size) //向DS1302中寫入多個字節
209 {//注意:連續寫DS1302只能是8個字節一起寫
210 1 register uchar a;
211 1 ds1302_clk = 0;
212 1 ds1302_rst = 0;
213 1 ds1302_rst = 1;
214 1 ACC = 0xbe; //命令字為BEH
215 1 Write(); //對DS1302寫命令字和地址
216 1 for(a=0;a<size;a++)
217 1 {
218 2 ACC = *(buffer+a);
219 2 Write(); //對DS1302寫數據
220 2 }
221 1 ds1302_rst = 0;
222 1 ds1302_clk = 1;
223 1 }
224
225 uchar ReadSec(void) //從DS1302中讀出秒字節
226 {
227 1 return ReadRTC_Byte(0x81);
228 1 }
229
230 uchar ReadMin(void) //從DS1302中讀出分字節
231 {
232 1 return ReadRTC_Byte(0x83);
233 1 }
234
235 uchar ReadHr(void) //從DS1302中讀出時字節
236 {
237 1 return ReadRTC_Byte(0x85);
238 1 }
239
240 uchar ReadDay(void) //從DS1302中讀出日字節
241 {
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 5
242 1 return ReadRTC_Byte(0x87);
243 1 }
244
245 uchar ReadMonth(void) //從DS1302中讀出月字節
246 {
247 1 return ReadRTC_Byte(0x89);
248 1 }
249
250 uchar ReadWeek(void) //從DS1302中讀出星期字節
251 {
252 1 return ReadRTC_Byte(0x8B);
253 1 }
254
255 uchar ReadYear(void) //從DS1302中讀出年字節
256 {
257 1 return ReadRTC_Byte(0x8D);
258 1 }
259
260 void WriteSec(uchar number) //向DS1302中寫入秒字節
261 {
262 1 WriteRTC_Byte(0x80,number);
263 1 }
264
265 void WriteMin(uchar number) //向DS1302中寫入分字節
266 {
267 1 WriteRTC_Byte(0x82,number);
268 1 }
269
270 void WriteHr(uchar number) //向DS1302中寫入時字節
271 {
272 1 WriteRTC_Byte(0x84,number);
273 1 }
274
275 void WriteDay(uchar number) //向DS1302中寫入日字節
276 {
277 1 WriteRTC_Byte(0x86,number);
278 1 }
279
280 void WriteMonth(uchar number) //向DS1302中寫入月字節
281 {
282 1 WriteRTC_Byte(0x88,number);
283 1 }
284
285 void WriteWeek(uchar number) //向DS1302中寫入星期字節
286 {
287 1 WriteRTC_Byte(0x8A,number);
288 1 }
289
290 void WriteYear(uchar number) //向DS1302中寫入年字節
291 {
292 1 WriteRTC_Byte(0x8C,number);
293 1 }
294
295 void WriteControl(uchar number) //向慢速充電控制寄存器寫入控制字節
296 {
297 1 WriteRTC_Byte(0x90,number);
298 1 }
299
300 void DisableWP(void) //禁止寫保護
301 {
302 1 WriteRTC_Byte(0x8E,0);
303 1 }
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 6
304
305 void EnableWP(void) //允許寫保護
306 {
307 1 WriteRTC_Byte(0x8E,0x80);
308 1 }
309
310 void main(void) //主程序
311 {
312 1 uchar sec,min,hr,day,month,week,year;
313 1 uchar data buffer1[32] =
314 1 {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
315 1 uchar data buffer2[8] = {45,45,15,13,3,2,01,0};
316 1 ReadRTC(buffer2,8);
317 1 DisableWP(); //禁止寫保護
318 1 WriteControl(0xaa); //向慢速充電控制寄存器寫入控制字節
319 1 WriteRam(buffer1,31); //寫DS1302RAM
320 1 WriteRTC(buffer2,8); //寫DS1302時鐘
321 1 EnableWP(); //允許寫保護
322 1 ReadRam(buffer1,31); //讀DS1302RAM
323 1 ReadRTC(buffer2,8); //讀DS1302時鐘
324 1 sec = ReadSec(); //讀秒
325 1 min = ReadMin(); //讀分
326 1 hr = ReadHr(); //讀小時
327 1 day = ReadDay(); //讀日
328 1 month = ReadMonth(); //讀月
329 1 week = ReadWeek(); //讀星期
330 1 year = ReadYear(); //讀年
331 1 ACC = 0;
332 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 678 ----
CONSTANT SIZE = 40 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 47
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 + -