📄 iap.lst
字号:
C51 COMPILER V7.07 IAP 03/06/2009 19:29:31 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE IAP
OBJECT MODULE PLACED IN iap.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE iap.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg922.h"
2 #include "iap.h"
3
4 #define uint8 unsigned char
5 #define uint16 unsigned int
6
7 #define PAGE_SIZE 0x3F
8 /* 定义FLASH控制命令字 */
9 #define LOAD 0x00 /* 加载数据 */
10 #define PROG 0x48 /* 编程 */
11 #define ERS_PROG 0x68 /* 擦除编程 */
12 #define ERS_S 0x71 /* 擦除扇区 */
13 #define ERS_P 0x70 /* 擦除页 */
14
15 bit prog_fail;
16 uint8 idata W_ADDRH,W_ADDRL;
17 uint16 idata R_ADDR;
18
19 bit FLASH_WriteByte(uint16 addr, uint8 dat)
20 {
21 1 long i;
22 1 EA=0;
23 1 FMCON = LOAD; // 设置加载数据命令
24 1 FMADRH = addr>>8; // 设置写入地址
25 1 FMADRL = addr&0xFF;
26 1 FMDATA = dat; // 写入数据
27 1 FMCON = ERS_PROG;
28 1 for(i=0;i<200;i++);
29 1 if ( (FMCON&0x0F)!=0x00 )
30 1 {
31 2 EA=1;
32 2 return(0);
33 2 }
34 1 else
35 1 {
36 2 EA=1;
37 2 return(1);
38 2 }
39 1 }
40
41
42 uint8 FLASH_ReadByte(uint16 addr)
43 {
44 1 uint8 code *readp;
45 1 readp = addr;
46 1 return(*readp);
47 1 }
48
49 /*
50 bit FLASH_WriteNByte(uint16 addr, uint8 *dat_buf, uint8 no)
51 {
52 long i;
53 if(0==no) return(0);
54 FMCON = LOAD; // 设置加载数据命令
55 FMADRH = addr>>8; // 设置写入地址
C51 COMPILER V7.07 IAP 03/06/2009 19:29:31 PAGE 2
56 FMADRL = addr&0xFF;
57 while(1)
58 { FMDATA = *dat_buf; // 写入数据
59 dat_buf++; // 指向下一个待写入的数据
60 addr++;
61 no--;
62 if(0==no) break; // 判断是否写完所有数据,若是则退出
63
64 if( (addr&PAGE_SIZE)==0 ) // 判断是否要换页
65 { FMCON = ERS_PROG; // 若是,则擦除编程
66 if( (FMCON&0x0F)!=0x00 ) return(0);
67 // 切换到下一页
68 FMCON = LOAD;
69 FMADRH = addr>>8;
70 FMADRL = addr&0xFF;
71 }
72 }
73 FMCON = ERS_PROG; // 擦除编程
74 for(i=0;i<200;i++);
75 if( (FMCON&0x0F)!=0x00 )
76 {
77 EA=1;
78 return(0);
79 }
80 else
81 {
82 EA=1;
83 return(1);
84 }
85 }
86
87 void FLASH_ReadNByte(uint16 addr, uint8 *dat_buf, uint8 no)
88 { uint8 code *readp;
89
90 if(0==no) return;
91 readp = addr; // 设置读取的地址
92 for(; no>0; no--)
93 { *dat_buf = *readp; // 读取数据
94 dat_buf++;
95 readp++; // 指向下一地址
96 }
97 }
98
99 bit FLASH_EraseSector(uint16 addr)
100 {
101 long i;
102 EA=0;
103 FMADRH = addr>>8;
104 FMADRL = addr&0xFF;
105 FMCON = ERS_S;
106 for(i=0;i<200;i++);
107 if( (FMCON&0x0F)!=0x00 )
108 {
109 EA=1;
110 return(0);
111 }
112 else
113 {
114 EA=1;
115 return(1);
116 }
117 }
C51 COMPILER V7.07 IAP 03/06/2009 19:29:31 PAGE 3
118
119 bit FLASH_ErasePage(uint16 addr)
120 {
121 long i;
122 EA=0;
123 FMADRH = addr>>8;
124 FMADRL = addr&0xFF;
125 FMCON = ERS_P;
126 for(i=0;i<200;i++);
127 if( (FMCON&0x0F)!=0x00 )
128 {
129 EA=1;
130 return(0);
131 }
132 else
133 {
134 EA=1;
135 return(1);
136 }
137 }
138
139 bit FLASH_FillPage(uint16 addr, uint8 dat)
140 { uint8 i;
141 long j;
142 // 擦除扇区
143 if( FLASH_ErasePage(addr)==0 ) return(0);
144 //填充数据
145 FMADRH = addr>>8; // 设置页起始地址
146 FMADRL = addr&(~PAGE_SIZE);
147 FMCON = LOAD; // 设置加载数据命令
148 for(i=0; i<=PAGE_SIZE; i++)
149 { FMDATA = dat; // 加载数据
150 }
151 FMCON = PROG; // 开始编程
152 for(j=0;j<200;j++);
153 if( (FMCON&0x0F)!=0x00 )
154 {
155 EA=1;
156 return(0);
157 }
158 else
159 {
160 EA=1;
161 return(1);
162 }
163 }
164
165 bit PGM_USER(uint8 page_hi , uint8 page_lo )
166 {
167 uint8 Fm_stat;
168 uint8 i; // 循环次数
169 FMCON = LOAD; // 装载命令,清除页寄存器
170 FMADRH = page_hi; //
171 FMADRL = page_lo; // 页地址写入地址寄存器
172 for (i=0;i<64;i++)
173 {
174 // temp=dbytes[i];
175 FMDATA=0xdd;
176 }
177 FMCON=ERS_PROG; // 擦除&编程页命令
178 Fm_stat = FMCON; // 读结果状态
179 if((Fm_stat & 0xF)!=0)
C51 COMPILER V7.07 IAP 03/06/2009 19:29:31 PAGE 4
180 prog_fail = 1;
181 else
182 prog_fail = 0;
183 return (prog_fail);
184 }
185
186 void FLASH_TEST(void)
187 {
188 unsigned char sta,addrh,addrl;
189 unsigned int i,j;
190 Uart_Printf("This is a FLASH Test!");
191 for(i=0xd00;i<0xd64;i++)
192 {
193 addrh=i/256;
194 addrl=i%256;
195 if(PGM_USER(addrh,addrl))
196 {
197 // Uart_Printf("Program FLASH Fail!\n");
198 }
199 }
200
201 for(i=0xcf0;i<0xdff;i++)
202 {
203 sta=FLASH_ReadByte(i);
204 Uart_Printchar(sta);
205 for(j=0;j<65535;j++) ;
206 }
207 }
208 */
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.07 IAP 03/06/2009 19:29:31 PAGE 5
CODE SIZE = 97 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = 4 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -