📄 +
字号:
C51 COMPILER V7.50 24C02 05/16/2010 11:25:14 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*-----------------------------------------------
2 名称:IIC协议 EEPROM24c02
3 内容:此程序用于检测EEPROM性能,测试方法如下:写入24c02一些数据,然后在内存中清除这些数据,
4 掉电后主内存将失去这些信息,然后从24c02中调入这些数据。看是否与写入的相同。
5 ------------------------------------------------*/
6 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
7 #include <intrins.h> //包含NOP空指令函数_nop_();
8
9 #define AddWr 0xae //写数据地址,需要参考24c02芯片文档
10 #define AddRd 0xaf //读数据地址
11
12
13 sbit Sda=P1^2; //定义总线连接端口
14 sbit Scl=P1^1;
15 sbit WP=P1^0; //写保护,这里不使用
16
17 /*------------------------------------------------
18 延时程序
19 ------------------------------------------------*/
20 void mDelay(unsigned char j)
21 {
22 1 unsigned int i;
23 1 for(;j>0;j--)
24 1 {
25 2 for(i=0;i<125;i++)
26 2 {;}
27 2 }
28 1 }
29
30 /*------------------------------------------------
31 启动IIC总线
32 ------------------------------------------------*/
33 void Start(void)
34 {
35 1 Sda=1;
36 1 _nop_();_nop_();
37 1 Scl=1;
38 1 _nop_();_nop_();_nop_();_nop_();_nop_();
39 1 Sda=0;
40 1 _nop_();_nop_();_nop_();_nop_();_nop_();
41 1 Scl=0;
42 1 }
43
44
45 /*------------------------------------------------
46 停止IIC总线
47 ------------------------------------------------*/
48 void Stop(void)
49 {
50 1 Sda=0;
51 1 _nop_();
52 1 Scl=1;
53 1 _nop_();_nop_();_nop_();_nop_();_nop_();
54 1 Sda=1;
55 1 _nop_();_nop_();_nop_();_nop_();_nop_();
C51 COMPILER V7.50 24C02 05/16/2010 11:25:14 PAGE 2
56 1 Scl=0;
57 1 }
58
59
60 /*------------------------------------------------
61 应答IIC总线
62 ------------------------------------------------*/
63 void Ack(void)
64 {
65 1 Sda=0;
66 1 _nop_();_nop_();_nop_();
67 1 Scl=1;
68 1 _nop_();_nop_();_nop_();_nop_();_nop_();
69 1 Scl=0;
70 1 _nop_();_nop_();
71 1 }
72
73
74 /*------------------------------------------------
75 非应答IIC总线
76 ------------------------------------------------*/
77 void NoAck(void)
78 {
79 1 Sda=1;
80 1 _nop_();_nop_();_nop_();
81 1 Scl=1;
82 1 _nop_();_nop_();_nop_();_nop_();_nop_();
83 1 Scl=0;
84 1 _nop_();_nop_();
85 1 }
86
87
88 /*------------------------------------------------
89 发送一个字节
90 ------------------------------------------------*/
91 void Send(unsigned char Data)
92 {
93 1 unsigned char BitCounter=8;
94 1 unsigned char temp;
95 1
96 1 do
97 1 {
98 2 temp=Data;
99 2 Scl=0;
100 2 _nop_();_nop_();_nop_();_nop_();_nop_();
101 2 if((temp&0x80)==0x80)
102 2 Sda=1;
103 2 else
104 2 Sda=0;
105 2
106 2
107 2 Scl=1;
108 2 temp=Data<<1;
109 2 Data=temp;
110 2 BitCounter--;
111 2 }
112 1 while(BitCounter);
113 1 Scl=0;
114 1 }
115
116
117 /*------------------------------------------------
C51 COMPILER V7.50 24C02 05/16/2010 11:25:14 PAGE 3
118 读入一个字节并返回
119 ------------------------------------------------*/
120 unsigned char Read(void)
121 {
122 1 unsigned char temp=0;
123 1 unsigned char temp1=0;
124 1 unsigned char BitCounter=8;
125 1
126 1 Sda=1;
127 1 do
128 1 {
129 2 Scl=0;
130 2 _nop_();_nop_();_nop_();_nop_();_nop_();
131 2 Scl=1;
132 2 _nop_();_nop_();_nop_();_nop_();_nop_();
133 2 if(Sda)
134 2 temp=temp|0x01;
135 2 else
136 2 temp=temp&0xfe;
137 2
138 2 if(BitCounter-1)
139 2 {
140 3 temp1=temp<<1;
141 3 temp=temp1;
142 3 }
143 2 BitCounter--;
144 2 }
145 1 while(BitCounter);
146 1 return(temp);
147 1 }
148
149 /*------------------------------------------------
150 写入数据
151 ------------------------------------------------*/
152 void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
153 {
154 1 unsigned char i;
155 1 unsigned char *PData;
156 1 PData=Data;
157 1 for(i=0;i<Num;i++)
158 1 {
159 2 Start();
160 2 Send(AddWr); //写入芯片地址
161 2 Ack();
162 2 Send(Address+i);//写入存储地址
163 2 Ack();
164 2 Send(*(PData+i));//写数据
165 2 Ack();
166 2 Stop();
167 2 mDelay(20);
168 2 }
169 1 }
170
171 /*------------------------------------------------
172 读出数据
173 ------------------------------------------------*/
174 void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
175 {
176 1 unsigned char i;
177 1 unsigned char *PData;
178 1 PData=Data;
179 1 for(i=0;i<Num;i++)
C51 COMPILER V7.50 24C02 05/16/2010 11:25:14 PAGE 4
180 1 {
181 2 Start(); //写入芯片地址
182 2 Send(AddWr);
183 2 Ack();
184 2 Send(Address+i);//写入存储地址
185 2 Ack();
186 2 Start();
187 2 Send(AddRd); //读入地址
188 2 Ack();
189 2 *(PData+i)=Read();//读数据
190 2 Scl=0;
191 2 NoAck();
192 2 Stop();
193 2 }
194 1 }
195
196 /*------------------------------------------------
197 主程序
198 ------------------------------------------------*/
199 void main()
200 {
201 1 unsigned char Number[4]={0x06,0x5b,0x4f,0x66};// 显示码值 1234
202 1 unsigned char i;
203 1 WP=0; //写保护关掉
204 1 P2=0x00;
205 1
206 1 WrToROM(Number,4,4); //写入24c02
207 1 mDelay(200);
208 1 Number[0]=0; //清除当前数据
209 1 Number[1]=0;
210 1 Number[2]=0;
211 1 Number[3]=0;
212 1 RdFromROM(Number,4,4); //调用存储数据
213 1
214 1 while(1)
215 1 {
216 2
217 2 P0=Number[i]; //显示存储数据
218 2 mDelay(200); //延时用于演示显示数据
219 2 mDelay(200);
220 2 i++;
221 2 if(i==4)
222 2 i=0;
223 2 }
224 1 }
225
226
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 415 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
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 + -