📄 rtcds1302.lst
字号:
C51 COMPILER V7.00 RTCDS1302 10/06/2008 18:53:09 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE RTCDS1302
OBJECT MODULE PLACED IN G:\MFRC500\实时时钟\RTCDS1302.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE G:\MFRC500\实时时钟\RTCDS1302.C DB SB OE
stmt level source
1 /*****************************************************
2 DS1302电子钟 C 程序
3 *******************************************************
4
5 DS1302 接线图
6
7 Vcc2 CLK I/O /RST
8
9 | | | |
10 -------------------
11 | 8 7 6 5 |
12 | DS1302 |
13 | |
14 | 1 2 3 4 |
15 -------------------
16 | | | |
17 VCC1 GND
18
19 1 脚接+5V 2,3脚32768HZ晶振 4脚接地 5脚接S51的P12 6脚接S51的P13 7接S51的P14
20 8脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容
21 电压在2.5V以上即可维持
22 //******************************************************/
23
24 #include <REG52.H>
25 #define uchar unsigned char
26 #define uint unsigned int
27
28 //DS1302引脚连接定义
29 sbit T_CLK=P1^2;
30 sbit T_IO =P1^3;
31 sbit T_RST=P1^4;
32
33 //sbit ACC0=ACC^0; //1bit数据存储位
34 sbit ACC7=ACC^7;
35
36 uchar starts_time[7]={30,19,21,4,10,6,8}; //初始化设置:秒,分,时,日,月,星期,年
37 uchar Second,Minute,Hour,Day,Month,Week,Year; //时间变量
38
39 void RTCInputByte(uchar bData); /* 输入 1Byte */
40 uchar RTCOutputByte(void); /* 输出 1Byte */
41 void Write1302(uchar ucAddr, uchar ucDa); /* 向DS1302写入一个字节 */
42 uchar Read1302(uchar ucAddr); /* 从DS1302读出一个字节 */
43 void SetTime(uchar *pClock); /* 设置时间 */
44 void GetTime(void); /* 读取时间 */
45
46 /*主函数*/
47 void main()
48 {
49 1 SetTime(starts_time);
50 1 while(1)
51 1 {
52 2 GetTime();
53 2 }
54 1 }
55 /************************************************/
C51 COMPILER V7.00 RTCDS1302 10/06/2008 18:53:09 PAGE 2
56
57
58 //********DS1302读写程序***************//
59 /********************************************************************
60 函 数 名:RTCInputByte()
61 功 能:实时时钟写入一字节
62 说 明:往DS1302写入1Byte数据 (内部函数)
63 入口参数:bData: 写入的数据
64 返 回 值:无
65 设 计:zhanghongjian 日 期:2008-10-04
66 修 改: 日 期:
67 ***********************************************************************/
68 void RTCInputByte(uchar bData)
69 {
70 1 uchar h;
71 1 //ACC = bData;
72 1 for(h=8; h>0; h--)
73 1 {
74 2 //T_IO = ACC0; /*相当于汇编中的 RRC */
75 2 T_IO = (bit)(bData&0x01);
76 2 T_CLK = 1;
77 2 T_CLK = 0;
78 2 //ACC = ACC >> 1;
79 2 bData = bData >> 1;
80 2 }
81 1 }
82 /********************************************************************
83 函 数 名:RTCOutputByte()
84 功 能:实时时钟读取一字节
85 说 明:从DS1302读取1Byte数据 (内部函数)
86 入口参数:无
87 返 回 值:ACC: 输出的数据
88 设 计:zhanghongjian 日 期:2008-10-04
89 修 改: 日 期:
90 ***********************************************************************/
91 uchar RTCOutputByte(void)
92 {
93 1 uchar h;
94 1 //uchar temp;
95 1 for(h=8; h>0; h--)
96 1 {
97 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
98 2 //temp = temp >> 1;
99 2 ACC7 = T_IO;
100 2 //temp =
101 2 T_CLK = 1;
102 2 T_CLK = 0;
103 2 }
104 1 return(ACC);
105 1 }
106 /********************************************************************
107 函 数 名:Write1302()
108 功 能:往DS1302写入数据
109 说 明:先写地址,后写命令/数据 (内部函数)
110 调 用:RTCInputByte() , RTCOutputByte()
111 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
112 返 回 值:无
113 设 计:zhanghongjian 日 期:2008-10-04
114 修 改: 日 期:
115 ***********************************************************************/
116 void Write1302(uchar ucAddr, uchar ucDa)
117 {
C51 COMPILER V7.00 RTCDS1302 10/06/2008 18:53:09 PAGE 3
118 1 T_RST = 0;
119 1 T_CLK = 0;
120 1 T_RST = 1;
121 1 RTCInputByte(ucAddr); /* 地址,命令 */
122 1 RTCInputByte(ucDa); /* 写1Byte数据*/
123 1 T_CLK = 1;
124 1 T_RST = 0;
125 1 }
126 /********************************************************************
127 函 数 名:Read1302()
128 功 能:读取DS1302某地址的数据
129 说 明:先写地址,后读命令/数据 (内部函数)
130 调 用:RTCInputByte() , RTCOutputByte()
131 入口参数:ucAddr: DS1302地址
132 返 回 值:ucData: 读取的数据
133 设 计:zhanghongjian 日 期:2008-10-04
134 修 改: 日 期:
135 ***********************************************************************/
136 uchar Read1302(uchar ucAddr)
137 {
138 1 uchar ucData;
139 1 uchar temp1,temp2;
140 1 T_RST = 0;
141 1 T_CLK = 0;
142 1 T_RST = 1;
143 1 RTCInputByte(ucAddr); /* 地址,命令 */
144 1 ucData = RTCOutputByte(); /* 读1Byte数据 */
145 1 T_CLK = 1;
146 1 T_RST = 0;
147 1
148 1 temp1 = ucData/16;
149 1 temp2 = ucData%16;
150 1 ucData = temp1*10 + temp2; /* BCD转成16进制 */
151 1
152 1 return(ucData);
153 1 }
154
155 /********************************************************************
156 函 数 名:SetTime()
157 功 能:设置初始时间
158 说 明:先写地址,后读命令/数据(寄存器多字节方式)
159 调 用:Write1302()
160 入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
161 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
162 返 回 值:无
163 设 计:zhanghongjian 日 期:2008-10-04
164 修 改: 日 期:
165 ***********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -