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

📄 main.lst

📁 学校水POS读卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
1155   2              if (DelayRate < MAXDELAYRATE && CmdCnt > 0)
1156   2              {
1157   3                DelayRate++;
1158   3                DelayRateLocked = FALSE;
1159   3              }
1160   2      #endif
1161   2      
1162   2              RecvState = RECV_STX;
1163   2      
1164   2              if (!SendReady && LLfReady)
1165   2              {
1166   3                if (RepCnt < MAXREPCNT)
1167   3                {
1168   4                      RepCnt++;
1169   4                      CALL_isr_UART();
1170   4                }
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 20  

1171   3                else
1172   3                {
1173   4                      RepCnt = 0;
1174   4                      Quit = FALSE;
1175   4                      SendReady = TRUE;
1176   4                }
1177   3              }
1178   2        }
1179   1      }
1180          
1181          
1182          /****************************************************************************
1183          *                                                                           *
1184          * Function:     isr_UART                                                    *
1185          *                                                                           *
1186          * Input:        -                                                           *
1187          * Output:       -                                                           *
1188          *                                                                           *
1189          * Description:                                                              *
1190          *                                                                           *
1191          * Diese Interrupt-Funktion wird vom UART aufgerufen und bearbeitet das      *
1192          * serielle Protokoll.                                                       *
1193          *                                                                           *
1194          ****************************************************************************/
1195          
1196          void    isr_UART (void) interrupt 4 using 1
1197          {
1198   1         uchar c ;
1199   1        //uchar oldRecvState, chk;
1200   1      
1201   1        if (RI)
1202   1        {
1203   2          c = SBUF ;
1204   2      
1205   2          LED = !LED;
1206   2      
1207   2          RI = 0 ;
1208   2         
1209   2          if (FrameEnd==1)
1210   2          {
1211   3           
1212   3            if( !(ChkSum ^=c) )
1213   3            {
1214   4             FrameOk = 1;
1215   4             
1216   4            }
1217   3      
1218   3            else
1219   3            FrameOk = 0 ;
1220   3      
1221   3            FrameEnd = 0 ;
1222   3          }
1223   2      
1224   2          if (FrameHead&(c !=ETX)&!FrameEnd)
1225   2          {
1226   3              PcData[DataNum++] = c  ;
1227   3              ChkSum ^= c;
1228   3              DataLen++;
1229   3              ChkSum1 = ChkSum;
1230   3              if(DataLen == 42)
1231   3              {
1232   4                FrameEnd = 0;
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 21  

1233   4                FrameHead = 0;
1234   4                ChkSum = 0;
1235   4                DataLen = 0;  
1236   4              }
1237   3      
1238   3          }
1239   2      
1240   2          if( c == STX )
1241   2          {
1242   3      
1243   3               Pt = PcData;
1244   3               if(ChkSum1 != STX)  DataLen =0 ;
1245   3               FrameHead = 1;
1246   3               FrameEnd = 0;
1247   3               DataNum = 0;
1248   3               ChkSum = 0;
1249   3          }
1250   2      
1251   2          if( c == ETX )
1252   2          {
1253   3            /*  if(ChkSum1 != ETX )
1254   3              {
1255   3               FrameEnd = 1;
1256   3               FrameHead = 0;
1257   3              } 
1258   3            */
1259   3            FrameEnd = 1;
1260   3            FrameHead = 0;
1261   3            
1262   3          }
1263   2      
1264   2      
1265   2        }
1266   1      
1267   1      
1268   1      }
1269          
1270          /***************************************************************************/
1271          
1272          unsigned char  AsiToHex(unsigned char ch1,unsigned char ch2)
1273          {
1274   1             unsigned char i,j,num1,num2,HexNum;
1275   1             i = ch1; j = ch2;
1276   1             if ((i>=0x30)&&(i<=0x39))
1277   1             {
1278   2               i-=0x30 ;
1279   2               num1 = i<<4 ;
1280   2             }
1281   1             else
1282   1             {
1283   2              i-= 0x41;
1284   2              num1 = i ;
1285   2               switch (num1)
1286   2                 {
1287   3                  case  0 : num1 = 0xa0; break;
1288   3                  case  1 : num1 = 0xb0; break;
1289   3                  case  2 : num1 = 0xc0; break;
1290   3                  case  3 : num1 = 0xd0; break;
1291   3                  case  4 : num1 = 0xe0; break;
1292   3                  case  5 : num1 = 0xf0; break;
1293   3                 }
1294   2      
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 22  

1295   2            }
1296   1      
1297   1      
1298   1      
1299   1             if((j>=0x30)&&(j<=0x39))
1300   1              {
1301   2               j-= 0x30;
1302   2               num2 = j ;
1303   2              }
1304   1      
1305   1             else
1306   1             {
1307   2               j-= 0x41;
1308   2               num2 = j ;
1309   2              switch (num2)
1310   2              {
1311   3                  case  0 : num2 = 0x0a; break;
1312   3                  case  1 : num2 = 0x0b; break;
1313   3                  case  2 : num2 = 0x0c; break;
1314   3                  case  3 : num2 = 0x0d; break;
1315   3                  case  4 : num2 = 0x0e; break;
1316   3                  case  5 : num2 = 0x0f; break;
1317   3              }
1318   2      
1319   2             }
1320   1      
1321   1      
1322   1      
1323   1             HexNum = num1+num2;
1324   1      
1325   1             return HexNum ;
1326   1      
1327   1      }
1328          
1329          
1330          void TransAsiHex(unsigned char *PtData1,unsigned char *PtData2,unsigned char cnt)
1331          {
1332   1          unsigned char *Pt0,*Pt1;
1333   1          unsigned char i,cnt0,ch1,ch2;
1334   1      
1335   1          Pt0 = PtData1;
1336   1          Pt1 = PtData2;
1337   1          cnt0 = cnt/2;
1338   1          for(i=0;i<cnt0;i++)
1339   1          {
1340   2             ch1 = *Pt0++;
1341   2             ch2 = *Pt0++;
1342   2             *Pt1 = AsiToHex(ch1,ch2);
1343   2              Pt1++;
1344   2          }
1345   1      }
1346          
1347          
1348          void TransHexAsi(unsigned char  *PtData1,unsigned char  *PtData2,unsigned char cnt)
1349          {
1350   1          unsigned char  *Pt0,*Pt1;
1351   1          unsigned char i,cnt0,ch1;
1352   1      
1353   1          Pt0 = PtData1;
1354   1          Pt1 = PtData2;
1355   1          cnt0 = cnt;
1356   1          for(i=0;i<cnt0;i++)
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 23  

1357   1          {
1358   2             ch1 = *Pt0;
1359   2             HexToAsi(ch1,Pt1);
1360   2             Pt0++;
1361   2             Pt1++; Pt1++;
1362   2      
1363   2          }
1364   1      }
1365          
1366           void HexToAsi(unsigned char ch,unsigned char *Ptm)
1367           {
1368   1         unsigned char i,j;
1369   1         unsigned char *Pt0;
1370   1         Pt0 = Ptm;
1371   1         i = ch;
1372   1         i = (i&0xf0)>>4;
1373   1         if(i<=9)
1374   1            i+=0x30;
1375   1         else
1376   1            {
1377   2                switch(i)
1378   2                {
1379   3                   case 0x0a: i = 0x41; break;
1380   3                   case 0x0b: i = 0x42; break;
1381   3                   case 0x0c: i = 0x43; break;
1382   3                   case 0x0d: i = 0x44; break;
1383   3                   case 0x0e: i = 0x45; break;
1384   3                   case 0x0f: i = 0x46; break;
1385   3                }
1386   2            }
1387   1      
1388   1           *Pt0 = i;
1389   1           j = ch;
1390   1           j = ch&0x0f;
1391   1           if(j<=9)
1392   1              j += 0x30;
1393   1           else
1394   1      
1395   1           {
1396   2      
1397   2      
1398   2              switch(j)
1399   2              {
1400   3                   case 0x0a: j = 0x41; break;
1401   3                   case 0x0b: j = 0x42; break;
1402   3                   case 0x0c: j = 0x43; break;
1403   3                   case 0x0d: j = 0x44; break;
1404   3                   case 0x0e: j = 0x45; break;
1405   3                   case 0x0f: j = 0x46; break;
1406   3               }
1407   2           }
1408   1      
1409   1           Pt0++;
1410   1           *Pt0 = j;
1411   1      
1412   1       }
1413          
1414           void SendDataToPc(uchar *Ptm,uchar cnt)
1415           {
1416   1          unsigned char i;
1417   1          unsigned char  checksum = 0;
1418   1      
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 24  

1419   1          SBUF = STX ;
1420   1          while(!TI);
1421   1          TI = 0;
1422   1          for(i=0; i<cnt ; i++)
1423   1          {
1424   2            SBUF = *Ptm ;
1425   2            while(!TI);
1426   2            TI = 0;
1427   2            checksum ^= *Ptm;
1428   2            ++Ptm;
1429   2      
1430   2          }
1431   1      
1432   1          SBUF = ETX ;
1433   1          while(!TI);
1434   1          TI = 0;
1435   1      
1436   1          SBUF = checksum ;
1437   1          while(!TI);
1438   1          TI = 0;
1439   1      
1440   1       }
1441          
1442          
1443          // 将 PtData1:PC ASCII 码 命令帧转换为 HEX 数据 并

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -