📄 at24c01.lst
字号:
C51 COMPILER V7.06 AT24C01 12/01/2003 10:06:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE AT24C01
OBJECT MODULE PLACED IN AT24C01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24C01.C ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <at892051.h>
2 #include "intrins.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 uchar bdata buffer;
7
8 sbit SDA = P3^5; /*串行数据*/
9 sbit SCL = P3^4; /*串行时钟*/
10 sbit WP = P3^3; /*硬件写保护*/
11
12 sbit B7 = buffer^7;
13 sbit B6 = buffer^6;
14 sbit B5 = buffer^5;
15 sbit B4 = buffer^4;
16 sbit B3 = buffer^3;
17 sbit B2 = buffer^2;
18 sbit B1 = buffer^1;
19 sbit B0 = buffer^0;
20
21 //----------------------------------------------------------------
22 //延时4.3uS,11.0592M晶振标准延时程序
23 //----------------------------------------------------------------
24 void delay_4uS(void)
25 {
26 1 ;
27 1 }
28 //----------------------------------------------------------------
29 //延时j毫秒程序,11.0592M晶振非标准延时程序
30 //----------------------------------------------------------------
31
32 void mS_Delay(uchar j)
33 {
34 1 uchar i;
35 1 while(j>0)
36 1 {
37 2 i = 0;
38 2 j--;
39 2 while(i<114) i++;
40 2 }
41 1
42 1 }
43 //----------------------------------------------------------------
44 /*发送起始条件*/
45 //----------------------------------------------------------------
46 void Start_01(void) /*起始条件*/
47 {
48 1 do{
49 2 SDA=1;
50 2 SCL=1;
51 2 }while(!(SDA&&SCL)); //检测总线是否可用
52 1 delay_4uS();
53 1 SDA=0;
54 1 delay_4uS();
55 1 SCL=0;
C51 COMPILER V7.06 AT24C01 12/01/2003 10:06:15 PAGE 2
56 1
57 1 }
58 //----------------------------------------------------------------
59 /*停止条件*/
60 //----------------------------------------------------------------
61 void Stop_01(void)
62 {
63 1 SDA=0;
64 1 SCL=1;
65 1 delay_4uS();
66 1 SDA=1;
67 1 _nop_();
68 1 _nop_();
69 1 }
70 //----------------------------------------------------------------
71 //检测应答位
72 //----------------------------------------------------------------
73 void Ack(void)
74 {
75 1 SDA = 1;
76 1 SCL=1;
77 1 _nop_();
78 1 _nop_();
79 1 while(SDA);
80 1 SCL=0;
81 1
82 1 }
83
84
85 //----------------------------------------------------------------
86 /*反向应答位*/
87 //----------------------------------------------------------------
88 void NoAck(void)
89 {
90 1 SDA=1;
91 1 delay_4uS();
92 1 SCL=1;
93 1 delay_4uS();
94 1 SCL=0;
95 1 }
96 //----------------------------------------------------------------
97 /*发送数据子程序,Data为要求发送的数据*/
98 //----------------------------------------------------------------
99 void Send_01()
100 {
101 1 uchar i; /*位数控制*/
102 1 for(i=0;i<8;i++)
103 1 {
104 2 SDA = B7;
105 2 buffer = buffer<<1;
106 2 delay_4uS();
107 2 SCL=1;
108 2 delay_4uS();
109 2 SCL = 0;
110 2 }
111 1 }
112
113 //-----------------------------------------------------------------------------
114 //读一个字节的数据,并返回该字节值,虽然资料说是负跳沿读出数据,
115 //可是在SCL高电平时读出才是正确的
116 //-----------------------------------------------------------------------------
117 void Read_01(void)
C51 COMPILER V7.06 AT24C01 12/01/2003 10:06:15 PAGE 3
118 {
119 1 uchar i;
120 1 SDA=1;
121 1 for(i=0;i<8;i++)
122 1 {
123 2 buffer = buffer<<1;
124 2 SCL=1;
125 2 _nop_();
126 2 _nop_();
127 2 B0 = SDA;
128 2 _nop_();
129 2 SCL=0;
130 2 _nop_();
131 2 _nop_();
132 2 }
133 1 }
134
135 //----------------------------------------------------------------
136 //数据块写入,传递参数:数据块首址、写入地址、数据块长度
137 //---------------------------------------------------------------
138 void WrToROM(uchar Data[],uchar Address,uchar Num)
139 {
140 1 uchar data i;
141 1 uchar data *PData;
142 1 PData=Data;
143 1 SBUF = 0X00;
144 1 while(TI==0);TI =0;
145 1 for(i=0;i<Num;i++)
146 1 {
147 2 Start_01(); /*发送启动信号*/
148 2 buffer = Address+i;
149 2 buffer =(buffer<<1)|0x00;
150 2 Send_01(); /*发送地址*/
151 2 Ack();
152 2 SBUF = 0X11;
153 2 while(TI==0);TI =0;
154 2 buffer = *(PData+i);
155 2 Send_01();
156 2 Ack();
157 2 SBUF = 0X22;
158 2 while(TI==0);TI =0;
159 2 Stop_01();
160 2 mS_Delay(15);
161 2 }
162 1 }
163 //----------------------------------------------------------------
164 //数据块读出,传递参数:数据块首址、读出地址、数据块长度
165 //---------------------------------------------------------------
166 void RdFromROM(uchar Data[],uchar Address,uchar Num)
167 {
168 1 uchar i;
169 1 uchar *PData;
170 1 PData=Data;
171 1 for(i=0;i<Num;i++)
172 1 {
173 2 Start_01();
174 2 buffer = Address+i;
175 2 buffer =(buffer<<1)|0x01;
176 2 Send_01();
177 2 Ack();
178 2 Read_01();
179 2 *(PData+i)= buffer;
C51 COMPILER V7.06 AT24C01 12/01/2003 10:06:15 PAGE 4
180 2 NoAck();
181 2 Stop_01();
182 2 }
183 1 }
184 //-------------------------------------------
185 //串口发送子程序,条件:TI=1,ES=0;
186 //---------------------------------------------
187 void ser_send(uchar a)
188 {
189 1 while(TI==0);
190 1 SBUF = a;
191 1 TI=0;
192 1 }
193
194 /*=============================================================================
195 *Name :SysInit
196 *Descripton :sysem initialization
197 *Status :Done
198 =============================================================================*/
199
200 void SysInit(void)
201 {
202 1 mS_Delay(1);
203 1 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
204 1 TMOD = 0x21; /* T0工作于方式1,十六位定时器,T1工作于方式2 */
205 1 TH1 = 0xff; /* TH1: reload value for 1200 baud @ 16MHz */
206 1 TL1 = 0xff;
207 1 PCON = PCON|0x80;
208 1 TL0 = 0x3f;
209 1 TH0 = 0xfe;
210 1 TR1 = 1; /* TR1: timer 1 run */
211 1 //TR0 = 1; /* TR0: timer 0 run */
212 1 IE = 0x80;
213 1 P1 = 0X00;
214 1 }
215
216 void main()
217 {
218 1 uchar Number[50]={0};
219 1 uchar i;
220 1 SysInit();
221 1 for(i=0;i<50;i++)
222 1 {
223 2 Number[i]=i;
224 2 }
225 1 WrToROM(Number,0,50); /*将初始化后的数值写入EEPROM*/
226 1 mS_Delay(20);
227 1 for(i=0;i<50;i++)
228 1 {
229 2 Number[i]=i+50;
230 2 }
231 1 WrToROM(Number,50,50); /*将初始化后的数值写入EEPROM*/
232 1 mS_Delay(20);
233 1 for(i=0;i<125;i++)
234 1 {
235 2 RdFromROM(Number,i,1);
236 2 TI = 1;
237 2 ser_send(Number[0]);
238 2 }
239 1 while(1)
240 1 {
241 2 Start_01(); /*发送启动信号*/
C51 COMPILER V7.06 AT24C01 12/01/2003 10:06:15 PAGE 5
242 2 buffer = 0xAA;
243 2 Send_01(); /*选择器件*/
244 2 Stop_01();
245 2 }
246 1
247 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 405 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 63
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 + -