📄 at24c02.lst
字号:
C51 COMPILER V7.00 AT24C02 09/25/2002 15:25:40 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE AT24C02
OBJECT MODULE PLACED IN .\At24c02.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\ALARM\At24c02.c BROWSE DEBUG OBJECTEXTEND PRINT(.\At24c02.lst) OBJECT(.\
-At24c02.obj)
stmt level source
1 // AT24C02.C
2 // 2001/11/20
3
4 #include<reg51.h>
5 #include<absacc.h>
6 #include<intrins.h>
7 #include"almset1.h"
8 #include"bitdef.h"
9
10 #define DEVICE_ADDRESS 0xa2
11
12 extern bit flag_permit_int_t0;
13
14 static void send_start_bit();
15 static void send_stop_bit();
16 static void send_low_ack();
17 static void send_high_ack();
18 static void write_1_byte(unsigned char v);
19 static uchar read_1_byte();
20 void read_n_bytes(uchar data * pt,uchar n,uchar word_address);
21 void write_n_bytes(uchar data * pt,uchar n,uchar word_address);
22
23
24
25
26 //延迟10uS
27 #define delay_10us _nop_(); \
28 _nop_(); \
29 _nop_(); \
30 _nop_(); \
31 _nop_(); \
32 _nop_(); \
33 _nop_(); \
34 _nop_(); \
35 _nop_(); \
36 _nop_()
37
38 //向EEPROM发起始位
39 static void send_start_bit()
40 {
41 1 bit_scl = LOW;
42 1 delay_10us;
43 1 bit_sda = HIGH;
44 1 delay_10us;
45 1 bit_scl = HIGH;
46 1 delay_10us;
47 1 bit_sda = LOW;
48 1 delay_10us;
49 1 bit_scl = LOW;
50 1 delay_10us;
51 1 }
52
53 //向EEPROM发停止位
54 static void send_stop_bit()
C51 COMPILER V7.00 AT24C02 09/25/2002 15:25:40 PAGE 2
55 {
56 1 bit_scl = LOW;
57 1 delay_10us;
58 1 bit_sda = LOW;
59 1 delay_10us;
60 1 bit_scl = HIGH;
61 1 delay_10us;
62 1 bit_sda = HIGH;
63 1 delay_10us;
64 1 bit_scl = LOW;
65 1 delay_10us;
66 1 }
67
68 //向EEPROM发低应答信号
69 static void send_low_ack()
70 {
71 1 bit_scl = LOW;
72 1 delay_10us;
73 1 bit_sda = LOW;
74 1 delay_10us;
75 1 bit_scl = HIGH;
76 1 delay_10us;
77 1 bit_scl = LOW;
78 1 delay_10us;
79 1 bit_sda = HIGH;
80 1 delay_10us;
81 1 }
82
83 //向EEPROM发高应答信号
84 static void send_high_ack()
85 {
86 1 bit_scl = LOW;
87 1 delay_10us;
88 1 bit_sda = HIGH;
89 1 delay_10us;
90 1 bit_scl = HIGH;
91 1 delay_10us;
92 1 bit_scl = LOW;
93 1 delay_10us;
94 1 bit_sda = LOW;
95 1 delay_10us;
96 1 }
97
98 //向EEPROM写入一字节
99 static void write_1_byte(uchar v)
100 {uchar i;
101 1 bit_scl = LOW;
102 1 for(i=0;i<8;i++)
103 1 {v=v<<1;
104 2 bit_sda = CY;
105 2 delay_10us;
106 2 bit_scl = HIGH;
107 2 delay_10us;
108 2 bit_scl = LOW;
109 2 delay_10us;
110 2 }
111 1 bit_sda = HIGH;
112 1 delay_10us;
113 1 bit_scl = HIGH;
114 1 delay_10us;
115 1 for(i=0;i<250;i++)
116 1 {CY = bit_sda;
C51 COMPILER V7.00 AT24C02 09/25/2002 15:25:40 PAGE 3
117 2 if(!CY)
118 2 {break;
119 3 }
120 2 }
121 1 bit_scl = LOW;
122 1 delay_10us;
123 1 }
124
125 //读EEPROM一字节
126 static uchar read_1_byte()
127 {uchar i,var;
128 1 var=0;
129 1 for(i=0;i<8;i++)
130 1 {
131 2 delay_10us;
132 2 bit_sda = HIGH;
133 2 delay_10us;
134 2 bit_scl = HIGH;
135 2 delay_10us;
136 2 var = var<<1;
137 2 if(bit_sda)
138 2 {var = var+1;
139 3 }
140 2 delay_10us;
141 2 bit_scl = LOW;
142 2 delay_10us;
143 2 }
144 1 return(var);
145 1 }
146
147 //从EEPROM中读n字节数据
148 //应避免跨页
149 void read_n_bytes(uchar data * pt,uchar n,uchar word_address)
150 {uchar i;
151 1 flag_permit_int_t0 = FALSE;
152 1 send_stop_bit();
153 1 send_start_bit();
154 1 write_1_byte(DEVICE_ADDRESS&0xfe); //写方式器件地址(Device Address)
155 1 write_1_byte(word_address); //字地址(Device Address)
156 1 send_start_bit();
157 1 write_1_byte(DEVICE_ADDRESS|0x01); //读方式器件地址(Device Address)
158 1 for(i=0;i<n;i++)
159 1 {*pt = read_1_byte();
160 2 send_low_ack();
161 2 pt++;
162 2 }
163 1 send_high_ack();
164 1 send_stop_bit();
165 1 send_stop_bit();
166 1 send_stop_bit();
167 1 send_stop_bit();
168 1 send_stop_bit();
169 1 send_stop_bit();
170 1 send_stop_bit();
171 1 send_stop_bit();
172 1 send_stop_bit();
173 1 send_stop_bit();
174 1 bit_sda = HIGH;
175 1 bit_scl = HIGH;
176 1 flag_permit_int_t0 = TRUE;
177 1 for(i=0;i<200;i++);
178 1 }
C51 COMPILER V7.00 AT24C02 09/25/2002 15:25:40 PAGE 4
179
180 //写n字节数据到EEPROM中
181 void write_n_bytes(uchar data * pt,uchar n,uchar word_address)
182 {uchar i;
183 1 flag_permit_int_t0 = FALSE;
184 1 send_stop_bit();
185 1 send_start_bit();
186 1 write_1_byte(DEVICE_ADDRESS&0xfe); //写方式器件地址(Device Address)
187 1 write_1_byte(word_address); //字地址(Device Address)
188 1 for(i=0;i<n;i++)
189 1 {write_1_byte(*pt);
190 2 pt++;
191 2 }
192 1 send_stop_bit();
193 1 send_stop_bit();
194 1 send_stop_bit();
195 1 send_stop_bit();
196 1 send_stop_bit();
197 1 send_stop_bit();
198 1 send_stop_bit();
199 1 send_stop_bit();
200 1 send_stop_bit();
201 1 send_stop_bit();
202 1 bit_sda = HIGH;
203 1 bit_scl = HIGH;
204 1 flag_permit_int_t0 = TRUE;
205 1 for(i=0;i<200;i++);
206 1 }
207
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 542 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
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 + -