📄 ds1302.lst
字号:
C51 COMPILER V9.00 DS1302 07/01/2013 12:13:29 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ..\output\ds1302.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\c_file\ds1302.c BROWSE INCDIR(..\c_file;..\h_file;..\output;..\project)
-DEBUG OBJECTEXTEND PRINT(.\ds1302.lst) OBJECT(..\output\ds1302.obj)
line level source
1 /**************************************************************************************
2 * 子程序:底层程序 *
3 * 功能:时间日期数据处理; *
4 * *
5 * *
6 ***************************************************************************************/
7 # include <intrins.h>
8 # include "macroandconst.h"
9 # include "stc12c5a60s2.h"
10 # include "nokia5110.h"
11
12
13 sbit SCK = P0^2; //DS1302时钟;
14 sbit SDA = P0^1; //DS1302数据;
15 sbit RST = P0^0;// DS1302复位;
16
17 uchar l_tmpDate[]={0,0,0,1,1,1,13};//秒分时日月周年08-05-15 12:00:00
18 uchar l_tmpdisplay[13];
19
20
21
22 code uchar Write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位读写位
23
24 code uchar Read_RTC_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
25
26 /******************************************************************/
27 /* 写一个字节 */
28 /******************************************************************/
29 void Write_Ds1302_Byte(unsigned char temp)
30 {
31 1 unsigned char i;
32 1 for (i=0;i<8;i++) //循环8次 写入数据
33 1 {
34 2 SCK=0;
35 2 SDA=temp&0x01; //每次传输低字节
36 2 temp>>=1; //右移一位
37 2 SCK=1;
38 2 }
39 1 }
40 /******************************************************************/
41 /* 写入DS1302 */
42 /******************************************************************/
43 void Write_Ds1302( unsigned char address,unsigned char dat )
44 {
45 1 RST=0;
46 1 _nop_();
47 1 SCK=0;
48 1 _nop_();
49 1 RST=1;
50 1 _nop_(); //启动
51 1 Write_Ds1302_Byte(address); //发送地址
52 1 Write_Ds1302_Byte(dat); //发送数据
53 1 RST=0; //恢复
54 1 }
C51 COMPILER V9.00 DS1302 07/01/2013 12:13:29 PAGE 2
55 /******************************************************************/
56 /* 读出DS1302数据 */
57 /******************************************************************/
58 unsigned char Read_Ds1302 ( uchar address )
59 {
60 1
61 1 unsigned char i,temp=0x00;
62 1
63 1 RST=0;
64 1 _nop_();
65 1 _nop_();
66 1 SCK=0;
67 1 _nop_();
68 1 _nop_();
69 1 RST=1;
70 1 _nop_();
71 1 _nop_();
72 1 Write_Ds1302_Byte(address);
73 1
74 1 for (i=0;i<8;i++) //循环8次 读取数据
75 1 {
76 2 if(SDA)
77 2 {
78 3 temp|=0x80;
79 3 } //每次传输低字节
80 2 temp>>=1; //右移一位
81 2 SCK=1;
82 2 _nop_();
83 2 _nop_();
84 2 SCK=0;
85 2
86 2 }
87 1 RST=0;
88 1 _nop_(); //以下为DS1302复位的稳定时间
89 1 _nop_();
90 1 RST=0;
91 1 SCK=0;
92 1 _nop_();
93 1 _nop_();
94 1 _nop_();
95 1 _nop_();
96 1 SCK=1;
97 1 _nop_();
98 1 _nop_();
99 1 SDA=0;
100 1 _nop_();
101 1 _nop_();
102 1 SDA=1;
103 1 _nop_();
104 1 _nop_();
105 1 return (temp); //返回
106 1 }
107 /******************************************************************/
108 /* 读时钟数据 */
109 /******************************************************************/
110 void Read_RTC(void) //读取 日历
111 {
112 1 unsigned char i,*p;
113 1 p=Read_RTC_address; //地址传递
114 1 for(i=0;i<7;i++) //分7次读取 秒分时日月周年
115 1 {
116 2 l_tmpDate[i]=Read_Ds1302(*p);
C51 COMPILER V9.00 DS1302 07/01/2013 12:13:29 PAGE 3
117 2 p++;
118 2 }
119 1
120 1
121 1
122 1 }
123 /******************************************************************/
124 /* 设定时钟数据 */
125 /******************************************************************/
126 void Set_RTC(void) //设定 日历
127 {
128 1 uchar i,*p,tmp;
129 1 for(i=0;i<7;i++)
130 1 { //BCD处理
131 2 tmp=l_tmpDate[i]/10;
132 2 l_tmpDate[i]=l_tmpDate[i]%10;
133 2 l_tmpDate[i]=l_tmpDate[i]+tmp*16;
134 2
135 2 }
136 1 Write_Ds1302(0x8E,0X00); //关闭写保护;
137 1
138 1 p=Write_rtc_address; //传地址
139 1 for(i=0;i<7;i++) //7次写入 秒分时日月周年
140 1 {
141 2 Write_Ds1302(*p,l_tmpDate[i]);
142 2 p++;
143 2 }
144 1 Write_Ds1302(0x8E,0x80); //打开写保护;
145 1 }
146
147
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 220 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 ----
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 + -