📄 24c02.lst
字号:
C51 COMPILER V7.06 24C02 12/03/2008 15:21:47 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd
3 *
4 *This sample is used for EEPROM 24C02 Read and Write.
5 *
6 *write by Shifang 2007-4-29
7 *
8 *V1.1
9 */
10
11
12 #include <reg52.h>
13 #include <intrins.h>
14
15 #define AddWr 0xae //Write Address
16 #define AddRd 0xaf //Read Address
17
18 //全局变量
19 sbit Sda=P1^2; //定义总线连接端口
20 sbit Scl=P1^1;
21 sbit WP=P1^0;//No connect here
22
23 void mDelay(unsigned char j)//A normal delay
24 {
25 1 unsigned int i;
26 1 for(;j>0;j--)
27 1 {
28 2 for(i=0;i<125;i++)
29 2 {;}
30 2 }
31 1 }
32
33 //启动 IIC总线
34 void Start(void)
35 {
36 1 Sda=1;
37 1 _nop_();_nop_();
38 1 Scl=1;
39 1 _nop_();_nop_();_nop_();_nop_();_nop_();
40 1 Sda=0;
41 1 _nop_();_nop_();_nop_();_nop_();_nop_();
42 1 Scl=0;
43 1 }
44
45 //停止 IIC总线
46 void Stop(void)
47 {
48 1 Sda=0;
49 1 _nop_();
50 1 Scl=1;
51 1 _nop_();_nop_();_nop_();_nop_();_nop_();
52 1 Sda=1;
53 1 _nop_();_nop_();_nop_();_nop_();_nop_();
54 1 Scl=0;
55 1 }
C51 COMPILER V7.06 24C02 12/03/2008 15:21:47 PAGE 2
56
57 //应答 IIC总线
58 void Ack(void)
59 {
60 1 Sda=0;
61 1 _nop_();_nop_();_nop_();
62 1 Scl=1;
63 1 _nop_();_nop_();_nop_();_nop_();_nop_();
64 1 Scl=0;
65 1 _nop_();_nop_();
66 1 }
67
68 //非应答 IIC总线
69 void NoAck(void)
70 {
71 1 Sda=1;
72 1 _nop_();_nop_();_nop_();
73 1 Scl=1;
74 1 _nop_();_nop_();_nop_();_nop_();_nop_();
75 1 Scl=0;
76 1 _nop_();_nop_();
77 1 }
78
79 //发送一个字节
80 void Send(unsigned char Data)
81 {
82 1 unsigned char BitCounter=8;
83 1 unsigned char temp;
84 1
85 1 do
86 1 {
87 2 temp=Data;
88 2 Scl=0;
89 2 _nop_();_nop_();_nop_();_nop_();_nop_();
90 2 if((temp&0x80)==0x80)
91 2 Sda=1;
92 2 else
93 2 Sda=0;
94 2
95 2
96 2 Scl=1;
97 2 temp=Data<<1;
98 2 Data=temp;
99 2 BitCounter--;
100 2 }
101 1 while(BitCounter);
102 1 Scl=0;
103 1 }
104
105 //读一个字节并返回变量
106 unsigned char Read(void)
107 {
108 1 unsigned char temp=0;
109 1 unsigned char temp1=0;
110 1 unsigned char BitCounter=8;
111 1
112 1 Sda=1;
113 1 do
114 1 {
115 2 Scl=0;
116 2 _nop_();_nop_();_nop_();_nop_();_nop_();
117 2 Scl=1;
C51 COMPILER V7.06 24C02 12/03/2008 15:21:47 PAGE 3
118 2 _nop_();_nop_();_nop_();_nop_();_nop_();
119 2 if(Sda)
120 2 temp=temp|0x01;
121 2 else
122 2 temp=temp&0xfe;
123 2
124 2 if(BitCounter-1)
125 2 {
126 3 temp1=temp<<1;
127 3 temp=temp1;
128 3 }
129 2 BitCounter--;
130 2 }
131 1 while(BitCounter);
132 1 return(temp);
133 1 }
134 //write to ROM
135 void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
136 {
137 1 unsigned char i;
138 1 unsigned char *PData;
139 1 PData=Data;
140 1 for(i=0;i<Num;i++)
141 1 {
142 2 Start();
143 2 Send(AddWr);//Write Address
144 2 Ack();
145 2 Send(Address+i);//Write sub Address
146 2 Ack();
147 2 Send(*(PData+i));//Write Data
148 2 Ack();
149 2 Stop();
150 2 mDelay(20);
151 2 }
152 1 }
153 //read from ROM
154 void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
155 {
156 1 unsigned char i;
157 1 unsigned char *PData;
158 1 PData=Data;
159 1 for(i=0;i<Num;i++)
160 1 {
161 2 Start();
162 2 Send(AddWr);//Write Address
163 2 Ack();
164 2 Send(Address+i);//Write sub Address
165 2 Ack();
166 2 Start();
167 2 Send(AddRd);//Read Address
168 2 Ack();
169 2 *(PData+i)=Read();//Read Data
170 2 Scl=0;
171 2 NoAck();
172 2 Stop();
173 2 }
174 1 }
175
176 void main()
177 {
178 1 unsigned char Number[4]={0x06,0x5b,0x4f,0x66};// 显示码值 1234
179 1 unsigned char i;
C51 COMPILER V7.06 24C02 12/03/2008 15:21:47 PAGE 4
180 1 WP=0;//写保护关掉
181 1 P2=0x00;
182 1
183 1 WrToROM(Number,4,4);//写入24c02
184 1 mDelay(200);
185 1 Number[0]=0;//清除当前数据
186 1 Number[1]=0;
187 1 Number[2]=0;
188 1 Number[3]=0;
189 1 RdFromROM(Number,4,4);//调用存储数据
190 1
191 1 while(1)
192 1 {
193 2
194 2 P0=Number[i];//显示存储数据
195 2 mDelay(200);
196 2 mDelay(200);
197 2 i++;
198 2 if(i==4)
199 2 i=0;
200 2 }
201 1 }
202
203
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 + -