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

📄 main.lst

📁 学校水POS读卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
1147          * Output:       ASCII Low-Nibble                                            *
1148          *                                                                           *
1149          * Description:                                                              *
1150          *                                                                           *
1151          * Wandelt das Low-Nibble des 乥ergebenen Bytes in ein ASCII-Zeichen um.     *
1152          *                                                                           *
1153          ****************************************************************************/
1154          
1155          uchar   xtoa_l (uchar _byte)
1156          {
1157   1        uchar nibble = _byte & 0x0F;
1158   1      
1159   1        return ((nibble > 9)? nibble + 'A' - 10 : nibble + '0');
1160   1      }
1161          
1162          
1163          /****************************************************************************
1164          *                                                                           *
1165          * Function:     isr_timer0                                                  *
1166          *                                                                           *
1167          * Input:        -                                                           *
1168          * Output:       -                                                           *
1169          *                                                                           *
1170          * Description:                                                              *
C51 COMPILER V6.23a  MAIN                                                                  09/14/2004 14:19:20 PAGE 20  

1171          *                                                                           *
1172          *                                                                           *
1173          ****************************************************************************/
1174          
1175          void    isr_timer0 (void) interrupt 1 using 2
1176          {
1177   1        if (Timer0Cnt)
1178   1        {
1179   2              --Timer0Cnt;
1180   2        }
1181   1        else
1182   1        {
1183   2              STOP_T0();
1184   2      
1185   2      #ifdef AUTODELAY
1186   2              if (DelayRate < MAXDELAYRATE && CmdCnt > 0)
1187   2              {
1188   3                DelayRate++;
1189   3                DelayRateLocked = FALSE;
1190   3              }
1191   2      #endif
1192   2      
1193   2              RecvState = RECV_STX;
1194   2      
1195   2              if (!SendReady && LLfReady)
1196   2              {
1197   3                if (RepCnt < MAXREPCNT)
1198   3                {
1199   4                      RepCnt++;
1200   4                      CALL_isr_UART();
1201   4                }
1202   3                else
1203   3                {
1204   4                      RepCnt = 0;
1205   4                      Quit = FALSE;
1206   4                      SendReady = TRUE;
1207   4                }
1208   3              }
1209   2        }
1210   1      }
1211          
1212          
1213          /****************************************************************************
1214          *                                                                           *
1215          * Function:     isr_UART                                                    *
1216          *                                                                           *
1217          * Input:        -                                                           *
1218          * Output:       -                                                           *
1219          *                                                                           *
1220          * Description:                                                              *
1221          *                                                                           *
1222          * Diese Interrupt-Funktion wird vom UART aufgerufen und bearbeitet das      *
1223          * serielle Protokoll.                                                       *
1224          *                                                                           *
1225          ****************************************************************************/
1226          
1227          void    isr_UART (void) interrupt 4 using 1
1228          {
1229   1         uchar c ;
1230   1        //uchar oldRecvState, chk;
1231   1      
1232   1        if (RI)
C51 COMPILER V6.23a  MAIN                                                                  09/14/2004 14:19:20 PAGE 21  

1233   1        {
1234   2          c = SBUF ;
1235   2      
1236   2          RI = 0 ;
1237   2      
1238   2          if (FrameEnd==1)
1239   2          {
1240   3            if( !(ChkSum ^=c) )
1241   3            {
1242   4             FrameOk = 1;
1243   4             LED =  ON;
1244   4            }
1245   3      
1246   3            else
1247   3            FrameOk = 0 ;
1248   3      
1249   3            FrameEnd = 0 ;
1250   3          }
1251   2      
1252   2          if (FrameHead&(c !=ETX)&!FrameEnd)
1253   2          {
1254   3              PcData[DataNum++] = c  ;
1255   3              ChkSum ^= c;
1256   3              DataLen++;
1257   3      
1258   3          }
1259   2      
1260   2          if( c == STX )
1261   2          {
1262   3      
1263   3               Pt = PcData;
1264   3               DataLen =0 ;
1265   3               FrameHead = 1;
1266   3               FrameEnd = 0;
1267   3               DataNum = 0;
1268   3               ChkSum = 0;
1269   3          }
1270   2      
1271   2          if( c == ETX )
1272   2          {
1273   3            FrameEnd = 1;
1274   3            FrameHead = 0;
1275   3          }
1276   2      
1277   2      
1278   2        }
1279   1      
1280   1      
1281   1      }
1282          
1283          /***************************************************************************/
1284          
1285          unsigned char  AsiToHex(unsigned char ch1,unsigned char ch2)
1286          {
1287   1             unsigned char i,j,num1,num2,HexNum;
1288   1             i = ch1; j = ch2;
1289   1             if ((i>=0x30)&&(i<=0x39))
1290   1             {
1291   2               i-=0x30 ;
1292   2               num1 = i<<4 ;
1293   2             }
1294   1             else
C51 COMPILER V6.23a  MAIN                                                                  09/14/2004 14:19:20 PAGE 22  

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

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

1419   3               }
1420   2           }
1421   1      
1422   1           Pt0++;
1423   1           *Pt0 = j;
1424   1      
1425   1       }
1426          
1427           void SendDataToPc(uchar *Ptm,uchar cnt)
1428           {
1429   1          unsigned char i;
1430   1          unsigned char  checksum = 0;
1431   1      
1432   1          SBUF = S

⌨️ 快捷键说明

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