?? at89c51pro.lst
字號:
C51 COMPILER V7.07 AT89C51PRO 10/28/2003 18:27:17 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE AT89C51PRO
OBJECT MODULE PLACED IN AT89C51PRO.OBJ
COMPILER INVOKED BY: f:\winsoft\Keil\C51\BIN\C51.EXE AT89C51PRO.C WARNINGLEVEL(1) OPTIMIZE(5,SIZE) REGFILE(.\E51Pro.ORC)
- BROWSE INCDIR(G:\MCU工程\E51Pro\) DEBUG OBJECTEXTEND CODE
stmt level source
1 ///////////////////////////////////////////////////////////////////////////////////////////////////
2 //FID=00:AT89C51系列編程器
3 //實現編程的讀,寫,擦等細節
4 ///////////////////////////////////////////////////////////////////////////////////////////////////
5
6 #include <e51pro.h>
7
8 void InitPro00()//編程前的準備工作
9 {
10 1 SetVpp5V();
11 1 P3_5=1;//p3.5接RST
12 1 P3_2=1;//p3.2接PROG
13 1 P0=0xff;
14 1 P1=0xff;
15 1 P2=0xff;
16 1 P2_6=0;//先置成讀模式
17 1 P2_7=0;
18 1 P3_6=1;
19 1 P3_7=1;
20 1 nAddress=0x0000;
21 1 }
22
23 void ProOver00()//編程結束后的工作,設置合適的引腳電平
24 {
25 1 SetVpp5V();
26 1 P0=0xff;
27 1 P1=0xff;
28 1 P2=0xff;
29 1 P3_6=1;
30 1 P3_7=1;
31 1 P3_5=0;//RST=0;
32 1 P3_2=0;//PROG=0
33 1 }
34
35 void ReadSign00()//讀特征字
36 {
37 1 InitPro00();//先設置成編程狀態
38 1 Delay_ms(1);
39 1 //-----------------------------------------------------------------------------
40 1 //根據器件的DataSheet,設置相應的編程控制信號
41 1 P2_6=0;
42 1 P2_7=0;
43 1 P3_6=0;
44 1 P3_7=0;
45 1 nAddress=0x0030;
46 1 P1=((BYTE*)(&nAddress))[1];//低地址
47 1 P2=((BYTE*)(&nAddress))[0];//高地址
48 1 ComBuf[2]=P0;//讀第1個特征字
49 1 nAddress=0x0031;
50 1 P1=((BYTE*)(&nAddress))[1];
51 1 P2=((BYTE*)(&nAddress))[0];
52 1 ComBuf[3]=P0;//讀第2個特征字
53 1 nAddress=0x0032;
54 1 P1=((BYTE*)(&nAddress))[1];
C51 COMPILER V7.07 AT89C51PRO 10/28/2003 18:27:17 PAGE 2
55 1 P2=((BYTE*)(&nAddress))[0];
56 1 ComBuf[4]=P0;//讀第3個特征字
57 1 //-----------------------------------------------------------------------------
58 1 ProOver00();//操作結束設置為運行狀態
59 1 }
60
61 void Erase00()//擦除器件
62 {
63 1 InitPro00();
64 1 //-----------------------------------------------------------------------------
65 1 //根據器件的DataSheet,設置相應的編程控制信號
66 1 P2_6=1;
67 1 P2_7=0;
68 1 P3_6=0;
69 1 P3_7=0;
70 1 Delay_ms(1);
71 1 SetVpp12V();
72 1 Delay_ms(1);
73 1 P3_2=0;
74 1 Delay_ms(10);
75 1 P3_2=1;
76 1 Delay_ms(1);
77 1 //-----------------------------------------------------------------------------
78 1 ProOver00();
79 1 }
80
81 BOOL Write00(BYTE Data)//向器件寫一個字節
82 {
83 1
84 1 //-----------------------------------------------------------------------------
85 1 //根據器件的DataSheet,設置相應的編程控制信號
86 1 //寫一個單元
87 1 P2=((BYTE*)(&nAddress))[0];//高地址
88 1 P1=((BYTE*)(&nAddress))[1];//低地址
89 1 P2_6=0;
90 1 P2_7=1;
91 1 P3_6=1;
92 1 P3_7=1;
93 1 P3_2=1;
94 1 P0=Data;
95 1 SetVpp12V();
96 1 Delay_us(20);
97 1 P3_2=0;
98 1 Delay_us(20);
99 1 P3_2=1;
100 1 Delay_us(20);
101 1 SetVpp5V();
102 1 Delay_us(20);
103 1 P2_7=0;
104 1 Delay_ms(2);
105 1 nTimeOut=0;
106 1 P0=0xff;
107 1 nTimeOut=0;
108 1 while(P0!=Data)//效驗:循環讀,直到讀出與寫入的數相同
109 1 {
110 2 nTimeOut++;
111 2 if(nTimeOut>1000)//超時了,寫失敗
112 2 {
113 3 return 0;
114 3 }
115 2
116 2 }
C51 COMPILER V7.07 AT89C51PRO 10/28/2003 18:27:17 PAGE 3
117 1 return 1;
118 1 //-----------------------------------------------------------------------------
119 1 }
120
121 BYTE Read00()//從器件讀一個字節
122 {
123 1 P1=((BYTE*)(&nAddress))[1];//低地址
124 1 P2=((BYTE*)(&nAddress))[0];//高地址
125 1 P2_6=0;
126 1 P2_7=0;
127 1 P3_6=1;
128 1 P3_7=1;
129 1 return P0;
130 1 }
131
132 void Lock00()//寫鎖定位
133 {
134 1 InitPro00();
135 1 //-----------------------------------------------------------------------------
136 1 //根據器件的DataSheet,設置相應的編程控制信號
137 1 if(ComBuf[2]>=1)//ComBuf[2]為鎖定位
138 1 {
139 2 P2_6=1;
140 2 P2_7=1;
141 2 P3_6=1;
142 2 P3_7=1;
143 2 Delay_us(20);
144 2 SetVpp12V();
145 2 Delay_us(20);
146 2 P3_2=0;
147 2 Delay_us(20);
148 2 P3_2=1;
149 2 Delay_us(20);
150 2 SetVpp5V();
151 2 }
152 1 if(ComBuf[2]>=2)
153 1 {
154 2 P2_6=1;
155 2 P2_7=1;
156 2 P3_6=0;
157 2 P3_7=0;
158 2 Delay_us(20);
159 2 SetVpp12V();
160 2 Delay_us(20);
161 2 P3_2=0;
162 2 Delay_us(20);
163 2 P3_2=1;
164 2 Delay_us(20);
165 2 SetVpp5V();
166 2 }
167 1 if(ComBuf[2]==3)
168 1 {
169 2 P2_6=1;
170 2 P2_7=0;
171 2 P3_6=1;
172 2 P3_7=0;
173 2 Delay_us(20);
174 2 SetVpp12V();
175 2 Delay_us(20);
176 2 P3_2=0;
177 2 Delay_us(20);
178 2 P3_2=1;
C51 COMPILER V7.07 AT89C51PRO 10/28/2003 18:27:17 PAGE 4
179 2 Delay_us(20);
180 2 SetVpp5V();
181 2 }
182 1 //-----------------------------------------------------------------------------
183 1 ProOver00();
184 1 }
185
186 void PreparePro00()//設置pw中的函數指針,讓主程序可以調用上面的函數
187 {
188 1 pw.fpInitPro=InitPro00;
189 1 pw.fpReadSign=ReadSign00;
190 1 pw.fpErase=Erase00;
191 1 pw.fpWrite=Write00;
192 1 pw.fpRead=Read00;
193 1 pw.fpLock=Lock00;
194 1 pw.fpProOver=ProOver00;
195 1 }
196
197
C51 COMPILER V7.07 AT89C51PRO 10/28/2003 18:27:17 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION InitPro00 (BEGIN)
; SOURCE LINE # 8
; SOURCE LINE # 9
; SOURCE LINE # 10
0000 120000 E LCALL SetVpp5V
; SOURCE LINE # 11
0003 D2B5 SETB P3_5
; SOURCE LINE # 12
0005 D2B2 SETB P3_2
; SOURCE LINE # 13
0007 7580FF MOV P0,#0FFH
; SOURCE LINE # 14
000A 7590FF MOV P1,#0FFH
; SOURCE LINE # 15
000D 75A0FF MOV P2,#0FFH
; SOURCE LINE # 16
0010 C2A6 CLR P2_6
; SOURCE LINE # 17
0012 C2A7 CLR P2_7
; SOURCE LINE # 18
0014 D2B6 SETB P3_6
; SOURCE LINE # 19
0016 D2B7 SETB P3_7
; SOURCE LINE # 20
0018 E4 CLR A
0019 F500 E MOV nAddress,A
001B F500 E MOV nAddress+01H,A
; SOURCE LINE # 21
001D 22 RET
; FUNCTION InitPro00 (END)
; FUNCTION ProOver00 (BEGIN)
; SOURCE LINE # 23
; SOURCE LINE # 24
; SOURCE LINE # 25
0000 120000 E LCALL SetVpp5V
; SOURCE LINE # 26
0003 7580FF MOV P0,#0FFH
; SOURCE LINE # 27
0006 7590FF MOV P1,#0FFH
; SOURCE LINE # 28
0009 75A0FF MOV P2,#0FFH
; SOURCE LINE # 29
000C D2B6 SETB P3_6
; SOURCE LINE # 30
000E D2B7 SETB P3_7
; SOURCE LINE # 31
0010 C2B5 CLR P3_5
; SOURCE LINE # 32
0012 C2B2 CLR P3_2
; SOURCE LINE # 33
0014 22 RET
; FUNCTION ProOver00 (END)
; FUNCTION ReadSign00 (BEGIN)
; SOURCE LINE # 35
; SOURCE LINE # 36
; SOURCE LINE # 37
0000 120000 R LCALL InitPro00
C51 COMPILER V7.07 AT89C51PRO 10/28/2003 18:27:17 PAGE 6
; SOURCE LINE # 38
0003 7F01 MOV R7,#01H
0005 7E00 MOV R6,#00H
0007 120000 E LCALL _Delay_ms
; SOURCE LINE # 41
000A C2A6 CLR P2_6
; SOURCE LINE # 42
000C C2A7 CLR P2_7
; SOURCE LINE # 43
000E C2B6 CLR P3_6
; SOURCE LINE # 44
0010 C2B7 CLR P3_7
; SOURCE LINE # 45
0012 750000 E MOV nAddress,#00H
0015 750030 E MOV nAddress+01H,#030H
; SOURCE LINE # 46
0018 850090 E MOV P1,nAddress+01H
; SOURCE LINE # 47
001B 8500A0 E MOV P2,nAddress
; SOURCE LINE # 48
001E 858000 E MOV ComBuf+02H,P0
; SOURCE LINE # 49
0021 750000 E MOV nAddress,#00H
0024 750031 E MOV nAddress+01H,#031H
; SOURCE LINE # 50
0027 850090 E MOV P1,nAddress+01H
; SOURCE LINE # 51
002A 8500A0 E MOV P2,nAddress
; SOURCE LINE # 52
002D 858000 E MOV ComBuf+03H,P0
; SOURCE LINE # 53
0030 750000 E MOV nAddress,#00H
0033 750032 E MOV nAddress+01H,#032H
; SOURCE LINE # 54
0036 850090 E MOV P1,nAddress+01H
; SOURCE LINE # 55
0039 8500A0 E MOV P2,nAddress
; SOURCE LINE # 56
003C 858000 E MOV ComBuf+04H,P0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -