📄 can-second.lst
字号:
C51 COMPILER V7.50 CAN_SECOND 05/15/2008 21:34:02 PAGE 4
177 1 dat[0]=ad/1000;
178 1 PutData(4,3,dat[0]);
179 1 for(n=1;n<4;n++)
180 1 PutData(5+n,3,dat[n]);
181 1 PutString(0,4,str2);
182 1 ////数据折算
183 1 ad=buf[1];
184 1 ad=ad*5000/255;
185 1 dat[3]=ad%10;
186 1 dat[2]=ad/10%10;
187 1 dat[1]=ad/100%10;
188 1 dat[0]=ad/1000;
189 1 PutData(4,4,dat[0]);
190 1 for(n=1;n<4;n++)
191 1 PutData(5+n,4,dat[n]);
192 1 PutString(0,5,str3);
193 1 ////数据折算
194 1 ad=buf[2];
195 1 ad=ad*5000/255;
196 1 dat[3]=ad%10;
197 1 dat[2]=ad/10%10;
198 1 dat[1]=ad/100%10;
199 1 dat[0]=ad/1000;
200 1 PutData(4,5,dat[0]);
201 1 for(n=1;n<4;n++)
202 1 PutData(5+n,5,dat[n]);
203 1 PutString(0,6,str4);
204 1 ////数据折算
205 1 ad=buf[3];
206 1 ad=ad*5000/255;
207 1 dat[3]=ad%10;
208 1 dat[2]=ad/10%10;
209 1 dat[1]=ad/100%10;
210 1 dat[0]=ad/1000;
211 1 PutData(4,6,dat[0]);
212 1 for(n=1;n<4;n++)
213 1 PutData(5+n,6,dat[n]);
214 1
215 1
216 1 }
217
218
219 /************************************************************************
220 初始化界面
221 ************************************************************************/
222 void manu_init(uchar k)
223 {
224 1 // uchar k=0x10;
225 1 //for(k=0x11;k<0x121;k+=0x10)
226 1 // {
227 1 //if(manu1_flag==0)
228 1 // {
229 1 showword(wang_1, 0x20+k,0);
230 1 showword(luo_1, 0x30+k,0);
231 1 showword(hua_1, 0x40+k,0);
232 1 showword(shi,0x50+k,0);
233 1 showword(yan, 0x60+k,0);
234 1 showword(jiao_1,0x70+k,0);
235 1 showword(xue_1,0x80+k,0);
236 1 showword(xi,0x90+k,0);
237 1 showword(tong,0xa0+k,0);
238 1
C51 COMPILER V7.50 CAN_SECOND 05/15/2008 21:34:02 PAGE 5
239 1 // Delay(200);
240 1 // LcmClear(0);
241 1 // }
242 1 //}
243 1 }
244
245 void manu_select(void)
246 {
247 1 #define k 0x22
248 1 showword(qing_1, 0x10+k,0);
249 1 showword(shu_1, 0x20+k,0);
250 1 showword(ru_1, 0x30+k,0);
251 1 showword(shi,0x40+k,0);
252 1 showword(yan, 0x50+k,0);
253 1 showword(xu_1,0x60+k,0);
254 1 showword(hao_1, 0x70+k,0);
255 1 showword(mao_1, 0x80+k,0);
256 1 showword(xia_x,0x90+k,0);
257 1 showword(xia_x,0xa0+k,0);
258 1 }
259
260 //*****************中断0服务程序**********************
261 void int0_service() interrupt 0
262 {
263 1 uchar state,yy;
264 1 uchar xdata *int_poin; //SJA1000地址变量指针
265 1 P1_0=1;//开蜂鸣器
266 1 EA=0;//////////////////////////
267 1 int_poin=IR; //IR 0X0003 中断寄存器
268 1 state=*int_poin; //读中断寄存器清除中断位
269 1 if((state&0x08)==0x08) //0000 1000 IR.3=1数据溢出错误中断
270 1 {
271 2 int_poin=CMR; //CMR 0x0001 命令寄存器
272 2 *int_poin=0x0c; //0000 1100 CMR.3,CMR.2=1 功能:清除数据溢出错误和释放接收缓冲区
273 2 }
274 1 else if((state&0x04)==0x04) //0000 0100 IR.2=1 总线出错报警中断
275 1 {
276 2 int_poin=SR; //SR 0X0002 状态寄存器
277 2 state=*int_poin; //读总线错报类型
278 2 if ((state&0x80)==0x80) //1000 0000 SR.7=1 总线关闭错误
279 2 {
280 3 int_poin=MODE;
281 3 *int_poin=0x00; //进入工作模式
282 3 state=0x01;
283 3 while((state&0x01)==0x01) //确保进入工作模式
284 3 {
285 4 state=*int_poin;
286 4 }
287 3 }
288 2 }
289 1 /***********************接收数据中断**********************************/
290 1 else if((state&0x01)==0x01) //0000 0001 IR.0=1接收中断
291 1 {
292 2 int_poin=CANRX; //CANRX 0X0010 报文接受缓冲区首址
293 2 state=*int_poin;
294 2 state=state&0x0f; //截取数据长度,低四位为所接数据长度
295 2 if (state==8) //数据长度为8
296 2 {
297 3 for(state=0;state<4;state++)
298 3 {
299 4 int_poin++;
300 4 ID2[state]=*int_poin; //存放在ID2数组中
C51 COMPILER V7.50 CAN_SECOND 05/15/2008 21:34:02 PAGE 6
301 4 }
302 3 for(state=0;state<8;state++)
303 3 {
304 4 int_poin++;
305 4 buf[state]=*int_poin; //存放在buf数组中
306 4 }
307 3 //---------------------------------------数据处理------------------------------------------------
308 3 /* if(ID2[3]==11||ID2[0]==11) //若为学号
309 3 {
310 3 for(state=0,yy=0;state<6;yy+=2,state++)//只读6个字节的学号
311 3 {
312 3 XBYTE[state+0xdc00+ID2[0]]=buf[state]; //将学号存在以0xdc00+ID[0]为首地址的6个单元中
313 3 PutData2(6+yy,5,buf[state]);
314 3 }
315 3 manu_xinxi();//显示 1# 试验台 操作者 学号及 连接成功
316 3 Delay(2000);
317 3 manu2=1;//回到初始化界面
318 3 }
319 3 if(ID2[3]==22||ID2[0]==22) //若为数据
320 3 {
321 3 for(state=0;state<8;state++)
322 3 XBYTE[state+0xdc00+ID2[0]+add]=buf[state]; //将数据存在以0xdc00+ID[0]+10为首地址的8个单元中
323 3 add+=10;
324 3 flag_data=1; /////接收新数据标志位
325 3 }
326 3
327 3 P1_0=0;//关蜂鸣器*/
328 3
329 3
330 3
331 3 //-------------------------------------数据处理---------------------------------------
332 3 }//if (state==8)
333 2 //若state=0,则为远程帧,暂不作处理
334 2 int_poin=CMR;
335 2 *int_poin=0x04; //释放当前报文空间
336 2 }
337 1 else //发送中断
338 1 {
339 2 Delay(200);
340 2 P1_0=0;//关蜂鸣器 //叫2次表示发送成功
341 2 }
342 1 EA=1;///////////////////////////////
343 1 }
*** WARNING C280 IN LINE 263 OF CAN-SECOND.C: 'yy': unreferenced local variable
344
345
346
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2789 ----
CONSTANT SIZE = 992 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 47
IDATA SIZE = ---- ----
BIT SIZE = 3 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -