📄 eeprom.lst
字号:
C51 COMPILER V7.20 EEPROM 11/18/2004 17:33:52 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN D:\TEST\TV\EEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\TEST\TV\EEPROM.C DB SB OE
line level source
1 //#pragma ot(6,SIZE)
2 #include <REG52.H>
3 #include <intrins.h>
4 #include <constant.h>
5
6 /*****************以下是对IIC总线的操作子程序***/
7 /*****************启动总线**********************/
8 void IICStart(void)
9 {
10 1 SCL=0; //
11 1 SDA=1;
12 1 SCL=1;
13 1 _nop_();
14 1 _nop_();
15 1 SDA=0;
16 1 _nop_();
17 1 _nop_();
18 1 SCL=0;
19 1 SDA=1; //
20 1 }
21
22 /*****************停止IIC总线****************/
23 void IICStop(void)
24 {
25 1 SCL=0;
26 1 SDA=0;
27 1 SCL=1;
28 1 _nop_();
29 1 _nop_();
30 1 SDA=1;
31 1 _nop_();
32 1 _nop_();
33 1 }
34
35 /**************检查应答位*******************/
36 bit IICRecAck(void)
37 {
38 1 SCL=0;
39 1 SDA=1;
40 1 SCL=1;
41 1 _nop_();
42 1 _nop_();
43 1 CY=SDA; //因为返回值总是放在CY中的
44 1 SCL=0;
45 1 return(CY);
46 1 }
47
48 /***************对IIC总线产生应答*******************/
49 void IICACK(void)
50 {
51 1 SDA=0;
52 1 SCL=1;
53 1 _nop_();
54 1 _nop_();
55 1 SCL=0;
C51 COMPILER V7.20 EEPROM 11/18/2004 17:33:52 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 SDA=1;
59 1 }
60
61 /*****************不对IIC总线产生应答***************/
62 void IICNoAck(void)
63 {
64 1 SDA=1;
65 1 SCL=1;
66 1 _nop_();
67 1 _nop_();
68 1 SCL=0;
69 1 }
70
71 /*******************向IIC总线写数据*********************/
72 void IICSendByte(unsigned char sendbyte)
73 {
74 1 unsigned char data j=8;
75 1 for(;j>0;j--)
76 1 {
77 2 SCL=0;
78 2 sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
79 2 SDA=CY;
80 2 SCL=1;
81 2 }
82 1 SCL=0;
83 1 }
84
85 /**********************从IIC总线上读数据子程序**********/
86 unsigned char IICReceiveByte(void)
87 {
88 1 register receivebyte,i=8;
89 1 SCL=0;
90 1 while(i--)
91 1 {
92 2 SCL=1;
93 2 receivebyte=(receivebyte<<1)|SDA;
94 2 SCL=0;
95 2 }
96 1 return(receivebyte);
97 1 }
98
99 /***************一个简单延时程序************************/
100 void Delay(unsigned char DelayCount)
101 {
102 1 while(DelayCount--);
103 1 }
104
105
106 //----------------------EEPROM AT24C02 Operation----------------
107 //#define EEPROM_WRITE 0xA0
108 //#define EEPROM_READ 0xA1
109
110 //raddr: 24C02 read first address
111 //rdata: data buffer
112 //num: valid data num
113 bit ReadEEPROM(unsigned char raddr,unsigned char *rdata,unsigned char num)
114 {
115 1 unsigned char i;
116 1 bit errorflag=1;
117 1 i=ERRORCOUNT;
C51 COMPILER V7.20 EEPROM 11/18/2004 17:33:52 PAGE 3
118 1 while(i--)
119 1 {
120 2 IICStart();
121 2 IICSendByte(EEPROM_WRITE);
122 2 if(IICRecAck())
123 2 continue;
124 2 IICSendByte(raddr);
125 2 if(IICRecAck())
126 2 continue;
127 2 IICStart();
128 2 IICSendByte(EEPROM_READ);
129 2 if(IICRecAck())
130 2 continue;
131 2 while(--num)
132 2 {
133 3 *rdata++=IICReceiveByte();
134 3 IICACK();
135 3 }
136 2 *rdata=IICReceiveByte(); //read last byte data
137 2 IICNoAck();
138 2 IICStop();
139 2 errorflag=0;
140 2 break;
141 2 }
142 1 return(errorflag);
143 1 }
144
145
146 //waddr: 24C02 write first address
147 //wdata: data buffer
148 //num: valid data num
149 //if success return 0,else return 1;
150 bit WriteEEPROM(unsigned char waddr,unsigned char *wdata,unsigned char num)
151 {
152 1 unsigned char i;
153 1 bit errorflag=0;
154 1 i=ERRORCOUNT;
155 1 while(i--)
156 1 {
157 2 IICStart();
158 2 IICSendByte(EEPROM_WRITE);
159 2 if(IICRecAck())
160 2 continue;
161 2 IICSendByte(waddr);
162 2 if(IICRecAck())
163 2 continue;
164 2 while(num--)
165 2 {
166 3 IICSendByte(*wdata++);
167 3 if(!IICRecAck())
168 3 continue;
169 3 errorflag=1;
170 3 break;
171 3 }
172 2 if(!errorflag)
173 2 break;
174 2 }
175 1 IICStop();
176 1 Delay(255);
177 1 Delay(255);
178 1 Delay(255);
179 1 Delay(255);
C51 COMPILER V7.20 EEPROM 11/18/2004 17:33:52 PAGE 4
180 1 if(i==0)
181 1 errorflag=1;
182 1 return(errorflag);
183 1 }
184
185 //----------------------END EEPROM AT24C02 Operation----------------
186
187
C51 COMPILER V7.20 EEPROM 11/18/2004 17:33:52 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
IICStop. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
IICRecAck. . . . . . . . . . . . . . . PUBLIC CODE PROC 0008H -----
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1
IICNoAck . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
IICACK . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_ReadEEPROM. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
raddr. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0005H 1
rdata. . . . . . . . . . . . . . . . AUTO DATA PTR 0001H 3
num. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
errorflag. . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
IICReceiveByte . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
receivebyte. . . . . . . . . . . . . * REG * DATA INT 0004H 2
i. . . . . . . . . . . . . . . . . . AUTO DATA INT 0000H 2
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
_WriteEEPROM . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
waddr. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0005H 1
wdata. . . . . . . . . . . . . . . . AUTO DATA PTR 0001H 3
num. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
errorflag. . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
_Delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0007H -----
DelayCount . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
SDA. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0080H 1
_IICSendByte . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
sendbyte . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
j. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
SCL. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0081H 1
IICStart . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 341 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -