📄 ds1302.lst
字号:
C51 COMPILER V7.06 DS1302 05/14/2009 00:04:43 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ds1302.c COMPACT BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <absacc.h>
2 #include <intrins.h>
3 #include <reg51.h>
4 #include <ds1302.h>
5 #include "lcd.h"
6 #define uchar unsigned char
7
8
9
10 sbit DS1302_CLK = P2^6; //实时时钟时钟线引脚
11 sbit DS1302_IO = P2^5; //实时时钟数据线引脚
12 sbit DS1302_RST = P2^7; //实时时钟复位线引脚
13
14 uchar read_1302(void) //从1302中读取一个字节
15 {
16 1 uchar i,data_1302;
17 1 for(i=0;i<8;i++)
18 1 {
19 2 data_1302>>=1;
20 2 if(DS1302_IO)
21 2 {
22 3 data_1302|=0x80;
23 3 }
24 2 DS1302_CLK=1;
25 2 DS1302_CLK=0;
26 2 }
27 1 return (data_1302);
28 1 }
29
30 void write_1302(uchar data_1302)//向1302中写入一个字节
31 {
32 1 uchar i;
33 1 for(i=0;i<8;i++)
34 1 {
35 2 DS1302_IO=(bit)(data_1302&0x01);
36 2 DS1302_CLK=1;
37 2 DS1302_CLK=0;
38 2 data_1302>>=1;
39 2 }
40 1 }
41 //向1302的某一地址中写入一个字节的数据
42
43 void write_all_1302(uchar addr,uchar data_1302)
44 {
45 1 DS1302_RST = 0;
46 1 DS1302_CLK = 0;
47 1 DS1302_RST = 1;
48 1 write_1302(addr);
49 1 write_1302(data_1302);
50 1 DS1302_CLK = 1;
51 1 DS1302_RST = 0;
52 1 }
53
54 //从1302的某一地址中读取一个字节的数据
55
C51 COMPILER V7.06 DS1302 05/14/2009 00:04:43 PAGE 2
56 uchar read_all_1302(uchar addr)
57 {
58 1 uchar data_1302;
59 1 DS1302_RST = 0;
60 1 DS1302_CLK = 0;
61 1 DS1302_RST = 1;
62 1 write_1302(addr|0x01);
63 1 data_1302 = read_1302();
64 1 DS1302_CLK = 1;
65 1 DS1302_RST = 0;
66 1 return (data_1302);
67 1 }
68
69
70 void DS1302_SetProtect(bit flag) //是否写保护
71 {
72 1 if(flag)
73 1 write_all_1302(0x8E,0x80); //禁止写
74 1 else
75 1 write_all_1302(0x8E,0x00); //允许写
76 1 }
77
78 //停止1302时钟
79
80 void stop_1302(void)
81 {
82 1 uchar i;
83 1 i = read_all_1302(DS1302_SECOND);
84 1 i |= 0x80;
85 1 write_all_1302(DS1302_SECOND,i);
86 1 }
87
88 //启动1302时钟
89
90 void start_1302(void)
91 {
92 1 uchar i;
93 1 i = read_all_1302(DS1302_SECOND);
94 1 i &= 0x7f;
95 1 write_all_1302(DS1302_SECOND,i);
96 1 }
97
98
99 //读出1302的时间序列
100 void read_serial(uchar *j)
101 {
102 1 uchar i;
103 1 DS1302_RST = 0;
104 1 DS1302_CLK = 0;
105 1 DS1302_RST = 1;
106 1 write_1302(0xbf);//0xbf为连续读出的命令代码
107 1 for(i=0;i<8;i++)
108 1 {
109 2 *(j+i) = read_1302();
110 2 nop();
111 2 }
112 1 DS1302_CLK = 1;
113 1 DS1302_RST = 0;
114 1 }
115 //写入1302的时间序列
116
117 void write_date_time(uchar *j)
C51 COMPILER V7.06 DS1302 05/14/2009 00:04:43 PAGE 3
118 {
119 1 uchar i;
120 1 DS1302_RST = 0;
121 1 DS1302_CLK = 0;
122 1 DS1302_RST = 1;
123 1 write_1302(0xbe);//0xbe为连续写入的命令代码
124 1 for(i=0;i<8;i++)
125 1 {
126 2 write_1302(*(j+i));
127 2 }
128 1 DS1302_CLK = 1;
129 1 DS1302_RST = 0;
130 1 }
131
132 void init1302()
133 {
134 1 DS1302_SetProtect(0);
135 1 // write_all_1302(0x8c,0x00);
136 1 // write_all_1302(0x88,0x05);
137 1 // write_all_1302(0x86,0x25);
138 1 // write_all_1302(0x8a,0x04);
139 1 // write_all_1302(0x84,0x00);
140 1 // write_all_1302(0x82,0x59);
141 1 // write_all_1302(0x80,0x55);
142 1 DS1302_SetProtect(1);
143 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 257 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 7
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -