📄 twowire.lst
字号:
C51 COMPILER V7.50 TWOWIRE 01/12/2006 13:31:12 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TWOWIRE
OBJECT MODULE PLACED IN .\Obj\TWOWIRE.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Source\Comm\TWOWIRE.C BROWSE INCDIR(.\Include\;.\Source\;.\Include\Panel\;.
-\Include\GammaTable\) DEFINE(T106) DEBUG OBJECTEXTEND PRINT(.\TWOWIRE.lst) OBJECT(.\Obj\TWOWIRE.obj)
line level source
1 //---------------------------------------------------------------------------
2 // Terawins Inc. Company Confidential Strictly Private
3 //
4 // $Archive: $
5 // $Revision: 1.9 $
6 // $Author: jwang $
7 // $Date: 2002/07/08 22:34:39 $
8 //
9 // --------------------------------------------------------------------------
10 // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
11 // --------------------------------------------------------------------------
12 // Copyright 2002 (c) Terawins Inc.
13 // --------------------------------------------------------------------------
14
15 #include "reg51.h"
16 #include "common.h"
17 #include "System.h"
18 #include "TW10xReg.h"
19 #include "TwoWire.h"
20 #include "Tuner.h"
21 #define TW_SLOW_SPEED
22 //----------------------------------------
23 // S_Condition for TWD protocol
24 //----------------------------------------
25 #if defined(TW_SLOW_SPEED)
26 void StartCondition(void)
27 {
28 1 uCHAR ix;
29 1 uCHAR cTWtrytime=0;
30 1 EA=0;
31 1 while(++cTWtrytime)
32 1 {
33 2 Set_SDA_High;
34 2 Set_SCL_High; /* make sure two line is release */
35 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
36 2 { }; /* Delay 12us */
37 2
38 2 Set_SDA_Low;
39 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
40 2 { }; /* Delay 12us */
41 2
42 2 if((SCL_High)&&(SDA_Low))
43 2 break;
44 2 }
45 1
46 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
47 1 { }; /* Delay 12us */
48 1 }
49
50 //----------------------------------------
51 // P_Condition for TWD protocol
52 //----------------------------------------
53 void StopCondition(void)
54 {
C51 COMPILER V7.50 TWOWIRE 01/12/2006 13:31:12 PAGE 2
55 1 uCHAR ix;
56 1 uCHAR cTWtrytime=0;
57 1
58 1 Set_SDA_Low;
59 1 Set_SCL_High;
60 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
61 1 { }; /* delay 12us */
62 1
63 1 while(SCL_Low && ++cTWtrytime)
64 1 { };
65 1
66 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
67 1 { }; /* delay 12us */
68 1
69 1 Set_SDA_High;
70 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
71 1 { }; /* delay 12us */
72 1 EA=1;
73 1 }
74
75 //--------------------------------------------------
76 // Send_Byte
77 // Send a byte to master with a acknowledge bit
78 //--------------------------------------------------
79 uCHAR Send_Byte(uCHAR cData)
80 {
81 1 uCHAR ix, j, cAcknowledge;
82 1 uCHAR cTWtrytime=0;
83 1
84 1 cAcknowledge = 0;
85 1
86 1 for(ix = 0; ix < 8; ix++)
87 1 {
88 2 Set_SCL_Low;
89 2 for(j = 0; j < TWD_SHORT_TIME; j++)
90 2 { };
91 2
92 2 if(cData&0x80)Set_SDA_High;
93 2 else Set_SDA_Low;
94 2 cData<<=1;
95 2
96 2 for(j = 0; j < TWD_SHORT_TIME; j++)
97 2 { };
98 2
99 2 Set_SCL_High;
100 2 while(SCL_Low && ++cTWtrytime)
101 2 { };
102 2
103 2 for(j = 0; j < TWD_SHORT_TIME; j++)
104 2 { };
105 2 }
106 1 for(j = 0; j < TWD_SHORT_TIME; j++)
107 1 { };
108 1
109 1 Set_SCL_Low;
110 1 for(j = 0; j < TWD_SHORT_TIME; j++)
111 1 { };
112 1
113 1 Set_SDA_High; /* release data line for acknowledge */
114 1 for(j = 0; j < TWD_SHORT_TIME; j++)
115 1 { };
116 1
C51 COMPILER V7.50 TWOWIRE 01/12/2006 13:31:12 PAGE 3
117 1 Set_SCL_High; /* Send a clock for Acknowledge */
118 1 while(SCL_Low)
119 1 { };
120 1 for(j = 0; j < TWD_SHORT_TIME; j++)
121 1 { };
122 1
123 1 if(SDA_High)
124 1 cAcknowledge = 1; /* No Acknowledge */
125 1 Set_SCL_Low; /* Finish Acknoledge */
126 1 for(j = 0; j < TWD_SHORT_TIME; j++)
127 1 { };
128 1
129 1 return(cAcknowledge);
130 1 }
131
132
133 uCHAR Send_Byte1(uCHAR cData)
134 {
135 1 uCHAR ix, j, cAcknowledge;
136 1 uCHAR cTWtrytime=0;
137 1
138 1 cAcknowledge = 0;
139 1
140 1 for(ix = 0; ix < 8; ix++)
141 1 {
142 2
143 2
144 2 if(cData&0x80)Set_SDA_High;
145 2 else Set_SDA_Low;
146 2 cData<<=1;
147 2 Set_SCL_High;
148 2 for(j = 0; j < TWD_SHORT_TIME; j++)
149 2 { };
150 2
151 2 Set_SCL_Low;
152 2
153 2
154 2 for(j = 0; j < TWD_SHORT_TIME; j++)
155 2 { };
156 2 }
157 1
158 1
159 1
160 1 return(1);
161 1 }
162 //--------------------------------------------------
163 // Read_Byte
164 // Read a byte from master with a acknowledge bit
165 //--------------------------------------------------
166 uCHAR Read_Byte(uCHAR cNum)
167 {
168 1 uCHAR ix, j;
169 1 uCHAR cRetval=0;
170 1
171 1 for(ix=0;ix<8;ix++){
172 2 Set_SCL_High;
173 2 while(SCL_Low){};
174 2 for(j=0;j<TWD_SHORT_TIME;j++){};
175 2 cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ; /* MSB First */
176 2 Set_SCL_Low;
177 2 }
178 1
C51 COMPILER V7.50 TWOWIRE 01/12/2006 13:31:12 PAGE 4
179 1 if(cNum==1)
180 1 Set_SDA_High;
181 1 else
182 1 Set_SDA_Low;
183 1 //SDA = (cNum==1) 1:0;
184 1 Set_SCL_High;
185 1 while(SCL_Low){};
186 1 for(j = 0; j < TWD_SHORT_TIME; j++)
187 1 { };
188 1
189 1 Set_SCL_Low;
190 1
191 1 Set_SDA_High;
192 1 for(j = 0; j < TWD_SHORT_TIME; j++)
193 1 { };
194 1
195 1 return cRetval;
196 1 }
197
198 #else
// for fast Two Wire Bus Speed
void StartCondition(void)
{
// uCHAR ix;
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 ix;
uCHAR cTWtrytime=0;
Set_SDA_Low;
Set_SCL_High;
Set_SDA_High;
}
//--------------------------------------------------
// Send_Byte
// Send a byte to master with a acknowledge bit
//--------------------------------------------------
uCHAR Send_Byte(uCHAR cData)
{
uCHAR ix;
uCHAR cAcknowledge;
uCHAR cTWtrytime=0;
C51 COMPILER V7.50 TWOWIRE 01/12/2006 13:31:12 PAGE 5
cAcknowledge = 0;
for(ix = 0; ix < 8; ix++)
{
Set_SCL_Low;
// (cData&(1<<(7-ix)))?(Set_SDA_High):(Set_SDA_Low); /* MSB First */
if(cData&0x80)Set_SDA_High;
else Set_SDA_Low;
cData<<=1;
Set_SCL_High;
}
Set_SCL_Low;
Set_SDA_High; /* release data line for acknowledge */
Set_SCL_High; /* Send a clock for Acknowledge */
if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
Set_SCL_Low; /* Finish Acknoledge */
return(cAcknowledge);
}
//--------------------------------------------------
// Read_Byte
// Read a byte from master with a acknowledge bit
//--------------------------------------------------
uCHAR Read_Byte(void)
{
uCHAR ix, j;
uCHAR cRetval;
uCHAR cTWtrytime=0;
// cRetval = 0;
Set_SDA_High;
for(ix = 0; ix < 8; ix++)
{
Set_SCL_Low;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_High;
while(SCL_Low)
{ };
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
cRetval<<=1;
if(SDA_High) cRetval++;
}
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_Low;
C51 COMPILER V7.50 TWOWIRE 01/12/2006 13:31:12 PAGE 6
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
return cRetval;
}
#endif
311
312 //--------------------------------------------------
313 // Write Byte to Device
314 //--------------------------------------------------
315
316 //--------------------------------------------------
317 // Read Byte to Device
318 //--------------------------------------------------
319 uCHAR I2CReadByte(uCHAR cDevAddr, uCHAR cReg)
320 {
321 1 uCHAR cResult = 0;
322 1
323 1
324 1 /* write reg offset */
325 1 StartCondition();
326 1 if(Send_Byte(cDevAddr))
327 1 return 0; // Write address
328 1 if(Send_Byte(cReg))
329 1 return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -