?? eeprom.lst
字號:
C51 COMPILER V7.01 EEPROM 01/14/2009 00:09:42 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-------實驗名稱:宏晶單片機EEPROM讀寫存儲功能實驗
2 //-------單片機型號:STC89C58RD+
3 //-------版本: V3
4
5 #include <reg52.h>
6 #include <intrins.h>
7 //-----------------------
8 //--定義與IAP有關的特殊功能寄存器
9 sfr ISP_DATA = 0xe2; //ISP數據寄存器地址
10 sfr ISP_ADDRH= 0xe3; //EEPROM,Flash存儲器高位地址
11 sfr ISP_ADDRL= 0xe4; //EEPROM,Flash存儲器低位地址
12 sfr ISP_CMD = 0xe5; //ISP指令寄存器地址
13 sfr ISP_TRIG = 0xe6; //ISP命令觸發器寄存器地址
14 sfr ISP_CONTR= 0xe7; //ISP/IAP控制寄存器
15
16 //------------------------
17 //--按鍵定義
18 sbit key1 = P1^0;
19 sbit key2 = P1^1;
20 sbit key3 = P1^2;
21 sbit Beep = P1^5;
22 sbit P0_0=P0^0;
23 sbit P0_1=P0^1;
24 sbit P0_2=P0^2;
25 sbit P0_3=P0^3;
26 sbit P0_4=P0^4;
27 sbit P0_5=P0^5;
28 sbit P0_6=P0^6;
29 sbit P0_7=P0^7;
30 sbit P2_0=P2^0;
31 sbit P2_1=P2^1;
32 sbit P2_2=P2^2;
33 sbit P2_3=P2^3;
34 sbit P1_7=P1^7;
35 #define Scan P3
36 #define Beep_on Beep=0;
37 #define Beep_off Beep=1;
38 //------------------------
39 //--定義變量
40 //------------------------
41 //--Flash 操作等待時間
42 //#define ENABLE_ISP 0x83 //<5MHz
43 //#define ENABLE_ISP 0x82 //<10MHz
44 #define ENABLE_ISP 0x81 //<20MHz 打開ISP操作功能及等待時間
45 //#define ENABLE_ISP 0x80 //>20MHz
46 #define DEBUG_DATA 0x01 //往EEPROM寫入的數據
47 #define uchar unsigned char
48 unsigned int ADD;
49 //------------------------
50 //--IAP操作模式
51 //------------------------
52 #define Read 0x01 //讀Flash命令字
53 #define Write 0x02 //寫Flash命令字
54 #define Erase 0x03 //擦除Flash命令字
55 uchar telnm[11];
C51 COMPILER V7.01 EEPROM 01/14/2009 00:09:42 PAGE 2
56 //---------------------------
57 //--選擇型號STC54\58起始地址都為0x8000,51起始地址為0x2000
58 unsigned int DATA_FLASH_START_ADDRESS = 0x8000;
59 unsigned char DATA_memory;
60
61 /*---------------延時子程序----------------*/
62 void Delay_US (uchar us)
63 {
64 1 while(--us);
65 1 }
66 void Delay_MS (uchar ms)
67 {
68 1 do {Delay_US(246);Delay_US(247);}
69 1 while(--ms);
70 1 }
71 void Delay_S (uchar s)
72 {
73 1 do {Delay_MS(200);Delay_MS(200);Delay_MS(200);Delay_MS(200);Delay_MS(200);}
74 1 while(--s);
75 1 }
76
77 //---------------------------
78 //--觸發TRIG寄存器
79 void Trigger_ISP ()
80 {
81 1 EA = 0;
82 1 ISP_TRIG = 0x46;
83 1 ISP_TRIG = 0xb9;
84 1 _nop_();
85 1 EA = 1;
86 1 }
87
88 //---------------------------
89 //--禁止IAP操作
90 void IAP_Disable ()
91 {
92 1 ISP_CONTR = 0;
93 1 ISP_CMD = 0;
94 1 ISP_TRIG = 0;
95 1 }
96
97 //---------------------------
98 //--讀Flash操作
99 void Byte_Read ()
100 {
101 1 uchar i;
102 1
103 1 for(i=0;i<11;i++)
104 1 {
105 2 ADD=DATA_FLASH_START_ADDRESS+i;
106 2 ISP_ADDRH = ( ADD >> 8 );//地址的高8位
107 2 ISP_ADDRL = ( ADD & 0x00ff );//地址的低8位
108 2 EA=0;//關中斷
109 2 ISP_CONTR = ENABLE_ISP; //打開IAP功能,及設置Flash操作等待時間
110 2 ISP_CMD = Read; //選擇讀 AP模式
111 2 ISP_TRIG = 0x46;
112 2 ISP_TRIG = 0xb9;
113 2 _nop_();
114 2 telnm[i] = ISP_DATA;//存儲讀到的數據
115 2 EA = 1;
116 2 IAP_Disable();
117 2 }
C51 COMPILER V7.01 EEPROM 01/14/2009 00:09:42 PAGE 3
118 1
119 1
120 1 }
121
122 //---------------------------
123 //--字節編程
124 void Byte_Program ()
125 { uchar i;
126 1 unsigned int ADD;
127 1 for(i=0;i<11;i++)
128 1 {
129 2 ISP_DATA = DEBUG_DATA+i;
130 2 ADD=DATA_FLASH_START_ADDRESS+i;
131 2 ISP_ADDRH = ( ADD >> 8 );//地址的高8位
132 2 ISP_ADDRL = ( ADD & 0x00ff );//地址的低8位
133 2 EA = 0;
134 2 ISP_CONTR = ENABLE_ISP; //打開IAP功能,及設置Flash操作等待時間
135 2 ISP_CMD = Write;
136 2 //Trigger_ISP ();
137 2 ISP_TRIG = 0x46;
138 2 ISP_TRIG = 0xb9;
139 2 _nop_();
140 2 EA = 1;
141 2 IAP_Disable ();
142 2 }
143 1
144 1
145 1 }
146
147 //---------------------------
148 //--擦除扇區
149 void Sector_Erase ()
150 {
151 1 uchar i;
152 1
153 1 for(i=0;i<11;i++)
154 1 {
155 2 ISP_CONTR = ENABLE_ISP; //打開IAP功能,及設置Flash操作等待時間
156 2 ISP_CMD = Erase;
157 2 ADD=DATA_FLASH_START_ADDRESS+i;
158 2 ISP_ADDRH = ( ADD >> 8 );//地址的高8位
159 2 ISP_ADDRL = ( ADD & 0x00ff );//地址的低8位
160 2 Trigger_ISP ();
161 2 IAP_Disable ();
162 2 }
163 1 P0=0XFF;
164 1 P2=0XFF;
165 1
166 1 }
167 //---------------------------
168 //--LED顯示
169 void LED()
170 {
171 1 if(telnm[0]==1)
172 1 {
173 2 P0_1=0;
174 2 }
175 1 if(telnm[1]==2)
176 1 {
177 2 P0_2=0;
178 2 }
179 1 if(telnm[2]==3)
C51 COMPILER V7.01 EEPROM 01/14/2009 00:09:42 PAGE 4
180 1 {
181 2 P0_3=0;
182 2 }
183 1 if(telnm[3]==4)
184 1 {
185 2 P0_4=0;
186 2 }
187 1 if(telnm[4]==5)
188 1 {
189 2 P0_5=0;
190 2 }
191 1 if(telnm[5]==6)
192 1 {
193 2 P0_6=0;
194 2 }
195 1 if(telnm[6]==7)
196 1 {
197 2 P0_7=0;
198 2 }
199 1 if(telnm[7]==8)
200 1 {
201 2 P2_0=0;
202 2 }
203 1 if(telnm[8]==9)
204 1 {
205 2 P2_1=0;
206 2 }
207 1 if(telnm[9]==10)
208 1 {
209 2 P2_2=0;
210 2 }
211 1 if(telnm[10]==11)
212 1 {
213 2 P2_3=0;
214 2 }
215 1
216 1 // else
217 1 // P0=0x5f;
218 1
219 1
220 1 }
221
222
223 void Key_board ()
224 {
225 1 if(key1==0)
226 1 {
227 2 Delay_MS(5);
228 2 if(key1==0)
229 2 {
230 3 Byte_Read ();//KEY1按下,
231 3 LED();//顯示數據
232 3 }
233 2 while(key1==0);
234 2 }
235 1 if(key2==0)//KEY2按下
236 1 {
237 2 Delay_MS(5);
238 2 if(key2==0)
239 2 {
240 3 P0=0xff;
241 3 Byte_Program ();//寫數據到EEPROM
C51 COMPILER V7.01 EEPROM 01/14/2009 00:09:42 PAGE 5
242 3 DATA_memory=0;
243 3 Beep_on;
244 3 P1_7=0;
245 3 Delay_MS(200);
246 3 Beep_off;
247 3 P1_7=1;
248 3 Delay_MS(200);
249 3 Beep_on;
250 3 P1_7=0;
251 3 Delay_MS(200);
252 3 Beep_off;
253 3 P1_7=1;
254 3 Delay_MS(200);
255 3 Beep_on;
256 3 P1_7=0;
257 3 Delay_MS(200);
258 3 Beep_off;
259 3 P1_7=1;
260 3 }
261 2 while(key2==0);
262 2 }
263 1 if(key3==0)
264 1 {
265 2 Delay_MS(5);
266 2 if(key3==0)
267 2 {
268 3 Sector_Erase ();//擦除EEPROM
269 3 Byte_Read ();
270 3 LED();
271 3 }
272 2 }
273 1 }
274
275 void initial ()
276 {
277 1 TMOD=0x20; //定時器1選擇方式2,8位自動重裝
278 1 ES=1; //允許串口中斷
279 1 PCON=0x00; //SMOD=0
280 1 SCON=0x50; //串口選擇方式1
281 1 TH1=0xfd; //波特率設置為9600
282 1 TL1=0xfd;
283 1 EA=1;
284 1 TR1=1; //開定時器T1運行控制位
285 1 }
286
287 void COM_int() interrupt 4 using 0
288 {
289 1 uchar com_buff;
290 1 RI=0;
291 1 com_buff=SBUF;
292 1 if(com_buff==0xab) //自定義指令為0xab
293 1 {
294 2 Delay_S(1);
295 2 ISP_CONTR=0x60; //軟件復位到ISP編程區
296 2 }
297 1 }
298
299 void main()
300 {
301 1 initial (); //初始化
302 1 P0 = 0xf0;
303 1 Delay_S(1);
C51 COMPILER V7.01 EEPROM 01/14/2009 00:09:42 PAGE 6
304 1 P0 = 0x0f;
305 1 Delay_S(1);
306 1 while(1)
307 1 {
308 2 Key_board ();
309 2 }
310 1 }
311
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 449 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
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 + -