📄 wdi2c.lst
字号:
C51 COMPILER V7.01 WDI2C 05/09/2003 11:49:39 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE WDI2C
OBJECT MODULE PLACED IN .\wdi2c.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\wdi2c.c LARGE DEBUG OBJECTEXTEND
stmt level source
1 #include"w77e58.h"
2 #include"intrins.h"
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7
8 sbit sda= P3^3;
9 sbit scl= P3^4;
10
11 sbit ac0=ACC^0; /*定义ACC的位,利用ACC操作速度最快*/
12 sbit ac1=ACC^1;
13 sbit ac2=ACC^2;
14 sbit ac3=ACC^3;
15 sbit ac4=ACC^4;
16 sbit ac5=ACC^5;
17 sbit ac6=ACC^6;
18 sbit ac7=ACC^7;
19
20
21
22 void delay();
23
24
25
26 void i2c_start(void); /*起始*/
27 void i2c_stop(void); /*停止*/
28 bit wait_ack(void); /*等待24c02应答*/
29 void send_ack(void); /*向24c02发送应答*/
30 void sendnot_ack(void); /*向24c02发送非应答*/
31 void i2c_sendbyte(uchar ch);/*写发送移位*/
32 uint i2c_readbyte(void); /*读移位*/
33
34 uint i2c_read(uchar address);
35 bit i2c_write(uchar address,uint fb);
36
37
38
39 void i2c_start(void)
40 {
41 1
42 1 sda=1;
43 1 //while(!sda) {};
44 1 scl=1;
45 1 //while(!scl) {};
46 1 delay();
47 1
48 1 sda=0;
49 1 delay();
50 1 scl=0;
51 1 delay();
52 1 }
53
54
55
C51 COMPILER V7.01 WDI2C 05/09/2003 11:49:39 PAGE 2
56 void i2c_stop(void)
57 {
58 1 scl=0;
59 1 _nop_();
60 1 sda=0;
61 1 delay();
62 1 scl=1;
63 1 delay();
64 1 sda=1;
65 1
66 1 }
67
68
69 bit wait_ack(void)
70 {
71 1 uchar i;
72 1 //scl=0;
73 1 //_nop_();
74 1 //_nop_();
75 1 sda=1;
76 1 scl=1;
77 1 _nop_();
78 1 //while(!scl) {};
79 1 while(sda)
80 1 {
81 2 for(i=0;i<=5;i++)
82 2 {
83 3 if(!sda)
84 3 {
85 4 delay();
86 4 scl=0;
87 4 delay();
88 4 return(0);
89 4 }
90 3 }
91 2 delay();
92 2 scl=0;
93 2 delay();
94 2 return(1);
95 2 }
96 1 delay();
97 1 scl=0;
98 1 delay();
99 1 return(0);
100 1 }
101
102 void send_ack(void)
103 {
104 1 sda=0;
105 1 delay();
106 1 scl=1;
107 1 delay();
108 1 scl=0;
109 1 }
110
111
112 void sendnot_ack(void)
113 {
114 1 sda=1;
115 1 delay();
116 1 scl=1;
117 1 delay();
C51 COMPILER V7.01 WDI2C 05/09/2003 11:49:39 PAGE 3
118 1 scl=0;
119 1 }
120
121
122 void i2c_sendbyte(uchar ch)
123 {
124 1 ACC=ch;
125 1
126 1 sda=ac7;_nop_();scl=1;delay();scl=0;delay();
127 1 sda=ac6;_nop_();scl=1;delay();scl=0;delay();
128 1 sda=ac5;_nop_();scl=1;delay();scl=0;delay();
129 1 sda=ac4;_nop_();scl=1;delay();scl=0;delay();
130 1 sda=ac3;_nop_();scl=1;delay();scl=0;delay();
131 1 sda=ac2;_nop_();scl=1;delay();scl=0;delay();
132 1 sda=ac1;_nop_();scl=1;delay();scl=0;delay();
133 1 sda=ac0;_nop_();scl=1;delay();scl=0;delay();
134 1 }
135
136
137 uint i2c_readbyte(void)
138 {
139 1 uint sf;
140 1 sda=1;_nop_();_nop_();
141 1 scl=1;delay();ac7=sda;scl=0;delay();
142 1 scl=1;delay();ac6=sda;scl=0;delay();
143 1 scl=1;delay();ac5=sda;scl=0;delay();
144 1 scl=1;delay();ac4=sda;scl=0;delay();
145 1 scl=1;delay();ac3=sda;scl=0;delay();
146 1 scl=1;delay();ac2=sda;scl=0;delay();
147 1 scl=1;delay();ac1=sda;scl=0;delay();
148 1 scl=1;delay();ac0=sda;scl=0;delay();
149 1 sf=ACC;
150 1 return(sf);
151 1 }
152
153
154
155 void delay()
156 {
157 1 _nop_();
158 1 _nop_();
159 1 _nop_();
160 1 _nop_();
161 1 _nop_();
162 1 _nop_();
163 1 _nop_();
164 1 _nop_();
165 1 _nop_();
166 1
167 1
168 1
169 1
170 1 }
171
172
173
174 uint i2c_read(uchar address)
175 {
176 1 uchar dd=0xa0;
177 1 uchar dc=0xa1;
178 1 uint ae;
179 1 uint ar;
C51 COMPILER V7.01 WDI2C 05/09/2003 11:49:39 PAGE 4
180 1 i2c_start();
181 1 i2c_sendbyte(dd);
182 1 if(wait_ack())
183 1 {
184 2 i2c_stop();
185 2 return(0);
186 2 }
187 1 i2c_sendbyte(address);
188 1 if(wait_ack())
189 1 {
190 2 i2c_stop();
191 2 return(0);
192 2 }
193 1 i2c_stop();
194 1 delay();
195 1 i2c_start();
196 1 i2c_sendbyte(dc);
197 1 if(wait_ack())
198 1 {
199 2 i2c_stop();
200 2 return(0);
201 2 }
202 1 ae=i2c_readbyte();
203 1 send_ack();
204 1 ar=i2c_readbyte();
205 1 sendnot_ack();
206 1 i2c_stop();
207 1 ar=ar<<8;
208 1 return(ar+ae);
209 1 }
210
211
212 bit i2c_write(uchar address,uint fb)
213 {
214 1 uchar dd=0xa0;
215 1 uchar ae;
216 1 uchar ar;
217 1 ae=(uchar)fb;
218 1 fb=(fb>>8);
219 1 ar=(uchar)fb;
220 1 i2c_start();
221 1 i2c_sendbyte(dd);
222 1 if(wait_ack())
223 1 {
224 2 i2c_stop();
225 2 return(0);
226 2 }
227 1 i2c_sendbyte(address);
228 1 if(wait_ack())
229 1 {
230 2 i2c_stop();
231 2 return(0);
232 2 }
233 1 i2c_sendbyte(ae);
234 1 if(wait_ack())
235 1 {
236 2 i2c_stop();
237 2 return(0);
238 2 }
239 1 i2c_sendbyte(ar);
240 1 if(wait_ack())
241 1 {
C51 COMPILER V7.01 WDI2C 05/09/2003 11:49:39 PAGE 5
242 2 i2c_stop();
243 2 return(0);
244 2 }
245 1 i2c_stop();
246 1 return(1);
247 1 }
248
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 581 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -