📄 iap.lst
字号:
C51 COMPILER V8.08 IAP 01/07/2008 12:56:43 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE IAP
OBJECT MODULE PLACED IN IAP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IAP.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "V51IAP.h"
3 //==I485接收缓冲区队列
4 unsigned char idata UartBuf[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//
5 unsigned char data unum=0x00; //
6 bit UartFlag;
7 bit _TI_; //发送位
8 sbit i485_con=P2^7;
9 bit flag;
10
11
12 void UartInit();
13 void delay(unsigned int i);
14 void ErrorDo(char *s);
15 void UartSendChar(char c);
16 void UartSendString(char *s);
17
18
19 /*
20 功能:
21 通过串行口发送单个字节
22
23 */
24 void UartSendChar(char c)
25 {
26 1 i485_con=0;
27 1
28 1 while ( !_TI_ );
29 1 _TI_ = 0;
30 1 SBUF = c;
31 1
32 1 i485_con=1;
33 1 }
34
35
36 /*
37 功能:
38 通过串行口发送字符串
39 参数:
40 *s:被发送的字符串
41
42 */
43 void UartSendString(char *s)
44 {
45 1 char c;
46 1 for (;;)
47 1 {
48 2 c = *s;
49 2 if ( c == '\0' ) break;
50 2 s++;
51 2 UartSendChar(c);
52 2 }
53 1 }
54
55 //==============================
C51 COMPILER V8.08 IAP 01/07/2008 12:56:43 PAGE 2
56 /*延时子程序*/
57 void delay(unsigned int ii)
58 {
59 1 do{
60 2 }while(ii--);
61 1 }
62
63 void ErrorDo(char *s)
64 {
65 1 UartSendString(s);
66 1 UartSendString("\r\n");
67 1 }
68
69 //======================== 串口初始化====================
70 void UartInit()
71 {
72 1 unsigned char i;
73 1 EA = 0;
74 1 RXD = 1;
75 1 TXD = 1;
76 1 _TI_ = 1;
77 1
78 1 for ( i=0; i<12; i++ )
79 1 {
80 2 UartBuf[i] = '\0';
81 2 }
82 1
83 1 i=0x00;
84 1 UartFlag = 0;
85 1 SCON = 0x50; //串口方式1
86 1 PCON |= 0x80; //波特率加倍
87 1 TMOD &= 0x0F;
88 1 TMOD |= 0x20;
89 1 TH1 = 0xfa;
90 1 TL1 = TH1;
91 1 TR1 = 1;
92 1 i485_con=1;
93 1 ES = 1; //允许串行口中断
94 1 EA = 1; //允许中断
95 1 }
96
97 //串行口中断服务程序
98 void UartINTSVC() interrupt 4
99 {
100 1 char c;
101 1 char syt;
102 1 if ( RI ) //接收中断
103 1 {
104 2 c = SBUF;
105 2 RI = 0;
106 2 if ( unum <=1)
107 2 {
108 3 if(c==0xaa)
109 3 unum++;
110 3 else
111 3 unum=0;
112 3
113 3 }
114 2 else if (( 1<unum)&&(unum<=11))
115 2 {
116 3 UartBuf[unum]=c;
117 3 unum++;
C51 COMPILER V8.08 IAP 01/07/2008 12:56:43 PAGE 3
118 3
119 3 }
120 2 else if ( unum==13 )
121 2 {
122 3 for(unum==2;unum<=11;unum++)
123 3 syt=syt+UartBuf[unum];
124 3 if((syt+c)==0)
125 3 {
126 4 unum= 0;
127 4 UartFlag = 1;
128 4 }
129 3 else
130 3 {
131 4 unum=0;
132 4 }
133 3 }
134 2 }
135 1 if ( TI ) //发送中断
136 1 {
137 2 TI = 0;
138 2 _TI_ = 1;
139 2 }
140 1 }
141 main()
142 {
143 1
144 1
145 1 unsigned char n;
146 1 unsigned int ci;
147 1 unsigned char t;
148 1 unsigned int x;
149 1 unsigned int y;
150 1
151 1 unsigned int zong;
152 1 //系统初始化
153 1 begining:
154 1 n=0x00;
155 1 ci=0x900;
156 1 x=0x00;
157 1 zong=0x00;
158 1
159 1 delay(100);
160 1 UartInit();
161 1 flag=0;
162 1 do{
163 2 delay(1000);
164 2 if( UartFlag == 1 )
165 2 {
166 3 for(t=2;t<=9;t++)
167 3 zong=zong+UartBuf[t];
168 3 if(zong==0)
169 3 if(UartBuf[10]<0x80)
170 3 {
171 4 zong=UartBuf[10];
172 4 zong=zong<<8;
173 4 zong=zong+UartBuf[11];
174 4 ci=0x00;
175 4 flag=1;
176 4 }
177 3 else
178 3 UartSendString("count error");
179 3 else
C51 COMPILER V8.08 IAP 01/07/2008 12:56:43 PAGE 4
180 3 UartSendString("count error");
181 3 goto begining;
182 3 }
183 2 ci--;
184 2 }while(1); //等待时间接收串口数据
185 1
186 1 if(flag==0)
187 1 JumpToUser(); //跳转到用户程序
188 1
189 1 if(flag==1) //说明IAP读写启动
190 1 {
191 2 flag=0;
192 2 UartSendString("IAP begin"); //发送开始信号
193 2 UartSendString("\r\n");
194 2 delay(200);
195 2 UartSendString("Erase"); //擦除用户Flash的32k
196 2 UartSendString("\r\n");
197 2 IAP_UserErase();
198 2 delay(100);
199 2 UartSendString("Ready\r\n"); //准备接收数据
200 2 x=0x00;
201 2 for (;;)
202 2 {
203 3 PCON |= 0x01; //等待中断的到来
204 3 if ( UartFlag == 1 )
205 3 {
206 4 next:
207 4 UartFlag = 0;
208 4
209 4 for(ci=0x02;ci<=11;ci++)
210 4 {
211 5 y=UartBuf[ci];
212 5 flag=IAP_Program(x++,y);
213 5 if (flag )
214 5 {
215 6 ErrorDo("Save error");
216 6 goto next;
217 6 }
218 5 }
219 4
220 4 UartSendString("next"); //发送开始信号
221 4 UartSendString("\r\n");
222 4 if(x>=zong)
223 4 goto endok;
224 4
225 4 }
226 3 }
227 2 endok: UartSendString("Download OK\r\n");
228 2 delay(100);
229 2 JumpToUser();
230 2 }
231 1
232 1
233 1
234 1
235 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 376 ----
CONSTANT SIZE = 69 ----
XDATA SIZE = ---- ----
C51 COMPILER V8.08 IAP 01/07/2008 12:56:43 PAGE 5
PDATA SIZE = ---- ----
DATA SIZE = 1 8
IDATA SIZE = 12 ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -