📄 iic-tune.lst
字号:
C51 COMPILER V7.01 IIC_TUNE 08/17/2003 17:24:35 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE IIC_TUNE
OBJECT MODULE PLACED IN .\Iic-tune.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\Iic-tune.c LARGE MODDP2 DEBUG OBJECTEXTEND
stmt level source
1
2 #include<reg51.h>
3 #include<intrins.h>
4 #include <stdio.h>
5
6
7 #define DEBUG 1
8 #define uchar unsigned char
9 #define uint unsigned int
10
11
12 sbit sdat=P2^1;
13 sbit sclt=P2^2;
14
15 sbit ac0=ACC^0; /*定义ACC的位,利用ACC操作速度最快*/
16 sbit ac1=ACC^1;
17 sbit ac2=ACC^2;
18 sbit ac3=ACC^3;
19 sbit ac4=ACC^4;
20 sbit ac5=ACC^5;
21 sbit ac6=ACC^6;
22 sbit ac7=ACC^7;
23
24
25 extern void delay1(unsigned int i);
26 extern void delay0();
27
28
29 void i2c_start_t(void); /*起始*/
30 void i2c_stop_t(void); /*停止*/
31 bit wait_ack_t(void); /*等待24c02应答*/
32 //void send_ack(void); /*向24c02发送应答*/
33 void sendnot_ack_t(void); /*向24c02发送非应答*/
34 void i2c_sendbyte_t(uchar ch);/*写发送移位*/
35 unsigned char i2c_readbyte_t(void); /*读移位*/
36
37
38 unsigned char i2c_read_a(unsigned char slave,
39 unsigned char address);//单字节读
40 bit i2c_write_a(unsigned char slave,uchar address,
41 unsigned char fb[],unsigned char sun);//多字节写
42 bit i2c_write_b(unsigned char slave, uchar address, unsigned char fb);
43 void write_b(unsigned char slave, unsigned char address, unsigned char fb);
44 void write_a(unsigned char slave,unsigned char address,
45 unsigned char fb[],unsigned char sun);
46
47
48 void i2c_start_t(void)
49 {
50 1
51 1 sclt=1;
52 1 sdat=1;
53 1 delay0();
54 1 sclt=1;
55 1 delay0();
C51 COMPILER V7.01 IIC_TUNE 08/17/2003 17:24:35 PAGE 2
56 1 sdat=0;
57 1 delay0();
58 1 sclt=0;
59 1 delay0();
60 1 }
61
62
63
64 void i2c_stop_t(void)
65 {
66 1 sclt=0;
67 1 _nop_();
68 1 sdat=0;
69 1 delay0();
70 1 sclt=1;
71 1 delay0();
72 1 sdat=1;
73 1 delay0();
74 1 // sclt=0;
75 1 // sdat=0;
76 1 }
77
78
79 bit wait_ack_t(void)
80 {
81 1 uchar i;
82 1 sclt=0;
83 1 _nop_();
84 1 _nop_();
85 1 sdat=1;
86 1 delay0();
87 1 sclt=1;
88 1 delay0();
89 1 while(sdat)
90 1 {
91 2 for(i=0;i<=5;i++)
92 2 {
93 3 if(!sdat)
94 3 {
95 4 sclt=0;
96 4 return(0);
97 4 }
98 3 }
99 2
100 2 return(1);
101 2 }
102 1 sclt=0;
103 1 return(0);
104 1 }
105 /*
106 void send_ack(void)
107 {
108 sdat=0;
109 delay0();
110 sclt=1;
111 delay0();
112 sclt=0;
113 }
114 */
115
116 void sendnot_ack_t(void)
117 {
C51 COMPILER V7.01 IIC_TUNE 08/17/2003 17:24:35 PAGE 3
118 1 sdat=1;
119 1 delay0();
120 1 sclt=1;
121 1 delay0();
122 1 sclt=0;
123 1 }
124
125
126 void i2c_sendbyte_t(uchar ch)
127 {
128 1 ACC=ch;
129 1 sdat=ac7;_nop_();sclt=1;delay0();sclt=0;delay0();
130 1 sdat=ac6;_nop_();sclt=1;delay0();sclt=0;delay0();
131 1 sdat=ac5;_nop_();sclt=1;delay0();sclt=0;delay0();
132 1 sdat=ac4;_nop_();sclt=1;delay0();sclt=0;delay0();
133 1 sdat=ac3;_nop_();sclt=1;delay0();sclt=0;delay0();
134 1 sdat=ac2;_nop_();sclt=1;delay0();sclt=0;delay0();
135 1 sdat=ac1;_nop_();sclt=1;delay0();sclt=0;delay0();
136 1 sdat=ac0;_nop_();sclt=1;delay0();sclt=0;delay0();
137 1 }
138
139
140 unsigned char i2c_readbyte_t(void)
141 {
142 1 uchar sf;
143 1 sdat=1;_nop_();_nop_();
144 1 sclt=1;delay0();ac7=sdat;sclt=0;delay0();
145 1 sclt=1;delay0();ac6=sdat;sclt=0;delay0();
146 1 sclt=1;delay0();ac5=sdat;sclt=0;delay0();
147 1 sclt=1;delay0();ac4=sdat;sclt=0;delay0();
148 1 sclt=1;delay0();ac3=sdat;sclt=0;delay0();
149 1 sclt=1;delay0();ac2=sdat;sclt=0;delay0();
150 1 sclt=1;delay0();ac1=sdat;sclt=0;delay0();
151 1 sclt=1;delay0();ac0=sdat;sclt=0;delay0();
152 1 sf=ACC;
153 1 return(sf);
154 1 }
155
156
157 unsigned char i2c_read_a(unsigned char slave,
158 unsigned char address)//单字节读
159 {
160 1 unsigned char dd=slave&0xfe;//写
161 1 unsigned char dc=slave|0x01;//读
162 1 unsigned char ae;
163 1 delay1(2000);
164 1 i2c_start_t();
165 1 i2c_sendbyte_t(dd);
166 1 if(wait_ack_t())
167 1 {
168 2 i2c_stop_t();
169 2 return(0);
170 2 }
171 1 i2c_sendbyte_t(address);
172 1 if(wait_ack_t())
173 1 {
174 2 i2c_stop_t();
175 2 return(0);
176 2 }
177 1 i2c_stop_t();
178 1 delay1(300);
179 1
C51 COMPILER V7.01 IIC_TUNE 08/17/2003 17:24:35 PAGE 4
180 1 i2c_start_t();
181 1 i2c_sendbyte_t(dc);
182 1 if(wait_ack_t())
183 1 {
184 2 i2c_stop_t();
185 2 return(0);
186 2 }
187 1 ae=i2c_readbyte_t();
188 1 sendnot_ack_t();
189 1 i2c_stop_t();
190 1 return(ae);
191 1 }
192
193
194
195 bit i2c_write_a(unsigned char slave,uchar address,
196 unsigned char fb[],unsigned char sun)//多字节写
197 {
198 1
199 1 uchar dd;//写
200 1 uchar i;
201 1
202 1 dd=slave&0xfe;//写
203 1 delay1(600);
204 1 i2c_start_t();
205 1 i2c_sendbyte_t(dd);
206 1 if(wait_ack_t())
207 1 {
208 2 i2c_stop_t();
209 2 #if(DEBUG)
210 2 // printf("写多字节器件地址off=0x%2x\n",slave);
211 2 #endif
212 2 return(0);
213 2 }
214 1 i2c_sendbyte_t(address);
215 1 if(wait_ack_t())
216 1 {
217 2 i2c_stop_t();
218 2 return(0);
219 2 }
220 1
221 1 for(i=0;i<sun;i++)
222 1 {
223 2 i2c_sendbyte_t(fb[i]);
224 2 if(wait_ack_t())
225 2 {
226 3 i2c_stop_t();
227 3 #if(DEBUG)
228 3 // printf("多字节写a,器件地址=0x%2x\n",slave);
229 3 // printf("多字节写b,address=0x%2x\n",i);
230 3 #endif
231 3 return(0);
232 3 }
233 2 delay1(200);
234 2 }
235 1 i2c_stop_t();
236 1 return(1);
237 1 }
238
239 bit i2c_write_b(unsigned char slave, uchar address, unsigned char fb)
240 { //单字节写
241 1 uchar dd;//写
C51 COMPILER V7.01 IIC_TUNE 08/17/2003 17:24:35 PAGE 5
242 1
243 1 dd=slave&0xfe;//写
244 1 delay1(600);
245 1 i2c_start_t();
246 1 i2c_sendbyte_t(dd);
247 1 if(wait_ack_t())
248 1 {
249 2 i2c_stop_t();
250 2 return(0);
251 2 }
252 1 i2c_sendbyte_t(address);
253 1 if(wait_ack_t())
254 1 {
255 2 i2c_stop_t();
256 2 return(0);
257 2 }
258 1 i2c_sendbyte_t(fb);
259 1 if(wait_ack_t())
260 1 {
261 2 i2c_stop_t();
262 2 return(0);
263 2 }
264 1 i2c_stop_t();
265 1 return(1);
266 1 }
267
268 void write_a(unsigned char slave,unsigned char address,
269 unsigned char fb[],unsigned char sun)
270 {
271 1 unsigned char i;
272 1 for(i=0;i<4;i++)
273 1 {
274 2 if(i2c_write_a(slave,address,fb,sun))
275 2 return;
276 2 }
277 1 #if(DEBUG)
278 1 printf("多字节写入调谐器失败,器件地址=0x%2x,address=0x%2x\n",slave,address);
279 1 #endif
280 1 }
281 void write_b(unsigned char slave, unsigned char address, unsigned char fb)
282 {
283 1 unsigned char i;
284 1 for(i=0;i<4;i++)
285 1 {
286 2 if(i2c_write_b(slave,address,fb))
287 2 {
288 3 #if(DEBUG)
289 3 // printf("单字节写入调谐器成功,器件地址=0x%2x,address=0x%2x,fb=0x%2x\n",slave,address,fb);
290 3 #endif
291 3 return;
292 3 }
293 2 }
294 1 #if(DEBUG)
295 1 printf("单字节写入调谐器失败,器件地址=0x%2x,address=0x%2x,fb=0x%2x\n",slave,address,fb);
296 1 #endif
297 1 }
298
299
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 807 ----
C51 COMPILER V7.01 IIC_TUNE 08/17/2003 17:24:35 PAGE 6
CONSTANT SIZE = 113 ----
XDATA SIZE = ---- 26
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 + -