📄 iic.lst
字号:
153 *** 函数说明: 操作完成后保证SCL为0;
154 /******************************************************************************/
155 void IIC_SendAck(void)
156 {
157 1 SDA = 0;
158 1 _nop_();
159 1 SCL = 1;
160 1 _nop_();
161 1 SCL = 0;
162 1 }
163 /*******************************************************************************
164 *** 函 数 名: static void IIC_SendNoAck(void)
165 *** 功能描述: 发送非应答信号;
166 *** 全局变量: NO !
167 *** 输 入: NO !
168 *** 输 出: NO !
169 *** 创 建 人:huangtiexiong 日期:2006-11-28
170 *** 修 改 人: 日期:2006-11-28
171 *** 函数说明: 操作完成后保证SCL为0;
172 /******************************************************************************/
173 void IIC_SendNoAck(void)
174 {
175 1 SDA = 1;
176 1 _nop_();
177 1 SCL = 1;
178 1 _nop_();
179 1 SCL = 0;
C51 COMPILER V8.08 IIC 01/23/2008 15:09:59 PAGE 4
180 1 }
181 /*******************************************************************************
182 *** 函 数 名: static void IIC_Stop(void)
183 *** 功能描述: 终止IIC传输;
184 *** 全局变量: NO !
185 *** 输 入: NO !
186 *** 输 出: NO !
187 *** 创 建 人:huangtiexiong 日期:2006-11-28
188 *** 修 改 人: 日期:2006-11-28
189 *** 函数说明: 操作完成后保证SCL为1,同时打开中断;
190 /******************************************************************************/
191 void IIC_Stop(void)
192 {
193 1 SDA = 0; //to stop IIC;
194 1 SCL = 0;
195 1 _nop_();
196 1 SCL = 1;
197 1 _nop_();
198 1 SDA = 1; //IIC Stoped !! 结束IIC之后传输线全部置1;
199 1 EA = 1; //Set EA.
200 1 }
201 /*******************************************************************************
202 *** 函 数 名: extern void PCF8583_ReadDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
203 *** 功能描述: 对PCF8583读;
204 *** 全局变量: NO !
205 *** 输 入: addrInter:内部寻址;num:数据长度;buff:数据缓存;
206 *** 输 出: buff数据缓存;
207 *** 创 建 人:huangtiexiong 日期:2006-11-28
208 *** 修 改 人: 日期:2006-11-28
209 *** 函数说明: IIC Start至Stop间传输的字节数不限;
210 PCF8583内部寄存器地址附自增功能;
211 /******************************************************************************/
212 extern void PCF8583_ReadDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
213 {
214 1 unsigned char i;
215 1 IIC_Start(); //启动IIC Bus;
216 1 IIC_TxByte(0xa0); //PCF8583设备寻址;命令:写;
217 1 IIC_WaitAck(); //等待Ack信号;
218 1 IIC_TxByte(addrInter); //发送内部寄存器地址;
219 1 IIC_WaitAck(); //等待Ack信号;
220 1
221 1 IIC_Start(); //参考PCF读Read Mode时序;
222 1 IIC_TxByte(0xa1); //PCF8583设备寻址,命令:读;
223 1 IIC_WaitAck();
224 1
225 1 for(i=0;i<num-1;i++)
226 1 {
227 2 buff[i] = IIC_RxByte(); //读一个字节;
228 2 IIC_SendAck(); //发送应答信号;
229 2 }
230 1 buff[num-1] = IIC_RxByte();
231 1 IIC_SendNoAck(); //最后一个字节发送非应答信号;
232 1 IIC_Stop(); //终止本次传输,IIC Bus空闲;
233 1 }
234 /*******************************************************************************
235 *** 函 数 名: extern void PCF8583_WriteDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
236 *** 功能描述: 对PCF8583写;
237 *** 全局变量: NO !
238 *** 输 入: addrInter:内部寻址;num:数据长度;buff:数据缓存;
239 *** 输 出: NO !
240 *** 创 建 人:huangtiexiong 日期:2006-11-28
241 *** 修 改 人: 日期:2006-11-28
C51 COMPILER V8.08 IIC 01/23/2008 15:09:59 PAGE 5
242 *** 函数说明: IIC Start至Stop间传输的字节数不限;
243 PCF8583内部寄存器地址附自增功能;
244 /******************************************************************************/
245 extern void PCF8583_WriteDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
246 {
247 1 unsigned char i;
248 1
249 1 IIC_Start();
250 1 IIC_TxByte(0xa0);
251 1 IIC_WaitAck();
252 1
253 1 IIC_TxByte(addrInter);
254 1 IIC_WaitAck();
255 1
256 1 for(i=0;i<num;i++)
257 1 {
258 2 IIC_TxByte(buff[i]);
259 2 IIC_WaitAck();
260 2 }
261 1
262 1 IIC_Stop();
263 1 }
264 /*******************************************************************************
265 *** 函 数 名: extern void PCF8583_WriteByte(unsigned char addrInter,unsigned char val)
266 *** 功能描述: 对PCF8583写一个字节;
267 *** 全局变量: NO !
268 *** 输 入: addrInter:内部寻址;val:待写字节数据;
269 *** 输 出: NO !
270 *** 创 建 人:huangtiexiong 日期:2006-11-28
271 *** 修 改 人: 日期:2006-11-28
272 *** 函数说明: 参照PCF8583读时序;
273 /******************************************************************************/
274 extern void PCF8583_WriteByte(unsigned char addrInter,unsigned char val)
275 {
276 1 IIC_Start();
277 1
278 1 IIC_TxByte(0xa0);
279 1 IIC_WaitAck();
280 1
281 1 IIC_TxByte(addrInter);
282 1 IIC_WaitAck();
283 1 IIC_TxByte(val);
284 1 IIC_WaitAck();
285 1
286 1 IIC_Stop();
287 1 }
288
289 extern void PCF8583_Init(void)
290 {
291 1 PCF8583_WriteByte(0x00,0x00); //Control reg. Alarm disabled。
292 1 }
293
294 /*******************************************************************************
295 **** End Of File
296 *******************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 322 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.08 IIC 01/23/2008 15:09:59 PAGE 6
DATA SIZE = ---- 13
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 + -