📄 232tocan.lst
字号:
C51 COMPILER V8.17 232TOCAN 03/22/2009 15:12:45 PAGE 21
1233 3 }
1234 2 Command[4] = 'H';
1235 2 Command[5] = '\0';
1236 2 Send_stream(Command);
1237 2
1238 2 Send_end();
1239 2
1240 2 Send_stream("Acceptance Mask:");
1241 2 Command[0] = Amr_data / 4096;
1242 2 Command[1] = (Amr_data % 4096) / 256;
1243 2 Command[2] = (Amr_data % 256) / 16;
1244 2 Command[3] = Amr_data % 16;
1245 2
1246 2 for (t_c = 0; t_c < 4; t_c++)
1247 2 {
1248 3 Hex_to_ascii(&Command[t_c]);
1249 3 }
1250 2 Command[4] = 'H';
1251 2 Command[5] = '\0';
1252 2 Send_stream(Command);
1253 2
1254 2 Send_end();
1255 2
1256 2 Recjs = 0;
1257 2
1258 2 //接收命令
1259 2 while (1)
1260 2 {
1261 3 Dog();
1262 3
1263 3 if (_testbit_(RI))
1264 3 {
1265 4 REC_LED = 0;
1266 4 t_c = SBUF;
1267 4
1268 4 if (Recjs < CMD_LENGHT)
1269 4 {
1270 5 Command[Recjs++] = t_c;
1271 5
1272 5 //是否有换行符
1273 5 if (t_c == ASCII_LF && Recjs > 1)
1274 5 {
1275 6 //前面一个字符是否为回车符
1276 6 if (Command[Recjs - 2] == ASCII_ENTER)
1277 6 {
1278 7 if (Perform_cmd() > 0)
1279 7 {
1280 8 //退出调试状态
1281 8 break;
1282 8 }
1283 7 }
1284 6 Recjs = 0;
1285 6 }
1286 5 }
1287 4 else
1288 4 {
1289 5 Recjs = 0;
1290 5 }
1291 4 }
1292 3 }
1293 2 }
1294 1
C51 COMPILER V8.17 232TOCAN 03/22/2009 15:12:45 PAGE 22
1295 1 ES = 1;
1296 1 }
1297 //CAN发送程序
1298 void Can_send_data(void)
1299 {
1300 1 union
1301 1 {
1302 1 uchar t[2];
1303 1 uint cc;
1304 1 }var;
1305 1
1306 1 uchar length;
1307 1 //uchar length1;
1308 1 //uchar length2;
1309 1 uchar t_a;
1310 1 uchar t_b;
1311 1
1312 1 //是否需要启动CAN发送数据
1313 1 if (!Can_send_ready)
1314 1 {
1315 2 return;
1316 2 }
1317 1
1318 1 //当前串口接收字节长度是否在约定范围内
1319 1 if (Com_rxcount < COM_MIN)
1320 1 {
1321 2 //释放串口接收缓冲区
1322 2 Com_rxcount = 0;
1323 2 Can_send_ready = 0;
1324 2 return;
1325 2 }
1326 1
1327 1 //对串口数据进行判断
1328 1 if (Com_rxbuf[0] == COM_HEAD && Com_rxbuf[Com_rxcount - 1] == COM_END)
1329 1 {
1330 2 var.cc = 0;
1331 2 length = Com_rxcount - 3;
1332 2
1333 2 //统计累加和
1334 2 for (t_a = 1; t_a < length; t_a++)
1335 2 {
1336 3 var.cc += Com_rxbuf[t_a];
1337 3 }
1338 2
1339 2 //累加和是否相等
1340 2 if (var.t[0] != Com_rxbuf[t_a] || var.t[1] != Com_rxbuf[t_a + 1])
1341 2 {
1342 3 //释放串口接收缓冲区
1343 3 Com_rxcount = 0;
1344 3 Can_send_ready = 0;
1345 3 return;
1346 3 }
1347 2 }
1348 1 //串口接收数据有误
1349 1 else
1350 1 {
1351 2 //释放串口接收缓冲区
1352 2 Com_rxcount = 0;
1353 2 Can_send_ready = 0;
1354 2 return;
1355 2 }
1356 1
C51 COMPILER V8.17 232TOCAN 03/22/2009 15:12:45 PAGE 23
1357 1 //串口接收缓冲区数据转移到CAN发送缓冲区
1358 1 Can_txcount = Com_rxcount;
1359 1
1360 1 for (t_a = 0; t_a < Can_txcount; t_a++)
1361 1 {
1362 2 Can_txbuf[t_a] = Com_rxbuf[t_a];
1363 2 }
1364 1 //释放串口接收缓冲区
1365 1 Com_rxcount = 0;
1366 1 Can_send_ready = 0;
1367 1
1368 1 //BasicCAN
1369 1 if (Can_mode == 0)
1370 1 {
1371 2 /*
1372 2 //至少两个字节
1373 2 if (Can_txcount > 1)
1374 2 {
1375 2 //是否为远程帧
1376 2 if ((Can_txbuf[1] & 0x10) > 0)
1377 2 {
1378 2 t_b = 0;
1379 2 //无发送
1380 2 while ((BASIC_STATUS_REG & 0x20) > 0)
1381 2 {
1382 2 Somenop();
1383 2 //超时处理
1384 2 if (++t_b == 255)
1385 2 {
1386 2 Can_err = 1;
1387 2 return;
1388 2 }
1389 2 }
1390 2
1391 2 BASIC_TX_ID1 = Can_txbuf[0];
1392 2 BASIC_TX_ID2 = Can_txbuf[1];
1393 2
1394 2 //发送请求
1395 2 BASIC_COMMAND_REG = TR_CMD;
1396 2 //PELI_COMMAND_REG = SRR_CMD;
1397 2
1398 2 t_b = 0;
1399 2 //发送是否完毕
1400 2 while ((BASIC_STATUS_REG & 0x0c) != 0x0c)
1401 2 {
1402 2 Somenop();
1403 2 //超时处理
1404 2 if (++t_b == 255)
1405 2 {
1406 2 Can_err = 1;
1407 2 return;
1408 2 }
1409 2 }
1410 2 SEND_LED = 0;
1411 2 }
1412 2 else
1413 2 {
1414 2 //数据总长度
1415 2 length = Can_txcount - 2;
1416 2 length1 = length / 8;
1417 2 length2 = length % 8;
1418 2 //数据区起始位置
C51 COMPILER V8.17 232TOCAN 03/22/2009 15:12:45 PAGE 24
1419 2 length = 2;
1420 2
1421 2 //8的整倍数
1422 2 if (length1 > 0)
1423 2 {
1424 2 for (t_a = 0; t_a < length1; t_a++)
1425 2 {
1426 2 t_b = 0;
1427 2 //无发送
1428 2 while ((BASIC_STATUS_REG & 0x20) > 0)
1429 2 {
1430 2 Somenop();
1431 2 //超时处理
1432 2 if (++t_b == 255)
1433 2 {
1434 2 Can_err = 1;
1435 2 return;
1436 2 }
1437 2 }
1438 2
1439 2 BASIC_TX_ID1 = Can_txbuf[0];
1440 2 BASIC_TX_ID2 = (Can_txbuf[1] & 0xf0) | 0x08;
1441 2
1442 2 for (t_b = 0; t_b < 8; t_b++)
1443 2 {
1444 2 PBYTE[12 + t_b] = Can_txbuf[length++];
1445 2 }
1446 2
1447 2 //发送请求
1448 2 BASIC_COMMAND_REG = TR_CMD;
1449 2 //PELI_COMMAND_REG = SRR_CMD;
1450 2
1451 2 t_b = 0;
1452 2 //发送是否完毕
1453 2 while ((BASIC_STATUS_REG & 0x0c) != 0x0c)
1454 2 {
1455 2 Somenop();
1456 2 //超时处理
1457 2 if (++t_b == 255)
1458 2 {
1459 2 Can_err = 1;
1460 2 return;
1461 2 }
1462 2 }
1463 2 SEND_LED = 0;
1464 2 }
1465 2 }
1466 2
1467 2 //小于8
1468 2 if (length2 > 0)
1469 2 {
1470 2 t_b = 0;
1471 2 //无发送
1472 2 while ((BASIC_STATUS_REG & 0x20) > 0)
1473 2 {
1474 2 Somenop();
1475 2 //超时处理
1476 2 if (++t_b == 255)
1477 2 {
1478 2 Can_err = 1;
1479 2 return;
1480 2 }
C51 COMPILER V8.17 232TOCAN 03/22/2009 15:12:45 PAGE 25
1481 2 }
1482 2
1483 2 BASIC_TX_ID1 = Can_txbuf[0];
1484 2 BASIC_TX_ID2 = (Can_txbuf[1] & 0xf0) | length2;
1485 2
1486 2 for (t_b = 0; t_b < length2; t_b++)
1487 2 {
1488 2 PBYTE[12 + t_b] = Can_txbuf[length++];
1489 2 }
1490 2
1491 2 //发送请求
1492 2 BASIC_COMMAND_REG = TR_CMD;
1493 2 //PELI_COMMAND_REG = SRR_CMD;
1494 2
1495 2 t_b = 0;
1496 2 //发送是否完毕
1497 2 while ((BASIC_STATUS_REG & 0x0c) != 0x0c)
1498 2 {
1499 2 Somenop();
1500 2 //超时处理
1501 2 if (++t_b == 255)
1502 2 {
1503 2 Can_err = 1;
1504 2 return;
1505 2 }
1506 2 }
1507 2 SEND_LED = 0;
1508 2 }
1509 2 }
1510 2 }
1511 2 */
1512 2 }
1513 1 //PeliCAN
1514 1 else
1515 1 {
1516 2 //标准帧
1517 2 if ((Can_txbuf[1] & 0x80) == 0)
1518 2 {
1519 3 //是否为远程帧
1520 3 if ((Can_txbuf[1] & 0x40) > 0)
1521 3 {
1522 4 t_b = 0;
1523 4 //无接收、发送
1524 4 while ((PELI_STATUS_REG & 0x30) > 0)
1525 4 {
1526 5 Somenop();
1527 5 //超时处理
1528 5 if (++t_b == 255)
1529 5 {
1530 6 Can_err = 1;
1531 6 return;
1532 6 }
1533 5 }
1534 4
1535 4 TX_FRAME_INFO = Can_txbuf[1];
1536 4
1537 4 var.t[0] = Can_txbuf[2];
1538 4 var.t[1] = Can_txbuf[3];
1539 4 var.cc <<= 5;
1540 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -