📄 iic-24c64.lst
字号:
C51 COMPILER V7.01 IIC_24C64 08/17/2003 17:24:34 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE IIC_24C64
OBJECT MODULE PLACED IN .\Iic-24c64.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\Iic-24c64.c LARGE MODDP2 DEBUG OBJECTEXTEND
stmt level source
1
2 #include<reg51.h>
3 #include<intrins.h>
4
5
6
7 sbit sda=P2^7;
8 sbit scl=P2^6;
9
10 sbit ac0=ACC^0; /*定义ACC的位,利用ACC操作速度最快*/
11 sbit ac1=ACC^1;
12 sbit ac2=ACC^2;
13 sbit ac3=ACC^3;
14 sbit ac4=ACC^4;
15 sbit ac5=ACC^5;
16 sbit ac6=ACC^6;
17 sbit ac7=ACC^7;
18
19
20 extern void delay1(unsigned int i);
21 extern void delay0();
22
23
24 void i2c_start(void); /*起始*/
25 void i2c_stop(void); /*停止*/
26 bit wait_ack(void); /*等待24c02应答*/
27 void send_ack(void); /*向24c02发送应答*/
28 void sendnot_ack(void); /*向24c02发送非应答*/
29 void i2c_sendbyte(unsigned char ch);/*写发送移位*/
30 unsigned char i2c_readbyte(void); /*读移位*/
31
32 bit i2c_read(unsigned int address,unsigned char fb[],unsigned char su);
33 bit i2c_write(unsigned int address,unsigned char fb[],unsigned char su);
34 bit i2c_writea(unsigned int address,unsigned char fb);
35 unsigned char i2c_reada(unsigned int address);
36 void wirte_24c64a(unsigned int address,unsigned char fb);
37 void wirte_24c64(unsigned int address,unsigned char fb[],unsigned char su);
38 void read_24c64(unsigned int address,unsigned char fb[],unsigned char su);//多字节读
39
40 void i2c_start(void)
41 {
42 1
43 1 scl=1;
44 1 sda=1;
45 1 delay0();
46 1 scl=1;
47 1 delay0();
48 1 sda=0;
49 1 delay0();
50 1 scl=0;
51 1 delay0();
52 1 }
53
54
55
C51 COMPILER V7.01 IIC_24C64 08/17/2003 17:24:34 PAGE 2
56 void i2c_stop(void)
57 {
58 1 scl=0;
59 1 _nop_();
60 1 sda=0;
61 1 delay0();
62 1 scl=1;
63 1 delay0();
64 1 sda=1;
65 1 delay0();
66 1 scl=0;
67 1 sda=0;
68 1 }
69
70
71 bit wait_ack(void)
72 {
73 1 unsigned char i;
74 1 scl=0;
75 1 _nop_();
76 1 _nop_();
77 1 sda=1;
78 1 delay0();
79 1 scl=1;
80 1 delay0();
81 1 while(sda)
82 1 {
83 2 for(i=0;i<=5;i++)
84 2 {
85 3 if(!sda)
86 3 {
87 4 scl=0;
88 4 return(0);
89 4 }
90 3 }
91 2
92 2 return(1);
93 2 }
94 1 scl=0;
95 1 return(0);
96 1 }
97
98 void send_ack(void)
99 {
100 1 sda=0;
101 1 delay0();
102 1 scl=1;
103 1 delay0();
104 1 scl=0;
105 1 }
106
107
108 void sendnot_ack(void)
109 {
110 1 sda=1;
111 1 delay0();
112 1 scl=1;
113 1 delay0();
114 1 scl=0;
115 1 }
116
117
C51 COMPILER V7.01 IIC_24C64 08/17/2003 17:24:34 PAGE 3
118 void i2c_sendbyte(unsigned char ch)
119 {
120 1 ACC=ch;
121 1 sda=ac7;_nop_();scl=1;delay0();scl=0;delay0();
122 1 sda=ac6;_nop_();scl=1;delay0();scl=0;delay0();
123 1 sda=ac5;_nop_();scl=1;delay0();scl=0;delay0();
124 1 sda=ac4;_nop_();scl=1;delay0();scl=0;delay0();
125 1 sda=ac3;_nop_();scl=1;delay0();scl=0;delay0();
126 1 sda=ac2;_nop_();scl=1;delay0();scl=0;delay0();
127 1 sda=ac1;_nop_();scl=1;delay0();scl=0;delay0();
128 1 sda=ac0;_nop_();scl=1;delay0();scl=0;delay0();
129 1 }
130
131
132 unsigned char i2c_readbyte(void)
133 {
134 1 unsigned char sf;
135 1 sda=1;_nop_();_nop_();
136 1 scl=1;delay0();ac7=sda;scl=0;delay0();
137 1 scl=1;delay0();ac6=sda;scl=0;delay0();
138 1 scl=1;delay0();ac5=sda;scl=0;delay0();
139 1 scl=1;delay0();ac4=sda;scl=0;delay0();
140 1 scl=1;delay0();ac3=sda;scl=0;delay0();
141 1 scl=1;delay0();ac2=sda;scl=0;delay0();
142 1 scl=1;delay0();ac1=sda;scl=0;delay0();
143 1 scl=1;delay0();ac0=sda;scl=0;delay0();
144 1 sf=ACC;
145 1 return(sf);
146 1 }
147
148
149
150
151 bit i2c_read(unsigned int address,unsigned char fb[],unsigned char su)//多字节读
152 {
153 1 unsigned char i;
154 1 unsigned char dd=0xa0;
155 1 unsigned char dc=0xa1;
156 1 unsigned char s;
157 1 unsigned char c;
158 1 s=address;
159 1 c=address>>8;
160 1 delay1(2000);
161 1
162 1 i2c_start();
163 1 i2c_sendbyte(dd);
164 1 if(wait_ack())
165 1 {
166 2 i2c_stop();
167 2 return(0);
168 2 }
169 1 i2c_sendbyte(c);
170 1 if(wait_ack())
171 1 {
172 2 i2c_stop();
173 2 return(0);
174 2 }
175 1 i2c_sendbyte(s);
176 1 if(wait_ack())
177 1 {
178 2 i2c_stop();
179 2 return(0);
C51 COMPILER V7.01 IIC_24C64 08/17/2003 17:24:34 PAGE 4
180 2 }
181 1 i2c_stop();
182 1
183 1 delay1(300);
184 1 i2c_start();
185 1 i2c_sendbyte(dc);
186 1 if(wait_ack())
187 1 {
188 2 i2c_stop();
189 2 return(0);
190 2 }
191 1 for(i=0;i<=su;i++)
192 1 {
193 2 fb[i]=i2c_readbyte();
194 2 send_ack();
195 2 }
196 1 fb[i]=i2c_readbyte();
197 1 sendnot_ack();
198 1 i2c_stop();
199 1 return(1);
200 1 }
201
202
203
204 bit i2c_write(unsigned int address,unsigned char fb[],unsigned char su)//多字节写
205 {
206 1 unsigned char i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -