📄 ds1302.lst
字号:
C51 COMPILER V8.08 DS1302 01/11/2009 23:45:34 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<DS1302.h>
2 #include<reg52.h>
3
4 sbit ACC0 =ACC^0;
5 sbit ACC7 = ACC^7;
6 sbit DS_CLK = P1^0;
7 sbit DS_IO = P1^1;
8 sbit DS_RST = P1^2;
9
10 /********************************************************************
11 函 数 名:RTInputByte()
12 功 能:实时时钟写入一字节
13 说 明:往DS1302写入1Byte数据 (内部函数)
14 入口参数:d 写入的数据
15 返 回 值:无
16 ***********************************************************************/
17 void RTInputByte(uchar d)
18 {
19 1 uchar i;
20 1 ACC = d;
21 1 for(i=8; i>0; i--)
22 1 {
23 2 DS_IO = ACC0; /*相当于汇编中的 RRC */
24 2 DS_CLK = 1;
25 2 DS_CLK = 0;
26 2 ACC = ACC >> 1;
27 2 }
28 1 }
29 /********************************************************************
30 函 数 名:RTOutputByte()
31 功 能:实时时钟读取一字节
32 说 明:从DS1302读取1Byte数据 (内部函数)
33 入口参数:无
34 返 回 值:ACC
35 设 计:zhaojunjie 日 期:2002-03-19
36 修 改: 日 期:
37 ***********************************************************************/
38 uchar RTOutputByte(void)
39 {
40 1 uchar i;
41 1 for(i=8; i>0; i--)
42 1 {
43 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
44 2 ACC7 = DS_IO;
45 2 DS_CLK = 1;
46 2 DS_CLK = 0;
47 2 }
48 1 return(ACC);
49 1 }
50 /********************************************************************
51 函 数 名:W1302()
52 功 能:往DS1302写入数据
53 说 明:先写地址,后写命令/数据 (内部函数)
54 调 用:RTInputByte() , RTOutputByte()
55 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
C51 COMPILER V8.08 DS1302 01/11/2009 23:45:34 PAGE 2
56 返 回 值:无
57 ***********************************************************************/
58 void W1302(uchar ucAddr, uchar ucDa)
59 {
60 1 DS_RST = 0;
61 1 DS_CLK = 0;
62 1 DS_RST = 1;
63 1 RTInputByte(ucAddr); /* 地址,命令 */
64 1 RTInputByte(ucDa); /* 写1Byte数据*/
65 1 DS_CLK = 1;
66 1 DS_RST = 0;
67 1 }
68 /********************************************************************
69 函 数 名:R1302()
70 功 能:读取DS1302某地址的数据
71 说 明:先写地址,后读命令/数据 (内部函数)
72 调 用:RTInputByte() , RTOutputByte()
73 入口参数:ucAddr: DS1302地址
74 返 回 值:ucData :读取的数据
75 ***********************************************************************/
76 uchar R1302(uchar ucAddr)
77 {
78 1 uchar ucData;
79 1 DS_RST = 0;
80 1 DS_CLK = 0;
81 1 DS_RST = 1;
82 1 RTInputByte(ucAddr); /* 地址,命令 */
83 1 ucData = RTOutputByte(); /* 读1Byte数据 */
84 1 DS_CLK = 1;
85 1 DS_RST = 0;
86 1 return(ucData);
87 1 }
88
89 /********************************************************************
90 函 数 名:Set1302()
91 功 能:设置初始时间
92 说 明:先写地址,后读命令/数据(寄存器多字节方式)
93 调 用:W1302()
94 入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
95 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
96 返 回 值:无
97 ***********************************************************************/
98 void Set1302(uchar *pClock)
99 {
100 1 uchar i;
101 1 uchar ucAddr = 0x80;
102 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
103 1 for(i =7; i>0; i--)
104 1 {
105 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
106 2 pClock++;
107 2 ucAddr +=2;
108 2 }
109 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/
110 1 }
111 /*
112 void Get1302(uchar *pTime)
113 {
114 uchar i;
115 uchar ucAddr = 0x81;
116 for(i=7;i>0;i--)
117 {
C51 COMPILER V8.08 DS1302 01/11/2009 23:45:34 PAGE 3
118 *pTime=R1302(ucAddr);
119 pTime++;
120 ucAddr+=2;
121 }
122 }
123 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 105 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -