📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 09/19/2008 10:58:25 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "intrins.h"
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 MAIN 09/19/2008 10:58:25 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 { int i=0;
100 1 unsigned char c;
101 1 unsigned 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 MAIN 09/19/2008 10:58:25 PAGE 3
118 3
119 3 }
120 2 else if ( unum==12 )
121 2 {
122 3
123 3 for(i==2;i<=11;i++)
124 3 syt=syt+UartBuf[i];
125 3 syt=syt+c;
126 3 if(syt==0)
127 3 {
128 4 unum= 0;
129 4 UartFlag = 1;
130 4 }
131 3 else
132 3 {
133 4 unum=0;
134 4 }
135 3 }
136 2 }
137 1 if ( TI ) //发送中断
138 1 {
139 2 TI = 0;
140 2 _TI_ = 1;
141 2 }
142 1 }
143 main()
144 {
145 1
146 1
147 1 unsigned char n;
148 1 unsigned int ci;
149 1 unsigned char t;
150 1 unsigned int x;
151 1 unsigned int y;
152 1 unsigned int xx;
153 1 unsigned int zong;
154 1 //系统初始化
155 1 n=0x00;
156 1 ci=0x900;
157 1 x=0x00;
158 1 zong=0x00;
159 1
160 1 delay(100);
161 1 UartInit();
162 1 flag=0;
163 1 do{
164 2 delay(1000);
165 2 if( UartFlag == 1 )
166 2 {
167 3 UartFlag=0;
168 3 for(t=2;t<=9;t++)
169 3 zong=zong+UartBuf[t];
170 3 if(zong==0)
171 3 if(UartBuf[10]<0x80)
172 3 {
173 4 zong=UartBuf[10];
174 4 zong=zong<<8;
175 4 zong=zong+UartBuf[11];
176 4 ci=0x00;
177 4 flag=1;
178 4 break;
179 4 }
C51 COMPILER V8.08 MAIN 09/19/2008 10:58:25 PAGE 4
180 3 else
181 3 UartSendString("count error");
182 3 else
183 3 UartSendString("count error");
184 3 }
185 2 }while(ci--); //等待时间接收串口数据
186 1
187 1 if(flag==0)
188 1 JumpToUser(); //跳转到用户程序
189 1
190 1 if(flag==1) //说明IAP读写启动
191 1 {
192 2 flag=0;
193 2 UartSendString("IAP begin"); //发送开始信号
194 2 delay(200);
195 2 UartSendString("\r\n");
196 2 delay(200);
197 2 UartSendString("Erase"); //擦除用户Flash的32k
198 2 delay(200);
199 2 UartSendString("\r\n");
200 2 delay(200);
201 2 for ( x=0; x<256; x++ )
202 2 IAP_SectorErase(x);
203 2 delay(100);
204 2 UartSendString("Ready\r\n"); //准备接收数据
205 2 x=0x00;
206 2 for (;;)
207 2 {
208 3 PCON |= 0x01; //等待中断的到来
209 3 if ( UartFlag == 1 )
210 3 {
211 4 next: UartFlag = 0;
212 4
213 4 xx=x;
214 4 for(ci=0x02;ci<=11;ci++)
215 4 {
216 5 y=UartBuf[ci];
217 5 flag=IAP_Program(x++,y);
218 5 if (flag )
219 5 {
220 6 ErrorDo("error");
221 6 x=xx;
222 6 goto next;
223 6 }
224 5 }
225 4 if(x>=zong)
226 4 goto endok;
227 4 UartSendString("next"); //发送开始信号
228 4 UartSendString("\r\n");
229 4 if(x>=zong)
230 4 goto endok;
231 4
232 4 }
233 3 }
234 2 endok: UartSendString("Download OK\r\n");
235 2 delay(100);
236 2 JumpToUser();
237 2 }
238 1
239 1
240 1
241 1
C51 COMPILER V8.08 MAIN 09/19/2008 10:58:25 PAGE 5
242 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 602 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 10
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 + -