📄 ds1302.lst
字号:
C51 COMPILER V8.05a DS1302 08/07/2007 23:36:32 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\DS1302.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\DS1302.
-lst) OBJECT(DS1302.obj)
line level source
1 //*************************************************************************************************
2 //* *
3 //* ***************************DS1302驱动程序************************* *
4 //* *
5 //*************************************************************************************************
6
7
8 //*************************************************************************************************
9 //* *
10 //* ******************************头文件及宏定义************************** *
11 //* *
12 //*************************************************************************************************
13 #include <at89x51.h>
14
15 #define DSIO P1_2 //实时时钟数据线引脚
16 #define DSCLK P1_1 //实时时钟时钟线引脚
17 #define DSRST P1_0 //实时时钟复位线引脚
18
19 #define DS_SECOND 0x80 //DS1302数据地址。
20 #define DS_MINUTE 0x82
21 #define DS_HOUR 0x84
22 #define DS_WEEK 0x8A
23 #define DS_DAY 0x86
24 #define DS_MONTH 0x88
25 #define DS_YEAR 0x8C
26
27
28 //*************************************************************************************************
29 //* *
30 //* ********************************全局变量****************************** *
31 //* *
32 //*************************************************************************************************
-
33 sbit ACC0 = ACC^0;
34 sbit ACC7 = ACC^7;
35
36 typedef struct TIME //定义的时间类型
37 {
38 unsigned char ucSecond;
39 unsigned char ucMinute;
40 unsigned char ucHour;
41 unsigned char ucWeek;
42 unsigned char ucDay;
43 unsigned char ucMonth;
44 unsigned char ucYear;
45 unsigned char ucaDateString[9];
46 unsigned char ucaTimeString[9];
47 }TIME;
48
49
50
51 //*************************************************************************************************
52 //* *
53 //* *********************实时时钟写入一字节(内部函数)************************* *
C51 COMPILER V8.05a DS1302 08/07/2007 23:36:32 PAGE 2
54 //* *
55 //*************************************************************************************************
56 void vWriteByte(unsigned char ucByte)
57 {
58 1 unsigned char ucCount;
59 1
60 1 ACC = ucByte;
61 1
62 1 for(ucCount=8;ucCount>0;ucCount--)
63 1 {
64 2 DSIO = ACC0; //把累加器第0位赋给DSIO口。
65 2
66 2 DSCLK = 1; //DSCLK下降沿,写入数据。
67 2 DSCLK = 0;
68 2
69 2 ACC = ACC >> 1; //把累加器里的数据右移一位。
70 2 }
71 1 }
72
73
74 //*************************************************************************************************
75 //* *
76 //* *********************实时时钟读入一字节(内部函数)************************ *
77 //* *
78 //*************************************************************************************************
79 unsigned char ucReadByte(void)
80 {
81 1 unsigned char ucCount;
82 1
83 1 for(ucCount=8;ucCount>0;ucCount--)
84 1 {
85 2 ACC = ACC >>1; //把累加器右移一位。
86 2
87 2 ACC7 = DSIO; //把DSIO的数据传给累加器最高位。
88 2
89 2 DSCLK = 1; //DSCLK下降沿读出数据。
90 2 DSCLK = 0;
91 2 }
92 1
93 1 return ACC;
94 1 }
95
96
97 //*************************************************************************************************
98 //* *
99 //* *************************向实时时钟写入一字节*************************** *
100 //* *
101 //*************************************************************************************************
102 void vDSWriteDirect(unsigned char ucAddr, unsigned char ucData) //ucAddr: DS1302地址, ucData: 要写的数据
103 {
104 1 DSRST = 0;
105 1 DSCLK = 0;
106 1 DSRST = 1;
107 1
108 1 vWriteByte(ucAddr); // 地址,命令
109 1 vWriteByte(ucData); // 写1Byte数据
110 1
111 1 DSCLK = 1;
112 1 DSRST = 0;
113 1 }
114
115 //*************************************************************************************************
C51 COMPILER V8.05a DS1302 08/07/2007 23:36:32 PAGE 3
116 //* *
117 //* *************************读取DS1302某地址的数据************************* *
118 //* *
119 //*************************************************************************************************
120 unsigned char vDSReadDirect(unsigned char ucAddr)
121 {
122 1 unsigned char ucData;
123 1
124 1 DSRST = 0;
125 1 DSCLK = 0;
126 1 DSRST = 1;
127 1
128 1 vWriteByte(ucAddr|0x01); // 地址,命令
129 1 ucData = ucReadByte(); // 读1Byte数据
130 1
131 1 DSCLK = 1;
132 1 DSRST = 0;
133 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -