?? at89c2051pro.lst
字號:
C51 COMPILER V7.07 AT89C2051PRO 10/28/2003 18:27:17 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE AT89C2051PRO
OBJECT MODULE PLACED IN AT89C2051PRO.OBJ
COMPILER INVOKED BY: f:\winsoft\Keil\C51\BIN\C51.EXE AT89C2051PRO.C WARNINGLEVEL(1) OPTIMIZE(5,SIZE) REGFILE(.\E51Pro.OR
-C) BROWSE INCDIR(G:\MCU工程\E51Pro\) DEBUG OBJECTEXTEND CODE
stmt level source
1 ///////////////////////////////////////////////////////////////////////////////////////////////////
2 //FID=01:AT89C2051系列編程器
3 //實(shí)現(xiàn)編程的讀,寫,擦等細(xì)節(jié)
4 //AT89C2051的特殊處:給XTAL一個脈沖,地址計(jì)數(shù)加1;P1的引腳排列與AT89C51相反,需要用函數(shù)轉(zhuǎn)換
5 ///////////////////////////////////////////////////////////////////////////////////////////////////
6 #include <e51pro.h>
7
8 #define C2051_P3_7 P1_0
9 #define C2051_P1 P0//注意引腳排列相反
10 #define C2051_P3_0 P1_1
11 #define C2051_P3_1 P1_2
12 #define C2051_XTAL P1_4
13 #define C2051_P3_2 P1_5
14 #define C2051_P3_3 P1_6
15 #define C2051_P3_4 P1_7
16 #define C2051_P3_5 P3_5
17
18 void InitPro01()//編程前的準(zhǔn)備工作
19 {
20 1 SetVpp0V();
21 1 P0=0xff;
22 1 P1=0xff;
23 1 C2051_P3_5=1;
24 1 C2051_XTAL=0;
25 1 Delay_ms(20);
26 1 nAddress=0x0000;
27 1 SetVpp5V();
28 1 }
29
30 void ProOver01()//編程結(jié)束后的工作,設(shè)置合適的引腳電平
31 {
32 1 SetVpp5V();
33 1 P0=0xff;
34 1 P1=0xff;
35 1 C2051_P3_5=1;
36 1 C2051_XTAL=1;
37 1 }
38
39 BYTE GetData()//從P0口獲得數(shù)據(jù)
40 {
41 1 B_0=P0_7;
42 1 B_1=P0_6;
43 1 B_2=P0_5;
44 1 B_3=P0_4;
45 1 B_4=P0_3;
46 1 B_5=P0_2;
47 1 B_6=P0_1;
48 1 B_7=P0_0;
49 1 return B;
50 1 }
51
52 void SetData(BYTE DataByte)//轉(zhuǎn)換并設(shè)置P0口的數(shù)據(jù)
53 {
54 1 B=DataByte;
C51 COMPILER V7.07 AT89C2051PRO 10/28/2003 18:27:17 PAGE 2
55 1 P0_0=B_7;
56 1 P0_1=B_6;
57 1 P0_2=B_5;
58 1 P0_3=B_4;
59 1 P0_4=B_3;
60 1 P0_5=B_2;
61 1 P0_6=B_1;
62 1 P0_7=B_0;
63 1 }
64
65
66 void ReadSign01()//讀特征字
67 {
68 1 InitPro01();
69 1 Delay_ms(1);
70 1 //-----------------------------------------------------------------------------
71 1 //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號
72 1 C2051_P3_3=0;
73 1 C2051_P3_4=0;
74 1 C2051_P3_5=0;
75 1 C2051_P3_7=0;
76 1 Delay_ms(20);
77 1 ComBuf[2]=GetData();
78 1 C2051_XTAL=1;
79 1 C2051_XTAL=0;
80 1 Delay_us(20);
81 1 ComBuf[3]=GetData();
82 1 ComBuf[4]=0xff;
83 1 //-----------------------------------------------------------------------------
84 1 ProOver01();
85 1 }
86
87 void Erase01()//擦除器件
88 {
89 1 InitPro01();
90 1 //-----------------------------------------------------------------------------
91 1 //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號
92 1 C2051_P3_3=1;
93 1 C2051_P3_4=0;
94 1 C2051_P3_5=0;
95 1 C2051_P3_7=0;
96 1 Delay_ms(1);
97 1 SetVpp12V();
98 1 Delay_ms(1);
99 1 C2051_P3_2=0;
100 1 Delay_ms(10);
101 1 C2051_P3_2=1;
102 1 Delay_ms(1);
103 1 //-----------------------------------------------------------------------------
104 1 ProOver01();
105 1 }
106
107 BOOL Write01(BYTE Data)//寫器件
108 {
109 1 //-----------------------------------------------------------------------------
110 1 //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號
111 1 //寫一個單元
112 1 C2051_P3_3=0;
113 1 C2051_P3_4=1;
114 1 C2051_P3_5=1;
115 1 C2051_P3_7=1;
116 1 SetData(Data);
C51 COMPILER V7.07 AT89C2051PRO 10/28/2003 18:27:17 PAGE 3
117 1 SetVpp12V();
118 1 Delay_us(20);
119 1 C2051_P3_2=0;
120 1 Delay_us(20);
121 1 C2051_P3_2=1;
122 1 Delay_us(20);
123 1 SetVpp5V();
124 1 Delay_us(20);
125 1 C2051_P3_4=0;
126 1 Delay_ms(2);
127 1 nTimeOut=0;
128 1 P0=0xff;
129 1 nTimeOut=0;
130 1 while(!GetData()==Data)//效驗(yàn):循環(huán)讀,直到讀出與寫入的數(shù)相同
131 1 {
132 2 nTimeOut++;
133 2 if(nTimeOut>1000)//超時了
134 2 {
135 3 return 0;
136 3 }
137 2 }
138 1 C2051_XTAL=1;
139 1 C2051_XTAL=0;//一個脈沖指向下一個單元
140 1 //-----------------------------------------------------------------------------
141 1 return 1;
142 1 }
143
144 BYTE Read01()//讀器件
145 {
146 1 BYTE Data;
147 1 //-----------------------------------------------------------------------------
148 1 //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號
149 1 //讀一個單元
150 1 C2051_P3_3=0;
151 1 C2051_P3_4=0;
152 1 C2051_P3_5=1;
153 1 C2051_P3_7=1;
154 1 Data=GetData();
155 1 C2051_XTAL=1;
156 1 C2051_XTAL=0;//一個脈沖指向下一個單元
157 1 //-----------------------------------------------------------------------------
158 1 return Data;
159 1 }
160
161 void Lock01()//寫鎖定位
162 {
163 1 InitPro01();//先設(shè)置成編程狀態(tài)
164 1 //-----------------------------------------------------------------------------
165 1 //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號
166 1 if(ComBuf[2]>=1)//ComBuf[2]為鎖定位
167 1 {
168 2 C2051_P3_3=1;
169 2 C2051_P3_4=1;
170 2 C2051_P3_5=1;
171 2 C2051_P3_7=1;
172 2 Delay_us(20);
173 2 SetVpp12V();
174 2 Delay_us(20);
175 2 C2051_P3_2=0;
176 2 Delay_us(20);
177 2 C2051_P3_2=1;
178 2 Delay_us(20);
C51 COMPILER V7.07 AT89C2051PRO 10/28/2003 18:27:17 PAGE 4
179 2 SetVpp5V();
180 2 }
181 1 if(ComBuf[2]>=2)
182 1 {
183 2 C2051_P3_3=1;
184 2 C2051_P3_4=1;
185 2 C2051_P3_5=0;
186 2 C2051_P3_7=0;
187 2 Delay_us(20);
188 2 SetVpp12V();
189 2 Delay_us(20);
190 2 C2051_P3_2=0;
191 2 Delay_us(20);
192 2 C2051_P3_2=1;
193 2 Delay_us(20);
194 2 SetVpp5V();
195 2 }
196 1 //-----------------------------------------------------------------------------
197 1 ProOver01();
198 1 }
199
200 void PreparePro01()//設(shè)置pw中的函數(shù)指針,讓主程序可以調(diào)用上面的函數(shù)
201 {
202 1 pw.fpInitPro=InitPro01;
203 1 pw.fpReadSign=ReadSign01;
204 1 pw.fpErase=Erase01;
205 1 pw.fpWrite=Write01;
206 1 pw.fpRead=Read01;
207 1 pw.fpLock=Lock01;
208 1 pw.fpProOver=ProOver01;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -