📄 iic.lst
字号:
C51 COMPILER V7.50 IIC 01/01/2002 04:01:32 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\IIC.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\Inc\IIC.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\IIC.lst) OBJECT
-(.\IIC.obj)
line level source
1 //**********************************************************
2 //** IIC驱动程序 **
3 //** 单片机: STC12C5410AD 主频: 24MHz **
4 //** Jumping <2008.04.20> **
5 //**********************************************************
6
7 //#include <REGx051.H> // AT89C4051头文件
8 #include "../inc/STC12C5410AD.H" // AT89C4051头文件
9 #include <INTRINS.H> // 系统调令头文件
10 #include "def.h" // 类型定义文件
11 #include "config.h" // 配置头文件
12 #include "IIC.h" // 配置头文件
13 #include "uart.h" // 配置头文件
14
15 //*****变量声明****
16 INT CH0,CH1;
17
18 // *** 函数声明 ***
19 void I2C_Start (void);
20 void I2C_Stop (void);
21 BOOL Send_Byte_I2C(BYTE tmData);
22 BYTE Read_Byte_I2C_ACK();
23 BYTE Read_Byte_I2C_NoACK();
24 uchar TSL2561_read_byte( uchar addr);
25 void InitTsl256x(void);
26 INT GetLux(void);
27 //BOOL Read_Data_I2C(BYTE iNum, unsigned int wAddr, BYTE tmData[64]);
28 //BOOL Write_Data_I2C(BYTE iNum, unsigned int wAddr, BYTE tmData[64]);
29
30 //***************************************************************************************
31 unsigned int CalculateLux(unsigned int iGain, unsigned int tInt, unsigned int ch0, unsigned int ch1, int i
-Type);
32
33 //#pragma OPTIMIZE(5)
34
35 /*******************************************************************************
36 * 名 称: I2C_Start()
37 * 功 能: 启动I2C操作
38 * 入口参数: 无
39 * 出口参数: 无
40 *******************************************************************************/
41 void I2C_Start (void)
42 {
43 1 uchar i;
44 1
45 1 SCL = 1;
46 1 SDA = 1;
47 1
48 1 for(i=0; i<12; i++)
49 1 _nop_ ();
50 1
51 1 SDA = 0;
52 1
53 1 for(i=0; i<12; i++)
C51 COMPILER V7.50 IIC 01/01/2002 04:01:32 PAGE 2
54 1 _nop_ ();
55 1
56 1 SCL = 0;
57 1 }
58
59
60 /*******************************************************************************
61 * 名 称: I2C_Stop()
62 * 功 能: 结束I2C操作
63 * 入口参数: 无
64 * 出口参数: 无
65 *******************************************************************************/
66 void I2C_Stop (void)
67 {
68 1 uchar i;
69 1
70 1 SCL = 0;
71 1 SDA = 0;
72 1
73 1 for(i=0; i<12; i++)
74 1 _nop_ ();
75 1 SCL = 1;
76 1
77 1 for(i=0; i<12; i++)
78 1 _nop_ ();
79 1 SDA = 1;
80 1
81 1 }
82 /*********************************************/
83 /* name: Send_Byte_I2C */
84 /* input: BYTE tmData */
85 /* output: BOOL */
86 /* function: Send one tmData to 24256 */
87 /*********************************************/
88 BOOL Send_Byte_I2C(BYTE tmData)
89 {
90 1 BYTE i,temp;
91 1 BOOL bSendOk;
92 1
93 1 temp = tmData;
94 1
95 1 SCL = 0;
96 1
97 1 for(i=0; i<8; i++)
98 1 _nop_ ();
99 1
100 1 for(i=0; i<8; i++)
101 1 {
102 2 if(temp & 0x80)
103 2 SDA = 1;
104 2 else
105 2 SDA = 0;
106 2
107 2 _nop_ ();
108 2 _nop_ ();
109 2 _nop_ ();
110 2 _nop_ ();
111 2 _nop_ ();
112 2 _nop_ ();
113 2
114 2 SCL = 1;
115 2 temp = _crol_(temp,1);
C51 COMPILER V7.50 IIC 01/01/2002 04:01:32 PAGE 3
116 2
117 2 _nop_ ();
118 2 _nop_ ();
119 2 _nop_ ();
120 2 _nop_ ();
121 2 _nop_ ();
122 2 _nop_ ();
123 2
124 2 SCL = 0;
125 2
126 2 _nop_ ();
127 2 _nop_ ();
128 2 _nop_ ();
129 2 _nop_ ();
130 2 _nop_ ();
131 2 _nop_ ();
132 2
133 2 }
134 1
135 1 for(i=0; i<5; i++)
136 1 _nop_ ();
137 1
138 1 SCL = 1;
139 1 SDA = 1;
140 1 _nop_ ();//jp
141 1 _nop_ ();//jp
142 1 _nop_ ();//jp
143 1 bSendOk = FALSE;
144 1 for(i=0; i<10; i++)
145 1 {
146 2 _nop_ ();
147 2 if(!SDA) {bSendOk = TRUE;break;} //sda =0 应答信号
148 2 }
149 1 // ACC = P1;
150 1 /*
151 1 if(SDA) //sda =0 应答信号
152 1 {
153 1 bSendOk = FALSE;
154 1 }
155 1 else
156 1 bSendOk = TRUE;*/
157 1 SCL = 0;
158 1 return bSendOk;
159 1 }
160
161
162 /*********************************************/
163 /* name: Read_Byte_I2C_ACK */
164 /* input: none */
165 /* output: BYTE tmData */
166 /* function: Send one tmData to 24256 */
167 /*********************************************/
168 BYTE Read_Byte_I2C_ACK()
169 {
170 1 BYTE i;
171 1 BYTE tmData = 0;
172 1
173 1
174 1 SDA=1;//
175 1 _nop_ ();//jp
176 1 _nop_ ();//jp
177 1 _nop_ ();//jp
C51 COMPILER V7.50 IIC 01/01/2002 04:01:32 PAGE 4
178 1 _nop_ ();//jp
179 1
180 1 for(i=0; i<8; i++)
181 1 {
182 2 //tmData *= 2;
183 2 tmData <<= 1;
184 2 SCL = 1;
185 2
186 2 _nop_ ();
187 2 _nop_ ();
188 2 _nop_ ();
189 2
190 2 _nop_ ();//jk
191 2 _nop_ ();//jk
192 2 _nop_ ();//jk
193 2
194 2 if(SDA)
195 2 tmData |= 0x01;
196 2
197 2 _nop_ ();//jk
198 2 _nop_ ();//jk
199 2 _nop_ ();//jk
200 2
201 2 SCL = 0;
202 2
203 2 _nop_ ();
204 2 _nop_ ();
205 2 _nop_ ();
206 2 _nop_ ();
207 2 _nop_ ();
208 2 }
209 1
210 1
211 1 SDA = 0;
212 1 _nop_ ();
213 1 _nop_ ();
214 1
215 1 SCL = 1;
216 1 for(i=0; i<8; i++)
217 1 _nop_ ();
218 1 SCL=0;
219 1
220 1 SDA = 1;
221 1
222 1
223 1 return tmData;
224 1 }
225
226
227 /*******************************************************************************
228 * 名 称: I2C_Start()
229 * 功 能: 启动I2C操作
230 * 入口参数: 无
231 * 出口参数: 无
232 *******************************************************************************/
233 BYTE Read_Byte_I2C_NoACK()
234 {
235 1 BYTE i;
236 1 BYTE tmData = 0;
237 1 SDA=1;
238 1 for(i=0; i<8; i++)
239 1 {
C51 COMPILER V7.50 IIC 01/01/2002 04:01:32 PAGE 5
240 2 tmData *= 2;
241 2 SCL = 1;
242 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -