124 lines
4.0 KiB
Plaintext
124 lines
4.0 KiB
Plaintext
|
C51 COMPILER V9.60.7.0 DS1302 03/10/2025 18:03:53 PAGE 1
|
|||
|
|
|||
|
|
|||
|
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE DS1302
|
|||
|
OBJECT MODULE PLACED IN .\Objects\ds1302.obj
|
|||
|
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\driver\ds1302.c OPTIMIZE(8,SPEED) BROWSE INCDIR(..\driver;..\user) DE
|
|||
|
-BUG OBJECTEXTEND PRINT(.\Listings\ds1302.lst) TABS(2) OBJECT(.\Objects\ds1302.obj)
|
|||
|
|
|||
|
line level source
|
|||
|
|
|||
|
1 /* # DS1302代码片段说明
|
|||
|
2 1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。
|
|||
|
3 2.
|
|||
|
4 参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运<E38081>
|
|||
|
-<2D><>速度和试题
|
|||
|
5 中对单片机时钟频率的要求,进行代码调试和修改。
|
|||
|
6 */
|
|||
|
7 #include "ds1302.h"
|
|||
|
8
|
|||
|
9 #include "intrins.h"
|
|||
|
10 sbit SDA = P2 ^ 3;
|
|||
|
11 sbit RST = P1 ^ 3;
|
|||
|
12 sbit SCK = P1 ^ 7;
|
|||
|
13 //
|
|||
|
14 void Write_Ds1302(unsigned char temp)
|
|||
|
15 {
|
|||
|
16 1 unsigned char i;
|
|||
|
17 1 for (i = 0; i < 8; i++)
|
|||
|
18 1 {
|
|||
|
19 2 SCK = 0;
|
|||
|
20 2 SDA = temp & 0x01;
|
|||
|
21 2 temp >>= 1;
|
|||
|
22 2 SCK = 1;
|
|||
|
23 2 }
|
|||
|
24 1 }
|
|||
|
25
|
|||
|
26 //
|
|||
|
27 void Write_Ds1302_Byte(unsigned char address, unsigned char dat)
|
|||
|
28 {
|
|||
|
29 1 RST = 0;
|
|||
|
30 1 _nop_();
|
|||
|
31 1 SCK = 0;
|
|||
|
32 1 _nop_();
|
|||
|
33 1 RST = 1;
|
|||
|
34 1 _nop_();
|
|||
|
35 1 Write_Ds1302(address);
|
|||
|
36 1 Write_Ds1302(dat);
|
|||
|
37 1 RST = 0;
|
|||
|
38 1 }
|
|||
|
39
|
|||
|
40 //
|
|||
|
41 unsigned char Read_Ds1302_Byte(unsigned char address)
|
|||
|
42 {
|
|||
|
43 1 unsigned char i, temp = 0x00;
|
|||
|
44 1 RST = 0;
|
|||
|
45 1 _nop_();
|
|||
|
46 1 SCK = 0;
|
|||
|
47 1 _nop_();
|
|||
|
48 1 RST = 1;
|
|||
|
49 1 _nop_();
|
|||
|
50 1 Write_Ds1302(address);
|
|||
|
51 1 for (i = 0; i < 8; i++)
|
|||
|
52 1 {
|
|||
|
53 2 SCK = 0;
|
|||
|
C51 COMPILER V9.60.7.0 DS1302 03/10/2025 18:03:53 PAGE 2
|
|||
|
|
|||
|
54 2 temp >>= 1;
|
|||
|
55 2 if (SDA)
|
|||
|
56 2 temp |= 0x80;
|
|||
|
57 2 SCK = 1;
|
|||
|
58 2 }
|
|||
|
59 1 RST = 0;
|
|||
|
60 1 _nop_();
|
|||
|
61 1 SCK = 0;
|
|||
|
62 1 _nop_();
|
|||
|
63 1 SCK = 1;
|
|||
|
64 1 _nop_();
|
|||
|
65 1 SDA = 0;
|
|||
|
66 1 _nop_();
|
|||
|
67 1 SDA = 1;
|
|||
|
68 1 _nop_();
|
|||
|
69 1 return (temp);
|
|||
|
70 1 }
|
|||
|
71 // 十进制 11 -> 0x11
|
|||
|
72 void Set_Rtc(unsigned char *ucRtc)
|
|||
|
73 {
|
|||
|
74 1 unsigned char i;
|
|||
|
75 1 unsigned char temp;
|
|||
|
76 1 Write_Ds1302_Byte(0x8e, 0x00);
|
|||
|
77 1 Write_Ds1302_Byte(0x80, 0x80);
|
|||
|
78 1 for (i = 0; i < 3; i++)
|
|||
|
79 1 {
|
|||
|
80 2
|
|||
|
81 2 temp = (ucRtc[i] / 10) * 16 + ucRtc[i] % 10;
|
|||
|
82 2 Write_Ds1302_Byte(0x84 - 2 * i, temp);
|
|||
|
83 2 }
|
|||
|
84 1 Write_Ds1302_Byte(0x8e, 0x80);
|
|||
|
85 1 }
|
|||
|
86 // 十进制 0x11 -> 11
|
|||
|
87 void Read_Rtc(unsigned char *ucRtc)
|
|||
|
88 {
|
|||
|
89 1 unsigned char i;
|
|||
|
90 1 unsigned char temp;
|
|||
|
91 1 for (i = 0; i < 3; i++)
|
|||
|
92 1 {
|
|||
|
93 2 temp = Read_Ds1302_Byte(0x85 - 2 * i);
|
|||
|
94 2 ucRtc[i] = temp / 16 * 10 + temp % 16;
|
|||
|
95 2 }
|
|||
|
96 1 }
|
|||
|
|
|||
|
|
|||
|
MODULE INFORMATION: STATIC OVERLAYABLE
|
|||
|
CODE SIZE = 222 ----
|
|||
|
CONSTANT SIZE = ---- ----
|
|||
|
XDATA SIZE = ---- ----
|
|||
|
PDATA SIZE = ---- ----
|
|||
|
DATA SIZE = ---- 6
|
|||
|
IDATA SIZE = ---- ----
|
|||
|
BIT SIZE = ---- ----
|
|||
|
END OF MODULE INFORMATION.
|
|||
|
|
|||
|
|
|||
|
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|