📄 main_uart.lst
字号:
188 ***********************************************************************/
189 uchar uc_R1302(uchar ucAddr)
190 {
191 1 uchar ucDa;
192 1 T_RST = 0;
193 1 T_CLK = 0;
194 1 T_RST = 1;
195 1 v_RTInputByte(ucAddr); /* 地址,命令 */
196 1 ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
197 1 T_CLK = 1;
198 1 T_RST =0;
199 1 return(ucDa);
200 1 }
201
202 /********************************************************************
203 *
204 * 名称: v_BurstW1302T
205 * 说明: 先写地址,后写数据(时钟多字节方式)
206 * 功能: 往DS1302写入时钟数据(多字节方式)
207 * 调用: v_RTInputByte()
208 * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
209 * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
210 * 返回值: 无
211 ***********************************************************************/
212 /*
213 void v_BurstW1302T(uchar *pSecDa)
214 {
215 uchar i;
216 v_W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
217 T_RST = 0;
218 T_CLK = 0;
219 T_RST = 1;
220 v_RTInputByte(0xbe); // 0xbe:时钟多字节写命令
221 for (i=8;i>0;i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
222 {
223 v_RTInputByte(*pSecDa);// 写1Byte数据
224 pSecDa++;
225 }
226 T_CLK = 1;
227 T_RST =0;
228 }
229 */
230 /********************************************************************
231 *
232 * 名称: v_BurstR1302T
233 * 说明: 先写地址,后读命令/数据(时钟多字节方式)
234 * 功能: 读取DS1302时钟数据
235 * 调用: v_RTInputByte() , uc_RTOutputByte()
236 * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
237 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
238 * 返回值: ucDa :读取的数据
239 ***********************************************************************/
240 /*
241 void v_BurstR1302T(uchar *pSecDa)
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 5
242 {
243 uchar i;
244 T_RST = 0;
245 T_CLK = 0;
246 T_RST = 1;
247 v_RTInputByte(0xbf); // 0xbf:时钟多字节读命令
248 for (i=8; i>0; i--)
249 {
250 *pSecDa = uc_RTOutputByte(); // 读1Byte数据
251 pSecDa++;
252 }
253 T_CLK = 1;
254 T_RST =0;
255 }
256 */
257 /********************************************************************
258 *
259 * 名称: v_BurstW1302R
260 * 说明: 先写地址,后写数据(寄存器多字节方式)
261 * 功能: 往DS1302寄存器数写入数据(多字节方式)
262 * 调用: v_RTInputByte()
263 * 输入: pReDa: 寄存器数据地址
264 * 返回值: 无
265 ***********************************************************************/
266 /*
267 void v_BurstW1302R(uchar *pReDa)
268 {
269 uchar i;
270 v_W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
271 T_RST = 0;
272 T_CLK = 0;
273 T_RST = 1;
274 v_RTInputByte(0xfe); // 0xbe:时钟多字节写命令
275 for (i=31;i>0;i--) //31Byte 寄存器数据
276 {
277 v_RTInputByte(*pReDa); // 写1Byte数据
278 pReDa++;
279 }
280 T_CLK = 1;
281 T_RST =0;
282 }
283 */
284 /********************************************************************
285 *
286 * 名称: uc_BurstR1302R
287 * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
288 * 功能: 读取DS1302寄存器数据
289 * 调用: v_RTInputByte() , uc_RTOutputByte()
290 * 输入: pReDa: 寄存器数据地址
291 * 返回值: 无
292 ***********************************************************************/
293 /*
294 void v_BurstR1302R(uchar *pReDa)
295 {
296 uchar i;
297 T_RST = 0;
298 T_CLK = 0;
299 T_RST = 1;
300 v_RTInputByte(0xff); // 0xbf:时钟多字节读命令
301 for (i=31; i>0; i--) //31Byte 寄存器数据
302 {
303 *pReDa = uc_RTOutputByte(); // 读1Byte数据
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 6
304 pReDa++;
305 }
306 T_CLK = 1;
307 T_RST =0;
308 }
309 */
310
311 /********************************************************************
312 *
313 * 名称: v_Set1302
314 * 说明:
315 * 功能: 设置初始时间
316 * 调用: v_W1302()
317 * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
318 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
319 * 返回值: 无
320 ***********************************************************************/
321 void v_Set1302(uchar *pSecDa)
322 {
323 1 uchar i;
324 1 uchar ucAddr = 0x80;
325 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
326 1 for(i =7;i>0;i--)
327 1 {
328 2 v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
329 2
330 2 pSecDa++;
331 2 ucAddr +=2;
332 2 }
333 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
334 1 }
335
336
337 /********************************************************************
338 *
339 * 名称: v_Get1302
340 * 说明:
341 * 功能: 读取DS1302当前时间
342 * 调用: uc_R1302()
343 * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
344 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
345 * 返回值: 无
346 ***********************************************************************/
347 void v_Get1302(uchar ucCurtime[])
348 {
349 1 uchar i;
350 1 uchar ucAddr = 0x81;
351 1 for (i=0;i<7;i++)
352 1 {
353 2 ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
354 2 ucAddr += 2;
355 2 }
356 1 }
357 void Set_ReadAddress(uchar pSecDa[])
358 {
359 1 uchar i;
360 1
361 1 uchar ucAddr = 0xC0; //写在时钟RAM的头部
362 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
363 1 for(i = 0;i<4;i++)
364 1 {
365 2 v_W1302(ucAddr,pSecDa[i]);
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 7
366 2 ucAddr +=2;
367 2 }
368 1
369 1 ucAddr = 0xEE; //写在时钟RAM的尾部
370 1 for( i = 0 ; i < 4 ; i ++ )
371 1 {
372 2 v_W1302(ucAddr,pSecDa[i]);
373 2 ucAddr +=2;
374 2 }
375 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
376 1 }
377
378 void Get_ReadAddress(uchar pSecDa[] )
379 {
380 1 uchar i;
381 1 uchar Temp[2];
382 1 uchar ucAddr = 0xC1; //读取时钟RAM的头部
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -