📄 myapp.lst
字号:
C51 COMPILER V7.04 MYAPP 04/08/2006 10:08:34 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE MYAPP
OBJECT MODULE PLACED IN myApp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE myApp.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "main.h"
2 #include "myApp.h"
3 #include "isp.h"
4 #include "comm.h"
5
6 #include <absacc.h>
7
8 /*
9 unsigned char Asc2Hex(unsigned char *strData);
10 void Hex2Asc(unsigned char ch,unsigned char *strOut);
11 */
12
13
14 unsigned char CheckAppPrg();
15 void IspServer();
16 unsigned char CheckPcCmd();
17
18 void CMD_CHIPERASEf();
19 void CMD_PAGEERASEf();
20 void CMD_CHIPREADf();
21 void CMD_CHIPWRITEf();
22 void CMD_SETPROTECTf();
23 void CMD_CLRPROTECTf();
24 void CMD_VERIFYf();
25 void CMD_GETMACHINEf();
26 void CMD_ENDCOMf();
27 void ErrCmd();
28 void CMD_READRAMf();
29
30
31
32
33 /*
34 ************************************
35 **检测PC发送的信息
36 ************************************
37 */
38 unsigned char CheckPcCmd()
39 {
40 1 unsigned char ch;
41 1 unsigned char num=0;
42 1
43 1
44 1 for(i=0;i<10;i++)
45 1 {
46 2 WatchDog();
47 2 if(ReadComm1(&ch)!=ID_OK)break;
48 2
49 2 if(ch==0x55)num++;
50 2 }
51 1
52 1 if(num<5)return ID_ERR;
53 1 else
54 1 {
55 2 PIN_TXEN=RS485_COMM_ENABLE;//允许发送
C51 COMPILER V7.04 MYAPP 04/08/2006 10:08:34 PAGE 2
56 2 WriteComm(0xaa);
57 2 WriteComm(0xaa);
58 2 PIN_TXEN=RS485_COMM_DISENABLE;//不允许发送
59 2 return ID_OK;
60 2 }
61 1
62 1 }
63
64 /*
65 ************************************
66 **检查程序的完整性
67 ************************************
68 */
69 unsigned char CheckAppPrg()
70 {
71 1 unsigned char xorcode;
72 1 unsigned char ch;
73 1
74 1
75 1
76 1 //1.由并行编程器写入的,检查开始字节是否是0x02,
77 1 ch=ChipRead(0x0000);
78 1 if(ch==0x02)return ID_OK;
79 1
80 1 //2.连续100个字节0xff判断,表示根本没有下载成功
81 1 for(i=0;i<100;i++)
82 1 {
83 2 WatchDog();
84 2 if(ChipRead(i)!=0xff)break;
85 2 }
86 1 if(i>=100)return ID_ERR;
87 1
88 1 //3.校验码判断,校验码错,则肯定下载失败
89 1 //0xf7ff字节位置为0XFF-没有产生校验码,否则有校验码
90 1 ch=ChipRead(0xf7ff);
91 1
92 1 if(ch!=0xff)
93 1 {
94 2 xorcode=0;
95 2 for(i=0;i<0xf800;i++)
96 2 {
97 3 WatchDog();
98 3 ch=ChipRead(i);
99 3 xorcode ^= ch;
100 3 }
101 2
102 2 if(xorcode!=0x00 && xorcode!=0xff)
103 2 {
104 3 return ID_ERR;
105 3 }
106 2 }
107 1
108 1 //4.错误跳转,或者0xff,真的为空
109 1
110 1 i=ChipRead(0x0001);
111 1 i<<=8;
112 1 i+=ChipRead(0x0002);
113 1
114 1 if(i>0xf800)return ID_ERR;
115 1
116 1
117 1 //都没有错误
C51 COMPILER V7.04 MYAPP 04/08/2006 10:08:34 PAGE 3
118 1 return ID_OK;
119 1
120 1 }
121 /*
122 ************************************
123 **isp 服务程序
124 ************************************
125 */
126 void IspServer()
127 {
128 1
129 1 unsigned char status;
130 1
131 1 while(1)
132 1 {
133 2
134 2
135 2 //接收PC机发来的命令
136 2 status=ReceiveData();
137 2 WatchDog();
138 2
139 2 //命令的处理
140 2 if(status)SendResponse(status,g_CommBuffer,0x00);
141 2 else
142 2 {
143 3
144 3 //地址出现错误,则不返回信息
145 3 WatchDog();
146 3
147 3 //if(g_CommBuffer[1]!=0x00 && g_CommBuffer[1]!=0xff)
148 3 //{
149 3 // if(g_CommBuffer[1]!=g_MachineNo)//判断地址错误
150 3 // {
151 3 // InitParameter();
152 3 // continue;
153 3 //
154 3 // }
155 3 //}
156 3
157 3
158 3 switch(g_CommBuffer[2])
159 3 {
160 4 case CMD_CHIPERASE:// 0Xa0//擦除芯片
161 4 CMD_CHIPERASEf();
162 4 break;
163 4 case CMD_PAGEERASE:// 0Xa1//页擦除
164 4 CMD_PAGEERASEf();
165 4 break;
166 4 case CMD_CHIPREAD:// 0Xa2//读
167 4 CMD_CHIPREADf();
168 4 break;
169 4 case CMD_CHIPWRITE:// 0Xa3//写
170 4 CMD_CHIPWRITEf();
171 4 break;
172 4 case CMD_SETPROTECT:// 0Xa4//保护
173 4 CMD_SETPROTECTf();
174 4 break;
175 4 case CMD_VERIFY: //a5校验
176 4 CMD_VERIFYf();
177 4 break;
178 4 case CMD_GETMACHINE: //a7获取机号
179 4 CMD_GETMACHINEf();
C51 COMPILER V7.04 MYAPP 04/08/2006 10:08:34 PAGE 4
180 4 break;
181 4 case CMD_ENDCOM: //a8结束通讯
182 4 CMD_ENDCOMf();
183 4 break;
184 4
185 4 case CMD_READRAM:
186 4 CMD_READRAMf();
187 4 break;
188 4
189 4 default:
190 4 ErrCmd();
191 4
192 4
193 4 }
194 3
195 3 if(g_CommBuffer[2]==CMD_ENDCOM)break;
196 3 InitParameter();
197 3
198 3 }
199 2
200 2
201 2 }
202 1
203 1
204 1 }
205
206
207 void CMD_CHIPERASEf()
208 {
209 1 unsigned char status;
210 1 unsigned char ch;
211 1
212 1
213 1 WatchDog();
214 1 ChipErase();
215 1
216 1
217 1 ch=ChipRead(0);
218 1 if(ch!=0xff)status=ID_ERR;
219 1 else
220 1 {
221 2 MyIspFlag=0x00;//不再唤醒
222 2 status=ID_OK;
223 2 }
224 1
225 1 SendResponse(status,g_CommBuffer,0x00);
226 1
227 1 }
228
229 //in g_CommBuffer[3]
230 void CMD_PAGEERASEf()
231 {
232 1 unsigned char status;
233 1 unsigned char ch;
234 1
235 1
236 1 WatchDog();
237 1 PageErase( g_CommBuffer[5]);
238 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -