📄 240x.lst
字号:
C51 COMPILER V7.50 240X 06/02/2008 20:59:17 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 240X
OBJECT MODULE PLACED IN 240x.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 240x.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*--------------------------------------------------------
2 240x.c文件 240x-I2CROM的读写函数
3 作者:Computer-lov 创建日期:2004.11.12 最后修改日期:2004.11.21
4 版本:1.0
5 Copyright (c) 2005 Computer-lov
6 -----------------------------------------------------------*/
7
8 #include "240x.h"
9
10 /********************************************************************
11 函数功能:延时子函数。
12 入口参数:无。
13 返 回:无。
14 备 注:无。
15 ********************************************************************/
16 void delay(void)
17 {
18 1 int8 i;
19 1 for(i=0;i<1;i++);
20 1 }
21 ////////////////////////End of function//////////////////////////////
22
23 /********************************************************************
24 函数功能:EEROM写一字节函数。
25 入口参数:device_addr:设备地址;data_addr:数据地址;w_data:数据。
26 返 回:是否成功。
27 备 注:无。
28 ********************************************************************/
29 uint8 EepromWriteByte(uint8 device_addr,uint8 data_addr,uint8 w_data)
30 {
31 1 uint8 i,Device_Addr;
32 1 delay();
33 1 SDA=0; //产生一个起始位
34 1 delay();
35 1 Device_Addr=device_addr; //EEROM的地址暂存
36 1 for(i=0;i<7;i++) //输出设备地址
37 1 {
38 2 SCL=0;
39 2 delay();
40 2 SDA=device_addr&0x80; //SDA上输出一位数据,高位在前
41 2 device_addr<<=1;
42 2 delay();
43 2 SCL=1;
44 2 delay();
45 2 }
46 1 SCL=0;
47 1 delay();
48 1 SDA=0; //SDA上输出0,表示写操作
49 1 delay();
50 1 SCL=1;
51 1 delay();
52 1 SCL=0;
53 1 delay();
54 1 SDA=1; //释放SDA线
55 1 delay();
C51 COMPILER V7.50 240X 06/02/2008 20:59:17 PAGE 2
56 1 SCL=1;
57 1 delay();
58 1 if(SDA){return 1;} //如果设备未响应,则返回出错代码1
59 1 for(i=0;i<8;i++) //输出数据地址
60 1 {
61 2 SCL=0;
62 2 delay();
63 2 SDA=data_addr&0x80; //SDA上输出一位数据,高位在前
64 2 data_addr<<=1;
65 2 delay();
66 2 SCL=1;
67 2 delay();
68 2 delay();
69 2 }
70 1 SCL=0;
71 1 delay();
72 1 SDA=1; //释放SDA线
73 1 delay();
74 1 SCL=1;
75 1 delay();
76 1 if(SDA){return 2;} //如果设备未响应,则返回出错代码2
77 1 for(i=0;i<8;i++) //输出要写入的数据
78 1 {
79 2 SCL=0;
80 2 delay();
81 2 SDA=w_data&0x80; //SDA上输出一位数据,高位在前
82 2 w_data<<=1;
83 2 delay();
84 2 SCL=1;
85 2 delay();
86 2 }
87 1 SCL=0;
88 1 delay();
89 1 SDA=1; //释放SDA线
90 1 delay();
91 1 SCL=1;
92 1 delay();
93 1 if(SDA){return 3;} //如果设备未响应,则返回出错代码3
94 1 SCL=0;
95 1 delay();
96 1 SDA=0;
97 1 delay();
98 1 SCL=1;
99 1 delay();
100 1 SDA=1; //产生一个停止位,停止操作
101 1 for(i=0;i<250;i++) //等待数据写入
102 1 {
103 2 delay();
104 2 }
105 1 for(i=0;i<250;i++)delay();
106 1 return 0; //正确写入,返回0
107 1 }
108 ////////////////////////End of function//////////////////////////////
109
110 /********************************************************************
111 函数功能:从EEROM中读取一字节函数。
112 入口参数:device_addr:设备地址;data_addr:数据地址。
113 返 回:无。
114 备 注:无。
115 ********************************************************************/
116 uint8 EepromReadByte(uint8 device_addr,uint8 data_addr)
117 {
C51 COMPILER V7.50 240X 06/02/2008 20:59:17 PAGE 3
118 1 uint8 i,r_data,Device_Addr;
119 1 SDA=0; //产生一个起始位
120 1 delay();
121 1 Device_Addr=device_addr; //EEROM的地址暂存
122 1 for(i=0;i<7;i++) //输出设备地址
123 1 {
124 2 SCL=0;
125 2 delay();
126 2 SDA=device_addr&0x80; //SDA上输出一位数据,高位在前
127 2 device_addr<<=1;
128 2 delay();
129 2 SCL=1;
130 2 delay();
131 2 }
132 1 SCL=0;
133 1 delay();
134 1 SDA=0; //SDA上输出0,表示写操作
135 1 delay();
136 1 SCL=1;
137 1 delay();
138 1 SCL=0;
139 1 delay();
140 1 SDA=1; //释放SDA线
141 1 delay();
142 1 SCL=1;
143 1 delay();
144 1 if(SDA) return 0x0100; //如果设备未响应,则返回出错代码0x0100
145 1 for(i=0;i<8;i++) //输出数据地址
146 1 {
147 2 SCL=0;
148 2 delay();
149 2 SDA=data_addr&0x80; //SDA上输出一位数据,高位在前
150 2 data_addr<<=1;
151 2 delay();
152 2 SCL=1;
153 2 delay();
154 2 delay();
155 2 }
156 1 SCL=0;
157 1 delay();
158 1 SDA=1; //释放SDA线
159 1 delay();
160 1 SCL=1;
161 1 delay();
162 1 if(SDA) return 0x0200; //如果设备未响应,则返回出错代码0x0200
163 1 SCL=0;
164 1 delay();
165 1 SDA=1;
166 1 delay();
167 1 SCL=1;
168 1 delay();
169 1 SDA=0; //产生一个重启动位
170 1 delay();
171 1 device_addr=Device_Addr; //EEROM的地址
172 1 for(i=0;i<7;i++) //输出设备地址,一个7位的地址
173 1 {
174 2 SCL=0;
175 2 delay();
176 2 SDA=device_addr&0x80; //SDA上输出一位数据,高位在前
177 2 device_addr<<=1;
178 2 delay();
179 2 SCL=1;
C51 COMPILER V7.50 240X 06/02/2008 20:59:17 PAGE 4
180 2 delay();
181 2 }
182 1 SCL=0;
183 1 delay();
184 1 SDA=1; //SDA上输出1,表示读操作
185 1 delay();
186 1 SCL=1;
187 1 delay();
188 1 SCL=0;
189 1 delay();
190 1 SDA=1; //释放SDA线
191 1 delay();
192 1 SCL=1;
193 1 delay();
194 1 if(SDA) return 0x0300; //如果设备未响应,则返回出错代码0x0300
195 1 for(i=0;i<8;i++) //从EEROM中读出数据
196 1 {
197 2 SCL=0;
198 2 delay();
199 2 r_data<<=1;
200 2 delay();
201 2 SCL=1;
202 2 if(SDA)r_data=r_data|0x01; //保存一位数据
203 2 delay();
204 2 }
205 1 SCL=0;
206 1 delay();
207 1 SDA=1; //置SDA高电平,表示停止读出
208 1 delay();
209 1 SCL=1;
210 1 delay();
211 1 SCL=0;
212 1 delay();
213 1 SDA=0;
214 1 delay();
215 1 SCL=1;
216 1 delay();
217 1 SDA=1; //产生一个停止位,停止读操作
218 1 return r_data; //返回数据
219 1 }
220 //****************************************************************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 344 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
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 + -