📄 at24c02.lst
字号:
C51 COMPILER V7.06 AT24C02 10/31/2007 15:44:27 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE AT24C02
OBJECT MODULE PLACED IN AT24C02.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE AT24C02.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define AddWr 0xa0 //器件地址选择及写标志
6 #define AddRd 0xa1 //器件地址选择及读标志
7
8 /*有关全局变量*/
9 sbit Sda=P3^7; //at24c08的SDA与P3.7相连
10 sbit Scl=P3^6; //at24c08的SCL与P3.6相连
11 sbit LOAD = P3^1; //MAX7219的LOAD与P3.1相连
12 sbit DIN = P3^0; //MAX7219的DIN与P3.0相连
13 sbit CLK = P3^2; //MAX7219的CLK与P3.2相连
14
15 void mDelay(uint t) //延时
16 { uchar i;
17 1 while(t--)
18 1 {
19 2 for(i=0;i<125;i++)
20 2 {;}
21 2 }
22 1 }
23
24
25 void Nop(void) //空操作
26 {
27 1 _nop_();
28 1 _nop_();
29 1 _nop_();
30 1 _nop_();
31 1 }
32
33
34 /*起始条件*/
35
36 void Start(void)
37 {
38 1 Sda=1;
39 1 Scl=1;
40 1 Nop();
41 1 Sda=0;
42 1 Nop();
43 1 }
44
45
46 /*停止条件*/
47
48 void Stop(void)
49 {
50 1 Sda=0;
51 1 Scl=1;
52 1 Nop();
53 1 Sda=1;
54 1 Nop();
55 1 }
C51 COMPILER V7.06 AT24C02 10/31/2007 15:44:27 PAGE 2
56
57 /*应答位*/
58
59 void Ack(void)
60 {
61 1 Sda=0;
62 1 Nop();
63 1 Scl=1;
64 1 Nop();
65 1 Scl=0;
66 1 }
67
68 /*反向应答位*/
69
70 void NoAck(void)
71 {
72 1 Sda=1;
73 1 Nop();
74 1 Scl=1;
75 1 Nop();
76 1 Scl=0;
77 1 }
78
79 /*发送数据子程序,Data为要求发送的数据*/
80 void Send(uchar Data)
81 {
82 1 uchar BitCounter=8;
83 1 uchar temp;
84 1 do
85 1 {
86 2 temp=Data;
87 2 Scl=0;
88 2 Nop();
89 2 if((temp&0x80)==0x80)
90 2 Sda=1;
91 2 else
92 2 Sda=0;
93 2 Scl=1;
94 2 temp=Data<<1;
95 2 Data=temp;
96 2 BitCounter--;
97 2 }
98 1 while(BitCounter);
99 1 Scl=0;
100 1 }
101
102 /*读一字节的数据,并返回该字节值*/
103 uchar Read(void)
104 {
105 1 uchar temp=0;
106 1 uchar temp1=0;
107 1 uchar BitCounter=8;
108 1 Sda=1;
109 1 do{
110 2 Scl=0;
111 2 Nop();
112 2 Scl=1;
113 2 Nop();
114 2 if(Sda)
115 2 temp=temp|0x01;
116 2 else
117 2 temp=temp&0xfe;
C51 COMPILER V7.06 AT24C02 10/31/2007 15:44:27 PAGE 3
118 2 if(BitCounter-1)
119 2 {
120 3 temp1=temp<<1;
121 3 temp=temp1;
122 3 }
123 2 BitCounter--;
124 2 }
125 1 while(BitCounter);
126 1 return(temp);
127 1 }
128
129 void WrToROM(uchar Data[],uchar Address,uchar Num)
130 {
131 1 uchar i;
132 1 uchar *PData;
133 1 PData=Data;
134 1 for(i=0;i<Num;i++)
135 1 {
136 2 Start();
137 2 Send(0xa0);
138 2 Ack();
139 2 Send(Address+i);
140 2 Ack();
141 2 Send(*(PData+i));
142 2 Ack();
143 2 Stop();
144 2 mDelay(20);
145 2 }
146 1 }
147
148
149 void RdFromROM(uchar Data[],uchar Address,uchar Num)
150 {
151 1 uchar i;
152 1 uchar *PData;
153 1 PData=Data;
154 1 for(i=0;i<Num;i++)
155 1 {
156 2 Start();
157 2 Send(0xa0);
158 2 Ack();
159 2 Send(Address+i);
160 2 Ack();
161 2 Start();
162 2 Send(0xa1);
163 2 Ack();
164 2 *(PData+i)=Read();
165 2 Scl=0;
166 2 NoAck();
167 2 Stop();
168 2 }
169 1 }
170
171 /*MAX7219写入*/
172 void Write(uchar add,uchar dat)
173 {
174 1 uchar ADS,i,l;
175 1 LOAD = 0;
176 1 i=0;
177 1 while(i<16)
178 1 {
179 2 if(i<8)
C51 COMPILER V7.06 AT24C02 10/31/2007 15:44:27 PAGE 4
180 2 {
181 3 ADS=add;
182 3 }
183 2 else
184 2 {
185 3 ADS=dat;
186 3 }
187 2 for (l=8;l>=1;l--)
188 2 {
189 3 CLK = 0;
190 3 DIN =ADS&0x80;
191 3 ADS=ADS<<1;
192 3 CLK = 1;
193 3 CLK=0;
194 3 }
195 2 i=i+8;
196 2 }
197 1
198 1
199 1 LOAD = 1;
200 1 }
201
202 /*MAX7219初始化*/
203 void Initial(void)
204 {
205 1 Write(0x0A,0xf5);
206 1 Write(0x0B,0x07);
207 1 Write(0x0C,0x01);
208 1 Write(0x09,0xFF);
209 1 }
210
211
212 void main()
213 { uchar i;
214 1 uchar j;
215 1 uchar k;
216 1 uchar Number[24]={1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,8,8,8,8,1,1,1,1};
217 1 uchar Buffer[4]={0};
218 1 Initial(); //初始化MAX7219
219 1 mDelay(500);
220 1 WrToROM(Number,0,24); //将Number中的数据写入24C02中
221 1 while(1)
222 1 {
223 2 k=0;
224 2 for(i=0;i<6;i++)
225 2 {
226 3 RdFromROM(Buffer,k,4); //将24C02中的数据每次取出4个给Buffer数组
227 3 k=k+4;
228 3 for(j=0;j<4;j++)
229 3 {
230 4 Write(0x01+j,Buffer[j]); //显示从24C02中读出的数据进行验证
231 4
232 4 }
233 3 mDelay(1000);
234 3 }
235 2 }
236 1 }
237
238
239
240
241
C51 COMPILER V7.06 AT24C02 10/31/2007 15:44:27 PAGE 5
242
243
244
245
246
247
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 478 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 46
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 + -