📄 ds1305c3.lst
字号:
C51 COMPILER V8.02 DS1305C3 08/10/2007 21:13:37 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS1305C3
OBJECT MODULE PLACED IN ds1305C3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1305C3.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* 这是用C51高级语言编写的DS1305时钟和RAM读写程序-没有调用汇编语言,*/
3 /* 文件名 DS1305C3.C */
4 /* 功能:本程序主要是读DS1305的日历时钟值(共7个字节)、置DS1305 */
5 /* 的日历时钟值、读DS1305的RAM区特定单元(共96个字节)的内 */
6 /* 容和写DS1305的RAM区特定单元。本程序中对DS1305 RAM区的读 */
7 /* 写均为16个字节。 */
8 /********************************************************************/
9 #include <stdio.h>
10 #include <reg52.h>
11 #define uchar unsigned char
12
13 void reset_3w(void);
14 void wbyte_3w(uchar w_byte);
15 uchar rbyte_3w(void);
16 void Initialize();
17 void TimeWrite();
18 void BurstReadTime();
19 void BurstRamRead(void);
20 void BurstRamWrite(void);
21 void writebyte1305();
22 void readbyte1305();
23
24 sbit CE = P1^2;
25 sbit SCLK = P1^1;
26 sbit SDI_IO = P1^0;
27 sbit INT0b = P3^2; /* INT0b脚与单片机的P3.2连接*/
28 uchar mid1[16];
29 uchar CPOL = 0;
30
31 void reset_3w() // DS1305复位
32 {
33 1 SCLK = 0;
34 1 CE = 0;
35 1 CE = 1;
36 1 }
37 void wbyte_3w(uchar w_byte) /*把w_byte中的数据从高位开始送入ds1305 */
38 {
39 1 uchar i;
40 1 for(i = 0; i < 8; ++i)
41 1 {
42 2 SDI_IO = 0;
43 2 if(w_byte & 0x01)
44 2 {
45 3 SDI_IO = 1;
46 3 }
47 2 SCLK = 0;
48 2 SCLK = 1;
49 2 w_byte >>= 1;
50 2 }
51 1 }
52 uchar rbyte_3w() /*对DS1305进行读操作程序 */
53 {
54 1 uchar i, R_Byte, TmpByte;
55 1 R_Byte = 0x00;
C51 COMPILER V8.02 DS1305C3 08/10/2007 21:13:37 PAGE 2
56 1 SDI_IO = 1;
57 1 for(i = 0; i < 8; ++i)
58 1 {
59 2 SCLK = 1;
60 2 SCLK = 0;
61 2 TmpByte = (uchar)SDI_IO;
62 2 TmpByte <<= 7;
63 2 R_Byte >>= 1;
64 2 R_Byte |= TmpByte;
65 2 }
66 1 return R_Byte;
67 1 }
68 void readbyte1305() /* 从DS1305中指定单元读出一个字节 */
69 {
70 1 uchar Add;
71 1 uchar Data;
72 1 Add=0x06; /* 指定待读出单元的地址 */
73 1 reset_3w();
74 1 wbyte_3w(Add);
75 1 Data=rbyte_3w(); /* 读出的结果放在Data中 */
76 1 reset_3w();
77 1 }
78 void writebyte1305() /* 向DS1305中指定单元写入一个字节 */
79 {
80 1 uchar Add, Data;
81 1 Add= 0x06; /* 指定待写入单元的地址 */
82 1 Data= 0x07; /* 指定待写入的内容 */
83 1 /* User enters read address. Must convert to write address. */
84 1 Add |= 0x80;
85 1 reset_3w();
86 1 wbyte_3w(Add);
87 1 wbyte_3w(Data);
88 1 reset_3w();
89 1 }
90 void TimeWrite() /* 日历时钟值写入 */
91 {
92 1 uchar yr, mn, dt, dy, hr, min, sec;
93 1 reset_3w(); //清时钟写保护位。在写时钟之前,必须清时钟写保护位,否则写不进去。
94 1 wbyte_3w(0x8F);
95 1 wbyte_3w(0);
96 1 reset_3w();
97 1 yr=06; /* 置待写入的年、月、日、时、分和秒的压缩的BCD码值 */
98 1 mn=0x11;
99 1 dt=0x26;
100 1 dy=7;
101 1 hr=9;
102 1 hr = hr & 0x3f;
103 1 min=9;
104 1 sec=9;
105 1 reset_3w();
106 1 wbyte_3w(0x80);
107 1 wbyte_3w(sec);
108 1 wbyte_3w(min);
109 1 wbyte_3w(hr);
110 1 wbyte_3w(dy);
111 1 wbyte_3w(dt);
112 1 wbyte_3w(mn);
113 1 wbyte_3w(yr);
114 1 reset_3w();
115 1 }
116 void BurstReadTime() /* 突发模式时钟读 */
117 {
C51 COMPILER V8.02 DS1305C3 08/10/2007 21:13:37 PAGE 3
118 1 uchar Sec, Min, Hrs, Day, Dte, Mon, Yr;
119 1 reset_3w();
120 1 wbyte_3w(0x00);
121 1 Sec = rbyte_3w();
122 1 Min = rbyte_3w();
123 1 Hrs = rbyte_3w();
124 1 Day = rbyte_3w();
125 1 Dte = rbyte_3w();
126 1 Mon = rbyte_3w();
127 1 Yr = rbyte_3w();
128 1 reset_3w();
129 1 }
130 void BurstRamRead() /* 突发模式RAM读 */
131 {
132 1 uchar i;
133 1 reset_3w();
134 1 wbyte_3w(0x20);
135 1 for (i = 0; i < 16; ++i)
136 1 {
137 2 mid1[i]=rbyte_3w() ; //数组mid1[i]中放读出内容
138 2 }
139 1 reset_3w();
140 1 }
141 void BurstRamWrite() /* 突发模式RAM写 */
142 {
143 1 uchar i, dat;
144 1 dat=0x55; // dat中放待写入内容
145 1 reset_3w();
146 1 wbyte_3w(0xA0);
147 1 for (i = 0; i < 16; ++i)
148 1 {
149 2 wbyte_3w(dat);
150 2 }
151 1 reset_3w();
152 1 }
153 void Initialize() /* DS1305初始化 */
154 {
155 1 reset_3w();
156 1 wbyte_3w(0x8f);
157 1 wbyte_3w(0x05); /* 往控制寄存器写0x05*/
158 1 reset_3w();
159 1 wbyte_3w(0x90);
160 1 wbyte_3w(0x01); /* 往状态制寄存器写0x01*/
161 1 reset_3w();
162 1 wbyte_3w(0x91);
163 1 wbyte_3w(0xa5); /* 往涓流充电寄存器写0xa5*/
164 1 reset_3w();
165 1 }
166
167 void main() //主程序
168 {
169 1 while (1)
170 1 {
171 2
172 2 // writebyte1305();
173 2 // readbyte1305();
174 2 Initialize(); /* 调DS1305初始化 */
175 2 TimeWrite(); /* 调日历时钟值写入*/
176 2 BurstReadTime(); /* 突发模式时钟读 */
177 2 BurstRamWrite(); /* 突发模式RAM写 */
178 2 BurstRamRead(); /* 突发模式RAM读 */
179 2 }
C51 COMPILER V8.02 DS1305C3 08/10/2007 21:13:37 PAGE 4
180 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 334 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 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 + -