📄 ds1302.lst
字号:
C51 COMPILER V6.12 DS1302 04/23/2008 15:12:07 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN D:\FSGUDO~1\单片机~1\DS1302~1\DS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\FSGUDO~1\单片机~1\DS1302~1\DS1302.C DB SB OE
stmt level source
1 #include <reg51.h>
2
3 /*************************宏定义******************************/
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 /************************管脚定义******************************/
8 sbit DS1302_CLK = P1^6; //实时时钟时钟线引脚
9 sbit DS1302_IO = P1^7; //实时时钟数据线引脚
10 sbit DS1302_RST = P1^5; //实时时钟复位线引脚
11 sbit ACC0 = ACC^0;
12 sbit ACC7 = ACC^7;
13
14 /************************DS1302数据地址************************/
15 #define DS1302_SECOND 0x80
16 #define DS1302_MINUTE 0x82
17 #define DS1302_HOUR 0x84
18 #define DS1302_WEEK 0x8A
19 #define DS1302_DATE 0x86
20 #define DS1302_MONTH 0x88
21 #define DS1302_YEAR 0x8C
22
23 /************************外部调用数组************************/
24 //extern uchar data time[7];//秒,分,时,周,日,月,年
25
26
27 /*******************DS1302InputByte()*******************/
28 void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数)
29 {
30 1 unsigned char i;
31 1 ACC = d;
32 1 for(i=8; i>0; i--)
33 1 {
34 2 DS1302_IO = ACC0; //相当于汇编中的 RRC
35 2 DS1302_CLK = 1;
36 2 DS1302_CLK = 0;
37 2 ACC = ACC >> 1;
38 2 }
39 1 }
40
41 /*******************DS1302OutputByte()*******************/
42 unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数)
43 {
44 1 unsigned char i;
45 1 for(i=8; i>0; i--)
46 1 {
47 2 ACC = ACC >>1; //相当于汇编中的 RRC
48 2 ACC7 = DS1302_IO;
49 2 DS1302_CLK = 1;
50 2 DS1302_CLK = 0;
51 2 }
52 1 return(ACC);
53 1 }
54
55 /*******************DS1302OWrite1302()*******************/
C51 COMPILER V6.12 DS1302 04/23/2008 15:12:07 PAGE 2
56 void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据
57 {
58 1 DS1302_RST = 0;
59 1 DS1302_CLK = 0;
60 1 DS1302_RST = 1;
61 1 DS1302InputByte(ucAddr); // 地址,命令
62 1 DS1302InputByte(ucDa); // 写1Byte数据
63 1 DS1302_CLK = 1;
64 1 DS1302_RST = 0;
65 1 }
66
67 /*******************DS1302ORead1302()*******************/
68 unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据
69 {
70 1 unsigned char ucData;
71 1 DS1302_RST = 0;
72 1 DS1302_CLK = 0;
73 1 DS1302_RST = 1;
74 1 DS1302InputByte(ucAddr|0x01); // 地址;最低有效位(位0)如为0表示要进行写操作,反之为读
75 1 ucData = DS1302OutputByte(); // 读1Byte数据
76 1 DS1302_CLK = 1;
77 1 DS1302_RST = 0;
78 1 return(ucData);
79 1 }
80
81 /*******************DS1302_SetProtect()*******************/
82 void DS1302_SetProtect(bit flag) //是否写保护 1为打开写保护,0为关闭写保护
83 {
84 1 if(flag)
85 1 Write1302(0x8E,0x10); // 控制命令,WP=1,写保护
86 1 else
87 1 Write1302(0x8E,0x00); // 控制命令,WP=0,写操作
88 1 }
89
90 /*******************DS1302_SetTime()*******************/
91 void DS1302_SetTime(unsigned char Address, unsigned char Value) // 设置时间函数
92 {
93 1 DS1302_SetProtect(0);
94 1 Write1302(Address, ((Value/10)<<4 | (Value%10)));
95 1 }
96
97 /*******************DS1302_GetTime()*******************/
98 void DS1302_GetTime(char *time)
99 {
100 1 unsigned char ReadValue;
101 1 ReadValue = Read1302(DS1302_SECOND);
102 1 time[0] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
103 1 ReadValue = Read1302(DS1302_MINUTE);
104 1 time[1] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
105 1 ReadValue = Read1302(DS1302_HOUR);
106 1 time[2] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
107 1 ReadValue = Read1302(DS1302_DATE);
108 1 time[3] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
109 1 ReadValue = Read1302(DS1302_WEEK);
110 1 time[4] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
111 1 ReadValue = Read1302(DS1302_MONTH);
112 1 time[5] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
113 1 ReadValue = Read1302(DS1302_YEAR);
114 1 time[6] = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
115 1
116 1 }
117
C51 COMPILER V6.12 DS1302 04/23/2008 15:12:07 PAGE 3
118
119 /*******************Initial_DS1302*******************/
120 void Initial_DS1302(void)
121 {
122 1 unsigned char Second=Read1302(DS1302_SECOND);
123 1 if(Second&0x80)
124 1 DS1302_SetTime(DS1302_SECOND,0);
125 1 }
126
127
C51 COMPILER V6.12 DS1302 04/23/2008 15:12:07 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
ACC7 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00E7H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
T0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B4H 1
AC . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D6H 1
T1 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B5H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
DS1302OutputByte . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
Initial_DS1302 . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Second . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
RD . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
DS1302_CLK . . . . . . . . . . . . . . ABSBIT ----- BIT 0096H 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
INT0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B2H 1
CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
INT1 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
PS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1
_Read1302. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ucAddr . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
ucData . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
OV . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D2H 1
WR . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B6H 1
_Write1302 . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ucAddr . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
ucDa . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
DS1302_RST . . . . . . . . . . . . . . ABSBIT ----- BIT 0095H 1
IE0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0089H 1
IE1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008BH 1
ACC. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00E0H 1
ET0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A9H 1
ET1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ABH 1
TF0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008DH 1
TF1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008FH 1
RB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009AH 1
EX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A8H 1
IT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0088H 1
TB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009BH 1
EX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AAH 1
IT1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008AH 1
P. . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D0H 1
SM0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009FH 1
SM1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009EH 1
_DS1302_GetTime. . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
time . . . . . . . . . . . . . . . . * REG * DATA PTR 0001H 3
ReadValue. . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
SM2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009DH 1
DS1302_SetProtect. . . . . . . . . . . PUBLIC CODE PROC 0000H -----
flag . . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
PT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B9H 1
PT1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BBH 1
RS0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D3H 1
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
RS1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D4H 1
DS1302_IO. . . . . . . . . . . . . . . ABSBIT ----- BIT 0097H 1
TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1
C51 COMPILER V6.12 DS1302 04/23/2008 15:12:07 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
PX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B8H 1
PX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BAH 1
_DS1302_SetTime. . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Address. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
Value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
REN. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009CH 1
_DS1302InputByte . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
d. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
RXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B0H 1
TXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B1H 1
F0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D5H 1
ACC0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00E0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 340 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
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 + -