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