📄 iap_lite.lst
字号:
C51 COMPILER V7.05 IAP_LITE 04/13/2004 13:35:28 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 { FMCON = LOAD; // 设置加载数据命令
36 1 FMADRH = addr>>8; // 设置写入地址
37 1 FMADRL = addr&0xFF;
38 1 FMDATA = dat; // 写入数据
39 1 FMCON = ERS_PROG; // 擦除编程
40 1
41 1 if( (FMCON&0x0F)!=0x00 ) return(0);
42 1 else return(1);
43 1 }
44
45
46 /******************************************************************
47 * 名称:FLASH_ReadByte
48 * 功能:指定FLASH地址,读单字节数据
49 * 入口参数:addr 指定的地址
50 * 出口参数:返回值即是读出的数据
51 ******************************************************************/
52 uint8 FLASH_ReadByte(uint16 addr)
53 { uint8 code *readp;
54 1
55 1 readp = addr;
C51 COMPILER V7.05 IAP_LITE 04/13/2004 13:35:28 PAGE 2
56 1 return(*readp);
57 1 }
58
59
60 /******************************************************************
61 * 名称:FLASH_WriteNByte
62 * 功能:指定FLASH起始地址,写多字节数据
63 * 入口参数:addr 指定的起始地址
64 * dat_buf 待写入的数据缓冲区指针
65 * no 要写入数据个数
66 * 出口参数:返回0时表示操作错误
67 ******************************************************************
68 bit FLASH_WriteNByte(uint16 addr, uint8 *dat_buf, uint8 no)
69 { if(0==no) return(0);
70
71 FMCON = LOAD; // 设置加载数据命令
72 FMADRH = addr>>8; // 设置写入地址
73 FMADRL = addr&0xFF;
74 while(1)
75 { FMDATA = *dat_buf; // 写入数据
76 dat_buf++; // 指向下一个待写入的数据
77 addr++;
78 no--;
79 if(0==no) break; // 判断是否写完所有数据,若是则退出
80
81 if( (addr&PAGE_SIZE)==0 ) // 判断是否要换页
82 { FMCON = ERS_PROG; // 若是,则擦除编程
83 if( (FMCON&0x0F)!=0x00 ) return(0);
84 // 切换到下一页
85 FMCON = LOAD;
86 FMADRH = addr>>8;
87 FMADRL = addr&0xFF;
88 }
89 }
90 FMCON = ERS_PROG; // 擦除编程
91 if( (FMCON&0x0F)!=0x00 ) return(0);
92 else return(1);
93 }
94
95 /******************************************************************
96 * 名称:FLASH_ReadNByte
97 * 功能:指定FLASH起始地址,读多字节数据
98 * 入口参数:addr 指定的起始地址
99 * dat_buf 保存数据的缓冲区指针
100 * no 要写入数据个数
101 * 出口参数:无
102 ******************************************************************
103 void FLASH_ReadNByte(uint16 addr, uint8 *dat_buf, uint8 no)
104 { uint8 code *readp;
105
106 if(0==no) return;
107 readp = addr; // 设置读取的地址
108 for(; no>0; no--)
109 { *dat_buf = *readp; // 读取数据
110 dat_buf++;
111 readp++; // 指向下一地址
112 }
113 }
114
115
116 /******************************************************************
117 * 名称:FLASH_EraseSector
C51 COMPILER V7.05 IAP_LITE 04/13/2004 13:35:28 PAGE 3
118 * 功能:扇区擦除
119 * 入口参数:addr 指定待擦除扇区内的地址
120 * 出口参数:返回0时表示操作错误
121 ******************************************************************
122 bit FLASH_EraseSector(uint16 addr)
123 { FMADRH = addr>>8;
124 FMADRL = addr&0xFF;
125 FMCON = ERS_S;
126
127 if( (FMCON&0x0F)!=0x00 ) return(0);
128 else return(1);
129 }
130
131
132 /******************************************************************
133 * 名称:FLASH_ErasePage
134 * 功能:页擦除
135 * 入口参数:addr 指定待擦除页内的地址
136 * 出口参数:返回0时表示操作错误
137 ******************************************************************
138 bit FLASH_ErasePage(uint16 addr)
139 { FMADRH = addr>>8;
140 FMADRL = addr&0xFF;
141 FMCON = ERS_P;
142
143 if( (FMCON&0x0F)!=0x00 ) return(0);
144 else return(1);
145 }
146
147
148 /******************************************************************
149 * 名称:FLASH_FillPage
150 * 功能:页填充
151 * 入口参数:addr 指定待填充页内的地址
152 * dat 待填充的数据
153 * 出口参数:返回0时表示操作错误
154 * 说明:函数会先调用FLASH_ErasePage擦除扇区
155 ******************************************************************
156 bit FLASH_FillPage(uint16 addr, uint8 dat)
157 { uint8 i;
158
159 // 擦除扇区
160 if( FLASH_ErasePage(addr)==0 ) return(0);
161 // 填充数据
162 FMADRH = addr>>8; // 设置页起始地址
163 FMADRL = addr&(~PAGE_SIZE);
164 FMCON = LOAD; // 设置加载数据命令
165 for(i=0; i<=PAGE_SIZE; i++)
166 { FMDATA = dat; // 加载数据
167 }
168 FMCON = PROG; // 开始编程
169
170 if( (FMCON&0x0F)!=0x00 ) return(0);
171 else return(1);
172 }
173
174 */
175
176
177
178
179
C51 COMPILER V7.05 IAP_LITE 04/13/2004 13:35:28 PAGE 4
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 35 ----
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 + -