📄 24c01a.lst
字号:
C51 COMPILER V8.02 24C01A 03/10/2007 21:11:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24C01A
OBJECT MODULE PLACED IN 24c01a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c01a.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <reg51.h>
3 #include <intrins.h>
4 //#include <stdio.h>
5 //#include <absacc.h>
6
7 #define uchar unsigned char
8 #define uint unsigned int
9 #define WriteDeviceAddress 0xa0
10 #define ReadDviceAddress 0xa1
11
12
13
14
15 uchar get_code(uchar i);
16 void display(uchar i,uchar j,uchar k,uchar l);
17 void DelayMs(uint number);
18 void Start(void);
19 void Stop(void);
20 void Ack(void);
21 void NoAck(void);
22 bit TestAck(void);
23 void Write8Bit(uchar input);
24 uchar Read8Bit(void);
25 void Write24c02(uchar Romadd,uchar number,uchar *Wdata);
26 void Read24c02(uchar RomAddress, uchar num,uchar *RamAddress);
27
28
29
30 sbit SCL=P1^6;
31 sbit SDA=P1^7;
32 bit bdata NACK=0;//器件坏或错误标志;
33 uchar idata MTD[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //数据发送缓冲区
34 uchar idata MRD[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //数据接收缓冲区
35
36 /***************************************************************************/
37
38 main()
39 {
40 1 uchar i;
41 1 Write24c02(0x00,8,MTD);
42 1 Read24c02(0x00,8,MRD);
43 1 for(i=0;i<8;i++)
44 1 {
45 2 display(MRD[i],MRD[i],MRD[i],MRD[i]);
46 2 }
47 1 while(1);
48 1 }
49
50 /*************************************功能:发起始信号*******************************/
51 /*****************当SCL为高电平时,SDA发生由高到低跳变为开始信号*********************/
52 void Start()
53 {SCL=0;
54 1 SDA=1;
55 1 _nop_();_nop_();_nop_();_nop_();
C51 COMPILER V8.02 24C01A 03/10/2007 21:11:14 PAGE 2
56 1 SCL=1;
57 1 _nop_();_nop_();_nop_();_nop_();
58 1 SDA=0;
59 1 _nop_();_nop_();_nop_();_nop_();
60 1 SCL=0;
61 1 return;
62 1 }
63 /***************************************************************************/
64
65
66
67
68
69 /*********************************功能:发停止信**********************************/
70 /****************当SCL为高电平时,SDA发生由低到高跳变为结束信号*******************/
71 void Stop()
72 { SCL=0;
73 1 SDA=0;
74 1 _nop_();_nop_();_nop_();_nop_();
75 1 SCL=1;
76 1 _nop_();_nop_();_nop_();_nop_();
77 1 SDA=1;//放开总线
78 1 _nop_();_nop_();_nop_();_nop_();
79 1 return;
80 1 }
81 /***************************************************************************/
82
83
84
85
86 /*********************************功能:发响应信号***************************/
87 void Ack()
88 {SCL=0;
89 1 SDA=0;
90 1 _nop_();_nop_();_nop_();_nop_();
91 1 SCL=1;
92 1 _nop_();_nop_();//_nop_();_nop_();
93 1 SCL=0;
94 1 _nop_();_nop_();_nop_();_nop_();
95 1 return;
96 1 }
97 /***************************************************************************/
98
99
100
101
102
103 /*********************************功能:发非响应信号*************************/
104 void NoAck()
105 {
106 1 SCL=0;
107 1 SDA=1;
108 1 _nop_();_nop_();_nop_();_nop_();
109 1 SCL=1;
110 1 _nop_();_nop_();_nop_();_nop_();
111 1 SCL=0;
112 1 return;
113 1 }
114 /***************************************************************************/
115
116
117
C51 COMPILER V8.02 24C01A 03/10/2007 21:11:14 PAGE 3
118
119 /*****************************测试响应信号(不完善需改动)**********************************/
120 bit TestAck()
121 {
122 1 bit ErrorBit;
123 1 SCL=0;
124 1 SDA=1;
125 1 _nop_();_nop_();_nop_();_nop_();
126 1 SCL=1;
127 1 _nop_();_nop_();_nop_();_nop_();
128 1 ErrorBit=SDA;
129 1 SCL=0;
130 1 SDA=1;
131 1 return(ErrorBit);
132 1 }
133 /***************************************************************************/
134
135
136
137
138
139
140
141
142
143 /*****************************写一字节**********************************/
144 void Write8Bit(unsigned char input)
145 {
146 1 unsigned char temp;
147 1 for(temp=8;temp!=0;temp--)
148 1 {
149 2 SCL=0;
150 2 SDA=(bit)(input&0x80);
151 2 _nop_();_nop_();_nop_();_nop_();
152 2 SCL=1;
153 2 _nop_();_nop_();_nop_();_nop_();
154 2 SCL=0;
155 2 input=input<<1;
156 2 }
157 1 }
158 /***************************************************************************/
159
160
161 /********************************读一字节**********************************/
162 unsigned char Read8Bit()
163 {
164 1 unsigned char temp,rbyte=0;
165 1 SDA=1;
166 1 for(temp=8;temp!=0;temp--)
167 1 {
168 2 SCL=0;
169 2 _nop_();_nop_();_nop_();_nop_();
170 2 SCL=1;
171 2 _nop_();_nop_();_nop_();_nop_();
172 2 rbyte=rbyte<<1;
173 2 rbyte=rbyte|((unsigned char)(SDA));
174 2 SCL=0;
175 2 SDA=1;
176 2 }
177 1 return(rbyte);
178 1 }
179 /***************************************************************************/
C51 COMPILER V8.02 24C01A 03/10/2007 21:11:14 PAGE 4
180
181
182 /*********************************多字节写操作******************************************/
183 /*Wdata为待写数据所在的首地址,RomAddress为将存储的存储卡地址,number为将写入的数据个数*/
184
185 void Write24c02(uchar RomAdd,uchar number,uchar *Wdata)
186 {
187 1 uchar i;
188 1 Start();
189 1 Write8Bit(WriteDeviceAddress); //发送从地址
190 1 i=TestAck();
191 1 if(i==1)
192 1 {
193 2 NACK=1;
194 2 return;
195 2 }
196 1 Write8Bit(RomAdd); //发送子地址
197 1 i=TestAck();
198 1 if(i==1)
199 1 {
200 2 NACK=1;
201 2 return;
202 2 }
203 1 for(;number!=0;number--)
204 1 {
205 2 Write8Bit(*Wdata);
206 2 i=TestAck();
207 2 if(i==1)
208 2 {
209 3 NACK=1;
210 3 return;
211 3 }
212 2 Wdata++;
213 2
214 2 }
215 1
216 1 Stop();
217 1 DelayMs(10);
218 1
219 1 }
220 /**********************************************************************************/
221
222
223
224 /*********************************多字节读操作***************************************/
225 /*************RamAddress为待将读出的数据所放的单片机的首地址,RomAddress*************/
226 /***************为待读数据在存储卡的首地址,number为将读出的数据个数*****************/
227 void Read24c02(uchar RomAddress,uchar num,uchar *RamAddress)
228
229 {
230 1 uchar i;
231 1 Start();
232 1 Write8Bit(WriteDeviceAddress);
233 1 i=TestAck();
234 1 if(i==1)
235 1 {
236 2 NACK=1;
237 2 return;
238 2 }
239 1 Write8Bit(RomAddress); //子地址
240 1 i=TestAck();
241 1 if(i==1)
C51 COMPILER V8.02 24C01A 03/10/2007 21:11:14 PAGE 5
242 1 {
243 2 NACK=1;
244 2 return;
245 2 }
246 1 Start();
247 1 Write8Bit(ReadDviceAddress);
248 1 i=TestAck();
249 1 if(i==1)
250 1 {
251 2 NACK=1;
252 2 return;
253 2 }
254 1 while(num!=1)
255 1 {
256 2 *RamAddress=Read8Bit();
257 2 Ack();
258 2 RamAddress++;
259 2 num--;
260 2 }
261 1 *RamAddress=Read8Bit();
262 1 NoAck();
263 1 Stop();
264 1 }
265 /***************************************************************************/
266
267
268
269 //-----------------------------------------------------------------
270 //函数名称:DelayMS()
271 //功能:实现廷时(number)mS
272 //-----------------------------------------------------------------
273 void DelayMs(uint number)
274 {
275 1 unsigned char temp;
276 1 for(;number!=0;number--)
277 1 {
278 2 for(temp=125;temp!=0;temp--)
279 2 { }
280 2 }
281 1 }
282
283
284
285 //--------------------------------------------------------------
286 //函数名称:get_code
287 //功能:获得对应的共阳极码
288 //--------------------------------------------------------
289 uchar get_code(uchar k)
290 {
291 1 unsigned char p;
292 1 switch (k){
293 2 case 0: p=0x3F; break; /*0*/
294 2 case 1: p=0x06; break; /*1*/
295 2 case 2: p=0x5B; break; /*2*/
296 2 case 3: p=0x4F; break; /*3*/
297 2 case 4: p=0x66; break; /*4*/
298 2 case 5: p=0x6D; break; /*5*/
299 2 case 6: p=0x7D; break; /*6*/
300 2 case 7: p=0x07; break; /*7*/
301 2 case 8: p=0x7F; break; /*8*/
302 2 case 9: p=0x67; break; /*9*/
303 2 case 10: p=0x77; break; /*A*/
C51 COMPILER V8.02 24C01A 03/10/2007 21:11:14 PAGE 6
304 2 case 11: p=0x7C; break; /*B*/
305 2 case 12: p=0x39; break; /*C*/
306 2 case 13: p=0x5E; break; /*D*/
307 2 case 14: p=0x79; break; /*E*/
308 2 case 15: p=0x71; break; /*F*/
309 2 case 16: p=0x00; break; /*灭灯*/
310 2 default: break;}
311 1 return (p);
312 1 }
313
314
315 //-----------------------------------------------------------
316 //函数名称:display
317 //功能:动态数码显示
318 //-----------------------------------------------------------
319 void display(uchar i,uchar j,uchar k,uchar l)
320 { uchar ii;
321 1 for(ii=0;ii<250;ii++)
322 1 {
323 2 P0=get_code(i);
324 2 P2=0x8F;
325 2 DelayMs(2);
326 2 P0=get_code(j);
327 2 P2=0x4F;
328 2 DelayMs(2);
329 2 P0=get_code(k);
330 2 P2=0x2F;
331 2 DelayMs(2);
332 2 P0=get_code(l);
333 2 P2=0x1F;
334 2 DelayMs(2);
335 2 }
336 1 P2=0x0F;
337 1 }
338
339
340
341
342
343
344
345
346
347
348
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 610 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = 16 ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -