📄 ds1302.lst
字号:
152 1 }
153
154
155 void WriteRamByte()
156 {
157 1 uchar Address;
158 1 uchar Data;
159 1
160 1 printf("\nWrite RAM Function:");
161 1 printf("\nWrite Ram ADDRESS (HEX):");
162 1 scanf("%bx", &Address); //获取RAM地址
163 1 printf("\nWrite Ram DATA (HEX):");
164 1 scanf("%bx", &Data); //获取RAM数据
165 1
166 1 Address = ((Address * 2) | 0xC0); //RAM数据写入命令
167 1 ResetDS1302(); //复位DS1302
168 1 WriteByteDS1302(Address); //写RAM地址
169 1 WriteByteDS1302(Data); //写RAM数据
170 1 ResetDS1302(); //复位DS1302
171 1 }
172
173
174 void Display(uchar loop)
175 {
176 1 uchar lsec = 99, sec, min, hrs, dte, mon, day, yr;
177 1
178 1 do //主循环
179 1 {
C51 COMPILER V8.08 DS1302 04/19/2008 21:34:32 PAGE 4
180 2 ResetDS1302();
181 2 WriteByteDS1302(0xBF); //以多字节方式读取时钟寄存器数据
182 2 sec = ReadByteDS1302(); //读取秒
183 2 min = ReadByteDS1302(); //读取分
184 2 hrs = ReadByteDS1302(); //读取小时
185 2 dte = ReadByteDS1302(); //读取日期
186 2 mon = ReadByteDS1302(); //读取月份
187 2 day = ReadByteDS1302(); //读取星期
188 2 yr = ReadByteDS1302(); //读取年
189 2 ResetDS1302(); //复位DS1302
190 2 if(sec != lsec || !loop) //每秒显示一次
191 2 { //输出结果
192 3 printf("\nYr Day Mon Dte Hrs Min Sec");
193 3 printf("\n%2.bX %2.bX %2.bX %2.bX", yr, day, mon, dte);
194 3 printf(" %2.bX %2.bX %2.bX", hrs, min, sec);
195 3 lsec = sec;
196 3 }
197 2 if(!loop) break;
198 2 }while(!RI);
199 1 if(loop) _getkey();
200 1 }
201
202
203
204 void BurstReadRAM()
205 {
206 1 uchar DS1302RAM[31]; //RAM数组
207 1 uchar i;
208 1
209 1 ResetDS1302(); //复位DS1302
210 1 WriteByteDS1302(0xFF); //多字节方式读取RAM
211 1 for (i=0; i<31; ++i)
212 1 {
213 2 DS1302RAM[i] = ReadByteDS1302(); //保存数据到RAM数组
214 2 }
215 1 ResetDS1302(); //复位DS1302
216 1
217 1 printf("\nDS1302 RAM Data;"); //输出片内RAM的数据
218 1
219 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
220 1 DS1302RAM[0], DS1302RAM[1], DS1302RAM[2], DS1302RAM[3],
221 1 DS1302RAM[4], DS1302RAM[5], DS1302RAM[6], DS1302RAM[7]);
222 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
223 1 DS1302RAM[8], DS1302RAM[9], DS1302RAM[10], DS1302RAM[11],
224 1 DS1302RAM[12], DS1302RAM[13], DS1302RAM[14], DS1302RAM[15]);
225 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
226 1 DS1302RAM[16], DS1302RAM[17], DS1302RAM[18], DS1302RAM[19],
227 1 DS1302RAM[20], DS1302RAM[21], DS1302RAM[22], DS1302RAM[23]);
228 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
229 1 DS1302RAM[24], DS1302RAM[25], DS1302RAM[26], DS1302RAM[27],
230 1 DS1302RAM[28], DS1302RAM[29], DS1302RAM[30]);
231 1
232 1 printf("\nEND RAM Data;");
233 1 }
234
235
236 void BurstWriteRAM()
237 {
238 1 uchar Data;
239 1 uchar i;
240 1
241 1 printf("\nWrite Ram DATA (HEX):");
C51 COMPILER V8.08 DS1302 04/19/2008 21:34:32 PAGE 5
242 1 scanf("%bx", &Data); //获取RAM数据
243 1
244 1 ResetDS1302(); //复位DS1302
245 1 WriteByteDS1302(0xfe); //多字节方式写入RAM
246 1 for (i=0; i<31; ++i) //循环写入
247 1 {
248 2 WriteByteDS1302(Data);
249 2 }
250 1 ResetDS1302(); //复位DS1302
251 1 }
252
253
254 void InitDS1302()
255 {
256 1 uchar year, month, date, day, hour, minute, second;
257 1
258 1 printf("\nEnter the Clock information: ");
259 1 printf("\nPlease Enter the year (0-99): "); //输入年
260 1 scanf("%bx", &year);
261 1 printf("\n Please Enter the month (1-12): "); //输入月
262 1 scanf("%bx", &month);
263 1 printf("\n Please Enter the date (1-31): "); //输入日
264 1 scanf("%bx", &date);
265 1 printf("\n Please Enter the day (1-7): "); //输入星期
266 1 scanf("%bx", &day);
267 1 printf("\n Please Enter the hour (1-24): "); //输入小时
268 1 scanf("%bx", &hour);
269 1 hour =hour & 0x3f; //设置时钟为24小时方式
270 1 printf("\n Please Enter the minute (0-59): "); //输入分钟
271 1 scanf("%bx", &minute);
272 1 printf("\n Please Enter the second (0-59): "); //输入秒
273 1 scanf("%bx", &second);
274 1
275 1 ResetDS1302(); //复位DS1302
276 1 WriteByteDS1302(0x8e); //写保护控制寄存器
277 1 WriteByteDS1302(0); //允许写入
278 1
279 1 ResetDS1302(); //复位DS1302
280 1 WriteByteDS1302(0x90); //涓流充电寄存器
281 1 WriteByteDS1302(0xab); //允许充电
282 1
283 1 ResetDS1302(); //复位DS1302
284 1 WriteByteDS1302(0xbe); //以多字节突发方式写入8个字节时钟数据
285 1 WriteByteDS1302(second); //写入秒
286 1 WriteByteDS1302(minute); //写入分钟
287 1 WriteByteDS1302(hour); //写入小时
288 1 WriteByteDS1302(date); //写入星期
289 1 WriteByteDS1302(month); //写入月
290 1 WriteByteDS1302(day); //写入日
291 1 WriteByteDS1302(year); //写入年
292 1 WriteByteDS1302(0); //对写保护控制寄存器写入0
293 1 ResetDS1302(); //复位DS1302
294 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1067 ----
CONSTANT SIZE = 862 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 51
IDATA SIZE = ---- ----
C51 COMPILER V8.08 DS1302 04/19/2008 21:34:32 PAGE 6
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 + -