📄 ds1302.lst
字号:
C51 COMPILER V7.06 DS1302 10/14/2006 11:09:57 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN D:\KEIL\备分\DS1302.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE D:\KEIL\备分\DS1302.C DB SB OE
stmt level source
1 #include <reg51.h>
2 #include "main.h"
3
4
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 ///////////////////////////////////////////////////全局变量
9 //uchar idata calen[8]={0x9d,0x58,0x23,0x31,0x04,0x03,0x06,0x00}; //日历存放地址
10 //sbit T_CLK=P1^0; //1302的CLK引脚
11 //sbit T_IO=P1^1; //1302的数据引脚
12 //sbit T_RST=P1^2; //1302的复位引脚
13
14 void SystemInitial(void);
15 void CalendarInitial(uchar * pcalen); //日历初始化程序
16
17 void BurstR1302(uchar *pcalen); // 从1302读多字节,并存入日历数组中
18 void BurstR1302(uchar *pcalen); // 从1302读多字节,并存入日历数组中
19 void RTInputByte(uchar udata); //从1302写入一字节的数据
20 uchar RTOutputByte(void); //从1302读一字节的数据
21 void Writ1302(uchar uAddr,uchar udata); //写1字节的数据入指定地址
22 uchar Read1302(uchar uAddr); //从指定地址读出1字节数据
23 void BurstW1302(uchar * pcalen); //写入多字节的数据
24 void Set1302(uchar *pClock); //Set1302 Initial
25 void Delay_us(uchar i);
26
27 //sbit ACC0 = ACC^0;
28 //sbit ACC7 = ACC^7;
29
30
31
32
33 void main(void)
34 {
35 1 SP=0x3f;
36 1 Delay_us(4);
37 1 // uchar * pcalen;
38 1 // pcalen=calen;
39 1 // uchar calen[8]={52,67,8,5,8,6,6,0};
40 1 CalendarInitial(calen); //
41 1
42 1
43 1 while(1)
44 1 {
45 2 BurstR1302(calen); //读日历,并送到pcalen[]中
46 2 }
47 1 }
48
49 void CalendarInitial(pcalen)//日历初始化程序
50 uchar pcalen[8];
51 {
52 1 uchar i;
53 1 BurstW1302(pcalen); //读日历,并送到pcalen[]中
54 1 i=Read1302(0x80);
55 1 i=i&0x7f;
C51 COMPILER V7.06 DS1302 10/14/2006 11:09:57 PAGE 2
56 1 while(1)
57 1 { //ch=0
58 2 Writ1302(0x80,i); //起震
59 2
60 2 Delay_us(100);
61 2 Writ1302(0x80,i);
62 2
63 2
64 2 }
65 1 }
66
67
68 void BurstR1302(pcalen) // 从1302读多字节,并存入日历数组中
69 uchar pcalen[8];
70 {
71 1 uchar i;
72 1 T_RST=0;
73 1 T_CLK=0;
74 1 T_RST=1;
75 1 RTInputByte(0xbf); //oxbf 时钟多字节读命令
76 1 for(i=0; i<8; i++)
77 1 {
78 2 *pcalen=RTOutputByte(); //读1BYTE的数据
79 2 pcalen++ ;
80 2 }
81 1 T_CLK=1;
82 1 T_RST=0;
83 1 }
84
85 ////////////////////////////////////////////////////////
86
87 void RTInputByte(udata) //to1302写入一字节的数据
88 uchar udata;
89 {
90 1 uchar i;
91 1 ACC=udata;
92 1 for(i=8;i>0;i--)
93 1 {
94 2 T_IO=ACC0;
95 2 T_CLK=1;
96 2 T_CLK=0;
97 2 ACC=ACC>>1;
98 2 }
99 1 }
100
101 /////////////////////////////////////////////////////
102 uchar RTOutputByte(void) //从1302读一字节的数据
103 {
104 1 uchar i;
105 1 for(i=8;i>0;i--)
106 1 {
107 2 ACC=ACC>>1;
108 2 ACC7=T_IO;
109 2 T_CLK=1;
110 2 T_CLK=0;
111 2
112 2 }
113 1 return(ACC);
114 1 }
115
116 //////////////////////////////////////////////////////
117
C51 COMPILER V7.06 DS1302 10/14/2006 11:09:57 PAGE 3
118 void Writ1302(uchar uAddr,uchar udata) //写1字节的数据入指定地址
119 {
120 1
121 1 T_RST=0;
122 1 T_CLK=0;
123 1 T_RST=1;
124 1 RTInputByte(uAddr); //先输入地址
125 1 RTInputByte(udata); //写数据
126 1 T_CLK=1;
127 1 T_RST=0;
128 1 }
129
130 //////////////////////////////////////////////////////
131
132 uchar Read1302(uchar uAddr) //从指定地址读出1字节数据
133 {
134 1 uchar udata;
135 1 T_RST=0;
136 1 T_CLK=0;
137 1 T_RST=1;
138 1 RTInputByte(uAddr); //写入地址
139 1 udata=RTOutputByte(); //读出数据
140 1 T_CLK=1;
141 1 T_RST=0;
142 1 return(udata);
143 1 }
144
145 /////////////////////////////////////////////////////
146
147 void BurstW1302(pcalen) //写入多字节的数据
148 uchar pcalen[8];
149 {
150 1 uchar i;
151 1 Writ1302(0x8e,0x00); //WP=0,写操作
152 1 T_RST=0;
153 1 T_CLK=0;
154 1 T_RST=1;
155 1 RTInputByte(0xbe); //0xbe ;时钟多字节写命令
156 1 for(i=8;i>0;i--)
157 1 {
158 2 RTInputByte(*pcalen);
159 2 pcalen++;
160 2 }
161 1 T_CLK=1;
162 1 T_RST=0;
163 1 }
164
165 ////////////////////////////////////////////////////
166 /*void Set1302(uchar *pClock) //Set1302 Initial
167 {
168 uchar i;
169 uchar ucAddr = 0x80;
170 W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
171 for(i =7; i>0; i--)
172 {
173 W1302(ucAddr,*pClock); // 秒 分 时 日 月 星期 年
174 pClock++;
175 ucAddr +=2;
176 }
177 W1302(0x8e,0x80); // 控制命令,WP=1,写保护?
178 }
179 *///////
C51 COMPILER V7.06 DS1302 10/14/2006 11:09:57 PAGE 4
180
181 void Delay_us(uchar i)
182 {
183 1 uchar d;
184 1 for(d=0;d<i;d++);
185 1 }
C51 COMPILER V7.06 DS1302 10/14/2006 11:09:57 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
ACC7 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00E7H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
calen. . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 8
_BurstR1302. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
pcalen . . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1
T_CLK. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1
_BurstW1302. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
pcalen . . . . . . . . . . . . . . . * REG * DATA PTR 0001H 3
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
_Delay_us. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
d. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
SP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0081H 1
_Read1302. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
uAddr. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
udata. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
T_RST. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1
CodeNum. . . . . . . . . . . . . . . . PUBLIC IDATA ARRAY 0000H 4
_RTInputByte . . . . . . . . . . . . . PUBLIC CODE PROC 0006H -----
udata. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
ACC. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00E0H 1
T_IO . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
_CalendarInitial . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
pcalen . . . . . . . . . . . . . . . * REG * DATA PTR 0001H 3
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
_Writ1302. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
uAddr. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
udata. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
RTOutputByte . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
ACC0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00E0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 236 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 5
IDATA SIZE = 4 ----
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 + -