?? eeprom.lst
字號:
C51 COMPILER V7.50 EEPROM 05/26/2009 15:22:14 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************************
2 File Name: eeprom.c
3 Description: AT24cXX
4 By: Jemmydeng
5 Date: 2008-06-xx
6 *************************************************************************/
7 #include <reg51.h>
8 #include <intrins.h>
9
10 #include <delay.h>
11 #include <eeprom.h>
12
13
14 #define uchar unsigned char
15 #define uint unsigned int
16
17 //#define _PAGES_ 1 //單字節(jié)地址,多頁時定義此項(for 24c04,24c08,24c16)
18
19 //#define _16_BITS_ADDRESS_ 1 //雙字節(jié)地址時定義此項(for 24c32,24c64)
20 //=======================================================================
21 sbit SCL=P0^4;
22 sbit SDA=P0^5;
23
24 bit ack_state=0;
25 //=======================================================================
26
27 void ST_EEPROM(void)
28 {
29 1 SDA=1;
30 1 SCL=1;
31 1 delay_us(10);
32 1 SDA=0;
33 1 delay_us(10);
34 1 SCL=0;
35 1 delay_us(10);
36 1 }
37
38 //------------------------------------
39 void END_EEPROM(void)
40 {
41 1 SDA=0;
42 1 SCL=0;
43 1 delay_us(10);
44 1 SCL=1;
45 1 delay_us(10);
46 1 SDA=1;
47 1 delay_us(10);
48 1 }
49
50 //------------------------------------
51 void write(unsigned char byte)
52 {
53 1 unsigned char i,j;
54 1
55 1 for(i=0;i<8;i++)
C51 COMPILER V7.50 EEPROM 05/26/2009 15:22:14 PAGE 2
56 1 {
57 2 j = (0x80>>i);
58 2 j = j&byte;
59 2 if(j)
60 2 {
61 3 SDA=1;
62 3 }
63 2 else
64 2 {
65 3 SDA=0;
66 3 }
67 2
68 2 delay_us(10);
69 2
70 2 SCL=1;
71 2 delay_us(10);
72 2 SCL=0;
73 2 delay_us(10);
74 2 }
75 1 }
76
77 //------------------------------------
78 unsigned char read(void)
79 {
80 1 bit data1=0;
81 1 unsigned char a=0,i;
82 1
83 1 for(i=0;i<8;i++)
84 1 {
85 2 SDA=1;
86 2 SCL=1;
87 2 delay_us(10);
88 2 data1=SDA;
89 2 delay_us(10);
90 2 SCL=0;
91 2 delay_us(10);
92 2 a=a<<1;
93 2 if(data1)
94 2 {
95 3 a+=1;
96 3 }
97 2 }
98 1
99 1 return a;
100 1 }
101
102 //-------------------------------------
103 bit TEST_ACK(void)
104 {
105 1 bit ack1;
106 1 SDA=1;
107 1 SCL=1;
108 1 delay_us(10);
109 1 ack1=SDA;
110 1 delay_us(10);
111 1 SCL=0;
112 1 delay_us(10);
113 1 return ack1;
114 1 }
115
116 //----------------------
117 void ACK(void)
C51 COMPILER V7.50 EEPROM 05/26/2009 15:22:14 PAGE 3
118 {
119 1 SDA=0;
120 1 SCL=1;
121 1 delay_us(10);
122 1 SCL=0;
123 1 SDA=1;
124 1 }
125
126 //---------------------
127 void NOT_ACK(void)
128 {
129 1 SDA=1;
130 1 SCL=1;
131 1 delay_us(10);
132 1 SCL=0;
133 1 }
134
135 //===============================================================
136 // 寫EEPROM單字節(jié)程序,參數(shù)1為高地址,參數(shù)2為低地址,參數(shù)3為要寫的數(shù)據(jù)
137 // 器件地址引腳固定接地(0xa0)
138 //------------------------------------------------------------
139
140 void WR_BYTE(unsigned char page,uchar address_h,uchar address_l,uchar data1)
141 {
142 1 unsigned char device_addr;
143 1
144 1 #ifdef _PAGES_
page = (page<<1);
device_addr = (0xa0|page); //器件地址引腳固定接地
#else
148 1 device_addr = 0xa0;
149 1 #endif
150 1
151 1 ST_EEPROM(); //啟動開始
152 1 write(device_addr); //寫器件地址10100000
153 1 ack_state = TEST_ACK();
154 1
155 1 #ifdef _16_BITS_ADDRESS_
write(address_h); //寫高地址
ack_state=TEST_ACK();
#endif
159 1
160 1 write(address_l); //寫低地址
161 1 ack_state=TEST_ACK();
162 1 write(data1); //寫數(shù)據(jù)
163 1 ack_state=TEST_ACK();
164 1 END_EEPROM(); //結(jié)束
165 1 delay_us(300);
166 1 }
*** WARNING C280 IN LINE 140 OF EEPROM.C: 'page': unreferenced local variable
*** WARNING C280 IN LINE 140 OF EEPROM.C: 'address_h': unreferenced local variable
167
168 //-----------------------------------------------------
169 // 讀EEPROM單字節(jié)程序,參數(shù)1為高地址,參數(shù)2為低地址
170 //----------------------------------------------------
171 uchar RD_BYTE(unsigned char page, uchar address_h,uchar address_l)
172 {
173 1 unsigned char rd_data=0;
174 1 unsigned char device_addr;
175 1
176 1 #ifdef _PAGES_
page = (page<<1);
C51 COMPILER V7.50 EEPROM 05/26/2009 15:22:14 PAGE 4
device_addr = (0xa0|page); //器件地址引腳固定接地
#else
180 1 device_addr = 0xa0;
181 1 #endif
182 1
183 1 ST_EEPROM(); //啟動
184 1 write(device_addr); //寫器件地址
185 1 ack_state=TEST_ACK();
186 1
187 1 #ifdef _16_BITS_ADDRESS_
write(address_h);
ack_state=TEST_ACK();
#endif
191 1
192 1 write(address_l);
193 1 ack_state=TEST_ACK();
194 1 ST_EEPROM(); //再次啟動
195 1 write(device_addr|1); //讀器件地址10100001
196 1 ack_state=TEST_ACK();
197 1 rd_data=read(); //讀數(shù)據(jù)
198 1 NOT_ACK(); //無應(yīng)答信號
199 1 END_EEPROM();
200 1 delay_us(300);
201 1
202 1 return rd_data;
203 1 }
*** WARNING C280 IN LINE 171 OF EEPROM.C: 'page': unreferenced local variable
*** WARNING C280 IN LINE 171 OF EEPROM.C: 'address_h': unreferenced local variable
204
205 //===============================================================================
206 //連續(xù)寫EEPROM多個字節(jié)子程序,參數(shù)1為要寫首地址的高字節(jié),參數(shù)2為要寫首地址的低字節(jié),
207 //參數(shù)3為要寫的字節(jié)數(shù),參數(shù)4為要寫字節(jié)的首地址
208 //-------------------------------------------------------------------------------
209
210 void WR_BYTES(unsigned char page,uchar init_address_h,uchar init_address_l,uchar number,uchar *data1)
211 {
212 1 unsigned char i;
213 1 unsigned char device_addr;
214 1
215 1 #ifdef _PAGES_
page = (page<<1);
device_addr = (0xa0|page); //器件地址引腳固定接地
#else
219 1 device_addr = 0xa0;
220 1 #endif
221 1
222 1 ST_EEPROM();
223 1 write(device_addr);
224 1 ack_state=TEST_ACK();
225 1
226 1 #ifdef _16_BITS_ADDRESS_
write(init_address_h);
ack_state=TEST_ACK();
#endif
230 1
231 1 write(init_address_l);
232 1 ack_state=TEST_ACK();
233 1
234 1 for(i=0;i<number;i++)
235 1 {
236 2 write(data1[i]);
237 2 if(TEST_ACK())
C51 COMPILER V7.50 EEPROM 05/26/2009 15:22:14 PAGE 5
238 2 ;
239 2 }
240 1 END_EEPROM();
241 1 delay_us(300);
242 1 }
*** WARNING C280 IN LINE 210 OF EEPROM.C: 'page': unreferenced local variable
*** WARNING C280 IN LINE 210 OF EEPROM.C: 'init_address_h': unreferenced local variable
243
244 //===============================================================================
245 //連續(xù)讀EEPROM多個字節(jié)子程序,參數(shù)1為要讀首地址的高字節(jié),參數(shù)2為要讀寫首地址的低字節(jié),
246 //參數(shù)3為要讀的字節(jié)數(shù),參數(shù)4為要讀字節(jié)的首地址
247 //-------------------------------------------------------------------------------
248 void RD_BYTES(unsigned char page,uchar init_address_h,uchar init_address_l,uchar number,uchar *data1)
249 {
250 1 unsigned char i;
251 1 unsigned char device_addr;
252 1
253 1 #ifdef _PAGES_
page = (page<<1);
device_addr = (0xa0|page); //器件地址引腳固定接地
#else
257 1 device_addr = 0xa0;
258 1 #endif
259 1
260 1 ST_EEPROM();
261 1 write(device_addr);
262 1 ack_state=TEST_ACK();
263 1
264 1 #ifdef _16_BITS_ADDRESS_
write(init_address_h);
ack_state=TEST_ACK();
#endif
268 1
269 1 write(init_address_l);
270 1 ack_state=TEST_ACK();
271 1 ST_EEPROM();
272 1 write(device_addr|1);
273 1 ack_state=TEST_ACK();
274 1
275 1 for(i=0;i<number-1;i++)
276 1 {
277 2 *data1=read();
278 2 ACK();
279 2 data1++;
280 2 }
281 1
282 1 *data1 = read();
283 1 NOT_ACK();
284 1
285 1 END_EEPROM();
286 1 delay_us(300);
287 1 }
*** WARNING C280 IN LINE 248 OF EEPROM.C: 'page': unreferenced local variable
*** WARNING C280 IN LINE 248 OF EEPROM.C: 'init_address_h': unreferenced local variable
288
289
290
291 //---------
292
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 EEPROM 05/26/2009 15:22:14 PAGE 6
CODE SIZE = 506 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 32
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 8 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -