📄 ds1307.lst
字号:
C51 COMPILER V7.04 DS1307 03/04/2006 08:52:54 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE DS1307
OBJECT MODULE PLACED IN DS1307.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1307.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "ds1307.h"
2 #include "viic.h"
3 #include <string.h>
4
5
6
7 extern uchar g_valuearr[8];
8
9 //读写任意位置ram
10 uchar Ds1307ReadRam(uchar addr,uchar *Buffer,uchar Length);
11 uchar Ds1307WriteRam(uchar addr,uchar *Buffer,uchar Length);
12
13 //初始化时钟芯片
14 uchar Ds1307Init(void);
15
16 //声音及模式
17 uchar ReadSpeakMode(uchar *mode);
18 uchar SetSpeakMode(uchar mode);
19 uchar open_speak();
20 uchar close_speak();
21
22 //读写时间信息
23 //time[]={century year month day hour minute seconds week}
24 uchar read_alltime(uchar *time);
25 //time[]={century year month day hour minute seconds week}
26 uchar write_alltime(uchar *time);
27
28
29
30 uchar Ds1307ReadRam(uchar addr,uchar *Buffer,uchar Length)
31 {
32 1 if(IRcvStr(DS1307_DEVICEADDR,addr,Buffer,Length))
33 1 {
34 2 return ID_OK;
35 2 }
36 1 else
37 1 {
38 2 return ID_ERR;
39 2 }
40 1
41 1 }
42 uchar Ds1307WriteRam(uchar addr,uchar *Buffer,uchar Length)
43 {
44 1
45 1 if(ISendStr(DS1307_DEVICEADDR,addr,Buffer,Length))
46 1 {
47 2 return ID_OK;
48 2 }
49 1 else
50 1 {
51 2 return ID_ERR;
52 2 }
53 1
54 1 }
55
C51 COMPILER V7.04 DS1307 03/04/2006 08:52:54 PAGE 2
56
57 uchar Ds1307Init(void)
58 {
59 1 idata uchar strTemp[8];
60 1
61 1 if(Ds1307ReadRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
62 1
63 1 //初始化控制字
64 1 strTemp[0]=(strTemp[0]&0x03);//SQW,OUT
65 1 if(Ds1307WriteRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
66 1
67 1 return ID_OK;
68 1
69 1 }
70
71
72 //time[]={century year month day hour minute seconds week}
73 uchar read_alltime(uchar *time)
74 {
75 1
76 1
77 1 idata uchar strTemp[8];
78 1
79 1 if(Ds1307ReadRam(0x00,strTemp,7)!=ID_OK)return ID_ERR;
80 1
81 1 memcpy(g_valuearr,strTemp,7);
82 1
83 1 time[0]=0X20; //CENTURY ;
84 1 time[1]=strTemp[6]; //year
85 1 time[2]=strTemp[5]; //mon
86 1 time[3]=strTemp[4]; //day
87 1 time[4]=(strTemp[2]&0x3f); //hour
88 1 time[5]=(strTemp[1]&0x7f); //min
89 1 time[6]=(strTemp[0]&0x7f); //sec
90 1 time[7]=strTemp[3]; //week
91 1
92 1
93 1
94 1 return ID_OK ;
95 1
96 1 }
97
98 //time[]={century year month day hour minute seconds week}
99 uchar write_alltime(uchar *time)
100 {
101 1
102 1
103 1 idata uchar strTemp[8];
104 1
105 1 //关掉crystal
106 1 //if(Ds1307ReadRam(0x00,strTemp,1)!=ID_OK)return ID_ERR;
107 1 //strTemp[0]=(strTemp[0]|0x80); //CH关掉
108 1 //if(Ds1307WriteRam(0x00,strTemp,1)!=ID_OK)return ID_ERR;
109 1
110 1
111 1 //构造数据
112 1 strTemp[6]=time[1]; //year
113 1 strTemp[5]=time[2]; //mon
114 1 strTemp[4]=time[3]; //day
115 1 strTemp[2]=time[4]; //hour
116 1 strTemp[1]=time[5]; //min
117 1 strTemp[0]=time[6]; //sec
C51 COMPILER V7.04 DS1307 03/04/2006 08:52:54 PAGE 3
118 1 strTemp[3]=time[7]; //week
119 1
120 1 //写时钟
121 1 strTemp[0]=(strTemp[0]&0x7f);//写同时开时钟
122 1 if(Ds1307WriteRam(0x00,strTemp,7)!=ID_OK)return ID_ERR;
123 1
124 1
125 1 return ID_OK ;
126 1
127 1 }
128
129 uchar ReadSpeakMode(uchar *mode)
130 {
131 1
132 1 xdata uchar strTemp[8];
133 1
134 1 if(Ds1307ReadRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
135 1 *mode=(strTemp[0]&0x03);
136 1
137 1 return ID_OK ;
138 1
139 1 }
140
141 uchar SetSpeakMode(uchar mode)
142 {
143 1
144 1 xdata uchar strTemp[8];
145 1
146 1 if(Ds1307ReadRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
147 1 strTemp[0]=(strTemp[0]&0xfc)+mode;
148 1 if(Ds1307WriteRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
149 1 return ID_OK ;
150 1
151 1 }
152
153 uchar open_speak()
154 {
155 1 xdata uchar strTemp[8];
156 1
157 1 if(Ds1307ReadRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
158 1 strTemp[0] |= 0x10;
159 1 if(Ds1307WriteRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
160 1 return ID_OK ;
161 1
162 1 }
163 uchar close_speak()
164 {
165 1
166 1 xdata uchar strTemp[8];
167 1
168 1 if(Ds1307ReadRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
169 1 strTemp[0] &= 0xef;
170 1 if(Ds1307WriteRam(0x07,strTemp,1)!=ID_OK)return ID_ERR;
171 1 return ID_OK ;
172 1
173 1 }
174
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 470 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V7.04 DS1307 03/04/2006 08:52:54 PAGE 4
XDATA SIZE = ---- 32
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
IDATA SIZE = ---- 24
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 + -