?? ds1302.lst
字號:
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN Ds1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Ds1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #pragma small
2 #include <reg52.h>
3 #define uchar unsigned char
4 /************************************引腳連接圖*****************************************/
5 sbit ds1302_clk=P1^0;
6 sbit ds1302_dat=P1^1;
7 sbit ds1302_rst=P1^2;
8
9 sbit ACC_0 = ACC^0;
10 sbit ACC_1 = ACC^1;
11 sbit ACC_2 = ACC^2;
12 sbit ACC_3 = ACC^3;
13 sbit ACC_4 = ACC^4;
14 sbit ACC_5 = ACC^5;
15 sbit ACC_6 = ACC^6;
16 sbit ACC_7 = ACC^7;
17
18 /*************************************函數說明******************************************/
19 void Read(void); //寫DS1302操作
20 void Write(void); //讀DS1302操作
21 uchar ReadRam_Byte(uchar address); //從Ram中讀出一個字節
22 uchar ReadRTC_Byte(uchar address); //從DS1302中讀出一個字節
23 uchar WriteRam_Byte(uchar address,uchar number); //向Ram中寫入一個字節
24 uchar WriteRTC_Byte(uchar address,uchar number); //向DS1302中寫入一個字節
25 void ReadRam(uchar data * buffer,uchar size); //從Ram中讀出多個字節
26 void ReadRTC(uchar data * buffer,uchar size); //從DS1302中讀出多個字節
27 void WriteRam(uchar data * buffer,uchar size); //向Ram中寫入多個字節
28 void WriteRTC(uchar data * buffer,uchar size); //向DS1302中寫入多個字節
29 uchar ReadSec(void); //從DS1302中讀出秒字節
30 uchar ReadMin(void); //從DS1302中讀出分字節
31 uchar ReadHr(void); //從DS1302中讀出時字節
32 uchar ReadDay(void); //從DS1302中讀出日字節
33 uchar ReadMonth(void); //從DS1302中讀出月字節
34 uchar ReadWeek(void); //從DS1302中讀出星期字節
35 uchar ReadYear(void); //從DS1302中讀出年字節
36 void WriteSec(uchar number); //向DS1302中寫入秒字節
37 void WriteMin(uchar number); //向DS1302中寫入分字節
38 void WriteHr(uchar number); //向DS1302中寫入時字節
39 void WriteDay(uchar number); //向DS1302中寫入日字節
40 void WriteMonth(uchar number); //向DS1302中寫入月字節
41 void WriteWeek(uchar number); //向DS1302中寫入星期字節
42 void WriteYear(uchar number); //向DS1302中寫入年字節
43 void WriteControl(uchar number); //向慢速充電控制寄存器寫入控制字節
44 void EnableWP(void); //禁止寫保護
45 void DisableWP(void); //允許寫保護
46
47 void Write(void) //寫DS1302操作
48 {
49 1 ds1302_dat = ACC_0; //寫DS1302
50 1 ds1302_clk = 1; //時鐘上升沿,發送數據有效
51 1 ds1302_clk = 0; //清零時鐘總線
52 1 ds1302_dat = ACC_1;
53 1 ds1302_clk = 1; ds1302_clk = 0;
54 1 ds1302_dat = ACC_2;
55 1 ds1302_clk = 1; ds1302_clk = 0;
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 2
56 1 ds1302_dat = ACC_3;
57 1 ds1302_clk = 1; ds1302_clk = 0;
58 1 ds1302_dat = ACC_4;
59 1 ds1302_clk = 1; ds1302_clk = 0;
60 1 ds1302_dat = ACC_5;
61 1 ds1302_clk = 1; ds1302_clk = 0;
62 1 ds1302_dat = ACC_6;
63 1 ds1302_clk = 1; ds1302_clk = 0;
64 1 ds1302_dat = ACC_7;
65 1 ds1302_clk = 1; ds1302_clk = 0;
66 1 }
67
68 void Read(void) //讀DS1302操作
69 {
70 1 ACC_0 = ds1302_dat; //讀取DS1302數據
71 1 ds1302_clk = 1; //時鐘上升沿,發送數據有效
72 1 ds1302_clk = 0; //清零時鐘總線
73 1 ACC_1 = ds1302_dat;
74 1 ds1302_clk = 1; ds1302_clk = 0;
75 1 ACC_2 = ds1302_dat;
76 1 ds1302_clk = 1; ds1302_clk = 0;
77 1 ACC_3 = ds1302_dat;
78 1 ds1302_clk = 1; ds1302_clk = 0;
79 1 ACC_4 = ds1302_dat;
80 1 ds1302_clk = 1;ds1302_clk = 0;
81 1 ACC_5 = ds1302_dat;
82 1 ds1302_clk = 1; ds1302_clk = 0;
83 1 ACC_6 = ds1302_dat;
84 1 ds1302_clk = 1; ds1302_clk = 0;
85 1 ACC_7 = ds1302_dat;
86 1 ds1302_rst = 0; ds1302_clk = 1;
87 1 }
88
89 uchar ReadRam_Byte(uchar address) //從RAM中讀出一個字節
90 {
91 1 ds1302_rst = 0; //復位引腳為低電平,所有數據傳送中止
92 1 ds1302_clk = 0; //清零時鐘總線
93 1 ds1302_rst = 1; //復位引腳為高電平,邏輯控制有效
94 1 ACC = address;
95 1 Write(); //寫DS1302操作
96 1 ds1302_dat = 1;
97 1 Read(); //讀DS1302操作
98 1 return ACC;
99 1 }
100
101 uchar ReadRTC_Byte(uchar address) //從DS1302中讀出一個字節
102 {
103 1 ds1302_rst = 0; //復位引腳為低電平,所有數據傳送中止
104 1 ds1302_clk = 0; //清零時鐘總線
105 1 ds1302_rst = 1; //復位引腳為高電平,邏輯控制有效
106 1 ACC = address;
107 1 Write(); //對DS1302寫命令字和地址
108 1 ds1302_dat = 1;
109 1 Read(); //讀DS1302操作
110 1 return ACC; //返回讀取的數據
111 1 }
112
113 uchar WriteRam_Byte(uchar address,uchar number) //向RAM中寫入一個字節
114 {
115 1 ds1302_clk = 0; ds1302_rst = 0;ds1302_rst = 1;
116 1 ACC = address;
117 1 Write(); //對DS1302寫命令字和地址
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 3
118 1 ACC = number;
119 1 Write(); //對DS1302寫命令字和數據
120 1 ds1302_rst = 0;
121 1 ds1302_clk = 1;
122 1 return ACC;
123 1 }
124
125 uchar WriteRTC_Byte(uchar address,uchar number) //向DS1302中寫入一個字節
126 {
127 1 ds1302_clk = 0;
128 1 ds1302_rst = 0;ds1302_rst = 1;
129 1 ACC = address;
130 1 ACC |= 0x80;
131 1 Write(); //對DS1302寫命令字和地址
132 1 ACC = number;
133 1 Write(); //對DS1302寫命令字和數據
134 1 ds1302_rst = 0; ds1302_clk = 1;
135 1 return ACC;
136 1 }
137
138 void ReadRam(uchar data * buffer,uchar size) //從RAM中讀出多個字節
139 {
140 1 register uchar a,b;
141 1 ds1302_clk = 0;
142 1 ds1302_rst = 0;
143 1 ds1302_rst = 1;
144 1 ACC = 0xff; //命令字為FFH
145 1 Write(); //對DS1302寫命令字和地址
146 1 ds1302_dat = 1;
147 1 for(a=0;a<size;a++)
148 1 {
149 2 ACC_0 = ds1302_dat;
150 2 ds1302_clk = 1; ds1302_clk = 0; ACC_1 = ds1302_dat;
151 2 ds1302_clk = 1; ds1302_clk = 0; ACC_2 = ds1302_dat;
152 2 ds1302_clk = 1; ds1302_clk = 0; ACC_3 = ds1302_dat;
153 2 ds1302_clk = 1; ds1302_clk = 0; ACC_4 = ds1302_dat;
154 2 ds1302_clk = 1; ds1302_clk = 0; ACC_5 = ds1302_dat;
155 2 ds1302_clk = 1; ds1302_clk = 0; ACC_6 = ds1302_dat;
156 2 ds1302_clk = 1; ds1302_clk = 0; ACC_7 = ds1302_dat;
157 2 b = ACC;
158 2 *(buffer+a)=b;
159 2 ds1302_clk = 1; ds1302_clk = 0;
160 2 }
161 1 ds1302_rst = 0; ds1302_clk = 1;
162 1 }
163
164 void ReadRTC(uchar data * buffer,uchar size) //從DS1302中讀出多個字節
165 {
166 1 register uchar a,b;
167 1 ds1302_clk = 0;
168 1 ds1302_rst = 0;
169 1 ds1302_rst = 1;
170 1 ACC = 0xbf; //命令字為BFH
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -