📄 main.lst
字号:
1239 1 BEEP = 1;
1240 1 }
1241
1242
1243 #pragma aregs
1244
1245
1246 /****************************************************************************
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 20
1247 * *
1248 * Function: xtoa_h *
1249 * *
1250 * Input: _byte *
1251 * Output: ASCII High-Nibble *
1252 * *
1253 * Description: *
1254 * *
1255 * Wandelt das High-Nibble des 乥ergebenen Bytes in ein ASCII-Zeichen um. *
1256 * *
1257 ****************************************************************************/
1258
1259 uchar xtoa_h (uchar _byte)
1260 {
1261 1 uchar nibble = _byte >> 4;
1262 1
1263 1 return ((nibble > 9)? nibble + 'A' - 10 : nibble + '0');
1264 1 }
1265
1266
1267 /****************************************************************************
1268 * *
1269 * Function: xtoa_l *
1270 * *
1271 * Input: _byte *
1272 * Output: ASCII Low-Nibble *
1273 * *
1274 * Description: *
1275 * *
1276 * Wandelt das Low-Nibble des 乥ergebenen Bytes in ein ASCII-Zeichen um. *
1277 * *
1278 ****************************************************************************/
1279
1280 uchar xtoa_l (uchar _byte)
1281 {
1282 1 uchar nibble = _byte & 0x0F;
1283 1
1284 1 return ((nibble > 9)? nibble + 'A' - 10 : nibble + '0');
1285 1 }
1286
1287
1288 /****************************************************************************
1289 * *
1290 * Function: isr_timer0 *
1291 * *
1292 * Input: - *
1293 * Output: - *
1294 * *
1295 * Description: *
1296 * *
1297 * *
1298 ****************************************************************************/
1299
1300 void isr_timer0 (void) interrupt 1 using 2
1301 {
1302 1 if (Timer0Cnt)
1303 1 {
1304 2 --Timer0Cnt;
1305 2 }
1306 1 else
1307 1 {
1308 2 STOP_T0();
1309 2
1310 2 #ifdef AUTODELAY
1311 2 if (DelayRate < MAXDELAYRATE && CmdCnt > 0)
1312 2 {
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 21
1313 3 DelayRate++;
1314 3 DelayRateLocked = FALSE;
1315 3 }
1316 2 #endif
1317 2
1318 2 RecvState = RECV_STX;
1319 2
1320 2 if (!SendReady && LLfReady)
1321 2 {
1322 3 if (RepCnt < MAXREPCNT)
1323 3 {
1324 4 RepCnt++;
1325 4 CALL_isr_UART();
1326 4 }
1327 3 else
1328 3 {
1329 4 RepCnt = 0;
1330 4 Quit = FALSE;
1331 4 SendReady = TRUE;
1332 4 }
1333 3 }
1334 2 }
1335 1 }
1336
1337
1338 /****************************************************************************
1339 * *
1340 * Function: isr_UART *
1341 * *
1342 * Input: - *
1343 * Output: - *
1344 * *
1345 * Description: *
1346 * *
1347 * Diese Interrupt-Funktion wird vom UART aufgerufen und bearbeitet das *
1348 * serielle Protokoll. *
1349 * *
1350 ****************************************************************************/
1351
1352 void isr_UART (void) interrupt 4 using 1
1353 {
1354 1 uchar c ;
1355 1 //uchar oldRecvState, chk;
1356 1
1357 1 if (RI)
1358 1 {
1359 2 c = SBUF ;
1360 2
1361 2 RI = 0 ;
1362 2
1363 2 if (FrameEnd==1)
1364 2 {
1365 3 if( !(ChkSum ^=c) )
1366 3 {
1367 4 FrameOk = 1;
1368 4 LED = ON;
1369 4 }
1370 3
1371 3 else
1372 3 FrameOk = 0 ;
1373 3
1374 3 FrameEnd = 0 ;
1375 3 }
1376 2
1377 2 if (FrameHead&(c !=ETX)&!FrameEnd)
1378 2 {
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 22
1379 3 PcData[DataNum++] = c ;
1380 3 ChkSum ^= c;
1381 3 DataLen++;
1382 3
1383 3 }
1384 2
1385 2 if( c == STX )
1386 2 {
1387 3
1388 3 Pt = PcData;
1389 3 DataLen =0 ;
1390 3 FrameHead = 1;
1391 3 FrameEnd = 0;
1392 3 DataNum = 0;
1393 3 ChkSum = 0;
1394 3 }
1395 2
1396 2 if( c == ETX )
1397 2 {
1398 3 FrameEnd = 1;
1399 3 FrameHead = 0;
1400 3 }
1401 2
1402 2
1403 2 }
1404 1
1405 1
1406 1 }
1407
1408 /***************************************************************************/
1409
1410 unsigned char AsiToHex(unsigned char ch1,unsigned char ch2)
1411 {
1412 1 unsigned char i,j,num1,num2,HexNum;
1413 1 i = ch1; j = ch2;
1414 1 if ((i>=0x30)&&(i<=0x39))
1415 1 {
1416 2 i-=0x30 ;
1417 2 num1 = i<<4 ;
1418 2 }
1419 1 else
1420 1 {
1421 2 i-= 0x41;
1422 2 num1 = i ;
1423 2 switch (num1)
1424 2 {
1425 3 case 0 : num1 = 0xa0; break;
1426 3 case 1 : num1 = 0xb0; break;
1427 3 case 2 : num1 = 0xc0; break;
1428 3 case 3 : num1 = 0xd0; break;
1429 3 case 4 : num1 = 0xe0; break;
1430 3 case 5 : num1 = 0xf0; break;
1431 3 }
1432 2
1433 2 }
1434 1
1435 1
1436 1
1437 1 if((j>=0x30)&&(j<=0x39))
1438 1 {
1439 2 j-= 0x30;
1440 2 num2 = j ;
1441 2 }
1442 1
1443 1 else
1444 1 {
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 23
1445 2 j-= 0x41;
1446 2 num2 = j ;
1447 2 switch (num2)
1448 2 {
1449 3 case 0 : num2 = 0x0a; break;
1450 3 case 1 : num2 = 0x0b; break;
1451 3 case 2 : num2 = 0x0c; break;
1452 3 case 3 : num2 = 0x0d; break;
1453 3 case 4 : num2 = 0x0e; break;
1454 3 case 5 : num2 = 0x0f; break;
1455 3 }
1456 2
1457 2 }
1458 1
1459 1
1460 1
1461 1 HexNum = num1+num2;
1462 1
1463 1 return HexNum ;
1464 1
1465 1 }
1466
1467
1468 void TransAsiHex(unsigned char *PtData1,unsigned char *PtData2,unsigned char cnt)
1469 {
1470 1 unsigned char *Pt0,*Pt1;
1471 1 unsigned char i,cnt0,ch1,ch2;
1472 1
1473 1 Pt0 = PtData1;
1474 1 Pt1 = PtData2;
1475 1 cnt0 = cnt/2;
1476 1 for(i=0;i<cnt0;i++)
1477 1 {
1478 2 ch1 = *Pt0++;
1479 2 ch2 = *Pt0++;
1480 2 *Pt1 = AsiToHex(ch1,ch2);
1481 2 Pt1++;
1482 2 }
1483 1 }
1484
1485
1486 void TransHexAsi(unsigned char *PtData1,unsigned char *PtData2,unsigned char cnt)
1487 {
1488 1 unsigned char *Pt0,*Pt1;
1489 1 unsigned char i,cnt0,ch1;
1490 1
1491 1 Pt0 = PtData1;
1492 1 Pt1 = PtData2;
1493 1 cnt0 = cnt;
1494 1 for(i=0;i<cnt0;i++)
1495 1 {
1496 2 ch1 = *Pt0;
1497 2 HexToAsi(ch1,Pt1);
1498 2 Pt0++;
1499 2 Pt1++; Pt1++;
1500 2
1501 2 }
1502 1 }
1503
1504 void HexToAsi(unsigned char ch,unsigned char *Ptm)
1505 {
1506 1 unsigned char i,j;
1507 1 unsigned char *Pt0;
1508 1 Pt0 = Ptm;
1509 1 i = ch;
1510 1 i = (i&0xf0)>>4;
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 24
1511 1 if(i<=9)
1512 1 i+=0x30;
1513 1 else
1514 1 {
1515 2 switch(i)
1516 2 {
1517 3 case 0x0a: i = 0x41; break;
1518 3 case 0x0b: i = 0x42; break;
1519 3 case 0x0c: i = 0x43; break;
1520 3 case 0x0d: i = 0x44; break;
1521 3 case 0x0e: i = 0x45; break;
1522 3 case 0x0f: i = 0x46; break;
1523 3 }
1524 2 }
1525 1
1526 1 *Pt0 = i;
1527 1 j = ch;
1528 1 j = ch&0x0f;
1529 1 if(j<=9)
1530 1 j += 0x30;
1531 1 else
1532 1
1533 1 {
1534 2
1535 2
1536 2 switch(j)
1537 2 {
1538 3 case 0x0a: j = 0x41; break;
1539 3 case 0x0b: j = 0x42; break;
1540 3 case 0x0c: j = 0x43; break;
1541 3 case 0x0d: j = 0x44; break;
1542 3 case 0x0e: j = 0x45; break;
1543 3 case 0x0f: j = 0x46; break;
1544 3 }
1545 2 }
1546 1
1547
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -