📄 iic_master.lst
字号:
C51 COMPILER V7.08 IIC_MASTER 03/31/2006 18:35:32 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE IIC_MASTER
OBJECT MODULE PLACED IN iic_master.OBJ
COMPILER INVOKED BY: E:\电子应用软件\keil7\C51\BIN\C51.EXE iic_master.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************************************************************
2 ** Small RTOS(51)
3 ** The Real-Time Kernel(For Keil c51)
4 **
5 ** (c) Copyright 2002-2003, chenmingji
6 ** All Rights Reserved
7 **
8 ** V1.12.1
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: IIC_Master.c
13 **创 建 人: 陈明计
14 **最后修改日期: 2002年12月3日
15 **描 述: Small RTOS IIC总线主器件驱动程序源文件,也可以在不使用
16 ** Small RTOS的情况下使用(标准51CPU12MHz时100KHz IIc总线
17 ** 仿真)
18 **--------------历史版本信息----------------------------------------------------------------------------
19 ** 创建人: 陈明计
20 ** 版 本: V1.00
21 ** 日 期: 2003年2月28日
22 ** 描 述: 原始版本
23 **
24 **------------------------------------------------------------------------------------------------------
25 ** 修改人:
26 ** 版 本:
27 ** 日 期:
28 ** 描 述:
29 **
30 **--------------当前版本修订------------------------------------------------------------------------------
31 ** 修改人:
32 ** 日 期:
33 ** 描 述:
34 **
35 **------------------------------------------------------------------------------------------------------
36 ********************************************************************************************************/
37 #include <IIC.H>
38
39 /*********************************************************************************************************
40 ** 函数名称: IICRead
41 ** 功能描述: 从IIC总线读取数据
42 ** 输 入: Ret:存储读取的数据
43 ** Addr:IIC从器件地址
44 ** Nbyte:读取的字节数目
45 ** 输 出: TRUE:成功
46 ** FALSE:失败
47 ** 全局变量: 无
48 ** 调用模块: 无
49 ********************************************************************************************************/
50 uint8 IICRead(uint8 *Ret,uint8 Addr,uint8 NByte)
51 {
52 1 uint8 i,k;
53 1 // Addr = Addr & 0xfe;
54 1 Addr = Addr | 0x01;
55 1 if (IICStart() == FALSE)
C51 COMPILER V7.08 IIC_MASTER 03/31/2006 18:35:32 PAGE 2
56 1 {
57 2 return FALSE;
58 2 }
59 1
60 1 if(IICSend(0xa0) == FALSE)
61 1 {
62 2 return FALSE;
63 2 }
64 1 if(IICSend(0x00) == FALSE)
65 1 {
66 2 return FALSE;
67 2 }
68 1 /*
69 1 -----------------------------------
70 1 */
71 1 if(IICSend(Addr) == FALSE)
72 1 {
73 2 return FALSE;
74 2 }
75 1 /*
76 1 -------------------------------------
77 1
78 1 if(IICSend(0x00)==FALSE)
79 1 {
80 1 return FALSE;
81 1 }
82 1 /*
83 1 -------------------------------------
84 1 */
85 1 i = NByte - 1;
86 1 if (i != 0)
87 1 {
88 2 do
89 2 {
90 3 k=IICReceive();
91 3 *Ret++ =k;// IICReceive();
92 3 IIC_ACK();
93 3 } while (--i != 0);
94 2 }
95 1 *Ret = IICReceive();
96 1 IIC_NO_ACK();
97 1 IICStop();
98 1 return TRUE;
99 1 }
100
101 /*********************************************************************************************************
102 ** 函数名称: IICWrite
103 ** 功能描述: 往IIC总线写数据
104 ** 输 入: Addr:IIC从器件地址
105 ** Data:存储将要写的数据
106 ** Nbyte:写的字节数目
107 ** 输 出: TRUE:成功
108 ** FALSE:失败
109 ** 全局变量: 无
110 ** 调用模块: 无
111 ********************************************************************************************************/
112 uint8 IICWrite(uint8 Addr ,uint8 *Data,uint8 NByte)
113 {
114 1 uint8 i;
115 1
116 1 Addr = Addr & 0xfe;
117 1 if (IICStart() == FALSE)
C51 COMPILER V7.08 IIC_MASTER 03/31/2006 18:35:32 PAGE 3
118 1 {
119 2 return FALSE;
120 2 }
121 1 if (IICSend(Addr) == FALSE)
122 1 {
123 2 return FALSE;
124 2 }
125 1 /*
126 1 -------------------------------------
127 1 */
128 1 if(IICSend(0x00)==FALSE)
129 1 {
130 2 return FALSE;
131 2 }
132 1 /*
133 1 -------------------------------------
134 1 */
135 1 i = NByte;
136 1 do
137 1 {
138 2 if (IICSend(*Data++) == FALSE)
139 2 {
140 3 return FALSE;
141 3 }
142 2 } while (--i !=0 );
143 1 IICStop();
144 1 return TRUE;
145 1 }
146
147 /*********************************************************************************************************
148 ** 函数名称: IICInit
149 ** 功能描述: IIC总线初始化
150 ** 输 入: 无
151 ** 输 出: 无
152 ** 全局变量: 无
153 ** 调用模块: 无
154 ********************************************************************************************************/
155 void IICInit(void)
156 {
157 1 SCL = 0;
158 1 IICStop();
159 1 }
160
161 /*********************************************************************************************************
162 ** 函数名称: IICStart
163 ** 功能描述: 发送IIC启动信号
164 ** 输 入: 无
165 ** 输 出: TRUE:成功
166 ** FALSE:失败
167 ** 全局变量: 无
168 ** 调用模块: 无
169 ********************************************************************************************************/
170 uint8 IICStart(void)
171 {
172 1 SDA = 1;
173 1 SCL = 1;
174 1 _nop_();
175 1 if (SDA == 1)
176 1 {
177 2 SDA = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -