?? ds1302.lst
字號:
C51 COMPILER V7.50 DS1302 09/20/2008 15:21:11 PAGE 1
C51 COMPILER V7.50, 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 /* 實時時鐘模塊 時鐘芯片型號:DS1302 */
3 /* */
4 /* 外部接口有兩個,分別為v_Set1302()和v_Get1302(), */
5 /* 其參數(shù)的返回值為10進(jìn)制數(shù)據(jù),而非BCD碼,可直接使用 */
6 /* LiuWei 2008-1-15*/
7 /*********************************************************************/
8
9 #include "DS1302.h"
10
11
12 void rtcDelay(unsigned int num)
13 {
14 1 while(num--);
15 1 }
16 /********************************************************************
17 *
18 * 名稱: v_RTInputByte
19 * 說明:
20 * 功能: 往DS1302寫入1Byte數(shù)據(jù)
21 * 調(diào)用:
22 * 輸入: ucDa 寫入的數(shù)據(jù)
23 * 返回值: 無
24 ***********************************************************************/
25 void v_RTInputByte(uchar ucDa)
26 {
27 1 uchar i,Data;
28 1 Data=ucDa;
29 1 for(i=8; i>0; i--)
30 1 {
31 2 if(Data&0x01)
32 2 T_IO=1;
33 2 else
34 2 T_IO=0;
35 2 Data>>=1;
36 2 T_CLK = 1;
37 2 rtcDelay(100);
38 2 T_CLK = 0;
39 2 rtcDelay(100);
40 2
41 2 }
42 1 }
43 /********************************************************************
44 *
45 * 名稱: uchar uc_RTOutputByte
46 * 說明:
47 * 功能: 從DS1302讀取1Byte數(shù)據(jù)
48 * 調(diào)用:
49 * 輸入:
50 * 返回值: ACC
51 ***********************************************************************/
52 uchar uc_RTOutputByte(void)
53 {
54 1 uchar i,tem;
55 1 tem=0;
C51 COMPILER V7.50 DS1302 09/20/2008 15:21:11 PAGE 2
56 1 P2MDOUT=0xfd;
57 1 T_IO=1;
58 1 for(i=8; i>0; i--)
59 1 {
60 2 tem>>=1;
61 2 if(T_IO)
62 2 tem|=0X80;
63 2 T_CLK = 1;
64 2 rtcDelay(100);
65 2 T_CLK = 0;
66 2 rtcDelay(100);
67 2 }
68 1 P2MDOUT=0xff;
69 1 return(tem);
70 1 }
71 /********************************************************************
72 *
73 * 名稱: v_W1302
74 * 說明: 先寫地址,后寫命令/數(shù)據(jù)
75 * 功能: 往DS1302寫入數(shù)據(jù)
76 * 調(diào)用: v_RTInputByte()
77 * 輸入: ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)
78 * 返回值: 無
79 ***********************************************************************/
80 void v_W1302(uchar ucAddr, uchar ucDa)
81 {
82 1 T_RST = 0;
83 1 T_CLK = 0;
84 1 rtcDelay(50);
85 1 T_RST = 1;
86 1
87 1 v_RTInputByte(ucAddr); /* 地址,命令 */
88 1 v_RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/
89 1 T_CLK = 1;
90 1 T_RST =0;
91 1 }
92 /********************************************************************
93 *
94 * 名稱: uc_R1302
95 * 說明: 先寫地址,后讀命令/數(shù)據(jù)
96 * 功能: 讀取DS1302某地址的數(shù)據(jù)
97 * 調(diào)用: v_RTInputByte() , uc_RTOutputByte()
98 * 輸入: ucAddr: DS1302地址
99 * 返回值: ucDa :讀取的數(shù)據(jù)
100 ***********************************************************************/
101 uchar uc_R1302(uchar ucAddr)
102 {
103 1 uchar ucDa;
104 1 P2MDOUT=0xfd;
105 1 T_RST = 0;
106 1 T_CLK = 0;
107 1 rtcDelay(50);
108 1 T_RST = 1;
109 1
110 1 v_RTInputByte(ucAddr); /* 地址,命令 */
111 1 ucDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */
112 1 T_CLK = 1;
113 1 T_RST =0;
114 1 return(ucDa);
115 1 }
116
117 /********************************************************************
C51 COMPILER V7.50 DS1302 09/20/2008 15:21:11 PAGE 3
118 *
119 * 名稱: v_Set1302
120 * 說明:
121 * 功能: 設(shè)置初始時間
122 * 調(diào)用: v_W1302()
123 * 輸入: pSecDa: 初始時間地址。初始時間格式為: 秒 分 時 日 月 星期 年
124 * 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
125 * 返回值: 無
126 ***********************************************************************/
127 void v_Set1302(uchar *pSecDa)
128 {
129 1 uchar i;
130 1 uchar ucAddr = 0x80;
131 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/
132 1 for(i =7;i>0;i--)
133 1 {
134 2 v_W1302(ucAddr,*pSecDa); /* 秒 分 時 日 月 星期 年 */
135 2
136 2 pSecDa++;
137 2 ucAddr +=2;
138 2 }
139 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護(hù)?*/
140 1 }
141 /********************************************************************
142 *
143 * 名稱: v_Get1302
144 * 說明:
145 * 功能: 讀取DS1302當(dāng)前時間
146 * 調(diào)用: uc_R1302()
147 * 輸入: ucCurtime: 保存當(dāng)前時間地址。當(dāng)前時間格式為: 秒 分 時 日 月 星期 年
148 * 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
149 * 返回值: 無
150 ***********************************************************************/
151 void v_Get1302(uchar ucCurtime[])
152 {
153 1 uchar m;
154 1 uchar ucAddr = 0x81;
155 1 for (m=0;m<7;m++)
156 1 {
157 2 ucCurtime[m] = uc_R1302(ucAddr);/*格式為: 秒 分 時 日 月
158 2 星期 年 */
159 2 ucAddr += 2;
160 2 }
161 1
162 1 }
163
164
165 void start1302()
166 {
167 1
168 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/
169 1 v_W1302(0x80,0);
170 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護(hù)?*/
171 1
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 261 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.50 DS1302 09/20/2008 15:21:11 PAGE 4
DATA SIZE = ---- 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -