📄 eeprom.lst
字号:
C51 COMPILER V7.50 EEPROM 03/28/2007 11:36:57 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE EEPROM.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include <intrins.h>
3 #include "Define.h"
4 #include "Set.h"
5
6
7 /*有关全局变量*/
8 sbit Sda= P1^7; /*串行数据*/
9 sbit Scl= P1^6; /*串行时钟*/
10
11 //////////////////////////////////////////////////////////////////////////////
12 void mDelay(UCHARIDATA j)
13 {
14 1 UCHARIDATA i;
15 1
16 1 for(;j>0;j--)
17 1 {
18 2 for(i=0;i<125;i--)
19 2 {
20 3 ;
21 3 }
22 2 }
23 1 }
24
25 /*发送起始条件*/
26 void Start(void) /*起始条件*/
27 {
28 1 Sda=1;
29 1 Scl=1;
30 1 _nop_ ();
31 1 _nop_ ();
32 1 _nop_ ();
33 1 Sda=0;
34 1 _nop_ ();
35 1 _nop_ ();
36 1 _nop_ ();
37 1 }
38
39 void Stop(void) /*停止条件*/
40 {
41 1 Sda=0;
42 1 Scl=1;
43 1 _nop_ ();
44 1 _nop_ ();
45 1 _nop_ ();
46 1 Sda=1;
47 1 _nop_ ();
48 1 _nop_ ();
49 1 _nop_ ();
50 1 }
51
52 void Ack(void) /*应答位*/
53 {
54 1 Sda=0;
55 1 _nop_ ();
C51 COMPILER V7.50 EEPROM 03/28/2007 11:36:57 PAGE 2
56 1 _nop_ ();
57 1 _nop_ ();
58 1 Scl=1;
59 1 _nop_ ();
60 1 _nop_ ();
61 1 _nop_ ();
62 1 Scl=0;
63 1 }
64
65 void NoAck(void) /*反向应答位*/
66 {
67 1 Sda=1;
68 1 _nop_ ();
69 1 _nop_ ();
70 1 _nop_ ();
71 1 Scl=1;
72 1 _nop_ ();
73 1 _nop_ ();
74 1 _nop_ ();
75 1 Scl=0;
76 1 }
77
78 void Send(UCHARIDATA Data) /*发送数据子程序,Data为要求发送的数据*/
79 {
80 1 UCHARIDATA BitCounter=8; /*位数控制*/
81 1 UCHARIDATA temp; /*中间变量控制*/
82 1
83 1 do
84 1 {
85 2 temp=Data;
86 2 Scl=0;
87 2 _nop_ ();
88 2 _nop_ ();
89 2 _nop_ ();
90 2
91 2 if((temp&0x80)==0x80)/* 如果最高位是1*/
92 2 {
93 3 Sda=1;
94 3 }
95 2 else
96 2 {
97 3 Sda=0;
98 3 }
99 2
100 2 Scl=1;
101 2 temp=Data<<1; /*RLC*/
102 2 Data=temp;
103 2 BitCounter--;
104 2 }while(BitCounter);
105 1
106 1 Scl=0;
107 1 }
108
109
110 UCHAR Read(void) /*读一个字节的数据,并返回该字节值*/
111 {
112 1 UCHARIDATA temp=0;
113 1 UCHARIDATA temp1=0;
114 1 UCHARIDATA BitCounter=8;
115 1
116 1 Sda=1;
117 1 do
C51 COMPILER V7.50 EEPROM 03/28/2007 11:36:57 PAGE 3
118 1 {
119 2 Scl=0;
120 2 _nop_ ();
121 2 _nop_ ();
-
122 2 _nop_ ();
123 2 Scl=1;
124 2 _nop_ ();
125 2 _nop_ ();
126 2 _nop_ ();
127 2
128 2 if(Sda) /*如果Sda=1;*/
129 2 {
130 3 temp=temp|0x01; /*temp的最低位置1*/
131 3 }
132 2 else
133 2 {
134 3 temp=temp&0xfe; /*否则temp的最低位清0*/
135 3 }
136 2
137 2 if(BitCounter-1)
138 2 {
139 3 temp1=temp<<1;
140 3 temp=temp1;
141 3 }
142 2
143 2 BitCounter--;
144 2 }while(BitCounter);
145 1
146 1 return(temp);
147 1 }
148
149 void ByteWrite(UCHARIDATA Data[],UCHARIDATA Address,UCHARIDATA Num)
150 {
151 1 UCHARIDATA i;
152 1 UCHARIDATA *PData;
153 1 PData=Data;
154 1
155 1 for(i=0;i<Num;i++)
156 1 {
157 2 Start(); /*发送启动信号*/
158 2
159 2 Send(0xa0); /*发送SLA+W*/
160 2 Ack();
161 2 Send(Address+i); /*发送地址*/
162 2 Ack();
163 2 Send(*(PData+i));
164 2 Ack();
165 2
166 2 Stop();
167 2 mDelay(20);
168 2 }
169 1 }
170
171 ///////////////////////////PAGE WRITE////////////////////////////////////
172 void PageWrite(UCHARIDATA Data[],UCHARIDATA Address)
173 {
174 1 UCHARIDATA i;
175 1 UCHARIDATA *PData;
176 1 PData=Data;
177 1
178 1 Start(); /*发送启动信号*/
C51 COMPILER V7.50 EEPROM 03/28/2007 11:36:57 PAGE 4
179 1
180 1 Send(0xa0); /*发送SLA+W*/
181 1 Ack();
182 1 Send(Address); /*发送地址*/
183 1 Ack();
184 1
185 1 for(i=0;i<6;i++)
186 1 {
187 2
188 2 Send(*(PData+i));
189 2 Ack();
190 2
191 2 }
192 1
193 1 Stop();
194 1 mDelay(20);
195 1 }
196 ///////////////////////////RandomRead////////////////////////////////////
197
198 void RandomRead(UCHARIDATA Data[],UCHARIDATA Address,UCHARIDATA Num)
199 {
200 1 UCHARIDATA i;
201 1 UCHARIDATA *PData;
202 1 PData=Data;
203 1
204 1 for(i=0;i<Num;i++)
205 1 {
206 2 Start();
207 2
208 2 Send(0xa0);
209 2 Ack();
210 2 Send(Address+i);
211 2 Ack();
212 2
213 2 Start();
214 2 Send(0xa1);
215 2 Ack();
216 2
217 2 *(PData+i)=Read();
218 2 mDelay(20);
219 2 Scl=0;
220 2 NoAck();
221 2
222 2 Stop();
223 2 }
224 1
225 1 mDelay(10);
226 1
227 1 }
228
229 //////////////////////Current Address Read//////////////////////////////////
230 void CurrentAddressRead(UCHARIDATA *pData)
231 {
232 1 UCHARIDATA *pTemp;
233 1 pTemp=pData;
234 1
235 1 Start();
236 1 Send(0xa1);
237 1 Ack();
238 1
239 1 *pTemp=Read();
240 1 mDelay(20);
C51 COMPILER V7.50 EEPROM 03/28/2007 11:36:57 PAGE 5
241 1
242 1 Scl=0;
243 1 NoAck();
244 1
245 1 Stop();
246 1
247 1 }
248
249
250 void SequentialRead(UCHARIDATA Data[],UCHARIDATA Num)
251 {
252 1 UCHARIDATA i;
253 1 UCHARIDATA *PData;
254 1 PData=Data;
255 1
256 1 Start(); /*发送启动信号*/
257 1 Send(0xa1);
258 1 Ack();
259 1
260 1 for(i=0;i<Num-1;i++)
261 1 {
262 2 *(PData+i)=Read();
263 2 mDelay(20);
264 2 Scl=0;
265 2 Ack();
266 2
267 2 }
268 1
269 1 *(PData+Num-1)=Read();
270 1 mDelay(20);
271 1 Scl=0;
272 1 NoAck();
273 1
274 1 Stop();
275 1
276 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 468 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
IDATA SIZE = ---- 10
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 + -