📄 www.ourhc.cn.lst
字号:
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:36:48 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:STC12C5A60S2单片机之DS1302应用12T
5 使用芯片:STC12C5A60S2
6 晶振:11.0592MHZ
7 波特率:115200
8 编译环境:Keil
9 作者:zhangxinchun
10 网站:www.ourhc.cn
11 淘宝店:
12 汇诚科技 http://ourhc.taobao.com
13 郑兴电子直销部 http://shop68451856.taobao.com
14 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
15
16
17 *********************************************************************/
18 #include "REG52.H"
19 #include "INTRINS.H"
20
21 typedef unsigned char BYTE;
22
23 sbit SCLK = P1^0; //DS1302时钟口P1.0
24 sbit IO = P1^1; //DS1302数据口P1.1
25 sbit RST = P1^2; //DS1302片选口P1.2
26
27 //秒 分 时 日 月 星期 年
28 BYTE code init[] = {0x00, 0x00, 0x20, 0x01, 0x01, 0x05, 0x10};
29 BYTE data now[7];
30
31 void DS1302_Initial();
32 void DS1302_SetTime(BYTE *p);
33 void DS1302_GetTime(BYTE *p);
34
35 void main()
36 {
37 1 DS1302_Initial(); //初始化DS1302
38 1 DS1302_SetTime(init); //设置初始时间
39 1
40 1 DS1302_GetTime(now); //读取当前时间
41 1 while (1);
42 1 }
43
44 /**************************************
45 从DS1302读1字节数据
46 **************************************/
47 BYTE DS1302_ReadByte()
48 {
49 1 BYTE i;
50 1 BYTE dat = 0;
51 1
52 1 for (i=0; i<8; i++) //8位计数器
53 1 {
54 2 SCLK = 0; //时钟线拉低
55 2 _nop_(); //延时等待
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:36:48 PAGE 2
56 2 _nop_();
57 2 dat >>= 1; //数据右移一位
58 2 if (IO) dat |= 0x80; //读取数据
59 2 SCLK = 1; //时钟线拉高
60 2 _nop_(); //?óê±μè′y
61 2 _nop_();
62 2 }
63 1
64 1 return dat;
65 1 }
66
67 /**************************************
68 向DS1302写1字节数据
69 **************************************/
70 void DS1302_WriteByte(BYTE dat)
71 {
72 1 char i;
73 1
74 1 for (i=0; i<8; i++) //8位计数器
75 1 {
76 2 SCLK = 0; //时钟线拉低
77 2 _nop_(); //延时等待
78 2 _nop_();
79 2 dat >>= 1; //移出数据
80 2 IO = CY; //送出到端口
81 2 SCLK = 1; //时钟线拉高
82 2 _nop_(); //延时等待
83 2 _nop_();
84 2 }
85 1 }
86
87 /**************************************
88 读DS1302某地址的的数据
89 **************************************/
90 BYTE DS1302_ReadData(BYTE addr)
91 {
92 1 BYTE dat;
93 1
94 1 RST = 0;
95 1 _nop_(); //延时等待
96 1 _nop_();
97 1 SCLK = 0;
98 1 _nop_(); //延时等待
99 1 _nop_();
100 1 RST = 1;
101 1 _nop_(); //延时等待
102 1 _nop_();
103 1 DS1302_WriteByte(addr); //写地址
104 1 dat = DS1302_ReadByte(); //读数据
105 1 SCLK = 1;
106 1 RST = 0;
107 1
108 1 return dat;
109 1 }
110
111 /**************************************
112 往DS1302的某个地址写入数据
113 **************************************/
114 void DS1302_WriteData(BYTE addr, BYTE dat)
115 {
116 1 RST = 0;
117 1 _nop_(); //延时等待
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:36:48 PAGE 3
118 1 _nop_();
119 1 SCLK = 0;
120 1 _nop_(); //延时等待
121 1 _nop_();
122 1 RST = 1;
123 1 _nop_(); //延时等待
124 1 _nop_();
125 1 DS1302_WriteByte(addr); //写地址
126 1 DS1302_WriteByte(dat); //写数据
127 1 SCLK = 1;
128 1 RST = 0;
129 1 }
130
131 /**************************************
132 写入初始时间
133 **************************************/
134 void DS1302_SetTime(BYTE *p)
135 {
136 1 BYTE addr = 0x80;
137 1 BYTE n = 7;
138 1
139 1 DS1302_WriteData(0x8e, 0x00); //允许写操作
140 1 while (n--)
141 1 {
142 2 DS1302_WriteData(addr, *p++);
143 2 addr += 2;
144 2 }
145 1 DS1302_WriteData(0x8e, 0x80); //写保护
146 1 }
147
148 /**************************************
149 读取当前时间
150 **************************************/
151 void DS1302_GetTime(BYTE *p)
152 {
153 1 BYTE addr = 0x81;
154 1 BYTE n = 7;
155 1
156 1 while (n--)
157 1 {
158 2 *p++ = DS1302_ReadData(addr);
159 2 addr += 2;
160 2 }
161 1 }
162
163 /**************************************
164 初始化DS1302
165 **************************************/
166 void DS1302_Initial()
167 {
168 1 RST = 0;
169 1 SCLK = 0;
170 1 DS1302_WriteData(0x8e, 0x00); //允许写操作
171 1 DS1302_WriteData(0x80, 0x00); //时钟启动
172 1 DS1302_WriteData(0x90, 0xa6); //一个二极管+4K电阻充电
173 1 DS1302_WriteData(0x8e, 0x80); //写保护
174 1 }
175
176 /********************************************************************
177 结束
178 *********************************************************************/
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:36:48 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 251 ----
CONSTANT SIZE = 7 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 7
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 + -