ds1302.lst
来自「STC51系列的源码」· LST 代码 · 共 309 行 · 第 1/2 页
LST
309 行
142
143 /********************************************************************************/
144 /* funname : DS1302_read_8_bit() */
145 /* created : xillinx */
146 /* time : 2008-08-06 */
147 /* descript: 读取8位数据 */
148 /********************************************************************************/
149 unsigned char DS1302_read_8_bit(void)
150 { unsigned char i,mdata=0x0;
151 1 DS1302_set_dat(0x1);
152 1 for(i=0x0; i<0x8; i++)
153 1 { mdata >>=0x1;
154 2 DS1302_delay_min();
155 2 if(DS1302_get_dat()==0x1)
156 2 { mdata|=0x80;
157 3 }
158 2 DS1302_set_clk(0x1);
159 2 DS1302_delay_max();
160 2 DS1302_set_clk(0x0);
161 2
162 2 DS1302_delay_min();
163 2 }
164 1 return mdata;
165 1 }
166
167 /********************************************************************************/
168 /* funname : DS1302_read_byte() */
169 /* created : xillinx */
170 /* time : 2008-08-06 */
171 /* descript: 读DS1302字节 */
172 /********************************************************************************/
173 unsigned char DS1302_read_byte(unsigned char address)
174 { unsigned char mdata=0x0;
175 1 DS1302_open(); //* 打开DS1302
176 1 DS1302_write_8_bit(address|0x1);//* 写入DS1302命令
177 1 mdata=DS1302_read_8_bit(); //* 读入DS1302数据
178 1 DS1302_close(); //* 关闭DS1302
C51 COMPILER V8.02 DS1302 09/25/2008 18:46:20 PAGE 4
179 1 return mdata; //* 返回数据
180 1 }
181
182 /********************************************************************************/
183 /* funname : DS1302_write_byte() */
184 /* created : xillinx */
185 /* time : 2008-08-06 */
186 /* descript: 写DS1302字节 */
187 /********************************************************************************/
188 void DS1302_write_byte(unsigned char address, unsigned char mdata)
189 { DS1302_open(); //* 打开DS1302
190 1 DS1302_write_8_bit(address);//* 写地址
191 1 DS1302_write_8_bit(mdata); //* 写数据
192 1 DS1302_close(); //* 关闭DS1302
193 1 }
194
195 /********************************************************************************/
196 /* funname : DS1302_read_ram_byte() */
197 /* created : xillinx */
198 /* time : 2008-08-06 */
199 /* descript: 读DS1302的RAM字节 */
200 /********************************************************************************/
201 unsigned char DS1302_read_ram_byte(unsigned char address)
202 { unsigned char mdata;
203 1 DS1302_open(); //* 打开DS1302
204 1 DS1302_write_8_bit((address<<0x1)|0xC1); //* 写入DS1302命令
205 1 mdata=DS1302_read_8_bit(); //* 读入DS1302数据
206 1 DS1302_close(); //* 关闭DS1302
207 1 return mdata;
208 1 }
209
210 /********************************************************************************/
211 /* funname : DS1302_read_ram_byte() */
212 /* created : xillinx */
213 /* time : 2008-08-06 */
214 /* descript: 写DS1302的RAM字节 */
215 /********************************************************************************/
216 void DS1302_write_ram_byte(unsigned char address, unsigned char mdata)
217 { DS1302_open();
218 1 DS1302_write_8_bit((address<<0x1)|0xC0);
219 1 DS1302_write_8_bit(mdata);
220 1 DS1302_close();
221 1 }
222
223 /********************************************************************************/
224 /* funname : DS1302_set_protect() */
225 /* created : xillinx */
226 /* time : 2008-08-06 */
227 /* descript: DS1302是否写保护 */
228 /********************************************************************************/
229 void DS1302_set_protect(unsigned char flag)
230 { if(flag)
231 1 { DS1302_write_byte(DS1302_CONTROL,0x80); //* 0x8E 控制字节地址,bit7=WP WP=1 禁止数据写入DS1302
232 2 }
233 1 else
234 1 { DS1302_write_byte(DS1302_CONTROL,0x00); //* WP=0 允许写入DS1302
235 2 }
236 1 }
237
238 /********************************************************************************/
239 /* funname : DS1302_start() */
240 /* created : xillinx */
C51 COMPILER V8.02 DS1302 09/25/2008 18:46:20 PAGE 5
241 /* time : 2008-08-06 */
242 /* descript: DS1302开始工作 */
243 /********************************************************************************/
244 void DS1302_start(void)
245 { unsigned char mdata;
246 1 mdata =DS1302_read_byte(DS1302_SECOND);//* 读秒数据
247 1 mdata&=0x7F; //* 打开晶振
248 1 DS1302_set_protect(0x0); //* 开放DS1302写保护
249 1 DS1302_write_byte(DS1302_SECOND,mdata);//打开晶振
250 1 DS1302_set_protect(0x1); //使能DS1302写保护
251 1 }
252
253 /********************************************************************************/
254 /* funname : DS1302_get_time() */
255 /* created : xillinx */
256 /* time : 2008-08-06 */
257 /* descript: DS1302开始工作 */
258 /********************************************************************************/
259 void DS1302_get_time(void)
260 { unsigned char mdata;
261 1 memset(&DS1302_time,0x0,sizeof(st_ds1302_time));
262 1 mdata = DS1302_read_byte(DS1302_SECOND);
263 1 DS1302_time.second = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
264 1 mdata = DS1302_read_byte(DS1302_MINUTE);
265 1 DS1302_time.minute = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
266 1 mdata = DS1302_read_byte(DS1302_HOUR);
267 1 DS1302_time.hour = ((mdata&0x10)>>4)*10 + (mdata&0x0F);
268 1 mdata = DS1302_read_byte(DS1302_DAY);
269 1 DS1302_time.day = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
270 1 mdata = DS1302_read_byte(DS1302_WEEK);
271 1 DS1302_time.week = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
272 1 mdata = DS1302_read_byte(DS1302_MONTH);
273 1 DS1302_time.month = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
274 1 mdata = DS1302_read_byte(DS1302_YEAR);
275 1 DS1302_time.year = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
276 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 525 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 9 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?