📄 time_1302.lst
字号:
C51 COMPILER V8.08 TIME_1302 03/04/2008 13:00:38 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TIME_1302
OBJECT MODULE PLACED IN time_1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE time_1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 /********************************************************************
4 *
5 * 模 块 名:时钟芯片的读写 型号:DS1302
6 *
7 * 创 建 人:yingjiangan 日期:2008-03-03
8 * 修 改 人: 日期:2000-00-00
9 * 功能描述:
10 * 其他说明:
11 * 版 本:V1.0
12 **********************************************************************/
13
14
15 /************头文件************/
16 #include <intrins.h>
17 #include <sm5964.h>
18 #include "my_type.h"
19 #include "1302.h"
20
21 code uint8 set_rtc_code[7]={0x15,0x32,0x15,0x03,0x03,0x01,0x08};
22 /************************************秒***分***时***日***月**星期**年**/
23 code uint8 write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
24 code uint8 read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
25 code uint8 *day[7]={"Mon","Tue","Wen","Thu","Fri","Sat","Sun"};
26 uint8 read_rtc_code[7];
27
28
29 /*********************************************************************
30 *
31 * 函 数 名: Init_1302
32 * 功能描述: 1302初始化
33 * 函数说明:
34 * 输 入: 无
35 * 返 回: 无
36 * 设 计 者:ying 日期:2008-03-03
37 * 修 改 者:ying 日期:2000-00-00
38 ***********************************************************************/
39 /**********************************************************************
-******/
40 void Init_1302(void)
41 {
42 1
43 1 DS1302_WP_ENABLE; //开禁止 写入数据
44 1 Set_RTC(); //设定秒、分、时、日、月、星期、年
45 1 DS1302_WP_DISENABLE; //禁止写入
46 1
47 1 }
48
49
50 /*********************************************************************
51 *
52 * 函 数 名: Write_1302_Byte
53 * 功能描述: 写入1302一个字节数据
54 * 函数说明: 物理层
C51 COMPILER V8.08 TIME_1302 03/04/2008 13:00:38 PAGE 2
55 * 输 入: 要写入的数据
56 * 返 回: 无
57 * 设 计 者:ying 日期:2008-03-03
58 * 修 改 者:ying 日期:2000-00-00
59 ***********************************************************************/
60 void Write_1302_Byte(uint8 temp)
61 {
62 1 uint8 i;
63 1 for (i=0;i<8;i++) //循环8次 写入数据
64 1 {
65 2 SDA=temp&LSB; //每次传输低字节
66 2 temp>>=1; //右移一位
67 2 SCL=HIGH;
68 2 _nop_();
69 2 SCL=LOW;
70 2 }
71 1 }
72
73 /*********************************************************************
74 *
75 * 函 数 名: Write_1302
76 * 功能描述: 写入1302地址和数据
77 * 函数说明: 物理层
78 * 输 入: address、dat
79 * 返 回: 无
80 * 设 计 者:ying 日期:2008-03-03
81 * 修 改 者:ying 日期:2000-00-00
82 ***********************************************************************/
83 void Write_1302( uint8 address,uint8 dat )
84 {
85 1 DS1302_RESET; //启动
86 1 Write_1302_Byte(address); //发送地址
87 1 Write_1302_Byte(dat); //发送数据
88 1 RST=LOW; //恢复
89 1 }
90
91
92
93 /*********************************************************************
94 *
95 * 函 数 名: Read_1302
96 * 功能描述: 读出1302一个字节数据并转化BCD码
97 * 函数说明: 物理层
98 * 输 入: address
99 * 返 回: 读出的数据
100 * 设 计 者:ying 日期:2008-03-03
101 * 修 改 者:ying 日期:2000-00-00
102 ***********************************************************************/
103 uint8 Read_1302 ( uint8 address )
104 {
105 1 uint8 i,temp=0x00,temp_temp;
106 1 DS1302_RESET;
107 1 Write_1302_Byte(address);
108 1 for (i=0;i<7;i++) //循环7次 读取数据
109 1 {
110 2 SCL=LOW;
111 2 if(SDA)
112 2 {
113 3 temp|=0x80; //每次传输低字节
114 3 }
115 2 temp>>=1; //右移一位
116 2 SCL=HIGH;
C51 COMPILER V8.08 TIME_1302 03/04/2008 13:00:38 PAGE 3
117 2 }
118 1 RST=LOW;
119 1
120 1 temp_temp=temp/16; //数据处理
121 1 temp=temp%16;
122 1 temp=temp+temp_temp*10;
123 1
124 1 return (temp); //返回
125 1 }
126
127
128 /*********************************************************************
129 *
130 * 函 数 名: Read_RTC
131 * 功能描述: 读出时钟芯片的时间
132 * 函数说明: 器件层
133 * 输 入:
134 * 返 回: 读出的时间数组
135 * 设 计 者:ying 日期:2008-03-03
136 * 修 改 者:ying 日期:2000-00-00
137 ***********************************************************************/
138 void Read_RTC(void) //读取 日历
139 {
140 1 uint8 i,*p;
141 1 p=read_rtc_address; //地址传递
142 1 for(i=0;i<7;i++) //分7次读取 秒、分、时、日、月、星期、年
143 1 {
144 2 read_rtc_code[i]=Read_1302(*p);
145 2 p++;
146 2 }
147 1 }
148
149
150 /*********************************************************************
151 *
152 * 函 数 名: Set_RTC
153 * 功能描述: 设定时钟芯片的时间
154 * 函数说明: 器件层
155 * 输 入:
156 * 返 回:
157 * 设 计 者:ying 日期:2008-03-03
158 * 修 改 者:ying 日期:2000-00-00
159 ***********************************************************************/
160 void Set_RTC(void) //设定 日历
161 {
162 1 uint8 i,*p;
163 1 p=write_rtc_address; //传地址
164 1 for(i=0;i<7;i++) //7次写入 秒、分、时、日、月、星期、年
165 1 {
166 2 Write_1302(*p,set_rtc_code[i]);
167 2 p++;
168 2 }
169 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 161 ----
CONSTANT SIZE = 70 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
IDATA SIZE = ---- ----
C51 COMPILER V8.08 TIME_1302 03/04/2008 13:00:38 PAGE 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 + -