📄 24c02.lst
字号:
C51 COMPILER V7.50 24C02 07/22/2007 16:13:48 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"REG51F.h"
2 #include"intrins.h"
3 #include"USEH1.h"
4 #include"24c02.h"
5
6 //读写控制命令
7 //const uchar WR24C02 = 0xA0; //EEPROM地址+写命令
8 //const uchar RD24C02 = 0xA1; //EEPROM地址+读命令
9 #define WR24C02 0xA0
10 #define RD24C02 0xA1
11 //用户变量声明
12 bit ErrorBit; //读写错误标志 1错误 0 正确
13 uchar ErrorCode; //错误码
14
15 void Start(void);
16 void Stop(void);
17 void Ack(void);
18 void NoAck(void);
19 void TestAck(void);
20 void WriteI2c(uchar date);
21 uchar ReadI2c(void);
22 //void DelayMs(uchar time);
23
24
25 /***************************************
26 *函数名称: void Start(void)
27 *功能描述: 读写开始
28 *输入: 无
29 *输出: 无
30 *全局变量: I2C_SCL,I2C_SDA
31 *调用模块: 无
32
33 ****************************************/
34 void Start(void)
35 {
36 1 I2C_SDA = 1; //起始条件的数据信号
37 1 _nop_();
38 1 I2C_SCL = 1; //起始条件时钟信号
39 1 _nop_(); //信号建立时间>4.7us
40 1 _nop_();
41 1 _nop_();
42 1 _nop_();
43 1 _nop_();
44 1 I2C_SDA = 0; //起始信号
45 1 _nop_();
46 1 _nop_();
47 1 _nop_();
48 1 _nop_();
49 1 _nop_();
50 1 I2C_SCL = 0; //钳住I2C总线, 准备发送或者接受数据
51 1 _nop_();
52 1 _nop_();
53 1 }
54 /***************************************
55 *函数名称: void Stop(void)
C51 COMPILER V7.50 24C02 07/22/2007 16:13:48 PAGE 2
56 *功能描述: 读写结束
57 *输入: 无
58 *输出: 无
59 *全局变量: I2C_SCL,I2C_SDA
60 *调用模块: 无
61
62 ****************************************/
63 void Stop(void)
64 {
65 1 I2C_SDA = 0; //结束条件的数据信号
66 1 _nop_();
67 1 I2C_SCL = 1; //结束条件的时钟信号
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1 _nop_();
73 1 I2C_SDA = 1; //结束信号
74 1 _nop_();
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 }
79 /***************************************
80 *函数名称: void Ack(void)
81 *功能描述: 正确应答,读一个字节后必须应答
82 *输入: 无
83 *输出: 无
84 *全局变量: I2C_SCL,I2C_SDA
85 *调用模块: 无
86
87 ****************************************/
88 void Ack(void)
89 {
90 1 I2C_SDA = 0;
91 1 _nop_();
92 1 _nop_();
93 1 I2C_SCL = 1;
94 1 _nop_();
95 1 _nop_();
96 1 _nop_();
97 1 //_nop_();
98 1 //_nop_();
99 1 I2C_SCL = 0;
100 1 _nop_();
101 1 _nop_();
102 1 I2C_SDA = 1;
103 1 _nop_();
104 1 _nop_();
105 1 }
106 /***************************************
107 *函数名称: void NoAck(void)
108 *功能描述: 无应答
109 *输入: 无
110 *输出: 无
111 *全局变量: I2C_SCL,I2C_SDA
112 *调用模块: 无
113
114 ****************************************/
115 void NoAck(void)
116 {
117 1 I2C_SDA = 1;
C51 COMPILER V7.50 24C02 07/22/2007 16:13:48 PAGE 3
118 1 _nop_();
119 1 _nop_();
120 1 I2C_SCL = 1;
121 1 _nop_();
122 1 _nop_();
123 1 _nop_();
124 1 _nop_();
125 1 _nop_();
126 1 I2C_SCL = 0;
127 1 _nop_();
128 1 _nop_();
129 1 }
130 /***************************************
131 *函数名称: void TestAck(void)
132 *功能描述: 读写错误测试,写一个字节应该测试应答信号
133 *输入: 无
134 *输出: 返回一个位
135 *全局变量: I2C_SCL,I2C_SDA
136 *调用模块: 无
137
138 ****************************************/
139 void TestAck(void)
140 {
141 1 I2C_SDA = 1;
142 1 _nop_();
143 1 _nop_();
144 1 I2C_SCL = 1;
145 1 _nop_();
146 1 _nop_();
147 1 _nop_();
148 1 ErrorBit = I2C_SDA;
149 1 I2C_SCL = 0;
150 1 _nop_();
151 1 _nop_();
152 1 }
153 /***************************************
154 *函数名称: void WriteI2c(uchar date)
155 *功能描述: 写I2C
156 *输入: 待送数据,高字节先送
157 *输出: 无
158 *全局变量: I2C_SCL,I2C_SDA
159 *调用模块: 无
160
161 ****************************************/
162 void WriteI2c(uchar date)
163 {
164 1 uchar i;
165 1 for(i=0; i<8; i++)
166 1 {
167 2 I2C_SDA = date & 0x80; //送数据到数据线上
168 2 date <<= 1;
169 2 _nop_();
170 2 I2C_SCL = 1; //置时钟信号为高电平,使数据有效
171 2 _nop_();
172 2 _nop_();
173 2 _nop_();
174 2 _nop_();
175 2 _nop_();
176 2 I2C_SCL = 0;
177 2 _nop_();
178 2 _nop_();
179 2 }
C51 COMPILER V7.50 24C02 07/22/2007 16:13:48 PAGE 4
180 1 }
181 /***************************************
182 *函数名称: uchar ReadI2c(void)
183 *功能描述: 读I2C
184 *输入: 无
185 *输出: 返回一个字节的数据,高字节在前
186 *全局变量: I2C_SCL,I2C_SDA
187 *调用模块: 无
188
189 ****************************************/
190 uchar ReadI2c(void)
191 {
192 1 uchar i;
193 1 uchar byte = 0;
194 1 for(i=0; i<8; i++)
195 1 {
196 2 I2C_SCL = 0; //置时钟为低电平,准备接受数据
197 2 _nop_();
198 2 _nop_();
199 2 _nop_();
200 2 _nop_();
201 2 _nop_();
202 2 I2C_SCL = 1; //置时钟为高电平,使数据线数据有效
203 2 _nop_();
204 2 _nop_();
205 2 byte <<= 1;
206 2 byte |= I2C_SDA;
207 2 _nop_();
208 2 _nop_();
209 2 I2C_SCL = 0;
210 2 }
211 1 return(byte);
212 1 }
213 /***************************************
214 *函数名称: void DelayMs(uchar time)
215 *功能描述: 延时
216 *输入: 延时时间
217 *输出: 无
218 *全局变量: 无
219 *调用模块: 无
220
221 ****************************************/
222 /*void DelayMs(uchar time)
223 {
224 uchar i;
225 do
226 {
227 for(i=0; i<125; i++); //*延时 8us x 125 = 1ms
228 }
229 while(time--);
230 }*/
231 /***************************************
232 *函数名称: void WriteDate(uchar StartAddress,uchar *date,uchar bytes)
233 *功能描述: 写数据
234 *输入: 数据开始地址,保存数据指针,数据字节数
235 *输出: 无
236 *全局变量: 无
237 *调用模块: Start(),WriteI2c(),Stop(),TestAck()
238 *注意事项: 调用之前,需要定义一个数组,用来存待发送的数据
239 ****************************************/
240 void WriteDate(uchar StartAddress, uchar *date, uchar bytes)
241 {
C51 COMPILER V7.50 24C02 07/22/2007 16:13:48 PAGE 5
242 1 uchar i = 0;
243 1 Start();
244 1 WriteI2c(WR24C02);
245 1 TestAck();
246 1 WriteI2c(StartAddress);
247 1 TestAck();
248 1 for(i=0; i<bytes; i++)
249 1 {
250 2 WriteI2c(*date);
251 2 TestAck();
252 2 date++;
253 2 }
254 1 Stop();
255 1 //DelayMs(20);
256 1 }
257 /***************************************
258 *函数名称: void ReadDate(uchar StartAddress,uchar *date,uchar bytes)
259 *功能描述: 读数据
260 *输入: 数据开始地址,读取数据指针,数据字节数
261 *输出: 无
262 *全局变量: 无
263 *调用模块: Start(),WriteI2c(),ReadI2c(),Ack(),NoAck(),Stop(),TestAck()
264 *注意事项: 调用之前,需要定义一个数组,用来存读取的数据
265 ****************************************/
266 void ReadDate(uchar StartAddress, uchar *date, uchar bytes)
267 {
268 1 uchar i;
269 1 Start();
270 1 WriteI2c(WR24C02);
271 1 TestAck();
272 1 WriteI2c(StartAddress);
273 1 TestAck();
274 1 Start();
275 1 WriteI2c(RD24C02);
276 1 TestAck();
277 1 for (i=0; i<bytes; i++)
278 1 {
279 2 *date = ReadI2c();
280 2 Ack();
281 2 date++;
282 2 }
283 1 NoAck();
284 1 Stop();
285 1 //DelayMs(10);
286 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 253 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 10
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -