📄 eeprom.lst
字号:
C51 COMPILER V7.50 EEPROM 01/29/2007 19:51:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE EEPROM.C LARGE OPTIMIZE(SIZE) DEBUG OBJECTEXTEND
line level source
1 /** 修改人:
2 ** 版 本:
3 ** 日 期:
4 ** 描 述:
5 **
6 **--------------当前版本修订------------------------------------------------------------------------------
7 ** 修改人: 陈明计
8 ** 日 期: 2003年3月26日
9 ** 描 述: 增加注释
10 **
11 **------------------------------------------------------------------------------------------------------
12 ********************************************************************************************************/
13 //#include "PUMP.h"
14 #include <reg52.h >
15 #include<INTRINS.H>
16 //#define SDA P3_5
17 //#define SCL P3_4
18 #define uchar unsigned char
19 #define uint unsigned int
20 #define TRUE 1
21 #define FALSE 0
22 //#define SDA P3_5;
23 //#define SCL P3_4;
24 sbit SDA= P3^5;
25 sbit SCL = P3^4;
26
27 void delay(void){
28 1 unsigned char def;
29 1 for (def = 0; def < 70; def++ )//降低时钟频率延时
30 1 {
31 2 //get_ADC_val(0);
32 2 }
33 1 return ;
34 1 }
35
36 //向24XX发开始信号
37 //
38 void iicstart(void){
39 1 SDA = 1;
40 1 delay();
41 1 SCL = 1;
42 1 delay();
43 1 SDA = 0; //发开始信号
44 1 delay();
45 1 SCL = 0;
46 1 delay();
47 1 SDA = 1; //准备发送或接?
48 1 delay();
49 1 }
50 //********************************************************************************************************
51 //********************************************************************************************************
-*
52 //向24cxx发停止信号
53 void iicstop(void){
54 1 SDA = 0;
C51 COMPILER V7.50 EEPROM 01/29/2007 19:51:11 PAGE 2
55 1 delay();
56 1 SCL = 1;
57 1 delay();
58 1 SDA = 1;
59 1 delay();
60 1 SCL = 0;
61 1 delay();
62 1 }
63
64 void IICInit(void)
65 {
66 1 SCL = 0;
67 1 delay();
68 1 iicstop();
69 1 }
70
71 //*******************************************************************************************************
72 //*******************************************************************************************************
73 //发送应答信号
74
75 void iicACK(void)
76 {
77 1 SDA = 0;
78 1 delay();
79 1 SCL = 1;
80 1 delay();
81 1 SCL = 0;
82 1 }
83
84 /*********************************************************************************************************
85 ** ????: IIC_NO_ACK
86 ** ????: ??IIC?????
87 ** ? ?: ?
88 ** ? ?: ?
89 ** ????: ?
90 ** ????: ?
91 ********************************************************************************************************/
92 void IIC_NO_ACK(void)
93 {
94 1 SDA = 1;
95 1 delay();
96 1 SCL = 1;
97 1 delay();
98 1 SCL = 0;
99 1
100 1 return;
101 1 }
102
103
104 //********************************************************************************
105 //********************************************************************************
106 //发送一个字节
107
108 unsigned char IICSend(char IIC_data)
109 {
110 1 char i;
111 1
112 1 for (i = 0; i < 8; i++)
113 1 {
114 2 IIC_data = IIC_data << 1;
115 2 F0 = SDA = CY;
116 2 SCL = 1;
C51 COMPILER V7.50 EEPROM 01/29/2007 19:51:11 PAGE 3
117 2 // if (F0 != CY)
118 2 // {
119 2 // SCL = 0;
120 2 // return FALSE;
121 2 // } //此处不明原因为什么会错
122 2 delay();
123 2 SCL = 0;
124 2 }
125 1 SDA = 1;
126 1 delay();
127 1 SCL = 1;
128 1 delay();
129 1 if (SDA == 1)
130 1 {
131 2 SCL = 0;
132 2 return FALSE;
133 2 }
134 1 else
135 1 {
136 2 SCL = 0;
137 2 return TRUE;
138 2 }
139 1 }
140 //********************************************************************************************************
141 //********************************************************************************************************
142 //接收一个字节
143 char IICReceive(void)
144 {
145 1 char i,r;
146 1
147 1 r = 0;
148 1 SDA = 1;
149 1 delay();
150 1 for (i = 0; i < 8; i++)
151 1 {
152 2 r = r * 2;
153 2 SCL = 1;
154 2 delay();
155 2
156 2 if (SDA == 1)
157 2 {
158 3 r++;
159 3 delay();
160 3 }
161 2 SCL = 0;
162 2 delay();
163 2 }
164 1 return r;
165 1 }
166
167 /*********************************************************************************************************
168 ** 函数名称: Cat24WCxxWrite
169 ** 功能描述: 编程Cat24WCxx(仅允许一个任务可以调用)
170 ** 输 入: addr]:外部引脚设置的地址(将所有Cat24WCXX看成Cat24WC02)
171 ** nbyte:编程字节数目
172 ** index:编程起始的地址
173 **
174 ** 输 出: ?
175 ** 全局变量: 无
176 ** 调用模块: 无
177 ********************************************************************************************************/
178 char byteWrite ( char addr, char byte) {
C51 COMPILER V7.50 EEPROM 01/29/2007 19:51:11 PAGE 4
179 1 char k;
180 1 k = 0xa0;
181 1 EA=0;
182 1 iicstart() ;
183 1 if (IICSend(k)== FALSE) //发送控制字
184 1 {
185 2 return FALSE;
186 2 }
187 1 if (IICSend(addr)== FALSE) //发送要写入的地址
188 1 {
189 2 return FALSE;
190 2 }
191 1 if (IICSend(byte)== FALSE) //发送要写入数据?
192 1 {
193 2 return FALSE;
194 2 }//
195 1 iicstop();
196 1 // get_ADC_val(0);
197 1 EA=1;
198 1 return TRUE ;
199 1 }
200
201
202 /*********************************************************************************************************
203 ** 函数名称: Cat24WCxxRead
204 ** 功能描述: 从Cat24WCxx读数据(仅允许一个任务可以调用)
205 ** 输 入: Data[0]:外部引脚设置的地址(将所有Cat24WCXX看成Cat24WC02)
206 ** Data[1]:需要读取字节数目
207 ** Data[2]:读取的起始地址
208 ** 输 出: Data:读取得数据
209 ** 全局变量: 无
210 ** 调用模块: 无
211 ********************************************************************************************************/
212 char byteRead(char addr )
213 {
214 1 char k,L;
215 1 EA=0;
216 1 k = 0xa0;
217 1 iicstart() ;
218 1 if (IICSend(k)== FALSE) //发送控制字
219 1 {//
220 2 return FALSE;//
221 2 }
222 1 if (IICSend(addr)== FALSE) //发送要写入的地址
223 1 {
224 2 return FALSE;
225 2 }
226 1 iicstart() ;
227 1 k = 0xa1;
228 1 if (IICSend(k)== FALSE) //发送控制?
229 1 {
230 2 return FALSE;
231 2 }
232 1 L = IICReceive();
233 1 IIC_NO_ACK();
234 1 iicstop() ;
235 1 // get_ADC_val(0);
236 1 EA=1;
237 1 return L;
238 1 }
239 //*******************************************************************************
240 //*******************************************************************************
C51 COMPILER V7.50 EEPROM 01/29/2007 19:51:11 PAGE 5
241 char nbyteRead(char addr, char nbyte, char *index)// addr 要读取的地址 nbyte 读取的字节
242 {
243 1 for (/*nbyte++*/; nbyte !=0 ; nbyte--) {
244 2 *index = byteRead(addr);
245 2 index ++;
246 2 addr++;
247 2
248 2 }
249 1 return TRUE ;
250 1 }
251
252
253 //********************************************************************************
254 //********************************************************************************
255 char nbyteWrite ( char addr, char nbyte,char *index)
256 {
257 1 for ( /*nbyte++*/; nbyte!=0 ; nbyte--) {
258 2 byteWrite(addr, *index);
259 2 addr++;
260 2 index++;
261 2 }
262 1 return TRUE ;
263 1
264 1
265 1 }
266
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 381 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 10
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -