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

📄 iap.c

📁 sst89c54 isp program for user
💻 C
字号:
#include"iap.h"
#include"sst89cxx.h"
#include "public.h"

/*
   #define CMD_CHIP_ERASE     0X01
   #define CMD_BLOCK_ERASE    0X0D
   #define CMD_SECTOR_ERASE   0X0B
   #define CMD_BYTE_PROGRAM   0X0E
   #define CMD_BURST_PROGRAM  0X06
   #define CMD_BYTE_VERIFY    0X0C
   #define CMD_PROG_SBIT1     0X0F
   #define CMD_PROG_SBIT2     0X03
   #define CMD_PROG_SBIT3     0X05
*/
//unsigned char ChipErase();
unsigned char ByteProgram(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char ch);

unsigned char BlockErase(unsigned char blockno);
unsigned char SectorErase(unsigned char SectorAddrH,unsigned char SectorAddrL);

unsigned char ByteVerify(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char *ch);

//unsigned char BurstProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf);
unsigned char ProgSbit();

//add
unsigned char ReadProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf);
unsigned char WriteProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf);

unsigned char Busy;


unsigned char BlockErase(unsigned char blockno)
{
        SFCF|=0xc0;
        if(blockno==0)SFAH=0x00;
        else        SFAH=0xf0;
        SFDT=0x55;
        SFCM=CMD_BLOCK_ERASE;
        while(1)
        {
                 Busy=SFST&0x04;
                 if(Busy==0)break;
        }
        SFCF &=0x03;

        return TRUE;
}

unsigned char SectorErase(unsigned char SectorAddrH,unsigned char SectorAddrL)
{
        SFCF|=0xc0;
        SFAH=SectorAddrH;
        SFAL=SectorAddrL;
        SFCM=CMD_SECTOR_ERASE;
        while(1)
        {
                 Busy=SFST&0x04;
                 if(Busy==0)break;
        }
        SFCF &=0x03;

        return TRUE;
}


unsigned char ByteProgram(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char ch)
{
        SFCF|=0xc0;
        SFAH=ByteAddrH;
        SFAL=ByteAddrL;
        SFDT=ch;
        SFCM=CMD_BYTE_PROGRAM;
        while(1)
        {
                 Busy=SFST&0x04;
                 if(Busy==0)break;
        }
        SFCF &=0x03;
        return TRUE;
}

/*
unsigned char BurstProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf)
{
        unsigned char i;
        unsigned int addr;

        addr=StartByteAddrH*256+StartByteAddrL;

        for(i=0;i<len;i++)
        {
                SFCF|=0xc0;
                SFAH=(addr>>8)&0xff;
                SFAL=addr&0xff;;
                SFDT=buf[i];
                SFCM=CMD_BURST_PROGRAM;
                while(1)
                {
                          Busy=SFST&0x08;
                          if(Busy==0)break;
                }
                /////ByteVerify
                //SFCM=CMD_BYTE_VERIFY;
                //if(SFDT!=buf[i])return FALSE;
                SFCF &=0x03;
                addr++;

        }
        while(1)
        {
                 Busy=SFST&0x04;
                 if(Busy==0)break;
        }
        SFCF &=0x03;
        return TRUE;
}
*/

unsigned char ByteVerify(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char *ch)
{
        SFCF|=0xc0;
        SFAH=ByteAddrH;
        SFAL=ByteAddrL;
        SFCM=CMD_BYTE_VERIFY;
        *ch=SFDT;
        SFCF &=0x03;

        return TRUE;
}

unsigned char ProgSbit()
{
        SFCF|=0xc0;
        SFDT=0x55;
        SFCM=CMD_PROG_SBIT1;
        while(1)
        {
                 Busy=SFST&0x04;
                 if(Busy==0)break;

        }
        SFCM=CMD_PROG_SBIT2;
        while(1)
        {
                Busy=SFST&0x04;
                if(Busy==0)break;
        }
        SFCM=CMD_PROG_SBIT3;
        while(1)
        {
                Busy=SFST&0x04;
                if(Busy==0)break;
        }
        SFCF &=0x03;

        return TRUE;
}

/////////////////////// add function
unsigned char ReadProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf)
{
        unsigned int addr;
        unsigned char i;
        unsigned char addrH,addrL;

        addr=StartByteAddrH*256+StartByteAddrL;
        for(i=0;i<len;i++)
        {
                addrH=(unsigned char)(addr>>8);
                addrL=(unsigned char)(addr);
                if(ByteVerify(addrH,addrL,&buf[i])!=TRUE)return FALSE;
                addr++;
        }
        return TRUE;

}

unsigned char WriteProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf)
{
        unsigned int addr;
        unsigned char i;
        unsigned char addrH,addrL;
        unsigned char ch;

        addr=StartByteAddrH*256+StartByteAddrL;
        for(i=0;i<len;i++)
        {
                addrH=(unsigned char)(addr>>8);
                addrL=(unsigned char)(addr);
                if(ByteProgram(addrH,addrL,buf[i])!=TRUE)return FALSE;
                if(ByteVerify(addrH,addrL,&ch)!=TRUE)return FALSE;
                if(ch!=buf[i])return FALSE;
                addr++;
                Delay(20);
        }
        return TRUE;

}

⌨️ 快捷键说明

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