📄 ds12c887.lst
字号:
C51 COMPILER V6.23a DS12C887 10/25/2008 20:27:54 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE DS12C887
OBJECT MODULE PLACED IN DS12C887.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS12C887.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X52.H>
2 #include "DS12C887.h"
3 #include <intrins.h>
4
5 #define NOP() _nop_();_nop_();
6 //===================================================
7 unsigned char t_hour,t_minute,t_second;
8 unsigned char At_hour,At_minute,At_second;
9 unsigned char week;
10 unsigned char d_year,d_month,d_day;
11 //===================================================
12 #if DS12C887_EN_ALE>0
13 void ALE(void)
14 {
15 1 DS12C887_AS=0;
16 1 NOP();
17 1 DS12C887_AS=1;
18 1 NOP();
19 1 DS12C887_AS=0;
20 1
21 1 NOP();
22 1 DS12C887_AS=1;
23 1 NOP();
24 1 DS12C887_AS=0;
25 1 NOP();
26 1 }
27 #endif
28 //-----------------------------
29 #if DS12C887_EN_WriteEn>0
void WriteEn(void)
{
DS12C887_RW=1;
NOP();
DS12C887_RW=0;
NOP();
DS12C887_RW=1;
}
#endif
39 //-----------------------------
40 #if DS12C887_EN_ReadEn>0
41 void ReadEn(void)
42 {
43 1 DS12C887_DS=1;
44 1 NOP();
45 1 DS12C887_DS=0;
46 1 NOP();
47 1 }
48 #endif
49 //----------------------------
50 #if DS12C887_EN_init >0
void DS12C887_init(void)
{
//将状态寄存器B的最高位SET设置为1
//锁存状态寄存器B地址
DS12C887_Data_Port=0xb;
C51 COMPILER V6.23a DS12C887 10/25/2008 20:27:54 PAGE 2
ALE(); //锁存地址
//设置状态寄存器B的SET=1,开始设置其他的参数
//状态寄存器B
//bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//SET PIE AIE UIE SQW DM 24/12 DSF
//设置允许 周期中断允许 闹钟中断 时间更新中断 允许方波生成 数据格式 时间格式 夏令时
//同时设置UIE=0(允许更新中断),DM=1(二进制数据格式),24/12=1(24小时格式)
DS12C887_Data_Port=0x96;
WriteEn(); //写入允许
//设置时标寄存器
DS12C887_Data_Port=0; //锁存秒地址
ALE(); //锁存地址
DS12C887_Data_Port=t_second;//写入秒值
WriteEn();
DS12C887_Data_Port=1; //锁存秒闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=At_second;//写入秒闹钟值
WriteEn();
DS12C887_Data_Port=2; //锁存分钟地址
ALE(); //锁存地址
DS12C887_Data_Port=t_minute;//写入分钟值
WriteEn();
DS12C887_Data_Port=3; //锁存分钟闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=At_minute;//写入分钟闹钟值
WriteEn();
DS12C887_Data_Port=4; //锁存小时地址
ALE(); //锁存地址
DS12C887_Data_Port=t_hour;//写入小时值
WriteEn();
DS12C887_Data_Port=5; //锁存小时闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=At_hour;//写入小时闹钟值
WriteEn();
//----------------------------
DS12C887_Data_Port=6; //锁存星期地址
ALE(); //锁存地址
DS12C887_Data_Port=week;//写入星期值
WriteEn();
DS12C887_Data_Port=7; //锁存日地址
ALE(); //锁存地址
DS12C887_Data_Port=d_day;//写入日值
WriteEn();
DS12C887_Data_Port=8; //锁存月地址
ALE(); //锁存地址
DS12C887_Data_Port=d_month;//写入月值
WriteEn();
DS12C887_Data_Port=9; //锁存年地址
ALE(); //锁存地址
DS12C887_Data_Port=d_year;//写入年值
WriteEn();
//设置寄存器A
C51 COMPILER V6.23a DS12C887 10/25/2008 20:27:54 PAGE 3
//状态寄存器A
//bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0
//readonly 0 1 0 0 0 0 0
DS12C887_Data_Port=0xa; //锁存寄存器A地址
ALE(); //锁存地址
DS12C887_Data_Port=0x20;//写寄存器A值
WriteEn();
//读取寄存器C,清除中断申请标志位
//状态寄存器C
//bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//IRQF PF AF UF 0 0 0 0
//All Read Only
DS12C887_Data_Port=0xc; //锁存寄存器C地址
ALE(); //锁存地址
ReadEn();
DS12C887_DS=1;
//读取寄存器D,设置VRT位
DS12C887_Data_Port=0xd; //锁存寄存器D地址
ALE(); //锁存地址
ReadEn();
DS12C887_DS=1;
//设置寄存器B,使得SET=0
DS12C887_Data_Port=0xb; //锁存寄存器B地址
ALE(); //锁存地址
DS12C887_Data_Port=0x16;
WriteEn(); //写入允许
}
#endif
149 //=============================================
150 #if DS12C887_EN_GetTime>0
151 void GetTime(void)
152 {
153 1 DS12C887_Data_Port=0x0; //锁存秒地址
154 1 ALE(); //锁存地址
155 1 DS12C887_Data_Port=0xff;
156 1 ReadEn();
157 1 t_second=DS12C887_Data_Port;//读取秒值
158 1 DS12C887_DS=1;
159 1
160 1 DS12C887_Data_Port=0x2; //锁存分钟地址
161 1 ALE(); //锁存地址
162 1 DS12C887_Data_Port=0xff;
163 1 ReadEn();
164 1 t_minute=DS12C887_Data_Port;//读取分钟值
165 1 DS12C887_DS=1;
166 1
167 1 DS12C887_Data_Port=0x4; //锁存小时地址
168 1 ALE(); //锁存地址
169 1 DS12C887_Data_Port=0xff;
170 1 ReadEn();
171 1 t_hour=DS12C887_Data_Port;//读取小时值
172 1 DS12C887_DS=1;
173 1 }
174 #endif
175 //---------------------------------------
176 #if DS12C887_EN_GetAlarmTime>0
void GetAlarmTime(void)
{
DS12C887_Data_Port=0x1; //锁存秒闹钟地址
C51 COMPILER V6.23a DS12C887 10/25/2008 20:27:54 PAGE 4
ALE(); //锁存地址
DS12C887_Data_Port=0xff;
ReadEn();
At_second=DS12C887_Data_Port;//读取秒闹钟值
DS12C887_DS=1;
DS12C887_Data_Port=0x3; //锁存分钟闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=0xff;
ReadEn();
At_minute=DS12C887_Data_Port;//读取分钟闹钟值
DS12C887_DS=1;
DS12C887_Data_Port=0x5; //锁存小时闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=0xff;
ReadEn();
At_hour=DS12C887_Data_Port;//读取小时闹钟值
DS12C887_DS=1;
}
#endif
201 //---------------------------------------------
202 #if DS12C887_EN_GetDate>0
203 void GetDate(void)
204 {
205 1 DS12C887_Data_Port=0x9; //锁存年地址
206 1 ALE(); //锁存地址
207 1 DS12C887_Data_Port=0xff;
208 1 ReadEn();
209 1 d_year=DS12C887_Data_Port;//读取年值
210 1 DS12C887_DS=1;
211 1
212 1 DS12C887_Data_Port=0x8; //锁存月地址
213 1 ALE(); //锁存地址
214 1 DS12C887_Data_Port=0xff;
215 1 ReadEn();
216 1 d_month=DS12C887_Data_Port;//读取月值
217 1 DS12C887_DS=1;
218 1
219 1 DS12C887_Data_Port=0x7; //锁存日地址
220 1 ALE(); //锁存地址
221 1 DS12C887_Data_Port=0xff;
222 1 ReadEn();
223 1 d_day=DS12C887_Data_Port;//读取日值
224 1 DS12C887_DS=1;
225 1 }
226 #endif
227 //---------------------------------------------
228 #if DS12C887_EN_GetWeek>0
229 void GetWeek(void)
230 {
231 1 DS12C887_Data_Port=0x6; //锁存星期地址
232 1 ALE(); //锁存地址
233 1 DS12C887_Data_Port=0xff;
234 1 ReadEn();
235 1 week=DS12C887_Data_Port;//读取星期值
236 1 DS12C887_DS=1;
237 1 }
238 #endif
239 //================================================
240 #if DS12C887_EN_SetTime>0
void SetTime(void)
C51 COMPILER V6.23a DS12C887 10/25/2008 20:27:54 PAGE 5
{
DS12C887_Data_Port=0x0; //锁存秒地址
ALE(); //锁存地址
DS12C887_Data_Port=t_second;//写入秒值
WriteEn();
DS12C887_Data_Port=0x2; //锁存分钟地址
ALE(); //锁存地址
DS12C887_Data_Port=t_minute;//写入分钟值
WriteEn();
DS12C887_Data_Port=0x4; //锁存小时地址
ALE(); //锁存地址
DS12C887_Data_Port=t_hour;//写入小时值
WriteEn();
}
#endif
259 //---------------------------------------
260 #if DS12C887_EN_SetAlarmTime>0
void SetAlarmTime(void)
{
DS12C887_Data_Port=0x1; //锁存秒闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=At_second;//写入秒闹钟值
WriteEn();
DS12C887_Data_Port=0x3; //锁存分钟闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=At_minute;//写入分钟闹钟值
WriteEn();
DS12C887_Data_Port=0x5; //锁存小时闹钟地址
ALE(); //锁存地址
DS12C887_Data_Port=At_hour;//写入小时闹钟值
WriteEn();
}
#endif
279 //---------------------------------------------
280 #if DS12C887_EN_SetDate>0
void SetDate(void)
{
DS12C887_Data_Port=0x9; //锁存年地址
ALE(); //锁存地址
DS12C887_Data_Port=d_year;//写入年值
WriteEn();
DS12C887_Data_Port=0x8; //锁存月地址
ALE(); //锁存地址
DS12C887_Data_Port=d_month;//写入月值
WriteEn();
DS12C887_Data_Port=0x7; //锁存日地址
ALE(); //锁存地址
DS12C887_Data_Port=d_day;//写入日值
WriteEn();
}
#endif
299 //---------------------------------------------
300 #if DS12C887_EN_SetWeek>0
void SetWeek(void)
{
DS12C887_Data_Port=0x6; //锁存星期地址
C51 COMPILER V6.23a DS12C887 10/25/2008 20:27:54 PAGE 6
ALE(); //锁存地址
DS12C887_Data_Port=week;//写入星期值
WriteEn();
}
#endif
309
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 116 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -