📄 memcard.lst
字号:
1492 2 *sBuffer++=byte_read_4404();
1493 2 }
1494 1 return TRUE;
1495 1 }
1496
1497 /*
1498 功能:向SLE4404中写入数据
1499 参数:
1500 iOffset:写入数据起始地址
1501 iReadLen:写入数据长度
1502 sBuffer:写入数据指针
1503 返回:
1504 操作状态
1505 */
1506 bit write_sle4404(uchar iOffset,uchar iWriteLen,uchar* sBuffer)
1507 {
1508 1 uchar data i;
1509 1 if((iOffset<0)||((iOffset>7)&&(iOffset<11))||((iOffset>39)&&(iOffset<44))||(iOffset>51))
1510 1 return FALSE;
1511 1 if(
1512 1 ((iOffset>=0)&&(iOffset<=7)&&((8-iOffset)<iWriteLen))||
1513 1 ((iOffset>=11)&&(iOffset<=39)&&((40-iOffset)<iWriteLen))||
1514 1 ((iOffset>=44)&&(iOffset<=51)&&((52-iOffset)<iWriteLen))
1515 1 )
1516 1 return FALSE;
1517 1 answer_reset_4404();
1518 1 address_setting_4404(iOffset);
1519 1 for(i=0;i<iWriteLen;i++)
1520 1 {
1521 2 if(byte_write_4404_b(*sBuffer++)!=TRUE)
1522 2 {
1523 3 return FALSE;
1524 3 }
1525 2 }
1526 1 return TRUE;
1527 1 }
1528 /*功能:读SLE4404错误计数器
1529 参数:无
1530 返回:错误计数器值
1531 */
1532 uchar error_counter_sle4404(void)
1533 {
1534 1 uchar data cTemp,counter;
1535 1 uchar data i;
1536 1 answer_reset_4404();
1537 1 address_setting_4404(10);
1538 1 cTemp=byte_read_4404();
1539 1 cTemp=cTemp&0xf0;
1540 1 counter=0;
1541 1 for(i=0;i<4;i++)
1542 1 {
1543 2 if((cTemp&0x80)==0x80)
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 26
1544 2 {
1545 3 counter++;
1546 3 }
1547 2 cTemp<<=1;
1548 2 }
1549 1 return counter;
1550 1 }
1551
1552 /*
1553 功能:比较SLE4404密码
1554 参数:
1555 sPassword:密码存放指针
1556 iPassLen:密码长度
1557 返回:
1558 操作状态
1559 */
1560 bit compare_password_sle4404(uchar* sPassword,uchar iPassLen)
1561 {
1562 1 uchar data i,j;
1563 1 uchar data cTemp;
1564 1 if(iPassLen!=2)
1565 1 return FALSE;
1566 1 answer_reset_4404();
1567 1 address_setting_4404(7);
1568 1 for(i=0;i<7;i++)
1569 1 {
1570 2 SCL = 0;
1571 2 delay(DELAY_CLK_4404);
1572 2 SCL = 1;
1573 2 delay(DELAY_CLK_4404);
1574 2 }
1575 1 for(i=0;i<2;i++)
1576 1 {
1577 2 cTemp=sPassword[i];
1578 2 for(j=0;j<8;j++)
1579 2 {
1580 3 SCL = 0;
1581 3 if((cTemp&0x80)==0x00)
1582 3 {
1583 4 SDA=LOW;
1584 4 }
1585 3 else
1586 3 {
1587 4 SDA=HIGH;
1588 4 }
1589 3 delay(DELAY_CLK_4404);
1590 3 SCL = 1;
1591 3 delay(DELAY_CLK_4404);
1592 3 cTemp=cTemp<<1;
1593 3 }
1594 2 }
1595 1 for(i=0;i<4;i++)
1596 1 {
1597 2 SCL = 0;
1598 2 delay(DELAY_CLK_4404);
1599 2 SCL = 1;
1600 2 delay(DELAY_CLK_4404);
1601 2 SDA=HIGH;
1602 2 delay(DELAY_CLK_4404);
1603 2 if(SDA==HIGH)
1604 2 {
1605 3 SDA=LOW;
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 27
1606 3 ICP=HIGH;
1607 3 delay(DELAY_CLK_4404);
1608 3 SCL = 0;
1609 3 delay(DELAY_CLK_4404);
1610 3 SCL = 1;
1611 3 delay(DELAY_CLK_4404);
1612 3 ICP=LOW;
1613 3 delay(DELAY_CLK_4404);
1614 3 byte_erase_4404();
1615 3 if(error_counter_sle4404()==4)
1616 3 {
1617 4 return TRUE;
1618 4 }
1619 3 else
1620 3 {
1621 4 return FALSE;
1622 4 }
1623 3 }
1624 2 }
1625 1 return FALSE;
1626 1 }
1627
1628 /*
1629
1630 /*
1631 功能:读取SLE4404密码
1632 参数:
1633 sPassword:密码存放指针
1634 iPassLen:密码长度,取值为2
1635 返回:
1636 操作状态
1637 */
1638 bit read_password_sle4404(uchar *sPassword,uchar iPassLen)
1639 {
1640 1 if(iPassLen!=2)
1641 1 return FALSE;
1642 1 read_sle4404(8,2,sPassword);
1643 1 return TRUE;
1644 1 }
1645
1646
1647 /*
1648 功能:擦除
1649 参数:
1650 iOffset: 擦除起始地址
1651 iEraseLen: 擦除长度
1652 返回:
1653 操作状态
1654 */
1655 bit erase_sle4404(uchar iOffset,uchar iEraseLen)
1656 {
1657 1 uchar data i;
1658 1 if((iOffset<0)||((iOffset>13)&&(iOffset<40))||(iOffset>51))
1659 1 return FALSE;
1660 1 if(
1661 1 ((iOffset>=0)&&(iOffset<=13)&&((14-iOffset)<iEraseLen))||
1662 1 ((iOffset>=40)&&(iOffset<=51)&&((52-iOffset)<iEraseLen))
1663 1 )
1664 1 return FALSE;
1665 1 answer_reset_4404();
1666 1 address_setting_4404(iOffset);
1667 1 for(i=0;i<iEraseLen;i++)
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 28
1668 1 byte_erase_4404();
1669 1 return TRUE;
1670 1 }
1671 /*
1672 功能:更改SLE4404密码
1673 参数:
1674 iPassLen:密码长度
1675 sPassword:密码指针
1676 返回:
1677 TRUE
1678 */
1679 bit change_password_sle4404(uchar* sPassword,uchar iPassLen)
1680 {
1681 1 uchar data i;
1682 1 if(iPassLen!=2)
1683 1 return FALSE;
1684 1 if(erase_sle4404(8,2)!=TRUE)
1685 1 return FALSE;
1686 1 answer_reset_4404();
1687 1 address_setting_4404(8);
1688 1 for(i=0;i<iPassLen;i++)
1689 1 byte_write_4404_a(*sPassword++);
1690 1 return TRUE;
1691 1 }
1692
1693 /*
1694 功能:校验应用区整体擦除密码
1695 参数:
1696 sPassword: 密码指针
1697 iPassLen:密码长度,取值为4
1698 返回:
1699 操作状态
1700 */
1701 bit compare_erase_password_sle4404(uchar *sPassword,uchar iPassLen)
1702 {
1703 1 uchar data i,j;
1704 1 uchar data cTemp;
1705 1 if(iPassLen!=4)
1706 1 return FALSE;
1707 1 answer_reset_4404();
1708 1 address_setting_4404(39);
1709 1 for(i=0;i<7;i++)
1710 1 {
1711 2 SCL = 0;
1712 2 delay(DELAY_CLK_4404);
1713 2 SCL = 1;
1714 2 delay(DELAY_CLK_4404);
1715 2 }
1716 1 for(i=0;i<4;i++)
1717 1 {
1718 2 cTemp=sPassword[i];
1719 2 for(j=0;j<8;j++)
1720 2 {
1721 3 SCL = 0;
1722 3 if((cTemp&0x80)==0x80)
1723 3 {
1724 4 SDA=HIGH;
1725 4 }
1726 3 else
1727 3 {
1728 4 SDA=LOW;
1729 4 }
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 29
1730 3 delay(DELAY_CLK_4404);
1731 3 SCL = 1;
1732 3 delay(DELAY_CLK_4404);
1733 3 cTemp=cTemp<<1;
1734 3 }
1735 2 }
1736 1 for(i=0;i<64;i++)
1737 1 {
1738 2 SCL = 0;
1739 2 delay(DELAY_CLK_4404);
1740 2 SCL = 1;
1741 2 delay(DELAY_CLK_4404);
1742 2 SDA=HIGH;
1743 2 delay(DELAY_CLK_4404);
1744 2 if(SDA==HIGH)
1745 2 {
1746 3 SDA=LOW;
1747 3 ICP=HIGH;
1748 3 delay(DELAY_CLK_4404);
1749 3 SCL = 0;
1750 3 delay(DELAY_CLK_4404);
1751 3 SCL = 1;
1752 3 delay(DELAY_CLK_4404);
1753 3 ICP=LOW;
1754 3 delay(DELAY_CLK_4404);
1755 3 byte_erase_4404();
1756 3 return TRUE;
1757 3 }
1758 2 }
1759 1 return FALSE;
1760 1 }
1761
1762 /*
1763 功能:读取SLE4404擦除密码
1764 参数:
1765 sPassword:擦除密码存放指针
1766 iPassLen:擦除密码长度,取值为4
1767 返回:
1768 操作状态
1769 */
1770 bit read_erase_password_sle4404(uchar* sPassword,uchar iPassLen)
1771 {
1772 1 if(iPassLen!=4)
1773 1 return FALSE;
1774 1 read_sle4404(40,4,sPassword);
1775 1 return TRUE;
1776 1 }
1777
1778 /*
1779 功能:读取擦除计数
1780 参数:
1781 无
1782 返回:
1783 计数器值
1784 */
1785 uchar read_erase_counter_sle4404(void)
1786 {
1787 1 uchar data i,j;
1788 1 uchar idata cTemp[8],counter;
1789 1 read_sle4404(40,8,cTemp);
1790 1 counter=0;
1791 1 for(i=0;i<8;i++)
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 30
1792 1 {
1793 2 for(j=0;j<8;j++)
1794 2 {
1795 3 if((cTemp[i]&0x80)==0x80)
1796 3 {
1797 4 counter++;
1798 4 }
1799 3 cTemp[i]*=2;
1800 3 }
1801 2 }
1802 1 return counter;
1803 1 }
1804
1805 /*
1806 功能:修改应用区擦除密码
1807 参数:
1808 sPassword: 密码指针
1809 iPassLen: 密码长度
1810 返回:
1811 操作状态
1812 */
1813 bit change_erase_password_sle4404(uchar *sPassword,uchar iPassLen)
1814 {
1815 1 uchar data i;
1816 1 if(iPassLen!=4)
1817 1 return FALSE;
1818 1 if(erase_sle4404(40,4)!=TRUE)
1819 1 return FALSE;
1820 1 answer_reset_4404();
1821 1 address_setting_4404(40);
1822 1 for(i=0;i<iPassLen;i++)
1823 1 byte_write_4404_a(*sPassword++);
1824 1 return TRUE;
1825 1 }
1826
1827 /*
1828 功能:清除写保护位(置0)
1829 参数:
1830 无
1831 返回:
1832 操作状态
1833 */
1834 bit clr_wpbit_sle4404(void)
1835 {
1836 1 uchar data cTemp;
1837 1 answer_reset_4404();
1838 1 address_setting_4404(14);
1839 1 cTemp=byte_read_4404();
1840 1 cTemp=cTemp&0x7f;
1841 1 answer_reset_4404();
1842 1 address_setting_4404(14);
1843 1 byte_erase_4404();
1844 1 answer_reset_4404();
1845 1 address_setting_4404(14);
1846 1 if(byte_write_4404_b(cTemp)!=TRUE)
1847 1 return FALSE;
1848 1 return TRUE;
1849 1 }
1850
1851 /*
1852 功能:清除读保护位(置0)
1853 参数:
C51 COMPILER V6.12 MEMCARD 12/09/2002 13:03:11 PAGE 31
1854 无
1855 返回:
1856 操作状态
1857 */
1858 bit clr_rpbit_sle4404(void)
1859 {
1860 1 uchar data cTemp;
1861 1 answer_reset_4404();
1862 1 address_setting_4404(14);
1863 1 cTemp=byte_read_4404();
1864 1 cTemp=cTemp&0xbf;
1865 1 answer_reset_4404();
1866 1 address_setting_44
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -