📄 93lc66.lst
字号:
C51 COMPILER V7.06 93LC66 05/10/2008 14:12:39 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 93LC66
OBJECT MODULE PLACED IN 93LC66.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 93LC66.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include <AT89X52.h>
3 #include <ABSACC.h>
4 #include <intrins.h>
5 #define _Nop() _nop_()
6 sbit CS_93c66=P0^0;
7 sbit SK_93c66=P0^1;
8 sbit DI_93c66=P0^2;
9 sbit DO_93c66=P0^3;
10 void START_93c66();
11 void END_93c66();
12 void EWEN_93c66();
13 void EWDS_93c66();
14 unsigned char READ(unsigned int);
15 unsigned char WRITE(unsigned int,unsigned int);
16 void SEND_DATA_93c66(unsigned int,unsigned char);
17 void delay1(unsigned int);
18 unsigned char Addr_bit=9;//--------------------------46设为7,66设为9-----
19 /*void main()
20 {
21 unsigned int n,tmp;
22 P0=0xff;
23 for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
24 {
25 if(!WRITE(n,n))
26 {
27 //add write error process here
28 }
29 }
30 while(1)
31 {
32 for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
33 {
34 tmp=(n<<1);
35 P0=READ(n);
36 delay1(60000);
37 P1=tmp;
38 delay1(60000);
39 }
40 }
41 }*/
42 /*93c66 操作子程序 */
43 /* 注意:这里使用的93c66 为8 位结构的EEROM*/
44 void delay1(unsigned int num)
45 {
46 1 while(num!=0){num=num-1;}
47 1 }
48 /***********************************************************************/
49 /*名称: START_93c66() */
50 /*说明: 用于93c66 的启动,防止由于CS_93c66 的改动而引起数据时序混乱 */
51 /***********************************************************************/
52 void START_93c66()
53 {
54 1 DO_93c66=1; /*防止DO 由于是低电平而无法输入*/
55 1 CS_93c66=1;
C51 COMPILER V7.06 93LC66 05/10/2008 14:12:39 PAGE 2
56 1 /*开启93c66*/
57 1 CS_93c66=0;
58 1 DI_93c66=0;
59 1 SK_93c66=0;
60 1 CS_93c66=1;
61 1 delay1(1000);
62 1 }
63 /***************************************************************************/
64 /*名称:END_93c66() */
65 /*说明:用于93c66 的结束,防止由于CS_93c66 的改动而引起数据线为0 而无法输入*/
66 /***************************************************************************/
67 void END_93c66()
68 {
69 1 CS_93c66=0;
70 1 DI_93c66=1;
71 1 SK_93c66=1;
72 1 }
73 /***********************************************************************/
74 /*名称:SEND_DATA_93c66() */
75 /*说明:在93c66 启动下,送入指定位数的数据 */
76 /*输入: op_data 要输入的数据 */
77 /* num 输入的位数 */
78 /**********************************************************************/
79 void SEND_DATA_93c66(unsigned int op_data,unsigned char num)
80 {
81 1 unsigned char temp1;
82 1 op_data=op_data<<(16-num); /*左移去掉无用位*/
83 1 for(temp1=0;temp1<num;temp1++)
84 1 {
85 2 if( (op_data&0X8000)==00 )
86 2 {DI_93c66=0;}
87 2 else
88 2 {DI_93c66=1;}
89 2 SK_93c66=1;//SK_93c66=1;SK_93c66=1;SK_93c66=1;
90 2 SK_93c66=0;
91 2 op_data=op_data<<1;
92 2 }
93 1 }
94 /***********************************************************************/
95 /*名称: EWEN_93c66() */
96 /*说明: 93c66 的编程启动.操作码(100 11XXXXXXX) */
97 /***********************************************************************/
98 void EWEN_93c66()
99 {
100 1 START_93c66();
101 1 SEND_DATA_93c66(0X0013,0X05); /*送入3 位操作码+11*/
102 1 SEND_DATA_93c66(0X0000,Addr_bit-2); /*送入9 位地址*/
103 1 END_93c66();
104 1 }
105 /***********************************************************************/
106 /*名称: EWDS_93c66() */
107 /*说明: 93c66 的编程关闭.操作码(100 00XXXXXXX) */
108 /**********************************************************************/
109 void EWDS_93c66()
110 {
111 1 START_93c66();
112 1 SEND_DATA_93c66(0X0004,0X03);
113 1 SEND_DATA_93c66(0X0000,Addr_bit);
114 1 END_93c66();
115 1 }
116 /***********************************************************************/ /*名称:READ() */
117 /*说明:93c66 的字读取程序 */
C51 COMPILER V7.06 93LC66 05/10/2008 14:12:39 PAGE 3
118 /*输入:要读取的字节地址(9 位) */
119 /*输出:读取的字数值 */
120 /**********************************************************************/
121 unsigned char READ(unsigned int address)
122 {
123 1 unsigned char temp1;
124 1 unsigned char temp2;
125 1 START_93c66();
126 1 SEND_DATA_93c66(0X0006,0X03);
127 1 SEND_DATA_93c66(address,Addr_bit);
128 1 temp2=0; /*存放返回数据的缓冲先清零*/
129 1 for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
130 1 {
131 2 temp2=temp2<<1;
132 2 SK_93c66=1;SK_93c66=0;
133 2 if(DO_93c66==1)
134 2 {temp2=temp2|0X01;}
135 2 }
136 1 END_93c66();
137 1 return temp2;
138 1 }
139 /**********************************************************************/
140 /*名称:WRITE() */
141 /*说明:93c66 的字写入程序 */
142 /*输入: address 要写入的字节地址(9 位) */
143 /* op_data 要写入的数据(8 位) */
144 /*输出: 读取的字数值 */
145 /**********************************************************************/
146 unsigned char WRITE(unsigned int address,unsigned int op_data)
147 {
148 1 unsigned char temp1;
149 1 unsigned int temp2;
150 1 EWEN_93c66();
151 1 START_93c66();
152 1 SEND_DATA_93c66(0X0005,0X03);
153 1 SEND_DATA_93c66(address,Addr_bit);
154 1 SEND_DATA_93c66(op_data,0X08);
155 1 CS_93c66=0;
156 1 CS_93c66=1;
157 1 temp1=1;
158 1 temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
159 1 while(!DO_93c66)
160 1 {
161 2 temp2=temp2-1;
162 2 if(temp2==0)
163 2 {
164 3 temp1=0;//temp1=0则写入失败
165 3 CD_3=0;
*** ERROR C202 IN LINE 165 OF 93LC66.C: 'CD_3': undefined identifier
166 3 P0=0X08;
167 3 delay1(60000);
168 3 P0=0;
169 3 CD_3=1;
*** ERROR C202 IN LINE 169 OF 93LC66.C: 'CD_3': undefined identifier
170 3 //break; /*最大等待延时后说明擦除失败*/
171 3 }
172 2 }
173 1 END_93c66();
174 1 EWDS_93c66();
175 1 return temp1;
176 1 }
177 /***********************************************************************/
C51 COMPILER V7.06 93LC66 05/10/2008 14:12:39 PAGE 4
178 /*名称:ERASE() */
179 /*说明:93c66 的字擦除程序 */
180 /*输入: address 要擦除的字地址(9 位) */
181 /**********************************************************************/
182 unsigned char ERASE(unsigned char address)
183 {data unsigned char temp1;
184 1 data unsigned int temp2;
185 1 EWEN_93c66();
186 1 START_93c66();
187 1 SEND_DATA_93c66(0X07,0X03);
188 1 SEND_DATA_93c66(address,0X06);
189 1 CS_93c66=0;
190 1 CS_93c66=1;
191 1 temp1=1;
192 1 temp2=50000;
193 1 while(!DO_93c66)
194 1 {temp2=temp2-1;
195 2 if(temp2==0)
196 2 {temp1=0;
197 3 break;
198 3 }
199 2 }
200 1 END_93c66();
201 1 EWDS_93c66(); //返回表示擦除状态的特征
202 1 return temp1;
203 1 }
204
205 /**********************************************************************/
206 /*名称:ERAL() */
207 /*说明:93c66 的全部擦除程序 */
208 /**********************************************************************/
209 unsigned char ERAL()
210 {data unsigned char temp1;
211 1 data unsigned int temp2;
212 1 EWEN_93c66();
213 1 START_93c66();
214 1 SEND_DATA_93c66(0X04,0X03);
215 1 SEND_DATA_93c66(0X20,0X06);
216 1 CS_93c66=0;
217 1 CS_93c66=1;
218 1 temp1=1;
219 1 temp2=50000;
220 1 while(!DO_93c66)
221 1 {temp2=temp2-1;
222 2 if(temp2==0)
223 2 {temp1=0;
224 3 break;
225 3 }
226 2 }
227 1 END_93c66();
228 1 EWDS_93c66(); //返回表示擦除状态的特征
229 1 return temp1;
230 1 }
231 /***********************************************************************/
232 /*名称:WRAL() */
233 /*说明:93c66 的写全部程序 */
234 /*输入: op_data 要写入的数据(16 位) */
235 /*输出: 读取的字数值 */
236 /***********************************************************************/
237 unsigned char WRAL(unsigned int op_data)
238 {data unsigned char temp1;
239 1 data unsigned int temp2;
C51 COMPILER V7.06 93LC66 05/10/2008 14:12:39 PAGE 5
240 1 EWEN_93c66();
241 1 START_93c66();
242 1 SEND_DATA_93c66(0X04,0X03);
243 1 SEND_DATA_93c66(0X10,0X06);
244 1 SEND_DATA_93c66(op_data,0X10);
245 1 CS_93c66=0;
246 1 CS_93c66=1;
247 1 temp1=1;
248 1 temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
249 1 while(!DO_93c66)
250 1 {temp2=temp2-1;
251 2 if(temp2==0)
252 2 {temp1=0;
253 3 break;
254 3 }
255 2 }
256 1 END_93c66();
257 1 EWDS_93c66();
258 1 return op_data;
259 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 2 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -