📄 iicxx.lst
字号:
C51 COMPILER V8.15 IICXX 12/25/2008 21:36:29 PAGE 1
C51 COMPILER V8.15, COMPILATION OF MODULE IICXX
OBJECT MODULE PLACED IN .\IICxx.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Inc\IICxx.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\IICxx.lst) OB
-JECT(.\IICxx.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 #define SomeNOP(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
17
18 //*****变量声明****
19 INT CH0,CH1;
20
21 // *** 函数声明 ***
22 void I2C_Start (void);
23 void I2C_Stop (void);
24 BOOL Send_Byte_I2C(BYTE tmData);
25 BYTE Read_Byte_I2C_ACK();
26 BYTE Read_Byte_I2C_NoACK();
27 uchar TSL2561_read_byte( uchar addr);
28 void InitTsl256x(void);
29 INT GetLux(void);
30 //BOOL Read_Data_I2C(BYTE iNum, unsigned int wAddr, BYTE tmData[64]);
31 //BOOL Write_Data_I2C(BYTE iNum, unsigned int wAddr, BYTE tmData[64]);
32
33 //***************************************************************************************
34 unsigned int CalculateLux(unsigned int iGain, unsigned int tInt, unsigned int ch0, unsigned int ch1, int i
-Type);
35
36 //#pragma OPTIMIZE(5)
37
38 /*******************************************************************************
39 * 名 称: I2C_Start()
40 * 功 能: 启动I2C操作
41 * 入口参数: 无
42 * 出口参数: 无
43 *******************************************************************************/
44 void I2C_Start (void)
45 {
46 1
47 1 SDA=0;
48 1 SCL=0;
49 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
50 1 SDA=1;
51 1 SCL=1;
52 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
53 1
C51 COMPILER V8.15 IICXX 12/25/2008 21:36:29 PAGE 2
54 1 SDA=0;
55 1 SCL=0;
56 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
57 1 SDA=1;
58 1 SCL=1;
59 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
60 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
61 1 SDA=0;
62 1 SCL=0;
63 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
64 1 SDA=1;
65 1 SCL=1;
66 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
67 1
68 1 SDA=0;
69 1 SCL=0;
70 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
71 1 SDA=1;
72 1 SCL=1;
73 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
74 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
75 1
76 1 SDA=1;
77 1 SCL=0;
78 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
79 1
80 1 SDA=1;
81 1 SCL=1;
82 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
83 1
84 1 SDA=0;
85 1
86 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
87 1 SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
88 1
89 1 }
90
91
92 /*******************************************************************************
93 * 名 称: I2C_Stop()
94 * 功 能: 结束I2C操作
95 * 入口参数: 无
96 * 出口参数: 无
97 *******************************************************************************/
98 void I2C_Stop (void)
99 {
100 1
101 1 SDA=0;
102 1 SomeNOP(); //数据线保持低,时钟线从低到高一次跳变,I2C通信停止
103 1 SCL=1;
104 1 SomeNOP();
105 1 SDA=1;
106 1 SomeNOP();
107 1
108 1
109 1 }
110 /*******************************************************************************
111 * 名 称: I2C_Start()
112 * 功 能: 启动I2C操作
113 * 入口参数: 无
114 * 出口参数: 无
115 *******************************************************************************/
C51 COMPILER V8.15 IICXX 12/25/2008 21:36:29 PAGE 3
116 void SendAck(void)
117 {
118 1 SDA=1;
119 1 SCL=0;
120 1 SomeNOP(); //数据线保持低,时钟线发生一次从高低的跳变 发送一个应答信号
121 1 SCL=1;
122 1 SomeNOP();
123 1 // SCL=0;
124 1 }
125 /*******************************************************************************
126 * 名 称: I2C_Start()
127 * 功 能: 启动I2C操作
128 * 入口参数: 无
129 * 出口参数: 无
130 *******************************************************************************/
131 void SendNotAck(void)
132 {
133 1 SDA=1;
134 1 SCL=0;
135 1 SomeNOP(); //数据线保持高,时钟线发生一次从高低的跳变 没有应答
136 1 SCL=1;
137 1 SomeNOP();
138 1 // SCL=0;
139 1 }
140 /*******************************************************************************
141 * 名 称: I2C_Start()
142 * 功 能: 启动I2C操作
143 * 入口参数: 无
144 * 出口参数: 无
145 *******************************************************************************/
146 BOOL Send_Byte_I2C(BYTE ch)
147 {
148 1 unsigned char i=8;
149 1 while (i--)
150 1 {
151 2 SCL=0;
152 2 _nop_();
153 2 SDA=(bit)(ch&0x80);
154 2 ch<<=1;
155 2 SomeNOP(); //时钟保持低可以发送数据
156 2 SCL=1;
157 2 SomeNOP();
158 2 }
159 1 SCL=0;
160 1
161 1 SendNotAck();
162 1
163 1 return 0;
164 1 }
165
166
167 /*******************************************************************************
168 * 名 称: I2C_Start()
169 * 功 能: 启动I2C操作
170 * 入口参数: 无
171 * 出口参数: 无
172 *******************************************************************************/
173
174 BYTE Read_Byte_I2C_ACK(void)
175 {
176 1 BYTE i,tdata;
177 1 i=8;tdata=0;
C51 COMPILER V8.15 IICXX 12/25/2008 21:36:29 PAGE 4
178 1
179 1 SDA=1;
180 1 _nop_();_nop_();_nop_();
181 1 while (i--)
182 1 {
183 2 tdata<<=1;
184 2 SCL=0;
185 2 SomeNOP();
186 2 SCL=1;
187 2 SomeNOP(); //时钟做一次从低到高的跳变 可以接收数据
188 2 tdata|=SDA;
189 2 }
190 1 SCL=0;
191 1
192 1 SendAck();
193 1
194 1 return tdata;
195 1
196 1 }
197
198
199 /*******************************************************************************
200 * 名 称: I2C_Start()
201 * 功 能: 启动I2C操作
202 * 入口参数: 无
203 * 出口参数: 无
204 *******************************************************************************/
205 BYTE Read_Byte_I2C_NoACK()
206 {
207 1 BYTE i;
208 1 BYTE tmData = 0;
209 1 SDA=1;
210 1 for(i=0; i<8; i++)
211 1 {
212 2 tmData *= 2;
213 2 SCL = 1;
214 2
215 2 if(SDA)
216 2 tmData |= 0x01;
217 2 SCL = 0;
218 2
219 2 _nop_ ();
220 2 _nop_ ();
221 2 _nop_ ();
222 2 _nop_ ();
223 2 _nop_ ();
224 2 }
225 1
226 1 /* SCL = 0;*/
227 1
228 1 return tmData;
229 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -