📄 ds1302.lst
字号:
C51 COMPILER V7.50 DS1302 08/15/2007 10:09:59 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN D:\VW\WORK\DS1302\DS1302.OBJ
COMPILER INVOKED BY: d:\keil\C51\BIN\C51.EXE D:\VW\WORK\DS1302\DS1302.C DB SB OE
line level source
1 #include <reg52.h>
2
3
4
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define byte unsigned char
8 #define word unsigned int
9
10 extern void Set1302(uchar *); /* 设置时间 */
11 extern void Get1302(uchar curtime[]); /* 读取1302当前时间 */
12 extern void Bcd2asc(uchar,uchar *);
13
14
15
16 sbit T_CLK = P2^7; /*实时时钟时钟线引脚 */
17 sbit T_IO = P1^4; /*实时时钟数据线引脚 */
18 sbit T_RST = P1^7; /*实时时钟复位线引脚 */
19
20 sbit ACC0 = ACC^0;
21 sbit ACC7 = ACC^7;
22
23
24 void RTInputByte(uchar); /* 输入 1Byte */
25 uchar RTOutputByte(void); /* 输出?1Byte */
26 void W1302(uchar, uchar);
27 uchar R1302(uchar);
28 void Set1302(uchar *); /* 设置时间 */
29 void Bcd2asc(uchar,uchar *);
30 void Get1302(uchar curtime[]); /* 读取1302当前时间 */
31
32 //主函数,简单的测试一下芯片及程序的工作情况
33 //该函数设定一个时间初值time_init,然后不断的从ds1302中读取当前的时间值
34 void main()
35 {
36 1 uchar time_init[7]= {0x00,0x20,0x0a,0x18,0x09,0x03,0x07};
37 1 uchar time[7] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};
38 1 Set1302(time_init);
39 1 while(1)
40 1 {
41 2 Get1302(time);
42 2 }
43 1 }
44
45 /********************************************************************
46 函 数 名:RTInputByte()
47 功 能:实时时钟写入一字节
48 说 明:往DS1302写入1Byte数据 (内部函数)
49 入口参数:d 写入的数据
50 返 回 值:无
51 设 计:zhaojunjie 日 期:2002-03-19
52 修 改: 日 期:
53 ***********************************************************************/
54 void RTInputByte(uchar d)
55 {
C51 COMPILER V7.50 DS1302 08/15/2007 10:09:59 PAGE 2
56 1 uchar i;
57 1 ACC = d;
58 1 for(i=8; i>0; i--)
59 1 {
60 2 T_IO = ACC0; /*相当于汇编中的 RRC */
61 2 T_CLK = 1;
62 2 T_CLK = 0;
63 2 ACC = ACC >> 1;
64 2 }
65 1 }
66 /********************************************************************
67 函 数 名:RTOutputByte()
68 功 能:实时时钟读取一字节
69 说 明:从DS1302读取1Byte数据 (内部函数)
70 入口参数:无
71 返 回 值:ACC
72 设 计:zhaojunjie 日 期:2002-03-19
73 修 改: 日 期:
74 ***********************************************************************/
75 uchar RTOutputByte(void)
76 {
77 1 uchar i;
78 1 for(i=8; i>0; i--)
79 1 {
80 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
81 2 ACC7 = T_IO;
82 2 T_CLK = 1;
83 2 T_CLK = 0;
84 2 }
85 1 return(ACC);
86 1 }
87 /********************************************************************
88 函 数 名:W1302()
89 功 能:往DS1302写入数据
90 说 明:先写地址,后写命令/数据 (内部函数)
91 调 用:RTInputByte() , RTOutputByte()
92 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
93 返 回 值:无
94 设 计:zhaojunjie 日 期:2002-03-19
95 修 改: 日 期:
96 ***********************************************************************/
97 void W1302(uchar ucAddr, uchar ucDa)
98 {
99 1 T_RST = 0;
100 1 T_CLK = 0;
101 1 T_RST = 1;
102 1 RTInputByte(ucAddr); /* 地址,命令 */
103 1 RTInputByte(ucDa); /* 写1Byte数据*/
104 1 T_CLK = 1;
105 1 T_RST = 0;
106 1 }
107 /********************************************************************
108 函 数 名:R1302()
109 功 能:读取DS1302某地址的数据
110 说 明:先写地址,后读命令/数据 (内部函数)
111 调 用:RTInputByte() , RTOutputByte()
112 入口参数:ucAddr: DS1302地址
113 返 回 值:ucData :读取的数据
114 设 计:zhaojunjie 日 期:2002-03-19
115 修 改: 日 期:
116 ***********************************************************************/
117 uchar R1302(uchar ucAddr)
C51 COMPILER V7.50 DS1302 08/15/2007 10:09:59 PAGE 3
118 {
119 1 uchar ucData;
120 1 T_RST = 0;
121 1 T_CLK = 0;
122 1 T_RST = 1;
123 1 RTInputByte(ucAddr); /* 地址,命令 */
124 1 ucData = RTOutputByte(); /* 读1Byte数据 */
125 1 T_CLK = 1;
126 1 T_RST = 0;
127 1 return(ucData);
128 1 }
129 /********************************************************************
130 函 数 名:BurstW1302T()
131 功 能:往DS1302写入时钟数据(多字节方式)
132 说 明:先写地址,后写命令/数据
133 调 用:RTInputByte()
134 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
135 8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
136 返 回 值:无
137 设 计:zhaojunjie 日 期:2002-03-19
138 修 改: 日 期:
139 ***********************************************************************/
140 void BurstW1302T(uchar *pWClock)
141 {
142 1 uchar i;
143 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
144 1 T_RST = 0;
145 1 T_CLK = 0;
146 1 T_RST = 1;
147 1 RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
148 1 for (i = 8; i>0; i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
149 1 {
150 2 RTInputByte(*pWClock); /* 写1Byte数据*/
151 2 pWClock++;
152 2 }
153 1 T_CLK = 1;
154 1 T_RST = 0;
155 1 }
156 /********************************************************************
157 函 数 名:BurstR1302T()
158 功 能:读取DS1302时钟数据
159 说 明:先写地址/命令,后读数据(时钟多字节方式)
160 调 用:RTInputByte() , RTOutputByte()
161 入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
162 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
163 返 回 值:无
164 设 计:zhaojunjie 日 期:2002-03-19
165 修 改: 日 期:
166 ***********************************************************************/
167 void BurstR1302T(uchar *pRClock)
168 {
169 1 uchar i;
170 1 T_RST = 0;
171 1 T_CLK = 0;
172 1 T_RST = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -