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