📄 ds1302.lst
字号:
C51 COMPILER V7.01 DS1302 06/26/2004 23:32:50 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //**********************************************************************
2 //功能 : 实时时钟DS1302操作模块
3 //作者 : lihj
4 //创建日期 : 2004-06-22
5 //版本 : V1.0
6 //修改记录 :
7 //***********************************************************************
8 #include <REG51.h>
9
10 #define U8 unsigned char
11 //DS1302-51连接管脚定义
12 sbit RT_CLK = P1^0; //实时时钟时钟线引脚
13 sbit RT_IO = P1^1; //实时时钟数据线引脚
14 sbit ACC0=ACC^0; //累加器A可位寻址
15 sbit ACC7=ACC^7;
16
17 //函数功能: 往DS1302写入1Byte数据
18 //输入参数: <byIn> : 写入数据
19 void WriteByte(U8 byIn)
20 {
21 1 U8 i;
22 1 ACC = byIn;
23 1 for(i=8; i>0; i--) //先写D0(低位)
24 1 {
25 2 RT_IO = ACC0;
26 2 RT_CLK = 1; //产生一个上升沿
27 2 RT_CLK = 0;
28 2 ACC = ACC >> 1;
29 2 }
30 1 }
31
32 //函数功能: 从DS1302读取1Byte数据
33 //返回参数: 读出的数据
34 U8 ReadByte(void)
35 {
36 1 U8 i;
37 1 for(i=8; i>0; i--)
38 1 {
39 2 ACC = ACC >>1;
40 2 ACC7 = RT_IO;
41 2 RT_CLK = 1;
42 2 RT_CLK = 0; //产生一个下降沿
43 2 }
44 1 return(ACC);
45 1 }
46
47 //函数功能: 往DS1302指定地址内存写入数据
48 //输入参数: <byAddr> : DS1302地址
49 // <byData> : 要写的数据
50 //说 明: 先写地址,后写命令/数据
51 void WrRTC(U8 byAddr, U8 byData)
52 {
53 1 // byAddr |= 0xC0; //D7D6 = 11,表示操作内存
54 1 // byAddr &= 0xFE; //D0 = 0,表示写操作
55 1 WriteByte(byAddr); //地址、操作命令
C51 COMPILER V7.01 DS1302 06/26/2004 23:32:50 PAGE 2
56 1 WriteByte(byData); //写1Byte数据
57 1 }
58
59 //函数功能: 读取DS1302指定地址内存的数据
60 //输入参数: <byAddr> : DS1302内存单元地址
61 //返回参数: <byDa> : 读取的数据
62 //说明: 先写地址,后读命令/数据
63 U8 RdRTC(U8 byAddr)
64 {
65 1 U8 byData;
66 1
67 1 // byAddr |= 0xC0; //D7D6 = 11,表示操作内存
68 1 // byAddr &= 0xFE; //D0= 1,表示读操作
69 1 WriteByte(byAddr); //地址、操作命令
70 1 byData = ReadByte(); //读1Byte数据
71 1
72 1 return(byData);
73 1 }
74
75 //功能: 往DS1302 RAM区写入数据(多字节方式)
76 //输入: <pData>: 写入数据
77 //说明: 先写地址,后写数据(多字节方式)
78 void BurstWrRTC(U8 *pData)
79 {
80 1 U8 i;
81 1 WrRTC(0x8e,0x00); //写之前确保去掉写保护功能
82 1 WriteByte(0xfe); //0xfe:多字节写模式(burst方式)
83 1 for (i=31;i>0;i--) //31字节内存单元,从地址0单元的第0位开始写
84 1 {
85 2 WriteByte(*pData++); //写1Byte数据
86 2 }
87 1 }
88
89 //功能: 读取DS1302 RAM数据(多字节方式)
90 //输入: <pData>: 寄存器数据地址
91 //说明: 先写地址,后读命令/数据(寄存器多字节方式)
92 void BurstRdRTC(U8 *pData)
93 {
94 1 U8 i;
95 1
96 1 WriteByte(0xff); //0xff:多字节读模式
97 1 for (i=31; i>0; i--) //31Byte 寄存器数据
98 1 {
99 2 *pData++ = ReadByte(); //读1Byte数据
100 2 }
101 1 }
102
103 //功能: 往DS1302写入时钟数据(多字节方式)
104 //输入: <pData>: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
105 // 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
106 //说明: 先写地址,后写数据(多字节方式)
107 void BurstWrTime(U8 *pData)
108 {
109 1 U8 i;
110 1 WrRTC(0x8e,0x00); //写之前确保去掉写保护功能
111 1 WriteByte(0xbe); //0xbe:时钟多字节写命令
112 1
113 1 for (i=8;i>0;i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
114 1 {
115 2 WriteByte(*pData); //写1Byte数据
116 2 pData++;
117 2 }
C51 COMPILER V7.01 DS1302 06/26/2004 23:32:50 PAGE 3
118 1 }
119
120 //功能: 读取DS1302时钟数据(多字节方式)
121 //输入: <pData>: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
122 // 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
123 //返回值: byData :读取的数据
124 //说明: 先写地址,后读命令/数据(多字节方式)
125 void BurstpData(U8 *pData)
126 {
127 1 U8 i;
128 1
129 1 WriteByte(0xbf); //0xbf:时钟多字节读命令
130 1 for (i=8; i>0; i--)
131 1 {
132 2 *pData = ReadByte(); //读1Byte数据
133 2 pData++;
134 2 }
135 1 }
136
137 //功能: 写时钟(按字节方式),实际作用同Burst方式写时钟函数
138 //输入: <pData>: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
139 // 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
140 void WrTime(U8 *pData)
141 {
142 1 U8 i;
143 1 U8 byAddr = 0x80; //秒寄存器地址,D0=0:写操作
144 1 WrRTC(0x8e,0x00); //写之前确保去掉写保护功能
145 1 for(i =7;i>0;i--)
146 1 {
147 2 WrRTC(byAddr,*pData); //秒 分 时 日 月 星期 年
148 2 pData++;
149 2 byAddr +=2;
150 2 }
151 1 WrRTC(0x8e,0x80); //写保护
152 1 }
153
154 //输入: <pData>: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
155 //7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
156 //功能: 读取DS1302当前时间
157 void RdTime(U8 *pData)
158 {
159 1 U8 i;
160 1 U8 byAddr = 0x81; //秒寄存器地址,D0=1,读操作
161 1 for (i=0;i<7;i++)
162 1 {
163 2 pData[i] = RdRTC(byAddr);//秒 分 时 日 月 星期 年
164 2 byAddr += 2;
165 2 }
166 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 255 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -