📄 ds1302.lst
字号:
C51 COMPILER V8.08 DS1302 07/29/2008 20:05:45 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //亦木明
2 //哪天写的忘了。^_^
3 #include <reg52.h>
4 //#include "ds1302.h"
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 #define SECOND 0x80 //秒
10 #define MINUTE 0x82 //分鍾
11 #define HOUR 0x84 //小時
12 #define DAY 0x86 //天
13 #define MONTH 0x88 //月
14 #define WEEK 0x8a //星期
15 #define YEAR 0x8c //年
16
17 sbit DS1302_RST=P3^0;
18 sbit DS1302_SCLK=P3^1;
19 sbit DS1302_IO=P3^2;
20
21 typedef struct systime
22 {
23 uchar cYear;
24 uchar cMon;
25 uchar cDay;
26 uchar cHour;
27 uchar cMin;
28 uchar cSec;
29 uchar cWeek;
30 }SYSTIME;
31
32 void DS1302_Write(uchar D)
33 {
34 1 uchar i;
35 1 for(i=0;i<8;i++)
36 1 {
37 2 DS1302_IO=D&0x01;
38 2 DS1302_SCLK=1;
39 2 DS1302_SCLK=0;
40 2 D=D>>1;
41 2 }
42 1 }
43
44 uchar DS1302_Read()
45 {
46 1 uchar TempDat=0,i;
47 1 for(i=0;i<8;i++)
48 1 {
49 2 TempDat>>=1;
50 2 if(DS1302_IO) TempDat=TempDat|0x80;
51 2 DS1302_SCLK=1;
52 2 DS1302_SCLK=0;
53 2
54 2 }
55 1 return TempDat;
C51 COMPILER V8.08 DS1302 07/29/2008 20:05:45 PAGE 2
56 1 }
57
58 void WDS1302(uchar ucAddr, uchar ucDat)
59 {
60 1 DS1302_RST = 0;
61 1 DS1302_SCLK = 0;
62 1 DS1302_RST = 1;
63 1 DS1302_Write(ucAddr); // 地址,命令
64 1 DS1302_Write(ucDat); // 写1Byte数据
65 1 DS1302_SCLK = 1;
66 1 DS1302_RST = 0;
67 1 }
68
69 uchar RDS1302(uchar ucAddr)
70 {
71 1 uchar ucDat;
72 1 DS1302_RST = 0;
73 1 DS1302_SCLK = 0;
74 1 DS1302_RST = 1;
75 1 DS1302_Write(ucAddr); // 地址,命令
76 1 ucDat=DS1302_Read();
77 1 DS1302_SCLK = 1;
78 1 DS1302_RST = 0;
79 1 return ucDat;
80 1 }
81
82 void SetTime(SYSTIME sys)
83 {
84 1
85 1 WDS1302(YEAR,sys.cYear);
86 1 WDS1302(MONTH,sys.cMon&0x1f);
87 1 WDS1302(DAY,sys.cDay&0x3f);
88 1 WDS1302(HOUR,sys.cHour&0xbf);
89 1 WDS1302(MINUTE,sys.cMin&0x7f);
90 1 WDS1302(SECOND,sys.cSec&0x7f);
91 1 WDS1302(WEEK,sys.cWeek&0x07);
92 1
93 1 }
94
95 void GetTime(SYSTIME *sys)
96 {
97 1 uchar uiTempDat;
98 1 uiTempDat=RDS1302(YEAR|0x01);
99 1 (*sys).cYear=(uiTempDat>>4)*10+(uiTempDat&0x0f);
100 1
101 1 // uiTempDat=RDS1302(0x88|0x01);
102 1 // (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);
103 1 uiTempDat=RDS1302(0x88|0x01);
104 1 (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);
105 1
106 1 uiTempDat=RDS1302(DAY|0x01);
107 1 (*sys).cDay=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);
108 1
109 1 uiTempDat=RDS1302(HOUR|0x01);
110 1 (*sys).cHour=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);
111 1
112 1 uiTempDat=RDS1302(MINUTE|0x01);
113 1 sys->cMin=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);
114 1
115 1 uiTempDat=RDS1302(SECOND|0x01);
116 1 sys->cSec=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);
117 1
C51 COMPILER V8.08 DS1302 07/29/2008 20:05:45 PAGE 3
118 1 uiTempDat=RDS1302(MONTH|0x01);
119 1 (*sys).cMon=uiTempDat&0x17;
120 1
121 1 uiTempDat=RDS1302(WEEK|0x01);
122 1 sys->cWeek=uiTempDat&0x07;
123 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 317 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
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 + -