📄 i2c.lst
字号:
C51 COMPILER V7.50 I2C 05/18/2007 03:46:48 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 I2C.C
3 ********************************************************************/
4 #include "Config.h"
5 #include "I2C.h"
6
7 #define _Nop() _nop_()
8
9 sbit SDA=P1^3;
10 sbit SCL=P1^2;
11
12 bit ack;
13
14
15 void Start_I2c()
16 {
17 1 SDA=1;
18 1 _Nop();
19 1 SCL=1;
20 1 _Nop();
21 1 _Nop();
22 1 _Nop();
23 1 _Nop();
24 1 _Nop();
25 1 SDA=0;
26 1 _Nop();
27 1 _Nop();
28 1 _Nop();
29 1 _Nop();
30 1 _Nop();
31 1 SCL=0;
32 1 _Nop();
33 1 _Nop();
34 1 }
35
36
37 void Stop_I2c()
38 {
39 1 SDA=0;
40 1 _Nop();
41 1 SCL=1;
42 1 _Nop();
43 1 _Nop();
44 1 _Nop();
45 1 _Nop();
46 1 _Nop();
47 1 SDA=1;
48 1 _Nop();
49 1 _Nop();
50 1 _Nop();
51 1 _Nop();
52 1 }
53
54
55 void SendByte(uchar c)
C51 COMPILER V7.50 I2C 05/18/2007 03:46:48 PAGE 2
56 {
57 1 uchar BitCnt;
58 1
59 1 for(BitCnt=0;BitCnt<8;BitCnt++)
60 1 {
61 2
62 2 if((c<<BitCnt)&0x80)
63 2 SDA=1;
64 2 else
65 2 SDA=0;
66 2 _Nop();
67 2 SCL=1;
68 2 _Nop();
69 2 _Nop();
70 2 _Nop();
71 2 _Nop();
72 2 _Nop();
73 2 SCL=0;
74 2 }
75 1 _Nop();
76 1 _Nop();
77 1 SDA=1;
78 1 _Nop();
79 1 _Nop();
80 1 SCL=1;
81 1 _Nop();
82 1 _Nop();
83 1 _Nop();
84 1 if(SDA==1)
85 1 ack=0;
86 1 else
87 1 ack=1;
88 1 SCL=0;
89 1 _Nop();
90 1 _Nop();
91 1 }
92
93
94 uchar RcvByte()
95 {
96 1 uchar retc;
97 1 uchar BitCnt;
98 1
99 1 retc=0;
100 1 SDA=1;
101 1 for(BitCnt=0;BitCnt<8;BitCnt++)
102 1 {
103 2 _Nop();
104 2 SCL=0;
105 2 _Nop();
106 2 _Nop();
107 2 _Nop();
108 2 _Nop();
109 2 _Nop();
110 2 SCL=1;
111 2 _Nop();
112 2 _Nop();
113 2 retc=retc<<1;
114 2 if(SDA==1)
115 2 retc=retc+1;
116 2 _Nop();
117 2 _Nop();
C51 COMPILER V7.50 I2C 05/18/2007 03:46:48 PAGE 3
118 2 }
119 1 SCL=0;
120 1 _Nop();
121 1 _Nop();
122 1 return(retc);
123 1 }
124
125 void Ack_I2c(bit a)
126 {
127 1 if(a==0)
128 1 SDA=0;
129 1 else
130 1 SDA=1;
131 1 _Nop();
132 1 _Nop();
133 1 _Nop();
134 1 SCL=1;
135 1 _Nop();
136 1 _Nop();
137 1 _Nop();
138 1 _Nop();
139 1 _Nop();
140 1 SCL=0;
141 1 _Nop();
142 1 _Nop();
143 1 }
144
145 #if 0
bit ISendByte(uchar sla,uchar c)
{
Start_I2c();
SendByte(sla);
if(ack==0)
return(0);
SendByte(c);
if(ack==0)
return(0);
Stop_I2c();
return(1);
}
#endif
159
160 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
161 {
162 1 uchar i;
163 1
164 1 Start_I2c();
165 1 SendByte(sla);
166 1 if(ack==0)
167 1 return(0);
168 1 SendByte(suba);
169 1 if(ack==0)
170 1 return(0);
171 1
172 1 for(i=0;i<no;i++)
173 1 {
174 2 SendByte(*s);
175 2 if(ack==0)
176 2 return(0);
177 2 s++;
178 2 }
179 1 Stop_I2c();
C51 COMPILER V7.50 I2C 05/18/2007 03:46:48 PAGE 4
180 1 return(1);
181 1 }
182
183 #if 0
bit IRcvByte(uchar sla,uchar *c)
{
Start_I2c();
SendByte(sla+1);
if(ack==0)
return(0);
*c=RcvByte();
Ack_I2c(1);
Stop_I2c();
return(1);
}
#endif
196
197 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
198 {
199 1 uchar i;
200 1
201 1 Start_I2c();
202 1 SendByte(sla);
203 1 if(ack==0)
204 1 return(0);
205 1 SendByte(suba);
206 1 if(ack==0)
207 1 return(0);
208 1
209 1 Start_I2c();
210 1 SendByte(sla+1);
211 1 if(ack==0)
212 1 return(0);
213 1
214 1 for(i=0;i<no-1;i++)
215 1 {
216 2 *s=RcvByte();
217 2 Ack_I2c(0);
218 2 s++;
219 2 }
220 1 *s=RcvByte();
221 1 Ack_I2c(1);
222 1 Stop_I2c();
223 1 return(1);
224 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 387 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -