📄 twowire.lst
字号:
C51 COMPILER V7.06 TWOWIRE 12/28/2004 10:14:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TWOWIRE
OBJECT MODULE PLACED IN .\obj\TWOWIRE.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\TWOWIRE.C BROWSE INCDIR(.\include\;.\source\) DEBUG OBJECTEXTEND PRI
-NT(.\TWOWIRE.lst) OBJECT(.\obj\TWOWIRE.obj)
stmt 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 "TW101Reg.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.06 TWOWIRE 12/28/2004 10:14:02 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.06 TWOWIRE 12/28/2004 10:14:02 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) cAcknowledge = 1; /* No Acknowledge */
124 1 Set_SCL_Low; /* Finish Acknoledge */
125 1 for(j = 0; j < TWD_SHORT_TIME; j++)
126 1 { };
127 1
128 1 return(cAcknowledge);
129 1 }
130
131 //--------------------------------------------------
132 // Read_Byte
133 // Read a byte from master with a acknowledge bit
134 //--------------------------------------------------
135 uCHAR Read_Byte(uCHAR cNum)
136 {
137 1 uCHAR ix, j;
138 1 uCHAR cRetval=0;
139 1
140 1 for(ix=0;ix<8;ix++){
141 2 Set_SCL_High;
142 2 while(SCL_Low){};
143 2 for(j=0;j<TWD_SHORT_TIME;j++){};
144 2 cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ; /* MSB First */
145 2 Set_SCL_Low;
146 2 }
147 1
148 1 if(cNum==1)
149 1 Set_SDA_High;
150 1 else
151 1 Set_SDA_Low;
152 1 //SDA = (cNum==1) 1:0;
153 1 Set_SCL_High;
154 1 while(SCL_Low){};
155 1 for(j = 0; j < TWD_SHORT_TIME; j++)
156 1 { };
157 1
158 1 Set_SCL_Low;
159 1
160 1 Set_SDA_High;
161 1 for(j = 0; j < TWD_SHORT_TIME; j++)
162 1 { };
163 1
164 1 return cRetval;
165 1 }
166
167 #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 */
C51 COMPILER V7.06 TWOWIRE 12/28/2004 10:14:02 PAGE 4
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;
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)
{
C51 COMPILER V7.06 TWOWIRE 12/28/2004 10:14:02 PAGE 5
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;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
return cRetval;
}
#endif
277
278 //--------------------------------------------------
279 // Write Byte to Device
280 //--------------------------------------------------
281
282 //--------------------------------------------------
283 // Read Byte to Device
284 //--------------------------------------------------
285 uCHAR I2CReadByte(uCHAR cDevAddr, uCHAR cReg)
286 {
287 1 uCHAR cResult = 0;
288 1
289 1
290 1 /* write reg offset */
291 1 StartCondition();
292 1 if(Send_Byte(cDevAddr))
293 1 return 0; // Write address
294 1 if(Send_Byte(cReg))
295 1 return 0;
296 1
297 1 /* read data */
298 1 StartCondition();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -