📄 pro.lst
字号:
C51 COMPILER V7.06 PRO 08/01/2005 14:19:11 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PRO
OBJECT MODULE PLACED IN .\Pro.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE H:\程序\Pro.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Pro.lst) OBJECT(.\Pro.obj)
stmt level source
1 #include "at89x52.h"
2 #include "stdio.h"
3 #include "intrins.h"
4 #include "ctype.h"
5
6 sbit rdy=P3^2;
7 sbit vpp=P3^3;
8 sbit p26=P3^4;
9 sbit p27=P3^5;
10 sbit p36=P3^6;
11 sbit p37=P3^7;
12 sbit prog=P2^7;
13
14 void init_serial()
15 {
16 1 SCON=0x50; /*mode 1*/
17 1 TMOD=0x20;
18 1 TH1=0xfd;
19 1 PCON=0x80; /*38400bps*/
20 1 TR1=1; /*load tmr1*/
21 1 TI=1;
22 1 ES=1;}
23
24 void init_pro()
25 {
26 1 p26=0;
27 1 p27=0;
28 1 p36=0;
29 1 p37=0;
30 1 vpp=1;
31 1 prog=1;
32 1 }
33
34 void sendbyte(unsigned char da) /*send a byte*/
35 {
36 1 while(!TI);
37 1 TI=0;
38 1 SBUF=da;}
39
40 unsigned char IntToAscii(unsigned char a) /*change DEC to ASCII HEX code*/
41 {
42 1 if(a<10) return a+48;
43 1 if(a>9) return a+55;}
44
45 unsigned int getadr() /*get 5 diti DEC adr*/
46 {
47 1 unsigned char i,a[5];
48 1 for(i=0;i<5;i++)
49 1 {
50 2 while(!RI);
51 2 RI=0;
52 2 a[i]=SBUF-48;
53 2 }
54 1 return a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}
55
C51 COMPILER V7.06 PRO 08/01/2005 14:19:11 PAGE 2
56 unsigned char getdata() /*get 2 diti HEX data*/
57 {
58 1 unsigned char d1,d2;
59 1 while(!RI);
60 1 RI=0;
61 1 d1=toint(SBUF);
62 1 while(!RI);
63 1 RI=0;
64 1 d2=toint(SBUF);
65 1 return d1*16+d2;}
66
67 unsigned int detchip(int adr)
68 {
69 1 P0=0xff;
70 1 P1=adr%256;P2=adr/256;
71 1 init_pro();
72 1 _nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
73 1 _nop_();_nop_();_nop_();_nop_();_nop_();
74 1 return P0;}
75
76 void read()
77 {
78 1 unsigned int adr,maxadr;
79 1 unsigned char h,l;
80 1 P0=0xff;
81 1 maxadr=getadr();
82 1 for(adr=0;adr<maxadr;adr++)
83 1 {
84 2 P1=adr%256;P2=adr/256;
85 2 p26=0;
86 2 p27=0;
87 2 p36=1;
88 2 p37=1;
89 2 vpp=1;
90 2 prog=1;
91 2 h=IntToAscii(P0/16);
92 2 sendbyte(h);
93 2 l=IntToAscii(P0%16);
94 2 sendbyte(l);}
95 1 init_pro();}
96
97 unsigned int test(unsigned int nn)
98 {
99 1 unsigned int adr,counter=0;
100 1 P0=0xff;
101 1 for(adr=0;adr<nn;adr++)
102 1 {
103 2 P1=adr%256;P2=adr/256;
104 2 p26=0;
105 2 p27=0;
106 2 p36=1;
107 2 p37=1;
108 2 vpp=1;
109 2 prog=1;
110 2 _nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
111 2 _nop_();_nop_();_nop_();_nop_();_nop_();
112 2 if(P0!=0xff) counter++;}
113 1 init_pro();
114 1 return counter;}
115
116 unsigned char erase(unsigned int nn,unsigned int p)
117 {
C51 COMPILER V7.06 PRO 08/01/2005 14:19:11 PAGE 3
118 1 unsigned int i;
119 1 P0=0xff;
120 1 p26=1;
121 1 p27=0;
122 1 p36=0;
123 1 p37=0;
124 1 vpp=0;
125 1 prog=1;
126 1 for(i=0;i<50000;i++) _nop_();
127 1 switch(p)
128 1 {
129 2 case 0 : prog=0;
130 2 prog=1;
131 2 break;
132 2 case 1 : prog=0;
133 2 _nop_();
134 2 prog=1;
135 2 break;
136 2 case 2 : prog=0;
137 2 _nop_();_nop_();
138 2 prog=1;
139 2 break;
140 2 case 3 : prog=0;
141 2 _nop_();_nop_();_nop_();
142 2 prog=1;
143 2 break;
144 2 case 4 : prog=0;
145 2 _nop_();_nop_();_nop_();_nop_();
146 2 prog=1;
147 2 break;
148 2 case 5 : prog=0;
149 2 _nop_();_nop_();_nop_();_nop_();_nop_();
150 2 prog=1;
151 2 break;
152 2 case 6 : prog=0;
153 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
154 2 prog=1;
155 2 break;
156 2 case 7 : prog=0;
157 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
158 2 prog=1;
159 2 break;
160 2 case 8 : prog=0;
161 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
162 2 prog=1;
163 2 break;
164 2 default: prog=0;
165 2 for(i=0;i<p;i++) _nop_();
166 2 prog=1;
167 2 break;}
168 1 _nop_();_nop_();_nop_();_nop_();
169 1 _nop_();_nop_();_nop_();_nop_();
170 1 vpp=1;
171 1 for(i=0;i<p;i++) _nop_();
172 1 if(test(nn)==0) return 's';
173 1 else return 'f';}
174
175 unsigned char write()
176 {
177 1 unsigned int adr,d,i;
178 1 p26=0;
179 1 p27=1;
C51 COMPILER V7.06 PRO 08/01/2005 14:19:11 PAGE 4
180 1 p36=1;
181 1 p37=1;
182 1 vpp=0;
183 1 prog=1;
184 1 for(i=0;i<4000;i++) _nop_();
185 1 adr=getadr();
186 1 d=getdata();
187 1 while(1)
188 1 {
189 2 if(adr>50000) break;
190 2 P1=adr%256;P2=(adr/256)|0x80;
191 2 P0=d;
192 2 TI=0;
193 2 SBUF='s';
194 2 prog=0;
195 2 _nop_();_nop_();_nop_();
196 2 prog=1;
197 2 adr=getadr();
198 2 d=getdata();
199 2 while(!rdy);}
200 1 init_pro();
201 1 return 'f';}
202
203 unsigned char lock(unsigned char level)
204 {
205 1 unsigned int i;
206 1 vpp=0;
207 1 if(level==1) {p26=1;p27=1;p36=1;p37=1;}
208 1 if(level==2) {p26=1;p27=1;p36=0;p37=0;}
209 1 if(level==3) {p26=1;p27=0;p36=1;p37=0;}
210 1 for(i=0;i<4000;i++) _nop_();
211 1 prog=1;
212 1 _nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
213 1 _nop_();_nop_();_nop_();_nop_();_nop_();
214 1 prog=0;
215 1 _nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
216 1 _nop_();_nop_();_nop_();_nop_();_nop_();
217 1 prog=1;
218 1 _nop_();_nop_();_nop_();_nop_();_nop_();
219 1 while(!rdy);
220 1 init_pro();
221 1 return 'o';}
222
223 void main()
224 {
225 1 unsigned char data c;
226 1 unsigned int data adr,l,dx;
227 1 init_pro();
228 1 init_serial();
229 1 while(1)
230 1 {
231 2 init_pro();
232 2 scanf("%c",&c);
233 2 switch(c)
234 2 {
235 3 case 'c' : printf("%c",'o');
236 3 break;
237 3 case 'd' : scanf("%x",&adr);
238 3 printf("%x",detchip(adr));
239 3 break;
240 3 case 't' : scanf("%u",&dx);
241 3 printf("%u",test(dx));
C51 COMPILER V7.06 PRO 08/01/2005 14:19:11 PAGE 5
242 3 break;
243 3 case 'r' : read();
244 3 break;
245 3 case 'e' : scanf("%u,%u",&adr,&dx);
246 3 printf("%c",erase(adr,dx));
247 3 break;
248 3 case 'w' : printf("%c",write());
249 3 break;
250 3 case 'l' : scanf("%u",&l);
251 3 printf("%c",lock(l));
252 3 break;
253 3 case 'h' : printf("**********Er6y Programmer Help Window***********\n");
254 3 printf("* For AT89C/S/LS/51/52/53/55 *\n");
255 3 printf("* Ver 1.0 21011030@uestc Wang Yilei *\n");
256 3 printf("* 2003/08 *\n");
257 3 printf("* Working @ 38400Bps *\n");
258 3 printf("*______________________________________________*\n");
259 3 printf("* Command | Fuction | Return *\n");
260 3 printf("*----------------|----------------|------------*\n");
261 3 printf("*d |Detect chip |ChipID *\n");
262 3 printf("*t Men Num +ENTER|Test chip black |Used bytes *\n");
263 3 printf("*r Bytes +ENTER|Read data@adress|Data *\n");
264 3 printf("*e Men Num +ENTER|Erase the chip |s:Ok;f:Faile*\n");
265 3 printf("*w adrdata |Write data@adr |s:Ok;f:Done *\n");
266 3 printf("*l bitNUM +ENTER|Lock bits |o:Finish *\n");
267 3 printf("*h |Show help window| *\n");
268 3 printf("*________________|________________|____________*\n");
269 3 printf("*Notice: if adr>50000 w command will be Done. *\n");
270 3 printf("************************************************\n");
271 3 break;
272 3 default : break;}
273 2
274 2
275 2 }
276 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1268 ----
CONSTANT SIZE = 915 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 27
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 + -