📄 24lc256.lst
字号:
C51 COMPILER V7.50 24LC256 01/03/2009 21:23:33 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 24LC256
OBJECT MODULE PLACED IN 24LC256.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\24LC256.C BROWSE DEBUG OBJECTEXTEND PRINT(.\24LC256.lst) OBJECT(24LC256
-.obj)
line level source
1
2
3 #include "p89v51rx2.h"
4 #include <intrins.h>
5
6 #define OP_READ 0xa1 // 器件地址以及读取操作
7 #define OP_WRITE 0xa0 // 器件地址以及写入操作
8 #define MAX_ADDR 0x7fff // AT24C256最大地址
9
10 sbit SDA = P3^4;
11 sbit SCL = P3^5;
12
13 bit bdata ack;
14 #define nops(); {_nop_();_nop_();_nop_();_nop_();}
15
16 //------------------------------------------------------------------------------------------------------
17 void IIC_start(void); //起始条件
18 void IIC_stop(void); //停止条件
19 void IIC_ack_main(bit ack_main);
20 void IIC_sendbyte(unsigned char senddata);
21 unsigned char IIC_readbyte(void);
22 //unsigned char IIC_read_cur_addr(unsigned char ad_main);
23 void IIC_RdFromROM(unsigned char ad_main,unsigned char *rddata,unsigned char addh,unsigned char addl,unsig
-ned char num);
24 void IIC_WrToROM(unsigned char ad_main,unsigned char *wrdata,unsigned char addh,unsigned char addl,unsigne
-d char num);
25 extern void delayms(unsigned char ms);
26
27 //=====================================24LC256================================
28
29 /*****************************************************************************
30 ****
31 ****
32 ****
33 ****
34 ****
35 ******************************************************************************/
36 void IIC_start(void)
37 {
38 1 // SCL=0;
39 1 SDA=1;
40 1 _nop_();
41 1 SCL=1;
42 1 //_nop_();_nop_();_nop_();_nop_();_nop_();
43 1 nops();
44 1 SDA=0;
45 1 //_nop_();_nop_();_nop_();_nop_();_nop_();
46 1 nops();
47 1 SCL=0;
48 1 _nop_();
49 1 _nop_();
50 1 }
51
52
C51 COMPILER V7.50 24LC256 01/03/2009 21:23:33 PAGE 2
53 /*****************************************************************************
54 ****
55 ****
56 ****
57 ****
58 ****
59 ******************************************************************************/
60 void IIC_stop(void)
61 {
62 1 // SCL=0;
63 1 SDA=0;
64 1 _nop_();
65 1 SCL=1;
66 1 // _nop_();_nop_();_nop_();_nop_();_nop_();
67 1 nops();
68 1 nops();
69 1 SDA=1;
70 1 // _nop_();_nop_();_nop_();_nop_();_nop_();
71 1 nops();
72 1 nops();
73 1
74 1 }
75
76 /*****************************************************************************
77 ****
78 ****
79 ****
80 ****
81 ****
82 ******************************************************************************/
83 void IIC_ack_main(bit ack_main)//1 应答信号 0 非应答信号
84 {
85 1 if(ack_main)
86 1 SDA=0; //主器件为接收方,从器件为发送方,应答信号
87 1 else
88 1 SDA=1; //主器件为接收方,从器件为发送方,非应答信号
89 1 // _nop_();_nop_();_nop_();_nop_();_nop_();
90 1 nops();
91 1 SCL=1;
92 1 // _nop_();_nop_();_nop_();_nop_();_nop_();
93 1 nops();
94 1 SCL=0;
95 1 }
96
97 /*****************************************************************************
98 ****
99 ****
100 ****
101 ****
102 ****
103 ******************************************************************************/
104 void IIC_sendbyte(unsigned char senddata)
105 {
106 1
107 1 unsigned char idata count=8; //bit count control
108 1 unsigned char temp;
109 1 do
110 1 {
111 2
112 2 temp=senddata;
113 2 SCL=0;
114 2 nops();
C51 COMPILER V7.50 24LC256 01/03/2009 21:23:33 PAGE 3
115 2 if((temp&0x80)==0x80)
116 2 {
117 3 SDA=1;
118 3 }
119 2 else
120 2 {
121 3 SDA=0;
122 3 }
123 2 SCL=1;
124 2 senddata=senddata<<1;
125 2 count--;
126 2 }while(count);
127 1 SCL=0; //不考虑从应答位|但要控制好时序 */
128 1 }
129
130 /*****************************************************************************
131 ****
132 ****
133 ****
134 ****
135 ****
136 ******************************************************************************/
137 unsigned char IIC_readbyte(void)
138 {
139 1 unsigned char idata count,temp,temp1;
140 1 temp=0;
141 1 temp1=0;
142 1 count=8;
143 1 SDA=1;
144 1 do
145 1 {
146 2 _nop_();
147 2 SCL=0;
148 2 nops();
149 2 SCL=1;
150 2 nops();
151 2 if(SDA)
152 2 {
153 3 temp=temp|0x01;
154 3 }
155 2 else
156 2 {
157 3 temp=temp&0xfe;
158 3 }
159 2 if(count-1)
160 2 {
161 3 temp1=temp<<1;
162 3 temp=temp1;
163 3 }
164 2 count--;
165 2 }while(count);
166 1 SCL=0;
167 1 _nop_();
168 1 _nop_();
169 1 return temp;
170 1 }
171
172 void IIC_WrToROM(unsigned char ad_main,unsigned char *wrdata,unsigned char addh,unsigned char addl,unsigne
-d char num)
173 {
174 1 unsigned char idata i;
175 1 IIC_start();
C51 COMPILER V7.50 24LC256 01/03/2009 21:23:33 PAGE 4
176 1 IIC_sendbyte(ad_main);
177 1 IIC_ack_main(1);
178 1 IIC_sendbyte(addh);
179 1 IIC_ack_main(1);
180 1 IIC_sendbyte(addl);
181 1 IIC_ack_main(1);
182 1 for(i=0;i<num;i++)
183 1 {
184 2
185 2 IIC_sendbyte(*(wrdata+i));
186 2 IIC_ack_main(1);
187 2
188 2 }
189 1 IIC_stop();
190 1 delayms(20);
191 1 }
192
193 void IIC_RdFromROM(unsigned char ad_main,unsigned char *rddata,unsigned char addh,unsigned char addl,unsig
-ned char num)
194 {
195 1 unsigned char i; // ,j
196 1 i=0;
197 1 IIC_start();
198 1 IIC_sendbyte(ad_main);
199 1 IIC_ack_main(1);
200 1 IIC_sendbyte(addh);
201 1 IIC_ack_main(1);
202 1 IIC_sendbyte(addl);
203 1 IIC_ack_main(1);
204 1 IIC_start();
205 1 IIC_sendbyte(ad_main+1);
206 1 IIC_ack_main(1);
207 1 for(i=0;i<num-1;i++)
208 1 {
209 2 *(rddata+i)=IIC_readbyte();
210 2 IIC_ack_main(1);
211 2 }
212 1 *(rddata+num-1)=IIC_readbyte();
213 1 IIC_ack_main(0);
214 1 IIC_stop();
215 1 }
216 /*void delayms(unsigned char ms)
217 // 延时子程序
218 {
219 unsigned char i;
220 while(ms--)
221 {
222 for(i = 0; i < 125; i++);
223 }
224 }
225 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 379 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- 5
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILER V7.50 24LC256 01/03/2009 21:23:33 PAGE 5
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -