?? i2c.lst
字號:
C51 COMPILER V8.05a I2C 07/03/2008 18:27:38 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\OBJ\I2c.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE i2c\I2c.c LARGE BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\I2c.lst
-) OBJECT(.\OBJ\I2c.obj)
line level source
1 /******************************************************************************\
2 Project Version: MTKCARDVD()
3 ********************************************************************************
4 Filename: I2c.c
5
6 Author: Alan Chan
7
8 Company: CoreTek/ACT Company
9
10 ********************************************************************************
11 File Version: 1.01
12 File Created: July 2007
13
14 Compiled Using: keil uVision2 Version 2.23
15
16 ********************************************************************************
17 Files Required:
18
19 ********************************************************************************
20 File Description:
21
22 ********************************************************************************
23 File History:
24
25 --------------------------------------------------------------------------------
26 Date Name Description
27 --------------------------------------------------------------------------------
28 Mar. 2007 Alan Chan File Created
29
30 \******************************************************************************/
31 #include "global.h"
32
33 /****************************************************************************/
34 void Delay1us(WORD Time) // delay
35 {
36 1 for (;Time>0;Time--)
37 1 {
38 2 _nop_();_nop_();
39 2 }
40 1
41 1 }
42
43 void Delay1ms(WORD Time) // delay 1ms
44 {
45 1 BYTE Counter;
46 1
47 1 for(; Time > 0; Time --)
48 1 {
49 2 Counter = 250;
50 2 while(--Counter)
51 2 _nop_();
52 2 Counter = 250;
53 2 while(--Counter)
54 2 _nop_();
C51 COMPILER V8.05a I2C 07/03/2008 18:27:38 PAGE 2
55 2 }
56 1 }
57
58 /****************************************************************************/
59 // Software IIC
60 /****************************************************************************/
61 //---------------------------------------------------------------------------
62 void IIC_Start(BIT ch)
63 {
64 1 if (!ch)
65 1 {
66 2 ResSDA1;
67 2 ResSCL1;
68 2 }
69 1 else
70 1 {
71 2 ResSDA2;
72 2 ResSCL2;
73 2 }
74 1 }
75
76 //---------------------------------------------------------------------------
77 void IIC_Stop(BIT ch)
78 {
79 1 if (!ch)
80 1 {
81 2 SetSDA1;
82 2 ResSDA1;
83 2 SetSCL1;
84 2 while(!GetSCL1);
85 2 SetSDA1;
86 2 }
87 1 else
88 1 {
89 2 SetSDA2;
90 2 ResSDA2;
91 2 SetSCL2;
92 2 while(!GetSCL2);
93 2 SetSDA2;
94 2 }
95 1 }
96
97 //---------------------------------------------------------------------------
98 void IIC_Send1Byte(BIT ch, BYTE senddata)
99 {
100 1 BYTE i;
101 1
102 1 if (!ch)
103 1 {
104 2 for(i = 0; i < 8; i++)
105 2 {
106 3 if(senddata & 0x80)
107 3 {
108 4 SetSDA1;
109 4 }
110 3 else
111 3 {
112 4 ResSDA1;
113 4 }
114 3
115 3 senddata <<=1;
116 3
C51 COMPILER V8.05a I2C 07/03/2008 18:27:38 PAGE 3
117 3 SetSCL1;
118 3 while(!GetSCL1);
119 3 ResSCL1;
120 3 }
121 2
122 2 ResSCL1;
123 2 SetSDA1;
124 2 SetSCL1;
125 2 while(!GetSCL1);
126 2
127 2 if (GetSDA1)
128 2 {
129 3 bNoAck = 1;
130 3 }
131 2 else
132 2 bNoAck = 0;
133 2 ResSCL1;
134 2 }
135 1 else
136 1 {
137 2 for(i = 0; i < 8; i++)
138 2 {
139 3 if(senddata & 0x80)
140 3 {
141 4 SetSDA2;
142 4 }
143 3 else
144 3 {
145 4 ResSDA2;
146 4 }
147 3
148 3 senddata <<=1;
149 3
150 3 SetSCL2;
151 3 while(!GetSCL2);
152 3 ResSCL2;
153 3 }
154 2
155 2 ResSCL2;
156 2 SetSDA2;
157 2 SetSCL2;
158 2 while(!GetSCL2);
159 2
160 2 if (GetSDA2)
161 2 bNoAck = 1;
162 2 else
163 2 bNoAck = 0;
164 2 ResSCL2;
165 2 }
166 1 }
167
168 //---------------------------------------------------------------------------
169 BYTE IIC_Read1Byte(BIT ch, BIT noack)
170 {
171 1 BYTE i,readdata=0;
172 1
173 1 if (!ch)
174 1 {
175 2 for(i = 0; i < 8; i++)
176 2 {
177 3 readdata <<= 1;
178 3
C51 COMPILER V8.05a I2C 07/03/2008 18:27:38 PAGE 4
179 3 SetSDA1;
180 3 SetSCL1;
181 3 while(!GetSCL1);
182 3 // Delay1us(1);
183 3
184 3 if(GetSDA1)
185 3 readdata |= 0x01;
186 3 ResSCL1;
187 3 }
188 2 if(noack)
189 2 {
190 3 SetSDA1;
191 3 }
192 2 else
193 2 {
194 3 ResSDA1;
195 3 }
196 2
197 2 SetSCL1;
198 2 // lun hahaha
199 2 while(!GetSCL1);
200 2 ResSCL1;
201 2 // lun hahaha
202 2 if(!noack)
203 2 {
204 3 SetSDA1;
205 3 }
206 2 }
207 1 else
208 1 {
209 2 for(i = 0; i < 8; i++)
210 2 {
211 3 readdata <<= 1;
212 3
213 3 SetSDA2;
214 3 SetSCL2;
215 3 while(!GetSCL2);
216 3
217 3 if(GetSDA2)
218 3 readdata |= 0x01;
219 3 ResSCL2;
220 3 }
221 2 if(noack)
222 2 {
223 3 SetSDA2;
224 3 }
225 2 else
226 2 {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -