📄 i2c.lst
字号:
C51 COMPILER V7.06 I2C 08/31/2008 09:32:13 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN i2c.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE i2c.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #include <stdio.h>
4 #include <string.h>
5 //#define unsigned char uchar
6 //#define unsigned int uint
7 #define _Nop() _nop_()
8
9 bit ack;
10 sbit WP=P0^3;
11 sbit SCL=P0^4;
12 sbit SDA=P0^5;
13 sbit JK=P0^0;
14
15
16 void delay();
17 void start_i2c();
18 void stop_i2c();
19 void write_b(uchar);
20 char read_b();
21 void ack_i2c(bit a);
22 bit mcu_write_b(char sla,char c);
23 bit mcu_write_str(char sla,char suba,char *s,char no);
24 bit mcu_read_b(char sla,char *c);
25 bit mcu_read_str(char sla,char suba,char *s,char no);
26
27 char i2c_write_[10]={0,1,2,03,4,5,6,7,8,9};
28 char led_dm[10]={0x3f,0x03,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
29
30 void main()
31 {
32 1 char i2c_rec[10];
33 1 char i;
34 1 // char *j;
35 1 WP=0;//器件不进行写保护//
36 1 JK=1;
37 1 delay();
38 1 delay();
39 1
40 1 do
41 1 {
42 2 if(mcu_write_b(0xa0,0x01))
43 2 JK=0;
44 2 else
45 2 JK=1;
46 2 delay();
47 2 delay();
48 2 // JK=0;
49 2
50 2
51 2 /*
52 2 if(mcu_write_str(0xa1,0x10,i2c_write_,10))
53 2 JK=1;
54 2 else
55 2 JK=0;
C51 COMPILER V7.06 I2C 08/31/2008 09:32:13 PAGE 2
56 2 delay();
57 2
58 2 if(mcu_read_str(0xa0,0x10,i2c_rec,10))
59 2 JK=0;
60 2 else
61 2 JK=1;
62 2 delay();
63 2
64 2 for(i=0;i<10;i++)
65 2 {
66 2 P2=0x00;
67 2 P1=led_dm[i2c_rec[i]];
68 2 delay();
69 2 delay();
70 2
71 2 }
72 2 */
73 2 }while(JK);
74 1
75 1 }
*** WARNING C280 IN LINE 32 OF I2C.C: 'i2c_rec': unreferenced local variable
*** WARNING C280 IN LINE 33 OF I2C.C: 'i': unreferenced local variable
76
77
78 void start_i2c()//启动信号
79 {
80 1 SDA=1;
81 1 _Nop();
82 1 SCL=1;
83 1 _Nop();
84 1 _Nop();
85 1 _Nop();
86 1 _Nop();
87 1 _Nop();
88 1 _Nop();
89 1 SDA=0;
90 1 _Nop();
91 1 _Nop();
92 1 _Nop();
93 1 _Nop();
94 1 _Nop();
95 1 SCL=0;
96 1 _Nop();
97 1 _Nop();
98 1
99 1 }
100
101 void stop_i2c()//停止信号
102 {
103 1 SDA=0;
104 1 _Nop();
105 1 SCL=1;
106 1 _Nop();
107 1 _Nop();
108 1 _Nop();
109 1 _Nop();
110 1 _Nop();
111 1 _Nop();
112 1 SDA=1;
113 1 _Nop();
114 1 _Nop();
115 1 _Nop();
C51 COMPILER V7.06 I2C 08/31/2008 09:32:13 PAGE 3
116 1 _Nop();
117 1 _Nop();
118 1 }
119
120 void write_b(char c)//发送一个字节到EEPROM
121 {
*** WARNING C235 IN LINE 121 OF I2C.C: parameter 1: different types
122 1 char bitcnt;
123 1 for(bitcnt=0;bitcnt<8;bitcnt++)
124 1 {
125 2 if((c<<bitcnt)&0x80)//判断数据位上是"1"还是"0"
126 2 SDA=1;
127 2 else
128 2 SDA=0;
129 2 _Nop();
130 2 SCL=1;
131 2 _Nop();
132 2 _Nop();
133 2 _Nop();
134 2 _Nop();
135 2 _Nop();
136 2 SCL=0;
137 2 }
138 1 _Nop();
139 1 _Nop();
140 1 SDA=1;
141 1 _Nop();
142 1 _Nop();
143 1 SCL=1;
144 1 _Nop();
145 1 _Nop();
146 1 _Nop();
147 1 if(SDA=1)ack=0;//判断EEPROM是否回复应答信号
*** WARNING C276 IN LINE 147 OF I2C.C: constant in condition expression
148 1 else ack=1;
149 1 SCL=0;
150 1 _Nop();
151 1 _Nop();
152 1 _Nop();
153 1 }
154
155 char read_b()//接受EEPROM发送过来的一个字节
156 {
157 1 char retc;
158 1 char bitcnt;
159 1 retc=0;
160 1 SDA=1;
161 1 for(bitcnt=0;bitcnt<8;bitcnt++)
162 1 {
163 2 _Nop();
164 2 SCL=0;
165 2 _Nop();
166 2 _Nop();
167 2 _Nop();
168 2 _Nop();
169 2 _Nop();
170 2 SCL=1;
171 2 _Nop();
172 2 _Nop();
173 2 retc=retc<<1;
174 2 if(SDA==1)retc=retc+1;
175 2 _Nop();
C51 COMPILER V7.06 I2C 08/31/2008 09:32:13 PAGE 4
176 2 _Nop();
177 2 }
178 1 SCL=0;
179 1 _Nop();
180 1 _Nop();
181 1 return(retc);
182 1 }
183
184
185 void ack_i2c(bit a)//发送应答信号或是非应答信号
186 {
187 1 if(a==0)SDA=0;
188 1 else SDA=1;
189 1 _Nop();
190 1 _Nop();
191 1 _Nop();
192 1 SCL=1;
193 1 _Nop();
194 1 _Nop();
195 1 _Nop();
196 1 _Nop();
197 1 _Nop();
198 1 SCL=0;
199 1 _Nop();
200 1 _Nop();
201 1
202 1 }
203
204
205 bit mcu_write_b(char sla,char c)//向i2c器件中送入一字节
206 {
207 1 start_i2c();
208 1 write_b(sla);
209 1 if(ack==0)return(0);
210 1 write_b(c);
211 1 if(ack==0)return(0);
212 1 stop_i2c();
213 1 return(1);
214 1 }
215
216
217 bit mcu_write_str(char sla,char suba,char *s,char no)//向i2c器件的指定地址中写入no个数据
218 {
219 1 char i;
220 1 start_i2c();
221 1 write_b(sla);
222 1 if(ack==0)return(0);
223 1 write_b(suba);
224 1 if(ack==0)return(0);
225 1 for(i=0;i<no;i++)
226 1 {
227 2 write_b(*s);
228 2 if(ack==0)return(0);
229 2 s++;
230 2 }
231 1 stop_i2c();
232 1 return(1);
233 1 }
234
235
236 bit mcu_read_b(char sla,char *c)//接收一个字节
237 {
C51 COMPILER V7.06 I2C 08/31/2008 09:32:13 PAGE 5
238 1 start_i2c();
239 1 write_b(sla+1);
240 1 if(ack==0)return(0);
241 1 *c=read_b();
242 1 ack_i2c(1);
243 1 stop_i2c();
244 1 return(1);
245 1 }
246
247
248 bit mcu_read_str(char sla,char suba,char *s,char no)//从器件的指定地址中读取no个数据
249 {
250 1 char i;
251 1 start_i2c();
252 1 write_b(sla);
253 1 if(ack==0)return(0);
254 1 write_b(suba);
255 1 if(ack==0)return(0);
256 1 start_i2c();
257 1 write_b(sla+1);
258 1 if(ack==0)return(0);
259 1 for(i=0;i<no-1;i++)
260 1 {
261 2 *s=read_b();
262 2 ack_i2c();
*** WARNING C209 IN LINE 262 OF I2C.C: 'ack_i2c': too few actual parameters
263 2 s++;
264 2 }
265 1 *s=read_b();
266 1 ack_i2c(1);
267 1 stop_i2c();
268 1 return(1);
269 1 }
270
271
272
273
274
275 void delay()
276 {
277 1 int i;
278 1 for(i=10000;i>0;i--)
279 1 {;}
280 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 430 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 24
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 5 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -