⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 射频卡读卡头的程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -