📄 main.lst
字号:
212 1 BUSTIME0 = 0x01; // 设置通信波特率为250kbps 由计算软件算出
213 1 BUSTIME1 = 0x1c;
214 1 OUTCTL = 0x1a; // 输出为正常模式
215 1 do
216 1 { // 返回正常运行模式
217 2 MODECTLREG = 0x00;
218 2 }
219 1 while(MODECTLREG & 0x01); // 测试是否返回了正常模式
220 1 InterruptIER= 0X01; //开接收中断
221 1 EnalbeInterrupt();
222 1 }
223
224 /*
225 *********************************************************************************************************
226 *
227 * 函数名称:SjaInterrupt
228 *
229 * 输入变量:无
230 *
231 * 输出变量:无
232 *
233 * 功能描述:CAN中断函数(使用外部中断1,中断号为 2,使用寄存器 1)
234 *
235 *********************************************************************************************************
236 */
237 void SjaInterrupt(void) interrupt 0 using 0
238 {
239 1 DisableInterrupt();
240 1 if(TF1)
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 5
241 1 {
242 2 TF1 = 0;
243 2 if (!bSjaReceived) {
244 3 //接收帧信息
245 3 Candata_R[BagCount_R_CAN][0] = BUFFER0;
246 3 //接收ID
247 3 Candata_R[BagCount_R_CAN][1] = BUFFER1;
248 3 Candata_R[BagCount_R_CAN][2] = BUFFER2;
249 3 Candata_R[BagCount_R_CAN][3] = BUFFER3;
250 3 Candata_R[BagCount_R_CAN][4] = BUFFER4;
251 3 //接收数据
252 3 Candata_R[BagCount_R_CAN][5] = BUFFER5;
253 3 Candata_R[BagCount_R_CAN][6] = BUFFER6;
254 3 Candata_R[BagCount_R_CAN][7] = BUFFER7;
255 3 Candata_R[BagCount_R_CAN][8] = BUFFER8;
256 3 Candata_R[BagCount_R_CAN][9] = BUFFER9;
257 3 Candata_R[BagCount_R_CAN][10] = BUFFER10;
258 3 Candata_R[BagCount_R_CAN][11] = BUFFER11;
259 3 Candata_R[BagCount_R_CAN][12] = BUFFER12;
260 3 // 设置数据有效
261 3 bSjaReceived = TRUE;
262 3 RCount_CAN++;
263 3 BagCount_R_CAN++; //CAN数据包计数加1
264 3 if(BagCount_R_CAN>BadLenght_can) //CAN数据包计数已到了最大值
265 3 BagCount_R_CAN=0;
266 3 }
267 2 ucCircle++;
268 2 SjaInit();
269 2
270 2 }
271 1 EnalbeInterrupt();
272 1 }
273 /*
274 *********************************************************************************************************
275 *
276 * 函数名称:SjaSend
277 *
278 * 输入变量:要发送的数据地址首址、数据长度、数据ID号
279 *
280 * 输出变量:无
281 *
282 * 功能描述:发送CAN数据
283 *
284 *********************************************************************************************************
285 */
286 void SjaSend(unsigned char *p)
287 {
288 1
289 1 BUFFER0 = (*p|0x80); //设置发送数据长度及帧格式
290 1
291 1 BUFFER1 = (*(p+1)<<3|*(p+2)>>5); //设置ID
292 1 BUFFER2 = (*(p+2)<<3|*(p+3)>>5);
293 1 BUFFER3 = (*(p+3)<<3|*(p+4)>>5);
294 1 BUFFER4 = *(p+4)<<3;
295 1
296 1 BUFFER5 = *(p+5); //设置数据
297 1 BUFFER6 = *(p+6);
298 1 BUFFER7 = *(p+7);
299 1 BUFFER8 = *(p+8);
300 1 BUFFER9 = *(p+9);
301 1 BUFFER10 = *(p+10);
302 1 BUFFER11 = *(p+11);
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 6
303 1 BUFFER12 = *(p+12);
304 1
305 1 COMMANDREG = 0x01; //请求发送
306 1 COMMANDREG = 0x0E; //发送信息错误,仲裁丢失不会重发,内部发送请求自动清除
307 1 }
308
309 /*
310 *********************************************************************************************************
311 *
312 * 函数名称:SerialInterrupt
313 *
314 * 输入变量:无
315 *
316 * 输出变量:无
317 *
318 * 功能描述:串口中断函数(中断号为 4,使用寄存器 1)
319 *
320 *********************************************************************************************************
321 */
322 void SerialInterrupt(void) interrupt 4 using 2
323 {
324 1 DisableInterrupt();
325 1 if (TI)
326 1 {
327 2 TI = 0;
328 2 int_232=1; //232成功发送一字节,置232发送完成标志
329 2 }
330 1 //////////////////////////////////////////////////////////////////////////////////////////////////////////
331 1 if (RI)
332 1 {
333 2 RI = 0;
334 2 rx_232=1; //232成功接收一字节,置232接收完成标志
335 2 }
336 1 EnalbeInterrupt();
337 1 }
338
339
340 /*********************************************************************************************************
341 *
342 * 函数名称:Seria2Interrupt
343 *
344 * 输入变量:无
345 *
346 * 输出变量:无
347 *
348 * 功能描述:串口中断1函数(中断号为 8,使用寄存器 1)
349 *
350 *********************************************************************************************************
351 */
352 void Seria2Interrupt(void) interrupt 15 using 2
353 {
354 1
355 1 DisableInterrupt();
356 1 if (TI_1)
357 1 {
358 2 TI_1 = 0;
359 2 int_485=1;//485成功发送一字节,置232发送完成标志
360 2
361 2 }
362 1 //////////////////////////////////////////////////////////////////////////////////////////////////////////
363 1 if (RI_1)
364 1 {
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 7
365 2 RI_1 = 0;
366 2 rx_485=1;//485成功接收一字节,置232接收完成标志
367 2 }
368 1 EnalbeInterrupt();
369 1 }
370
371
372 /*
373 *********************************************************************************************************
374 *
375 * 函数名称:Sendto485
376 *
377 * 输入变量:要发送的数据
378 *
379 * 输出变量:无
380 *
381 * 功能描述:把接收到的数据发送到485
382 *
383 *********************************************************************************************************
384 */
385
386 void Sendto485(unsigned char *data485)
387 {
388 1
389 1 send_485 = data485;//存将要发送数据的首地址
390 1 length_485 = 12; //设置发送数据长度
391 1 SBUF1 = *send_485; //发送数据到485
392 1
393 1 }
394
395 /*
396 *********************************************************************************************************
397 *
398 * 函数名称:Sendto232
399 *
400 * 输入变量:要发送的数据
401 *
402 * 输出变量:无
403 *
404 * 功能描述:把接收到的数据发送到232
405 *
406 *********************************************************************************************************
407 */
408
409 void Sendto232(unsigned char *data232)
410 {
411 1 send_232=data232;//存将要发送数据的首地址
412 1 length_232=12;//设置发送数据长度
413 1 SBUF=*send_232;//发送数据到232
414 1
415 1 }
416
417 /*
418 *********************************************************************************************************
419 *
420 * 函数名称:Changetoadr
421 *
422 * 输入变量:无
423 *
424 * 输出变量:无
425 *
426 * 功能描述:把CAN接收到的ID转换成232,485的地址
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 8
427 *
428 *********************************************************************************************************
429 */
430
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -