📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 05/22/2007 12:48:49 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: D:\Program Files\Keil 8.08\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND SRC(.\main.SRC)
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3
4 typedef unsigned char BYTE;
5
6 sbit SDA=P1^5;
7 sbit SCL=P1^4;
8 bit ACK;
9 BYTE SLA;
10 BYTE SUBA;
11 BYTE NUMBYTE;
12
13 BYTE MTD[0x0F];
14 BYTE MRD[0x0F];
15
16
17 void IWRNBYTE();
18 void IRDNBYTE();
19 void START();
20 void STOP();
21 void MACK();
22 void MNACK();
23 void CACK();
24 void WRBYTE(BYTE in);
25 BYTE RDBYTE();
26
27
28
29 main()
30 {
31 1 BYTE delay=0xF0;
32 1 BYTE offset=0;
33 1 BYTE i,j,k;
34 1
35 1 while(--delay);
36 1
37 1 while(offset<0x10)
38 1 {
39 2 MTD[offset]=offset;
40 2 }
41 1
42 1 SLA=0xA0;
43 1 SUBA=0x30;
44 1 NUMBYTE=16;
45 1 IWRNBYTE();
46 1
47 1 i=20;
48 1
49 1 do
50 1 {
51 2 j=248;
52 2 do
53 2 {
54 3 k=248;
55 3 do
C51 COMPILER V8.08 MAIN 05/22/2007 12:48:49 PAGE 2
56 3 {}while(--k);
57 3 }while(--j);
58 2 }while(--i);
59 1
60 1 SLA=0xA0;
61 1 SUBA=0x30;
62 1 NUMBYTE=16;
63 1 IRDNBYTE();
64 1 }
65
66
67 void IWRNBYTE()
68 {
69 1 BYTE i;
70 1 BYTE offset;
71 1
72 1 dd:
73 1 i=NUMBYTE;
74 1 offset=0;
75 1
76 1 START();
77 1 WRBYTE(SLA);
78 1 CACK();
79 1 if(!ACK)
80 1 {
81 2 STOP(); return;
82 2 }
83 1 WRBYTE(SUBA);
84 1 CACK();
85 1
86 1 do
87 1 {
88 2 WRBYTE(MTD[offset]);
89 2 CACK();
90 2 if(!ACK) goto dd;
91 2 offset++;
92 2 }while(--i);
93 1
94 1 STOP();
95 1 }
96
97 void IRDNBYTE()
98 {
99 1 BYTE offset;
100 1 BYTE num;
101 1 qq:
102 1 offset=0;
103 1 num=NUMBYTE;
104 1
105 1
106 1 START();
107 1 WRBYTE(SLA);
108 1 CACK();
109 1 if(!ACK)
110 1 {
111 2 STOP();
112 2 return;
113 2 }
114 1 WRBYTE(SUBA);
115 1 CACK();
116 1 START();
117 1 WRBYTE(++SLA);
C51 COMPILER V8.08 MAIN 05/22/2007 12:48:49 PAGE 3
118 1 CACK();
119 1 if(!ACK) goto qq;
120 1
121 1 do
122 1 {
123 2 MRD[offset]=RDBYTE;
124 2 MACK();
125 2 offset++;
126 2 }while(--num);
127 1
128 1 MNACK();
129 1 STOP();
130 1 }
131
132 void START()
133 {
134 1 SDA=1; //发送起始条件数据信号
135 1 _nop_(); //起始条件建立时间大于4.7us
136 1 SCL=1; //发送起始条件的时钟信号
137 1 _nop_();
138 1 _nop_();
139 1 _nop_();
140 1 _nop_();
141 1 _nop_(); //起始条件锁定时间大于4.7us
142 1 SDA=0; //发送起始信号
143 1 _nop_();
144 1 _nop_();
145 1 _nop_();
146 1 _nop_(); //起始条件锁定时间大于4.7us
147 1 SCL=0; //钳住I2C总线,准备发送或接收数据
148 1 _nop_();
149 1 }
150
151 void STOP()
152 {
153 1 SDA=0; //发送停止条件的数据信号
154 1 _nop_();
155 1 _nop_();
156 1 SCL=1; //发送停止条件的时钟信号
157 1 _nop_();
158 1 _nop_();
159 1 _nop_();
160 1 _nop_();
161 1 _nop_(); //起始条件建立时间大于4.7us
162 1 SDA=1; //发送I2C总线停止信号
163 1 _nop_();
164 1 _nop_();
165 1 _nop_();
166 1 _nop_();
167 1 _nop_();
168 1 }
169
170 void MACK()
171 {
172 1 SDA=0; //将SDA置0
173 1 _nop_();
174 1 _nop_();
175 1 SCL=1;
176 1 _nop_();
177 1 _nop_();
178 1 _nop_();
179 1 _nop_();
C51 COMPILER V8.08 MAIN 05/22/2007 12:48:49 PAGE 4
180 1 _nop_(); //保持数据时间,大于4.7us
181 1 SCL=0;
182 1 _nop_();
183 1 _nop_();
184 1 }
185
186 void MNACK()
187 {
188 1 SDA=1; //将SDA置1
189 1 _nop_();
190 1 _nop_();
191 1 SCL=1;
192 1 _nop_();
193 1 _nop_();
194 1 _nop_();
195 1 _nop_();
196 1 _nop_();
197 1 SCL=0; //保持数据时间,大于4.7us
198 1 _nop_();
199 1 _nop_();
200 1 }
201
202 void CACK()
203 {
204 1 SDA=1;
205 1 _nop_();
206 1 _nop_();
207 1 SCL=1;
208 1 ACK=0;
209 1 _nop_();
210 1 _nop_();
211 1
212 1 if(SDA)
213 1 ACK=1;
214 1 _nop_();
215 1 SCL=0;
216 1 _nop_();
217 1 }
218
219 void WRBYTE(BYTE in)
220 {
221 1 BYTE num=8;
222 1 ACC=in;
223 1
224 1 do
225 1 {
226 2 #pragma asm
227 2 RLC A
228 2 #pragma endasm
229 2
230 2 if(CY)
231 2 {
232 3 SDA=1;
233 3 _nop_();
234 3 SCL=1;
235 3 _nop_();
236 3 _nop_();
237 3 _nop_();
238 3 _nop_();
239 3 _nop_();
240 3 SCL=0;
241 3 }
C51 COMPILER V8.08 MAIN 05/22/2007 12:48:49 PAGE 5
242 2 else
243 2 {
244 3 SDA=0;
245 3 _nop_();
246 3 SCL=1;
247 3 _nop_();
248 3 _nop_();
249 3 _nop_();
250 3 _nop_();
251 3 _nop_();
252 3 SCL=0;
253 3 }
254 2 }while(--num);
255 1
256 1
257 1 }
258
259 BYTE RDBYTE()
260 {
261 1 BYTE num=8;
262 1
263 1 do
264 1 {
265 2 SDA=1;
266 2 _nop_();
267 2 SCL=1; // 时钟线为高,接收数据位
268 2 _nop_();
269 2 _nop_();
270 2 CY=SDA;
271 2 SCL=0;
272 2
273 2 #pragma asm
274 2 RLC A
275 2 #pragma endasm
276 2
277 2 _nop_();
278 2 _nop_();
279 2 _nop_();
280 2 }while(--num);
281 1
282 1 return ACC;
283 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 321 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 4
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 + -