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

📄 host.lst

📁 智能数字电流表。双CPU工作
💻 LST
📖 第 1 页 / 共 5 页
字号:
1093   1              Hints(AL_LHint);    //显示AL.L
1094   1              return;
1095   1      }
1096          
1097          void AL_H() reentrant        //报警上限输出 
1098          {
1099   1              Hints(AL_HHint);    //显示AL.H
1100   1              return;
1101   1      }
1102          
1103          void SetAL_L() reentrant     //设置低报警值
1104          {
1105   1              uchar uKey;
1106   1              word  Value;
1107   1              word  wALR_L = Param.wALR_L.w;
1108   1              ALRLX();
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 19  

1109   1              uKey = GetKeyValue(&Value, wALR_L, 4);
1110   1              KeyResult(uKey, 22, 23, Value);
1111   1              return;
1112   1      }
1113          
1114          void SetAL_H() reentrant     //设置高报警值 
1115          {
1116   1              uchar uKey;
1117   1              word  Value;
1118   1              word  wALR_H = Param.wALR_H.w;
1119   1              ALRHX();
1120   1              uKey = GetKeyValue(&Value, wALR_H, 4);
1121   1              KeyResult(uKey, 23, 22, Value);
1122   1              return;
1123   1      }
1124          
1125          void Address() reentrant     //提示地址输入
1126          {
1127   1              Hints(AddrHint);
1128   1              return;
1129   1      }
1130          
1131          void Baud() reentrant        //提示波特率输入   
1132          {
1133   1              Hints(bAudHint);
1134   1              return;
1135   1      }
1136          
1137          void SetAddress() reentrant  //设置地址
1138          {
1139   1              uchar uKey;
1140   1              word  Value = 0;
1141   1              byte  bAddress = Param. bAddress;
1142   1              AddrX();      //显示当前值
1143   1              uKey = GetKeyValue(&Value, bAddress, 3);
1144   1              KeyResult(uKey, 18, 19, Value);
1145   1              return;
1146   1      }
1147          
1148          void SetBaud() reentrant     //设置波特率
1149          {
1150   1              uchar KeyValue;
1151   1              BaudX();
1152   1              while (1)
1153   1              {
1154   2                      KeyValue = P2 & 0xF0;   //去掉低4位
1155   2                      if (KeyValue != 0xF0)
1156   2                      {
1157   3                              Delay(15, 500);
1158   3                              KeyValue = P2 & 0xF0;
1159   3                              switch (KeyValue)
1160   3                              {
1161   4                              case 0xE0:  //左键, 向上翻
1162   4                                      Param.BaudIndex ++;
1163   4                                      Param.BaudIndex = Param.BaudIndex % 4;
1164   4                                  Hints(Bauds[Param.BaudIndex]);
1165   4                                      break;
1166   4                              case 0xD0:  //右键, 向下翻
1167   4                                      Param.BaudIndex --;
1168   4                                      Param.BaudIndex = Param.BaudIndex % 4;
1169   4                                  Hints(Bauds[Param.BaudIndex]);
1170   4                                      break;
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 20  

1171   4                              case 0xB0:  //MENU,取消操作
1172   4                                      TRG = 1;  //静止显示
1173   4                                      TRG = 0;
1174   4                                      I_Send('A'); 
1175   4                                      Delay(1, 1000);
1176   4                                      TRG = 1;   //停止闪烁
1177   4                                      TRG = 0;   
1178   4                                      I_Send('N');   
1179   4                      KeyFuncIndex = 19;    //跳到上一层
1180   4                      KeyFuncPtr = KeyTab[KeyFuncIndex].CurrentOperate;
1181   4                              (*KeyFuncPtr)();  //执行
1182   4                                      return;
1183   4                              case 0x70:  //回车,确认操作
1184   4                                      TRG = 1;  //静止显示
1185   4                                      TRG = 0;
1186   4                                      I_Send('A');
1187   4                                      //保存波特率
1188   4                                      switch (Param.BaudIndex)
1189   4                                      {
1190   5                                      case 0:
1191   5                                              break;
1192   5                                      case 1:
1193   5                                              break;
1194   5                                      case 2:
1195   5                                              break;
1196   5                                      case 3:
1197   5                                              break;
1198   5                                      }
1199   4                                      changed = 1;
1200   4                                      Delay(50, 1000);
1201   4                                      TRG = 1;   //停止闪烁
1202   4                                      TRG = 0;   
1203   4                                      I_Send('N');  
1204   4                                      KeyFuncIndex = 18;    //跳到AH.L
1205   4                      KeyFuncPtr = KeyTab[KeyFuncIndex].CurrentOperate;
1206   4                              (*KeyFuncPtr)();  //执行
1207   4                                      return;
1208   4                              default:
1209   4                                      break;
1210   4                              }
1211   3                      }
1212   2                      rst_wdog();
1213   2              }
1214   1              return;
1215   1      }
1216          
1217          void SetTimer(uchar uIndex)  //设置定时器的参数   
1218          { 
1219   1              if (uIndex == 0)
1220   1              {
1221   2                      TH1 = 0xF0;      //定时器时间设置1200
1222   2                      PCON = 0x00;
1223   2              }
1224   1                
1225   1              if (uIndex == 1)
1226   1              {
1227   2                      TH1 = 0xF8;      //定时器时间设置2400
1228   2                      PCON = 0x00;
1229   2              }
1230   1              rst_wdog();
1231   1              if (uIndex == 2)
1232   1              {
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 21  

1233   2                      TH1 = 0xFC;      //定时器时间设置4800
1234   2                      PCON = 0x00;
1235   2              }       
1236   1              
1237   1              if (uIndex == 3)
1238   1              {
1239   2                      TH1 = 0xFE;      //定时器时间设置9600
1240   2                      PCON = 0x00;
1241   2              }
1242   1              rst_wdog();
1243   1      }
1244          
1245          void SendData(uchar uNum)     //发送串行口数据
1246          {
1247   1              uchar i, uSum;
1248   1              rst_wdog();
1249   1              uSum = 0;
1250   1              DE = 1;
1251   1              
1252   1              SBUF = Param.bAddress;  //从机地址发回
1253   1              while (TI != 1)
1254   1                     rst_wdog();
1255   1              TI = 0;         
1256   1                      
1257   1              for (i=0; i<uNum; i++)
1258   1              {
1259   2                      SBUF = Tarray[i];
1260   2                      uSum +=  Tarray[i];
1261   2                      while (TI != 1)
1262   2                              rst_wdog();
1263   2                      TI = 0;
1264   2                      rst_wdog();
1265   2              }
1266   1              SBUF = uSum;
1267   1              while (TI == 0)
1268   1                      rst_wdog();
1269   1              TI = 0;
1270   1      }
1271          
1272          bit ReceiveData(uchar uNum) //接收串行口数据      
1273          {
1274   1              uchar i;
1275   1              uchar uSum;
1276   1              DE = 0;
1277   1              while (1)
1278   1              {
1279   2                      rst_wdog();
1280   2                      uSum = 0;
1281   2                      for (i=0; i<uNum; i++)
1282   2                      {
1283   3                              while (RI != 1)
1284   3                                      rst_wdog();
1285   3                              RI = 0;
1286   3                              Rarray[i] = SBUF;
1287   3                              uSum += Rarray[i];
1288   3                              rst_wdog();
1289   3                      }
1290   2                  while (RI != 1)
1291   2                         rst_wdog(); 
1292   2                  RI = 0;
1293   2                      if (SBUF == uSum)     //校验和相同
1294   2                      {
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 22  

1295   3                              DE = 1;
1296   3                              SBUF = 0x00; 
1297   3                              while (TI == 0)
1298   3                                      rst_wdog();
1299   3                              TI = 0;
1300   3                              return 1;
1301   3                      }
1302   2                      else  //不同,要求重新接收
1303   2                      {
1304   3                              DE = 1;
1305   3                              SBUF = 0xFF;
1306   3                              while (TI == 0)
1307   3                                      rst_wdog();
1308   3                              TI = 0;
1309   3                              return 0;
1310   3                      }
1311   2              }
1312   1      }
1313          
1314          void ssio(void) interrupt 4 
1315          {
1316   1              uchar uCmd;
1317   1              RI = 0;
1318   1              ES = 0;         //关串行口中断
1319   1              //非本机地址,继续监听
1320   1              if (SBUF != Param.bAddress)
1321   1              {
1322   2                      ES = 1;
1323   2                      DE = 0;  //允许接收
1324   2                      rst_wdog();
1325   2                      return;
1326   2              }
1327   1              SM2 = 0;       //取消监听状态
1328   1              
1329   1              /* 
1330   1          DE = 1;
1331   1              SBUF = Param.bAddress;  //从机地址发回
1332   1              while (TI != 1)
1333   1                     rst_wdog();
1334   1              TI = 0;         
1335   1              */      
1336   1              DE = 0;
1337   1              while (RI != 1)
1338   1                      rst_wdog();
1339   1              RI = 0; 
1340   1              uCmd = SBUF;    //接收命令
1341   1              
1342   1          //命令分析
1343   1          if (uCmd == 0x87)  //查询数据
1344   1          {
1345   2              //准备数据
1346   2              Tarray[0] = 'I';    //电流符号
1347   2              Tarray[1] = Param.Current.b[0];  //电流值
1348   2              Tarray[2] = Param.Current.b[1];
1349   2              Tarray[3] = Param.PointPos;      //小数点
1350   2              Tarray[4] = '+';   //符号
1351   2              //发送数据
1352   2                      SendData(5); 
1353   2              }
1354   1              else if (uCmd == 0x81)  //查询倍率
1355   1              {
1356   2                       //准备倍率
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 23  

1357   2               Tarray[0] = Param.wInput.b[0];  //输入
1358   2               Tarray[1] = Param.wInput.b[1];
1359   2               Tarray[2] = Param.wOutput.b[0]; //输出
1360   2               Tarray[3] = Param.wOutput.b[1]; 
1361   2               Tarray[4] = Param.PointPos;     //小数点
1362   2               //发送倍率
1363   2                   

⌨️ 快捷键说明

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