📄 eeprom.lst
字号:
C51 COMPILER V7.20 EEPROM 02/20/2006 10:14:06 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN .\output\eeprom.obj
COMPILER INVOKED BY: D:\keil c51 v7.09\C51\BIN\C51.EXE eeprom.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\eeprom.lst) OBJEC
-T(.\output\eeprom.obj)
line level source
1 #ifndef _EEPROM_C_
2 #define _EEPROM_C_
3
4 #include "api.h"
5
6 #if _LCD_MENU_
7
8 /*E2PROM的读写操作*/
9 void _delay(void)
10 {
11 1 _nop_();_nop_();
12 1 }
13
14
15 void E2PROM_Delay()
16 {
17 1 BYTE delaytime;
18 1
19 1 for(delaytime=0x00;delaytime<0xf0;delaytime++)
20 1 _nop_();
21 1 for(delaytime=0x00;delaytime<0xf0;delaytime++)
22 1 _nop_();
23 1 for(delaytime=0x00;delaytime<0xf0;delaytime++)
24 1 _nop_();
25 1 for(delaytime=0x00;delaytime<0x80;delaytime++)
26 1 _nop_();
27 1 }
28
29 void I2C_start(void)
30 {
31 1 SDA=HIGH; _delay();
32 1 SCL=HIGH; _delay(); _nop_();
33 1 SDA=LOW; _delay();
34 1 SCL=LOW; _delay();
35 1 }
36
37 void I2C_stop(void)
38 {
39 1 SDA=LOW; _delay();
40 1 SCL=HIGH; _delay(); _nop_();
41 1 SDA=HIGH; _delay();
42 1 SCL=LOW; _delay();
43 1 }
44
45 BYTE I2C_clock(void)
46 {
47 1 BYTE sample;
48 1 SCL = HIGH; _delay(); _nop_();
49 1 sample = SDA;
50 1 SCL = LOW; _delay();
51 1 return sample;
52 1 }
53
54 BYTE I2C_send(BYTE I2C_data)
C51 COMPILER V7.20 EEPROM 02/20/2006 10:14:06 PAGE 2
55 {
56 1 register BYTE i;
57 1 for(i=0; i<8; i++)
58 1 {
59 2 SDA = (I2C_data&0x80) ? HIGH : LOW;
60 2 I2C_data <<= 1;
61 2 I2C_clock();
62 2 }
63 1 SDA = HIGH;
64 1 return ~I2C_clock();
65 1 }
66
67 BYTE I2C_receive(void)
68 {
69 1 register BYTE i;
70 1 BYTE I2C_data = 0;
71 1
72 1 for(i=0; i<8; i++)
73 1 {
74 2 I2C_data <<= 1;
75 2 if(I2C_clock())
76 2 I2C_data++;
77 2 }
78 1 return I2C_data;
79 1 }
80
81 void I2C_Ack(void)
82 {
83 1 SDA = LOW;
84 1 I2C_clock();
85 1 SDA = HIGH;
86 1 }
87
88 BYTE I2C_ReadData(WORD MemAddr, WORD DatLen, BYTE* DatBuf)
89 {
90 1 BYTE idata I2C_DevAddr = 0, res = 0,temp;
91 1 WORD idata i;
92 1
93 1 I2C_start();
94 1 I2C_DevAddr = 0xa0;
95 1 I2C_DevAddr |= ((MemAddr/0x100)&0x07)<<1;
96 1 if(I2C_send(I2C_DevAddr) && I2C_send((BYTE)(MemAddr&0xff)))
97 1 {
98 2 I2C_start();
99 2 I2C_DevAddr |= 0x01;
100 2 if(I2C_send(I2C_DevAddr))
101 2 {
102 3 for(i=0; i<DatLen; i++)
103 3 {
104 4 DatBuf[i] = I2C_receive();
105 4 temp= DatBuf[i] ;
106 4 if(i==DatLen-1)
107 4 {
108 5 SDA = HIGH;
109 5 I2C_clock();
110 5 I2C_stop();
111 5 }
112 4 else
113 4 I2C_Ack();
114 4 }
115 3 res = 1;
116 3 }
C51 COMPILER V7.20 EEPROM 02/20/2006 10:14:06 PAGE 3
117 2 else res = 0;
118 2 }
119 1 else res = 0;
120 1 if(res==0) I2C_stop();
121 1 return res;
122 1 }
123
124 BYTE I2C_Write16BData(WORD MemAddr, BYTE DatLen, BYTE* DatBuf)
125 {
126 1 BYTE idata I2C_DevAddr = 0, res = 0, i = 0;
127 1
128 1 I2C_start();
129 1 I2C_DevAddr = 0xa0;
130 1 I2C_DevAddr |= ((MemAddr/0x100)&0x07)<<1;
131 1 if(I2C_send(I2C_DevAddr) && I2C_send((BYTE)(MemAddr&0xff)))
132 1 {
133 2 do res = I2C_send(DatBuf[i++]);
134 2 while(res && i<DatLen);
135 2 I2C_stop();
136 2 }
137 1 else res = 0;
138 1 if(res==0) I2C_stop();
139 1 return res;
140 1 }
141
142 void I2C_WriteData(WORD MemAddr, WORD DatLen, BYTE* DatBuf)
143 {
144 1 WORD idata bMemAddr = 0;
145 1 BYTE idata i = 0 , Temp;
146 1 BYTE idata iCnt, DataCnt, DataiCnt, jCnt;
147 1 BYTE idata DataBuff[0x10];
148 1
149 1 DataCnt = (BYTE)(DatLen/0x10);
150 1 DataiCnt = (BYTE)(DatLen%0x10);
151 1 jCnt = 0;
152 1 for(iCnt=0; iCnt<(DataCnt+1); iCnt++,jCnt++)
153 1 {
154 2 bMemAddr = MemAddr+iCnt*0x10;
155 2 if(jCnt < DataCnt)
156 2 Temp = 0x10;
157 2 else Temp = DataiCnt;
158 2
159 2 for(i=0; i<Temp; i++)
160 2 DataBuff[i] = DatBuf[i+iCnt*0x10];
161 2 I2C_Write16BData(bMemAddr, Temp, DataBuff);
162 2 E2PROM_Delay();//16字节需要一个10ms延时
163 2 E2PROM_Delay();//16字节需要一个10ms延时
164 2 }
165 1 }
166
167 /*E2PROM读写操作*/
168
169 #endif
170
171 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 621 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.20 EEPROM 02/20/2006 10:14:06 PAGE 4
DATA SIZE = ---- 17
IDATA SIZE = ---- 32
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 + -