📄 memcard.lst
字号:
1117 */
1118 bit compare_password_sle4406(uchar* sPassword)
1119 {
1120 1 uchar data i,j,k;
1121 1 uchar data cTemp;
1122 1 reset_4406();
1123 1 address_setting_4406(9);
1124 1 SDA=HIGH;
1125 1 for(i=0;i<7;i++)
1126 1 {
1127 2 if(SDA==HIGH)
1128 2 {
1129 3 RST=HIGH;
1130 3 delay(DELAY_4406);
1131 3 RST=LOW;
1132 3 delay(DELAY_4406);
1133 3 SCL = 0;
1134 3 delay(DELAY_4406);
1135 3 SCL = 1;
1136 3 delay(DELAY_4406);
1137 3 for(;i<7;i++)
1138 3 {
1139 4 SCL = 0;
1140 4 delay(DELAY_4406);
1141 4 SCL = 1;
1142 4 delay(DELAY_4406);
1143 4 }
1144 3 for(j=0;j<3;j++)
1145 3 {
1146 4 cTemp=*sPassword++;
1147 4 for(k=0;k<8;k++)
1148 4 {
1149 5 SCL = 0;
1150 5 if((cTemp&0x80)==0x80)
1151 5 SDA=HIGH;
1152 5 else
1153 5 SDA=LOW;
1154 5 delay(DELAY_4406);
1155 5 SCL = 1;
1156 5 delay(DELAY_4406);
1157 5 cTemp=cTemp<<1;
1158 5 }
1159 4 }
1160 3 SCL = 0;
1161 3 delay(DELAY_4406);
1162 3 SCL = 1;
1163 3 delay(DELAY_4406);
1164 3 return TRUE;
1165 3 }
1166 2 else
1167 2 {
1168 3 SCL = 0;
1169 3 delay(DELAY_4406);
1170 3 SCL = 1;
1171 3 delay(DELAY_4406);
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 20
1172 3 }
1173 2 }
1174 1 return TRUE;
1175 1 }
1176
1177 /*
1178 功能:带借位擦除sle4406中的一个字节
1179 参数:
1180 iOffset: 要擦除字节的前一字节地址
1181 即,iOffset字节中某一位置0 ,而 iOffset+1 字节置0xff
1182 返回:
1183 操作状态
1184 */
1185 bit erase_with_carry_sle4406(uchar iOffset)
1186 {
1187 1 uchar data i,j;
1188 1 if(iOffset<8||iOffset>12)
1189 1 return FALSE;
1190 1 reset_4406();
1191 1 address_setting_4406(iOffset);
1192 1 if(iOffset==8)
1193 1 {
1194 2 i=7;
1195 2 SCL = 0;
1196 2 delay(DELAY_4406);
1197 2 SCL = 1;
1198 2 delay(DELAY_4406);
1199 2 }
1200 1 else
1201 1 i=8;
1202 1 SDA=HIGH;
1203 1 for(j=0;j<i;j++)
1204 1 {
1205 2 if(SDA==HIGH)
1206 2 {
1207 3 RST=HIGH;
1208 3 delay(DELAY_4406);
1209 3 RST=LOW;
1210 3 delay(DELAY_4406);
1211 3 SCL = 0;
1212 3 delay(DELAY_4406);
1213 3 SCL = 1;
1214 3 delay(DELAY_4406);
1215 3 RST=HIGH;
1216 3 delay(DELAY_4406);
1217 3 RST=LOW;
1218 3 delay(DELAY_4406);
1219 3 SCL = 0;
1220 3 delay(DELAY_4406);
1221 3 SCL = 1;
1222 3 delay(DELAY_4406);
1223 3 return TRUE;
1224 3 }
1225 2 SCL = 0;
1226 2 delay(DELAY_4406);
1227 2 SCL = 1;
1228 2 delay(DELAY_4406);
1229 2 }
1230 1 return FALSE;
1231 1 }
1232
1233 /*
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 21
1234 功能:个人化
1235 参数:无
1236 返回:
1237 操作状态
1238 */
1239 bit personal_sle4406(void)
1240 {
1241 1 uchar data cTemp;
1242 1 reset_4406();
1243 1 address_setting_4406(8);
1244 1 cTemp=byte_read_4406();
1245 1 cTemp=cTemp&0x7f;
1246 1 reset_4406();
1247 1 address_setting_4406(8);
1248 1 return(byte_write_4406(cTemp));
1249 1 }
1250 //////////////////////////////////////////////////////////////////////////////////////
1251 //////////////////////以下为SLE4404的函数/////////////////////////////////////////////
1252 //////////////////////////////////////////////////////////////////////////////////////
1253 #include <stdio.h>
1254 #include <string.h>
1255 //复位应答
1256 void answer_reset_4404(void)
1257 {
1258 1 delay(DELAY_CLK_4404);
1259 1 RST=LOW;
1260 1 delay(DELAY_CLK_4404);
1261 1 ICP=LOW;
1262 1 delay(DELAY_CLK_4404);
1263 1 SCL=HIGH;
1264 1 delay(DELAY_CLK_4404);
1265 1 RST=HIGH;
1266 1 delay(DELAY_CLK_4404);
1267 1 RST=LOW;
1268 1 delay(DELAY_CLK_4404);
1269 1 return;
1270 1 }
1271
1272 //设置地址
1273 void address_setting_4404(uchar iOffset)
1274 {
1275 1 uchar data i,j;
1276 1 RST=LOW;
1277 1 delay(DELAY_CLK_4404);
1278 1 if(iOffset!=0)
1279 1 {
1280 2 for(i=0;i<iOffset;i++)
1281 2 {
1282 3 for(j=0;j<8;j++)
1283 3 {
1284 4 SCL = 0;
1285 4 delay(DELAY_CLK_4404);
1286 4 SCL = 1;
1287 4 delay(DELAY_CLK_4404);
1288 4 }
1289 3 }
1290 2 }
1291 1 return;
1292 1 }
1293
1294 //读一字节()
1295
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 22
1296 uchar byte_read_4404(void)
1297 {
1298 1 uchar data i,cTemp;
1299 1 //RST=LOW;
1300 1 SDA=HIGH;
1301 1 cTemp=0x00;
1302 1 for(i=0;i<8;i++)
1303 1 {
1304 2 cTemp*=2;
1305 2 if(SDA==1)
1306 2 {
1307 3 cTemp++;
1308 3 }
1309 2 SCL=0;//high;
1310 2 delay(DELAY_CLK_4404);
1311 2 SCL=1;
1312 2 delay(DELAY_CLK_4404);
1313 2 }
1314 1 return cTemp;
1315 1 }
1316
1317 //写入一字节(b)
1318 bit byte_write_4404_b(uchar cTemp)
1319 {
1320 1 uchar i;
1321 1 RST=LOW;
1322 1 for(i=0;i<8;i++)
1323 1 {
1324 2 SDA=HIGH;
1325 2 if(((cTemp&0x80)==0x80)&&(SDA==LOW))
1326 2 {
1327 3 return FALSE;
1328 3 }
1329 2 else if(((cTemp&0x80)==0x00)&&(SDA==HIGH))
1330 2 {
1331 3 SDA=LOW;
1332 3 ICP=HIGH;
1333 3 delay(DELAY_CLK_4404);
1334 3 SCL = 0;
1335 3 delay(DELAY_CLK_4404);
1336 3 SCL = 1;
1337 3 delay(DELAY_CLK_4404);
1338 3 ICP=LOW;
1339 3 SDA=HIGH;
1340 3 delay(DELAY_CLK_4404);
1341 3 if(SDA==HIGH)
1342 3 {
1343 4 return FALSE;
1344 4 }
1345 3 }
1346 2 SCL = 0;
1347 2 delay(DELAY_CLK_4404);
1348 2 SCL = 1;
1349 2 delay(DELAY_CLK_4404);
1350 2 cTemp=cTemp<<1;
1351 2 }
1352 1 return TRUE;
1353 1 }
1354
1355 //写入一字节(a)(写密码位)
1356 void byte_write_4404_a(unsigned char cTemp)
1357 {
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 23
1358 1 uchar i;
1359 1 RST=LOW;
1360 1 for(i=0;i<8;i++)
1361 1 {
1362 2 if((cTemp&0x80)==0x00)
1363 2 {
1364 3 SDA=LOW;
1365 3 ICP=HIGH;
1366 3 delay(DELAY_CLK_4404);
1367 3 SCL = 0;
1368 3 delay(DELAY_CLK_4404);
1369 3 SCL = 1;
1370 3 delay(DELAY_CLK_4404);
1371 3 ICP=LOW;
1372 3 delay(DELAY_CLK_4404);
1373 3 }
1374 2 SCL = 0;
1375 2 delay(DELAY_CLK_4404);
1376 2 SCL = 1;
1377 2 delay(DELAY_CLK_4404);
1378 2 cTemp=cTemp<<1;
1379 2 }
1380 1 return;
1381 1 }
1382
1383 //擦除一字节
1384 void byte_erase_4404(void)
1385 {
1386 1 uchar i;
1387 1 RST=LOW;
1388 1 SDA=HIGH;
1389 1 ICP=HIGH;
1390 1 delay(DELAY_CLK_4404);
1391 1 SCL = 0;
1392 1 delay(DELAY_CLK_4404);
1393 1 SCL = 1;
1394 1 delay(DELAY_CLK_4404);
1395 1 ICP=LOW;
1396 1 delay(DELAY_CLK_4404);
1397 1 SCL = 0;
1398 1 delay(DELAY_CLK_4404);
1399 1 SCL = 1;
1400 1 delay(DELAY_CLK_4404);
1401 1 for(i=0;i<7;i++)
1402 1 {
1403 2 SCL = 0;
1404 2 delay(DELAY_CLK_4404);
1405 2 SCL = 1;
1406 2 delay(DELAY_CLK_4404);
1407 2 }
1408 1 return;
1409 1 }
1410
1411 ///////////////////////////////////////////////////////////////////////////////////////
1412 /*
1413 功能:个人化
1414 参数:
1415 无
1416 返回:
1417 操作状态
1418 */
1419 bit personal_sle4404(void)
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 24
1420 {
1421 1 uchar data i;
1422 1 answer_reset_4404();
1423 1 address_setting_4404(62);
1424 1 for(i=0;i<4;i++)
1425 1 {
1426 2 SCL = 0;
1427 2 delay(DELAY_CLK_4404);
1428 2 SCL = 1;
1429 2 delay(DELAY_CLK_4404);
1430 2 }
1431 1 SDA=LOW;
1432 1 ICP=HIGH;
1433 1 delay(DELAY_CLK_4404);
1434 1 SCL = 0;
1435 1 delay(DELAY_CLK_4404);
1436 1 SCL = 1;
1437 1 delay(DELAY_CLK_4404);
1438 1 ICP=LOW;
1439 1 delay(DELAY_CLK_4404);
1440 1 return TRUE;
1441 1 }
1442
1443 /***************************************************
1444 功能:模拟个人化
1445 参数:
1446 operation: 0--模拟个人化 1--取消模拟
1447 返回:
1448 操作状态
1449 ***************************************************/
1450 bit fake_sle4404(uchar operation)
1451 {
1452 1 if(operation==0)
1453 1 {
1454 2 ICT=LOW;
1455 2 return TRUE;
1456 2 }
1457 1 else if(operation==1)
1458 1 {
1459 2 ICT=HIGH;
1460 2 return TRUE;
1461 2 }
1462 1 else
1463 1 {
1464 2 return FALSE;
1465 2 }
1466 1 }
1467
1468 /*
1469 功能:从SLE4404中读取数据
1470 参数:
1471 iOffset:读取数据起始地址
1472 iReadLen:读取数据长度
1473 sBuffer:读取数据指针
1474 返回:
1475 操作状态
1476 */
1477 bit read_sle4404(uchar iOffset,uchar iReadLen,uchar *sBuffer)
1478 {
1479 1 uchar data i;
1480 1 if((iOffset<0)||(iOffset>51))
1481 1 {
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 25
1482 2 return FALSE;
1483 2 }
1484 1 if((52-iOffset)<iReadLen)
1485 1 {
1486 2 return FALSE;
1487 2 }
1488 1 answer_reset_4404();
1489 1 address_setting_4404(iOffset);
1490 1 for(i=0;i<iReadLen;i++)
1491 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -