📄 i2c_bus.lst
字号:
C51 COMPILER V7.06 I2C_BUS 01/05/2007 16:54:14 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C_BUS
OBJECT MODULE PLACED IN .\I2C_BUS.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\..\新建文件夹\I2C_BUS.c BROWSE INCDIR(Z:\cb\T112项目\T112_AV1.8编写文
-件\1.8\include\) DEBUG OBJECTEXTEND PRINT(.\I2C_BUS.lst) OBJECT(.\I2C_BUS.obj)
stmt level source
1 //---------------------------------------------------------------------------
2 // $Author: Write by ChenBing at ShenZheng
3 // $Date: 2007/01/05 14:32:00
4 // $function: for any projects witch use I2C_bus(TOWWIER_bus)
5 // --------------------------------------------------------------------------
6 // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
7 // --------------------------------------------------------------------------
8 // Copyright 2002 (c) Terawins Inc.
9 // --------------------------------------------------------------------------
10
11 #include "reg51.h"
12 #include "I2C_BUS.h"
13
14
15
16 /*****************************************
17 * S_Condition for TWD protocol *
18 *****************************************/
19
20 #ifdef COPY
21
22 #if defined(TW_SLOW_SPEED)
23 /*****************************************
24 * SDA _________ *
25 * \________ *
26 * *
27 * SCL____________ *
28 * \________ *
29 *****************************************/
30 void StartCondition(void)
31 {
32 1 uCHAR ix;
33 1 uCHAR cTWtrytime=0;
34 1
35 1 EA=0;
36 1
37 1 while(++cTWtrytime)
38 1 {
39 2 /* make sure two line is release */
40 2 Set_SDA_High; // SDA=1;
41 2 Set_SCL_High; // SCL=1;
42 2
43 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
44 2 { }; // Delay 12us
45 2
46 2 Set_SDA_Low; // SDA=0;
47 2
48 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
49 2 { }; // Delay 12us
50 2
51 2 if((SCL_High)&&(SDA_Low)) // SDA=0&&SCL=1;
52 2 break;
53 2 }
54 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
C51 COMPILER V7.06 I2C_BUS 01/05/2007 16:54:14 PAGE 2
55 1 { }; // Delay 12us
56 1 }
57
58 /*****************************************
59 * P_Condition for TWD protocol *
60 *****************************************/
61
62 /*****************************************
63 * SDA ______ *
64 * ____________/ *
65 * *
66 * SCL _________ *
67 * _________/ *
68 *****************************************/
69 void StopCondition(void)
70 {
71 1 uCHAR ix;
72 1 uCHAR cTWtrytime=0;
73 1
74 1 Set_SDA_Low;
75 1 Set_SCL_High;
76 1
77 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
78 1 { }; /* delay 12us */
79 1
80 1 while(SCL_Low && ++cTWtrytime) // 确保SCL为高
81 1 { };
82 1
83 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
84 1 { }; /* delay 12us */
85 1
86 1 Set_SDA_High;
87 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
88 1 { }; /* delay 12us */
89 1
90 1 EA=1;
91 1 }
92
93 /**********************************************
94 *Send a byte to master with a acknowledge bit *
95 **********************************************/
96
97 /*****************************************
98 * SDA _______ ___ ______ *
99 * _______X___X______ *
100 * *
101 * SCL __ *
102 * _________/ \________ *
103 *****************************************/
104
105 uCHAR Send_Byte(uCHAR cData)
106 {
107 1 uCHAR ix, j, cAcknowledge;
108 1 uCHAR cTWtrytime=0;
109 1 cAcknowledge = 0;
110 1
111 1 for(ix = 0; ix < 8; ix++)
112 1 {
113 2 Set_SCL_Low; // _____/
114 2
115 2 for(j = 0; j < TWD_SHORT_TIME; j++)
116 2 { };
C51 COMPILER V7.06 I2C_BUS 01/05/2007 16:54:14 PAGE 3
117 2 if(cData&0x80)
118 2 Set_SDA_High;
119 2 else
120 2 Set_SDA_Low;
121 2 cData<<=1;
122 2 for(j = 0; j < TWD_SHORT_TIME; j++)
123 2 { };
124 2 // ______
125 2 Set_SCL_High; // /
126 2
127 2 while(SCL_Low && ++cTWtrytime) // 确保SCL为高
128 2 { };
129 2 for(j = 0; j < TWD_SHORT_TIME; j++)
130 2 { };
131 2 }
132 1 for(j = 0; j < TWD_SHORT_TIME; j++)
133 1 { };
134 1 Set_SCL_Low;
135 1 for(j = 0; j < TWD_SHORT_TIME; j++)
136 1 { };
137 1 Set_SDA_High; // release data line for acknowledge (释放总线,读从应答位)
138 1 for(j = 0; j < TWD_SHORT_TIME; j++)
139 1 { };
140 1 Set_SCL_High; // Send a clock for Acknowledge
141 1 while(SCL_Low)
142 1 { };
143 1 for(j = 0; j < TWD_SHORT_TIME; j++)
144 1 { };
145 1 if(SDA_High)
146 1 cAcknowledge = 1; // No Acknowledge
147 1 Set_SCL_Low; // Finish Acknoledge
148 1 for(j = 0; j < TWD_SHORT_TIME; j++)
149 1 { };
150 1 return(cAcknowledge);
151 1 }
152
153 uCHAR Send_Byte1(uCHAR cData)
154 {
155 1 uCHAR ix, j, cAcknowledge;
156 1 uCHAR cTWtrytime=0;
157 1
158 1 cAcknowledge = 0;
159 1
160 1 for(ix = 0; ix < 8; ix++)
161 1 {
162 2 if(cData&0x80)
163 2 Set_SDA_High;
164 2 else
165 2 Set_SDA_Low;
166 2 cData<<=1;
167 2 Set_SCL_High;
168 2 for(j = 0; j < TWD_SHORT_TIME; j++)
169 2 { };
170 2 Set_SCL_Low;
171 2 for(j = 0; j < TWD_SHORT_TIME; j++)
172 2 { };
173 2 }
174 1 return(1);
175 1 }
176
177 /************************************************
178 *Read a byte from master with a acknowledge bit *
C51 COMPILER V7.06 I2C_BUS 01/05/2007 16:54:14 PAGE 4
179 ************************************************/
180
181 uCHAR Read_Byte(uCHAR cNum)
182 {
183 1 uCHAR ix, j;
184 1 uCHAR cRetval=0;
185 1
186 1 for(ix=0;ix<8;ix++)
187 1 {
188 2 Set_SCL_Low;
189 2
190 2 while(SCL_High){};
191 2 for(j=0;j<TWD_SHORT_TIME;j++){};
192 2 cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ; // MSB First
193 2
194 2 Set_SCL_High;
195 2 }
196 1 if(cNum==1) // SDA = (cNum==1) 1:0;
197 1 Set_SDA_High;
198 1 else
199 1 Set_SDA_Low;
200 1 Set_SCL_High;
201 1 while(SCL_Low){};
202 1 for(j = 0; j < TWD_SHORT_TIME; j++)
203 1 { };
204 1 Set_SCL_Low;
205 1 Set_SDA_High;
206 1 for(j = 0; j < TWD_SHORT_TIME; j++)
207 1 { };
208 1 return cRetval;
209 1 }
210
211 #else
// for fast Two Wire Bus Speed
/*****************************************
* S_Condition for TWD protocol *
*****************************************/
void StartCondition(void)
{
uCHAR cTWtrytime=0;
while(++cTWtrytime)
{
Set_SDA_High;
Set_SCL_High; /* make sure two line is release */
Set_SDA_Low;
if((SCL_High)&&(SDA_Low))
break;
}
}
/*****************************************
* P_Condition for TWD protocol *
*****************************************/
void StopCondition(void)
{
uCHAR cTWtrytime=0;
Set_SDA_Low;
Set_SCL_High;
Set_SDA_High;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -