📄 93c46.lst
字号:
C51 COMPILER V7.09 93C46 10/17/2005 17:03:10 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 93C46
OBJECT MODULE PLACED IN 93c46.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe 93c46.c DB OE SMALL ROM(LARGE)
line level source
1 #include <AT89X52.h>
2
3
4 sbit CS_93C46=P2^3;
5 sbit SK_93C46=P2^2;
6 sbit DI_93C46=P2^1;
7 sbit DO_93C46=P2^0;
8 sbit CD_1=P2^4;
9 sbit CD_2=P2^5;
10 sbit CD_3=P2^6;
11 sbit CD_4=P2^7;
12 unsigned char WRITE(unsigned char,unsigned char);
13 unsigned char READ(unsigned char);
14 void delay1(unsigned int);
15
16
17 //void write_93c46(unsigned char page,unsigned int position)
18 //{
19 //unsigned char B0_1;
20 //Add the code here
21 //B0_1=page;
22 //
23 //page=1;
24 //position=1;
25 //The code to write 93c46 in (page,position)
26
27 //}
28
29 void store(unsigned char n)
30 {
31 1 // unsigned int sum,position;
32 1 // unsigned char page;
33 1 // sum=hh*3600+mm*60+ss;
34 1 // page=sum/900;
35 1 // position=sum%900;
36 1 // _93c46(page,position);
37 1 WRITE(0x05,n);
38 1
39 1 }
40
41 void main()
42 {
43 1 unsigned char n;
44 1 P0=0xff;
45 1
46 1 //for(n=0;n<0x7f;n++)
47 1 //{
48 1 //WRITE(n,n);
49 1 //}
50 1 while(1)
51 1 {
52 2 for(n=0;n<0x7f;n++)
53 2 {
54 3 CD_1=0;
55 3 CD_2=1;
C51 COMPILER V7.09 93C46 10/17/2005 17:03:10 PAGE 2
56 3 P0=READ(n);
57 3 delay1(10000);
58 3 CD_2=0;
59 3 CD_1=1;
60 3 P0=n;
61 3 delay1(10000);
62 3 }
63 2 }
64 1 }
65
66
67
68
69
70
71
72 //-----------------------------------------------------COPY--------------------------------------------
73 //2 .用C51 软件包对CAT93C46 器件进行读写操作
74 //(1 )CAT93C46 的汇编读写软件包
75 /*=========================================================*/
76 /* CSI93C46 操作子程序 */
77 /* 注意:这里使用的CSI93C46 为8 位结构的EEROM
78 */
79 /*=========================================================*/
80 //#include <Reg764.h>
81 /*87LPC764 的头文件*/
82
83 void delay1(unsigned int num)
84 {
85 1 int m;
86 1 m=num;
87 1 while(m!=0){m=m-1;}
88 1 }
89 /***********************************************************************/
90 /*名称: START_93C46() */
91 /*说明: 用于93C46 的启动,防止由于CS_93C46 的改动而引起数据时序混乱 */
92 /***********************************************************************/
93 void START_93C46()
94 {
95 1 DO_93C46=1; /*防止DO 由于是低电平而无法输入*/
96 1 CS_93C46=1;
97 1 /*开启93C46*/
98 1 CS_93C46=0;
99 1 DI_93C46=0;
100 1 SK_93C46=0;
101 1 CS_93C46=1;
102 1 delay1(10000);
103 1 }
104 /***************************************************************************/
105 /*名称:END_93C46() */
106 /*说明:用于93C46 的结束,防止由于CS_93C46 的改动而引起数据线为0 而无法输入*/
107 /***************************************************************************/
108 void END_93C46()
109 {
110 1 CS_93C46=0;
111 1 DI_93C46=1;
112 1 SK_93C46=1;
113 1 }
114 /***********************************************************************/
115 /*名称:SEND_DATA_93C46() */
116 /*说明:在93C46 启动下,送入指定位数的数据 */
117 /*输入: op_data 要输入的数据 */
C51 COMPILER V7.09 93C46 10/17/2005 17:03:10 PAGE 3
118 /* num 输入的位数 */
119 /**********************************************************************/
120 void SEND_DATA_93C46(unsigned char op_data,unsigned char num)
121 {data unsigned char temp1;
122 1 op_data=op_data<<(8-num); /*左移去掉无用位*/
123 1 for(temp1=0;temp1<num;temp1++)
124 1 {if( (op_data&0X80)==0 ){DI_93C46=0;}
125 2 else{DI_93C46=1;}
126 2 SK_93C46=1;
127 2 SK_93C46=1;
128 2 SK_93C46=1;
129 2 SK_93C46=1;
130 2 SK_93C46=0;
131 2 op_data=op_data<<1;
132 2 }
133 1 }
134 /***********************************************************************/
135 /*名称: EWEN_93C46() */
136 /*说明: 93C46 的编程启动.操作码(100 11XXXX) */
137 /***********************************************************************/
138 void EWEN_93C46()
139 {
140 1 START_93C46();
141 1 SEND_DATA_93C46(0X04,0X03); /*送入3 位操作码*/
142 1 SEND_DATA_93C46(0X30,0X07); /*送入6 位地址*/
143 1 END_93C46();
144 1 }
145 /***********************************************************************/
146 /*名称: EWDS_93C46() */
147 /*说明: 93C46 的编程关闭.操作码(100 00XXXX) */
148 /**********************************************************************/
149 void EWDS_93C46()
150 {
151 1 START_93C46();
152 1 SEND_DATA_93C46(0X04,0X03);
153 1 SEND_DATA_93C46(0X00,0X07);
154 1 END_93C46();
155 1 }
156 /***********************************************************************/ /*名称:READ() */
157 /*说明:93C46 的字读取程序 */
158 /*输入:要读取的字节地址(7 位) */
159 /*输出:读取的字数值 */
160 /**********************************************************************/
161 unsigned char READ(unsigned char address)
162 {data unsigned char temp1;
163 1 data unsigned char temp2;
164 1 START_93C46();
165 1 SEND_DATA_93C46(0X06,0X03);
166 1 SEND_DATA_93C46(address,0X07);
167 1 temp2=0; /*存放返回数据的缓冲先清零*/
168 1 for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
169 1 {temp2=temp2<<1;
170 2 SK_93C46=1;
171 2 SK_93C46=1;
172 2 SK_93C46=1;
173 2 SK_93C46=1;
174 2 SK_93C46=1;
175 2 SK_93C46=0;
176 2 if(DO_93C46==1){temp2=temp2|0X01;}
177 2 }
178 1 END_93C46();
179 1 return temp2;//8位返回值,全为1表示全部写读取成功,为0的位表示卸寥‰不成功
C51 COMPILER V7.09 93C46 10/17/2005 17:03:10 PAGE 4
180 1 }
181 /**********************************************************************/
182 /*名称:() */
183 /*说明:93C46 的字写入程序 */
184 /*输入: address 要写入的字节地址(7 位) */
185 /* op_data 要写入的数据(8 位) */
186 /*输出: 读取的字数值 */
187 /**********************************************************************/
188 unsigned char WRITE(unsigned char address,unsigned char op_data)
189 {data unsigned char temp1;
190 1 data unsigned int temp2;
191 1 EWEN_93C46();
192 1 START_93C46();
193 1 SEND_DATA_93C46(0X05,0X03);
194 1 SEND_DATA_93C46(address,0X07);
195 1 SEND_DATA_93C46(op_data,0X08);
196 1 CS_93C46=0; //写入数据后CS不片选的时间必须大于CSmin,最大值为1us
197 1 CS_93C46=1;
198 1 temp1=1;
199 1 temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
200 1 while(!DO_93C46)
201 1 {temp2=temp2-1;
202 2 if(temp2==0)
203 2 {temp1=0;
204 3 break; /*最大等待延时后说明擦除失败*/
205 3 }
206 2 }
207 1 END_93C46();
208 1 EWDS_93C46();
209 1 return temp1;
210 1 }
211 /***********************************************************************/
212 /*名称:ERASE() */
213 /*说明:93C46 的字擦除程序 */
214 /*输入: address 要擦除的字地址(6 位) */
215 /**********************************************************************/
216 /*
217 unsigned char ERASE(unsigned char address)
218 {data unsigned char temp1;
219 data unsigned int temp2;
220 EWEN_93C46();
221 START_93C46();
222 SEND_DATA_93C46(0X07,0X03);
223 SEND_DATA_93C46(address,0X06);
224 CS_93C46=0;
225 CS_93C46=1;
226 temp1=1;
227 temp2=50000;
228 while(!DO_93C46)
229 {temp2=temp2-1;
230 if(temp2==0)
231 {temp1=0;
232 break;
233 }
234 }
235 END_93C46();
236 EWDS_93C46(); //返回表示擦除状态的特征
237 return temp1;
238 }
239 */
240
241
C51 COMPILER V7.09 93C46 10/17/2005 17:03:10 PAGE 5
242 /**********************************************************************/
243 /*名称:ERAL() */
244 /*说明:93C46 的全部擦除程序 */
245 /**********************************************************************/
246 /*
247 unsigned char ERAL()
248 {data unsigned char temp1;
249 data unsigned int temp2;
250 EWEN_93C46();
251 START_93C46();
252 SEND_DATA_93C46(0X04,0X03);
253 SEND_DATA_93C46(0X20,0X06);
254 CS_93C46=0;
255 CS_93C46=1;
256 temp1=1;
257 temp2=50000;
258 while(!DO_93C46)
259 {temp2=temp2-1;
260 if(temp2==0)
261 {temp1=0;
262 break;
263 }
264 }
265 END_93C46();
266 EWDS_93C46(); //返回表示擦除状态的特征
267 return temp1;
268 }
269 */
270
271
272 /***********************************************************************/
273 /*名称:WRAL() */
274 /*说明:93C46 的写全部程序 */
275 /*输入: op_data 要写入的数据(16 位) */
276 /*输出: 读取的字数值 */
277 /***********************************************************************/
278 /*
279 unsigned char WRAL(unsigned int op_data)
280 {data unsigned char temp1;
281 data unsigned int temp2;
282 EWEN_93C46();
283 START_93C46();
284 SEND_DATA_93C46(0X04,0X03);
285 SEND_DATA_93C46(0X10,0X06);
286 SEND_DATA_93C46(op_data,0X10);
287 CS_93C46=0;
288 CS_93C46=1;
289 temp1=1;
290 temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
291 while(!DO_93C46)
292 {temp2=temp2-1;
293 if(temp2==0)
294 {temp1=0;
295 break;
296 }
297 }
298 END_93C46();
299 EWDS_93C46();
300 return op_data;
301 }
302
303 */
C51 COMPILER V7.09 93C46 10/17/2005 17:03:10 PAGE 6
304
305
306
307
308
309
310
311
312
313
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 292 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -