📄 zhu19200.lst
字号:
1204 1 #ifdef TestDO
controlFlag=1;
DotType = 0x83;
DotModule = 0;
DotChunnel = 0;
Dotparam = 0;
#endif
1211 1 _nop_();
1212 1 }
1213
1214 void BaoCunZhengCh() //保存曲线历史记录
1215 {
1216 1 uint data kk,kk0; //曲线历史记录保存768条记录,0x40000-0xFFFFF;
1217 1 uchar data RamRam;
1218 1 uchar xdata temp_a[MaxSend],YYMMDD[6];
1219 1 //组织正常历史记录
1220 1 temp_a[0] = 0x7E; //起始符
1221 1 temp_a[1] = VERh; //版本号
1222 1 temp_a[2] = VERl; //版本号
1223 1 temp_a[3] = 0x30; //扩展地址(随意)
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 21
1224 1 temp_a[4] = 0x30;
1225 1 temp_a[7] = 0x34; //命令类型
1226 1 temp_a[8] = 0x38;
1227 1 temp_a[9] = 0x30; //返回状态
1228 1 temp_a[10]= 0x30;
1229 1 hex2asc0( temp_a + 5, Read_ID() ); //采集箱地址
1230 1 hex2asc1( temp_a + 11, AIDIsum+12); //数据块长度
1231 1 clock_read(YYMMDD); //读取日期时间
1232 1 hex2asc0( temp_a + 15, YYMMDD[0]); //年//日期时间
1233 1 hex2asc0( temp_a + 17, YYMMDD[1]); //月
1234 1 hex2asc0( temp_a + 19, YYMMDD[2]); //日
1235 1 hex2asc0( temp_a + 21, YYMMDD[3]); //时
1236 1 hex2asc0( temp_a + 23, YYMMDD[4]); //分
1237 1 hex2asc0( temp_a + 25, YYMMDD[5]); //秒
1238 1 memcpy(temp_a+27,RealTimeData,AIDIsum); //实时数据
1239 1 kk=CrcCheck(temp_a+1,26+AIDIsum); //计算CRC
1240 1 hex2asc1(temp_a+27+AIDIsum,kk); //CRC校验
1241 1 temp_a[31+AIDIsum] = '\r'; //结束符
1242 1 temp_a[32+AIDIsum] = '\n'; //停止发送符
1243 1 //保存正常历史记录
1244 1 AddLed=ZhengChZhi/64+4+(AddLed&0xF0);//确定扇区//选通扇区
1245 1 ledled = AddLed; //选通扇区
1246 1 kk0 = ZhengChZhi%64*0x400; //第几条,哪k
1247 1 if(ZhengChZhi%64<8)
1248 1 {
1249 2 for(kk=0;kk<33+AIDIsum;kk++) //628128存到628512RAM
1250 2 {
1251 3 RamRom_Convert= 1;//选通628128RAM
1252 3 RamIO_Convert = 1;
1253 3 RamRam = temp_a[kk];
1254 3 RamRom_Convert= 0;
1255 3 RamIO_Convert = 0;//选通628512RAM
1256 3 XBYTE[kk0+kk]=RamRam;
1257 3 }
1258 2 }
1259 1 else
1260 1 {
1261 2 RamRom_Convert= 1;
1262 2 RamIO_Convert = 0;//选通628512RAM
1263 2 for(kk=0;kk<33+AIDIsum;kk++) //628128存到628512RAM
1264 2 {
1265 3 XBYTE[kk0+kk]=temp_a[kk];
1266 3 }
1267 2 }
1268 1 RamRom_Convert= 1;//选通628128RAM
1269 1 RamIO_Convert = 1;
1270 1 if(ZhengChZhi<ZhengChRongL-1) //调整正常历史记录第n条;
1271 1 {
1272 2 ZhengChZhi++;
1273 2 }
1274 1 else if(ZhengChZhi==ZhengChRongL-1) //调整正常历史记录第n条加1;
1275 1 { //方便读取
1276 2 ZhengChZhi=0;
1277 2 }
1278 1 else //地址乱了
1279 1 {
1280 2 ZhengChZhi=0;
1281 2 ZhengChTiao=0;
1282 2 }
1283 1 if(ZhengChTiao<ZhengChRongL) //调整保存的断开历史记录条数
1284 1 {
1285 2 ZhengChTiao++;
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 22
1286 2 }
1287 1 else if(ZhengChTiao==ZhengChRongL) //保存的断开历史记录条数
1288 1 {
1289 2 ;
1290 2 }
1291 1 else //指针出错
1292 1 {
1293 2 ZhengChZhi=0;
1294 2 ZhengChTiao=0;
1295 2 }
1296 1 }
1297
1298 void BaoCunDuanKai() //保存断开历史记录
1299 {
1300 1 uint data kk,kk0; //断开历史记录保存256条记录,0x00000-0x3FFFF;
1301 1 uchar data RamRam;
1302 1 uchar xdata temp_a[MaxSend],YYMMDD[6];
1303 1 JiaoTiFlag = 0; //断开后先发送实时记录
1304 1 //组织断开历史记录
1305 1 temp_a[0] = 0x7E; //起始符
1306 1 temp_a[1] = VERh; //版本号
1307 1 temp_a[2] = VERl; //版本号
1308 1 temp_a[3] = 0x30; //扩展地址(随意)
1309 1 temp_a[4] = 0x30;
1310 1 temp_a[7] = 0x34; //命令类型
1311 1 temp_a[8] = 0x32;
1312 1 temp_a[9] = 0x30; //返回状态
1313 1 temp_a[10]= 0x30;
1314 1 hex2asc0( temp_a + 5, Read_ID() ); //采集箱地址
1315 1 hex2asc1( temp_a + 11, AIDIsum+12); //数据块长度
1316 1 clock_read(YYMMDD); //读取日期时间
1317 1 hex2asc0( temp_a + 15, YYMMDD[0]); //年//日期时间
1318 1 hex2asc0( temp_a + 17, YYMMDD[1]); //月
1319 1 hex2asc0( temp_a + 19, YYMMDD[2]); //日
1320 1 hex2asc0( temp_a + 21, YYMMDD[3]); //时
1321 1 hex2asc0( temp_a + 23, YYMMDD[4]); //分
1322 1 hex2asc0( temp_a + 25, YYMMDD[5]); //秒
1323 1 memcpy(temp_a+27,RealTimeData,AIDIsum); //实时数据
1324 1 kk0=CrcCheck(temp_a+1,26+AIDIsum); //计算CRC
1325 1 hex2asc1( temp_a+27+AIDIsum,kk0); //CRC校验
1326 1 temp_a[31+AIDIsum] = '\r'; //结束符
1327 1 temp_a[32+AIDIsum] = '\n'; //停止发送符
1328 1 //保存断开历史记录
1329 1 if(DuanKaiZhi==DuanKaiRongL-1) //调整断开历史记录第n条;
1330 1 { //方便读取
1331 2 DuanKaiZhi=0;
1332 2 }
1333 1 else if(DuanKaiZhi<DuanKaiRongL-1) //断开历史记录第n条加1;
1334 1 { //方便读取
1335 2 DuanKaiZhi++;
1336 2 }
1337 1 else //地址乱了
1338 1 {
1339 2 DuanKaiZhi=0;
1340 2 DuanKaiTiao=0;
1341 2 }
1342 1 AddLed = (AddLed&0xF0)+DuanKaiZhi/64; //存放到什么扇区?//选通扇区
1343 1 ledled = AddLed; //选通扇区
1344 1 kk0 = DuanKaiZhi%64*0x400; //第几条,哪k
1345 1 if(DuanKaiZhi%64<8)
1346 1 {
1347 2 for(kk=0;kk<33+AIDIsum;kk++) //628128存到628512RAM
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 23
1348 2 {
1349 3 RamRom_Convert= 1;//选通628128RAM
1350 3 RamIO_Convert = 1;
1351 3 RamRam = temp_a[kk];
1352 3 RamRom_Convert= 0;
1353 3 RamIO_Convert = 0;//选通628512RAM
1354 3 XBYTE[kk0+kk]=RamRam;
1355 3 }
1356 2 }
1357 1 else
1358 1 {
1359 2 RamRom_Convert= 1;
1360 2 RamIO_Convert = 0;//选通628512RAM
1361 2 for(kk=0;kk<33+AIDIsum;kk++) //628128存到628512RAM
1362 2 {
1363 3 XBYTE[kk0+kk]=temp_a[kk];
1364 3 }
1365 2 }
1366 1 RamRom_Convert= 1;//选通628128RAM
1367 1 RamIO_Convert = 1;
1368 1 if(DuanKaiTiao<DuanKaiRongL) //调整保存的断开历史记录条数
1369 1 {
1370 2 DuanKaiTiao++;
1371 2 }
1372 1 else if(DuanKaiTiao==DuanKaiRongL) //保存的断开历史记录条数
1373 1 {
1374 2 ;
1375 2 }
1376 1 else
1377 1 {
1378 2 DuanKaiZhi=0;
1379 2 DuanKaiTiao=0;
1380 2 }
1381 1 //2003.12.05 duan kai 18 minutes reset
1382 1 //if(DuanKaiCount++>20) //断开历史纪录保存20条后,系统重起
1383 1 //{
1384 1 //DuanKaiCount=0;
1385 1 while(1);
1386 1 //}
1387 1 }
1388 void Test512()
1389 {
1390 1 uchar data test0c;
1391 1 uint data test0i;
1392 1 bit testFlag=0;
1393 1 FeedDogFlag=0; //喂狗
1394 1 _nop_();
1395 1 FeedDogFlag=1;
1396 1 for(test0c=0;test0c<16;test0c++)
1397 1 {
1398 2 RamRom_Convert= 1;
1399 2 RamIO_Convert = 1; //选通628512RAM
1400 2 Feed_watchdog();
1401 2 AddLed=(AddLed&0xF0)+test0c; //选择扇区
1402 2 ledled=AddLed;
1403 2 RamRom_Convert= 0;
1404 2 RamIO_Convert = 0; //选通628512RAM
1405 2 for(test0i=0;test0i<0x1FFF;test0i++) //test 512 0x0000-0x1FFF
1406 2 {
1407 3 XBYTE[test0i]=0x55;
1408 3 if(XBYTE[test0i]!=0x55)
1409 3 {
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 24
1410 4 testFlag=1;
1411 4 break;
1412 4 }
1413 3 XBYTE[test0i]=0xAA;
1414 3 if(XBYTE[test0i]!=0xAA)
1415 3 {
1416 4 testFlag=1;
1417 4 break;
1418 4 }
1419 3 }
1420 2 if(testFlag)
1421 2 {
1422 3 break;
1423 3 }
1424 2 RamRom_Convert= 1;
1425 2 RamIO_Convert = 0;//选通628512RAM
1426 2 for(test0i=0x2000;test0i<0xFFFF;test0i++)//test 512 0x2000-0xFFFF
1427 2 {
1428 3 XBYTE[test0i]=0x55;
1429 3 if(XBYTE[test0i]!=0x55)
1430 3 {
1431 4 testFlag=1;
1432 4 break;
1433 4 }
1434 3 XBYTE[test0i]=0xAA;
1435 3 if(XBYTE[test0i]!=0xAA)
1436 3 {
1437 4 testFlag=1;
1438 4 break;
1439 4 }
1440 3 FeedDogFlag=0; //喂狗
1441 3 _nop_();
1442 3 FeedDogFlag=1;
1443 3 }
1444 2 if(testFlag)
1445 2 {
1446 3 break;
1447 3 }
1448 2 }
1449 1 RamRom_Convert= 1;
1450 1 RamIO_Convert = 1; //选通628512RAM
1451 1 if(testFlag)
1452 1 {
1453 2 KuaiShFlag=1; //512坏,快闪
1454 2 memcpy(SendSbuf1,"SRAM test Fail\r\n\0",18);
1455 2 }
1456 1 else
1457 1 {
1458 2 ManShFlag=1; //512好,慢闪
1459 2 memcpy(SendSbuf1,"SRAM test Pass\r\n\0",18);
1460 2 }
1461 1 SendPermit1();
1462 1 }
1463 void KaiJiRengZhen() //开机认证
1464 {
1465 1 uchar data iii0;
1466 1 bit KaiJiFlag=0;
1467 1 for(iii0=0;iii0<8;iii0++)
1468 1 {
1469 2 if(iii0!=KaiJiRZh[iii0])
1470 2 {
1471 3 KaiJiFlag=1;
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 25
1472 3 break;
1473 3 }
1474 2 }
1475 1 if(KaiJiFlag)
1476 1 {
1477 2 Test512();
1478 2 for(iii0=0;iii0<8;iii0++)
1479 2 {
1480 3 KaiJiRZh[iii0]=iii0;
1481 3 }
1482 2 DuanKaiTiao=0;
1483 2 DuanKaiZhi=0;
1484 2 ZhengChTiao=0;
1485 2 ZhengChZhi=0;
1486 2 }
1487 1 if(DuanKaiTiao>DuanKaiRongL||DuanKaiZhi>=DuanKaiRongL)
1488 1 {
1489 2 DuanKaiTiao=0;
1490 2 DuanKaiZhi=0;
1491 2 }
1492 1 if(ZhengChTiao>ZhengChRongL||DuanKaiZhi>=ZhengChRongL)
1493 1 {
1494 2 ZhengChTiao=0;
1495 2 ZhengChZhi=0;
1496 2 }
1497 1 }
1498
1499 void System_init() //系统初始化
1500 {
1501 1 uchar xdata ii3;
1502 1 TMOD = 0x10; SCON = 0x90;//串行方式2,波特率为172.8k;定时器0:计数,1:定时
1503 1 PCON = 0x00; TCON = 0x40;//1:波特率增大一倍;0:INT0/1为电平触发;1:为边沿触发
1504 1 TL0 = 0xFF; TH0 = 0xFF;//上层中断3准备
1505 1 TL1 = 0xFA; TH1 = 0x3C;//定时50ms:0x1000-0x3cfa=49926
1506 1 IP = 0x10; IE = 0x1D;//串行中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -