📄 i2c.lst
字号:
C51 COMPILER V8.02 I2C 06/01/2008 12:34:31 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.obj
COMPILER INVOKED BY: D:\ElectronicTools\KeilC51\C51\BIN\C51.EXE C_H\I2C.c BROWSE DEBUG OBJECTEXTEND PRINT(.\I2C.lst) OBJ
-ECT(I2C.obj)
line level source
1 #include "Includes.h"
2 /*********************************************************************************************************
3 ** 函数名称: IICRead
4 ** 功能描述: 从IIC总线读取数据
5 ** 输 入: Ret:存储读取的数据
6 ** Addr:IIC从器件地址
7 ** Nbyte:读取的字节数目
8 ** 输 出: TRUE:成功
9 ** FALSE:失败
10 ** 全局变量: 无
11 ** 调用模块: 无
12 ********************************************************************************************************/
13 unsigned char IICRead(unsigned char *Ret,unsigned char Addr,unsigned char NByte)
14 {
15 1 unsigned char i;
16 1
17 1 //Addr = Addr | 0x01;
18 1 if (IICStart() == FALSE)
19 1 {
20 2 return 0;//FALSE;
21 2 }
22 1 if (IICSend(0xa0) == FALSE)
23 1 {
24 2 return 0;//FALSE;
25 2 }
26 1 if(IICSend(Addr) == FALSE)
27 1 {
28 2 return 0;//FALSE;
29 2 }
30 1 if (IICStart() == FALSE)
31 1 {
32 2 return 0;//FALSE;
33 2 }
34 1 if (IICSend(0xa1) == FALSE)
35 1 {
36 2 return 0;
37 2 }
38 1 i = NByte - 1;
39 1 if (i != 0)
40 1 {
41 2 do
42 2 {
43 3 *Ret++ = IICReceive();
44 3 IIC_ACK();
45 3 } while (--i != 0);
46 2 }
47 1 *Ret = IICReceive();
48 1 IIC_NO_ACK();
49 1 IICStop();
50 1 return 1;
51 1 }
52
53 /*********************************************************************************************************
54 ** 函数名称: IICWrite
C51 COMPILER V8.02 I2C 06/01/2008 12:34:31 PAGE 2
55 ** 功能描述: 往IIC总线写数据
56 ** 输 入: Addr:IIC从器件地址
57 ** Data:存储将要写的数据
58 ** Nbyte:写的字节数目
59 ** 输 出: TRUE:成功
60 ** FALSE:失败
61 ** 全局变量: 无
62 ** 调用模块: 无
63 ********************************************************************************************************/
64 unsigned char IICWrite(unsigned char Addr,unsigned char *Data,unsigned char NByte)
65 {
66 1 unsigned char i;
67 1
68 1 //Addr = Addr & 0xfe;
69 1 if (IICStart() == FALSE)
70 1 {
71 2 return 0;//FALSE;
72 2 }
73 1
74 1 if (IICSend(0xa0) == FALSE)
75 1 {
76 2 return 0;//FALSE;
77 2 }
78 1 if (IICSend(Addr) == FALSE)
79 1 {
80 2 return 0;// FALSE;
81 2 }
82 1 i = NByte;
83 1 do
84 1 {
85 2 if (IICSend(*Data++) == FALSE)
86 2 {
87 3 return 0;//FALSE;
88 3 }
89 2 } while (--i !=0 );
90 1 IICStop();
91 1 return 1;
92 1 }
93
94 /*********************************************************************************************************
95 ** 函数名称: IICInit
96 ** 功能描述: IIC总线初始化
97 ** 输 入: 无
98 ** 输 出: 无
99 ** 全局变量: 无
100 ** 调用模块: 无
101 ********************************************************************************************************/
102 void IICInit(void)
103 {
104 1 SCL = 0;
105 1 IICStop();
106 1 }
107
108 /*********************************************************************************************************
109 ** 函数名称: IICStart
110 ** 功能描述: 发送IIC启动信号
111 ** 输 入: 无
112 ** 输 出: TRUE:成功
113 ** FALSE:失败
114 ** 全局变量: 无
115 ** 调用模块: 无
116 ********************************************************************************************************/
C51 COMPILER V8.02 I2C 06/01/2008 12:34:31 PAGE 3
117 unsigned char IICStart(void)
118 {
119 1 SDA = 1;
120 1 SCL = 1;
121 1 if (SDA == 1)
122 1 {
123 2 SDA = 0;
124 2 SCL = 0;
125 2 SDA = 1;
126 2 return TRUE;
127 2 }
128 1 else
129 1 {
130 2 return FALSE;
131 2 }
132 1 }
133
134 /*********************************************************************************************************
135 ** 函数名称: IICStop
136 ** 功能描述: 发送IIC结束信号
137 ** 输 入: 无
138 ** 输 出: 无
139 ** 全局变量: 无
140 ** 调用模块: 无
141 ********************************************************************************************************/
142 void IICStop(void)
143 {
144 1 SDA = 0;
145 1 SCL = 1;
146 1 SDA = 1;
147 1 SCL = 0;
148 1 }
149
150 /*********************************************************************************************************
151 ** 函数名称: IIC_ACK
152 ** 功能描述: 发送IIC应答信号
153 ** 输 入: 无
154 ** 输 出: 无
155 ** 全局变量: 无
156 ** 调用模块: 无
157 ********************************************************************************************************/
158 void IIC_ACK(void)
159 {
160 1 SDA = 0;
161 1 SCL = 1;
162 1 _nop_();
163 1 SCL = 0;
164 1 }
165
166 /*********************************************************************************************************
167 ** 函数名称: IIC_NO_ACK
168 ** 功能描述: 发送IIC无应答信号
169 ** 输 入: 无
170 ** 输 出: 无
171 ** 全局变量: 无
172 ** 调用模块: 无
173 ********************************************************************************************************/
174 void IIC_NO_ACK(void)
175 {
176 1 SDA = 1;
177 1 SCL = 1;
178 1 _nop_();
C51 COMPILER V8.02 I2C 06/01/2008 12:34:31 PAGE 4
179 1 SCL = 0;
180 1 return;
181 1 }
182
183 /*********************************************************************************************************
184 ** 函数名称: IICSend
185 ** 功能描述: 发送一个字节
186 ** 输 入: IIC_data:数据
187 ** 输 出: TRUE:成功
188 ** FALSE:失败
189 ** 全局变量: 无
190 ** 调用模块: 无
191 ********************************************************************************************************/
192 unsigned char IICSend(unsigned char IIC_data)
193 {
194 1 unsigned char i;
195 1 CY=0;
196 1 for (i = 0; i < 8; i++)
197 1 {
198 2 IIC_data=IIC_data<<1;
199 2 F0 = SDA = CY;//???
200 2 SCL = 1;
201 2 if (F0 != SDA)
202 2 {
203 3 SCL = 0;
204 3 return FALSE;
205 3 }
206 2 SCL = 0;
207 2 }
208 1 SDA = 1;
209 1 SCL = 1;
210 1 if (SDA == 1)
211 1 {
212 2 SCL = 0;
213 2 return FALSE;
214 2 }
215 1 else
216 1 {
217 2 SCL = 0;
218 2 return TRUE;
219 2 }
220 1 }
221
222 /*********************************************************************************************************
223 ** 函数名称: IICReceive
224 ** 功能描述: 读取一个字节
225 ** 输 入: 无
226 ** 输 出: 读取的字节
227 ** 全局变量: 无
228 ** 调用模块: 无
229 ********************************************************************************************************/
230 unsigned char IICReceive(void)
231 {
232 1 unsigned char i,r;
233 1
234 1 r = 0;
235 1 SDA = 1;
236 1 for (i = 0; i < 8; i++)
237 1 {
238 2 r = r * 2;
239 2 SCL = 1;
240 2 if (SDA == 1)
C51 COMPILER V8.02 I2C 06/01/2008 12:34:31 PAGE 5
241 2 {
242 3 r++;
243 3 }
244 2 SCL = 0;
245 2 }
246 1 return r;
247 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 302 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -