📄 iap_lite.lst
字号:
C51 COMPILER V7.05 IAP_LITE 04/08/2005 13:54:34 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE IAP_LITE
OBJECT MODULE PLACED IN Iap_lite.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Iap_lite.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /******************************************************************
2 * 文件名:IAP_LITE.C
3 * 功能:实现IAP_Lite功能,进行字节擦除编程操作
4 * 日期:2003.11.10
5 * 说明:
6 ******************************************************************/
7 #define uint8 unsigned char
8 #define uint16 unsigned int
9
10 /* 定义页宽度屏蔽字(16字节时为0x0F,64字节时为0x3F) */
11 #define PAGE_SIZE 0x3F
12
13 /* IAP_Lite相关寄存器定义 */
14 sfr FMADRH = 0xE7;
15 sfr FMADRL = 0xE6;
16 sfr FMCON = 0xE4;
17 sfr FMDATA = 0xE5;
18
19 /* 定义FLASH控制命令字 */
20 #define LOAD 0x00 /* 加载数据 */
21 #define PROG 0x48 /* 编程 */
22 #define ERS_PROG 0x68 /* 擦除编程 */
23 #define ERS_S 0x71 /* 擦除扇区 */
24 #define ERS_P 0x70 /* 擦除页 */
25
26
27 /******************************************************************
28 * 名称:FLASH_WriteByte
29 * 功能:指定FLASH地址,写单字节数据
30 * 入口参数:addr 指定的地址
31 * dat 待写入的数据
32 * 出口参数:返回0时表示操作错误
33 ******************************************************************/
34 bit FLASH_WriteByte(uint16 addr, uint8 dat)
35 {
36 1 FMCON = LOAD; // 设置加载数据命令
37 1 FMADRH = addr>>8; // 设置写入地址
38 1 FMADRL = addr&0xFF;
39 1 FMDATA = dat; // 写入数据
40 1 FMCON = ERS_PROG; // 擦除编程
41 1
42 1 if( (FMCON&0x0F)!=0x00 )
43 1 {
44 2 FMCON = LOAD; // 设置加载数据命令
45 2 FMADRH = addr>>8; // 设置写入地址
46 2 FMADRL = addr&0xFF;
47 2 FMDATA = dat; // 写入数据
48 2 FMCON = ERS_PROG; // 擦除编程
49 2 if( (FMCON&0x0F)!=0x00 )
50 2 {
51 3 FMCON = LOAD; // 设置加载数据命令
52 3 FMADRH = addr>>8; // 设置写入地址
53 3 FMADRL = addr&0xFF;
54 3 FMDATA = dat; // 写入数据
55 3 FMCON = ERS_PROG; // 擦除编程
C51 COMPILER V7.05 IAP_LITE 04/08/2005 13:54:34 PAGE 2
56 3 return(0);
57 3 }
58 2 }
59 1 else return(1);
60 1 }
61
62
63 /******************************************************************
64 * 名称:FLASH_ReadByte
65 * 功能:指定FLASH地址,读单字节数据
66 * 入口参数:addr 指定的地址
67 * 出口参数:返回值即是读出的数据
68 ******************************************************************/
69 uint8 FLASH_ReadByte(uint16 addr)
70 { uint8 code *readp;
71 1
72 1 readp = addr;
73 1 return(*readp);
74 1 }
75
76
77 /******************************************************************
78 * 名称:FLASH_WriteNByte
79 * 功能:指定FLASH起始地址,写多字节数据
80 * 入口参数:addr 指定的起始地址
81 * dat_buf 待写入的数据缓冲区指针
82 * no 要写入数据个数
83 * 出口参数:返回0时表示操作错误
84 ******************************************************************
85 bit FLASH_WriteNByte(uint16 addr, uint8 *dat_buf, uint8 no)
86 { if(0==no) return(0);
87
88 FMCON = LOAD; // 设置加载数据命令
89 FMADRH = addr>>8; // 设置写入地址
90 FMADRL = addr&0xFF;
91 while(1)
92 { FMDATA = *dat_buf; // 写入数据
93 dat_buf++; // 指向下一个待写入的数据
94 addr++;
95 no--;
96 if(0==no) break; // 判断是否写完所有数据,若是则退出
97
98 if( (addr&PAGE_SIZE)==0 ) // 判断是否要换页
99 { FMCON = ERS_PROG; // 若是,则擦除编程
100 if( (FMCON&0x0F)!=0x00 ) return(0);
101 // 切换到下一页
102 FMCON = LOAD;
103 FMADRH = addr>>8;
104 FMADRL = addr&0xFF;
105 }
106 }
107 FMCON = ERS_PROG; // 擦除编程
108 if( (FMCON&0x0F)!=0x00 ) return(0);
109 else return(1);
110 }
111
112 /******************************************************************
113 * 名称:FLASH_ReadNByte
114 * 功能:指定FLASH起始地址,读多字节数据
115 * 入口参数:addr 指定的起始地址
116 * dat_buf 保存数据的缓冲区指针
117 * no 要写入数据个数
C51 COMPILER V7.05 IAP_LITE 04/08/2005 13:54:34 PAGE 3
118 * 出口参数:无
119 ******************************************************************
120 void FLASH_ReadNByte(uint16 addr, uint8 *dat_buf, uint8 no)
121 { uint8 code *readp;
122
123 if(0==no) return;
124 readp = addr; // 设置读取的地址
125 for(; no>0; no--)
126 { *dat_buf = *readp; // 读取数据
127 dat_buf++;
128 readp++; // 指向下一地址
129 }
130 }
131
132
133 /******************************************************************
134 * 名称:FLASH_EraseSector
135 * 功能:扇区擦除
136 * 入口参数:addr 指定待擦除扇区内的地址
137 * 出口参数:返回0时表示操作错误
138 ******************************************************************
139 bit FLASH_EraseSector(uint16 addr)
140 { FMADRH = addr>>8;
141 FMADRL = addr&0xFF;
142 FMCON = ERS_S;
143
144 if( (FMCON&0x0F)!=0x00 ) return(0);
145 else return(1);
146 }
147
148
149 /******************************************************************
150 * 名称:FLASH_ErasePage
151 * 功能:页擦除
152 * 入口参数:addr 指定待擦除页内的地址
153 * 出口参数:返回0时表示操作错误
154 ******************************************************************/
155 bit FLASH_ErasePage(uint16 addr)
156 { FMADRH = addr>>8;
157 1 FMADRL = addr&0xFF;
158 1 FMCON = ERS_P;
159 1
160 1 if( (FMCON&0x0F)!=0x00 ) return(0);
161 1 else return(1);
162 1 }
163
164
165 /******************************************************************
166 * 名称:FLASH_FillPage
167 * 功能:页填充
168 * 入口参数:addr 指定待填充页内的地址
169 * dat 待填充的数据
170 * 出口参数:返回0时表示操作错误
171 * 说明:函数会先调用FLASH_ErasePage擦除扇区
172 ******************************************************************
173 bit FLASH_FillPage(uint16 addr, uint8 dat)
174 { uint8 i;
175
176 // 擦除扇区
177 if( FLASH_ErasePage(addr)==0 ) return(0);
178 // 填充数据
179 FMADRH = addr>>8; // 设置页起始地址
C51 COMPILER V7.05 IAP_LITE 04/08/2005 13:54:34 PAGE 4
180 FMADRL = addr&(~PAGE_SIZE);
181 FMCON = LOAD; // 设置加载数据命令
182 for(i=0; i<=PAGE_SIZE; i++)
183 { FMDATA = dat; // 加载数据
184 }
185 FMCON = PROG; // 开始编程
186
187 if( (FMCON&0x0F)!=0x00 ) return(0);
188 else return(1);
189 }
190
191 */
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 92 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -