📄 main.lst
字号:
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 + -