衰不堪言 发表于 2015-5-7 22:34:19

15F2K60S2 频率变高,EEPROM操作不了

原来是11.0592MHZ的,后来改成22.1184就不行了,改回去就可以了

国学芯用 发表于 2015-5-8 09:53:43

不会啊,28M以内都是没问题的,你打电话问问吧0513-55012928

小李非刀 发表于 2015-5-8 11:01:06

改高频率,里面的延时参数要跟着改

衰不堪言 发表于 2015-5-8 11:37:29

小李非刀 发表于 2015-5-8 11:01
改高频率,里面的延时参数要跟着改

多谢斑竹

衰不堪言 发表于 2015-5-8 11:59:27

就是改IAP_CONTR寄存器,0x83改成0x81,还是不行

kiss2024 发表于 2015-5-8 12:04:43

很明显是延时没到要求啊

衰不堪言 发表于 2015-5-8 12:31:28

kiss2024 发表于 2015-5-8 12:04
很明显是延时没到要求啊

哪个延时?

STCunio 发表于 2015-5-8 12:33:39

把代码贴出来,让大家看看

衰不堪言 发表于 2015-5-8 12:35:23

STCunio 发表于 2015-5-8 12:33
把代码贴出来,让大家看看

/**********EEPROM***************/

void EEPROMIdle()
{

        IAP_CONTR = 0;
        IAP_CMD = 0;
        IAP_TRIG = 0;
        IAP_ADDRH = 0x80;
        IAP_ADDRL =        0;
}

unsigned char EEPROMRead(unsigned int addr)
{
        unsigned char dat;
        IAP_CONTR = ENABLE_IAP;
        IAP_CMD = EEPROM_READ;
        IAP_ADDRL = addr;
        IAP_ADDRH = addr>>8;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        Delay(200);
        Delay(200);
        dat = IAP_DATA;
        EEPROMIdle();
        return dat;
}


void EEPROMEraseSector(unsigned int addr)
{
        IAP_CONTR = ENABLE_IAP;
        IAP_CMD = EEPROM_ERASE;
        IAP_ADDRL = addr;
        IAP_ADDRH = addr>>8;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        Delay(200);
        Delay(200);
        EEPROMIdle();
}

void EEPROMProgramByte(unsigned int addr,unsigned char dat)
{
        IAP_CONTR = ENABLE_IAP;
        IAP_CMD = EEPROM_PROGRAM;
        IAP_ADDRL = addr;
        IAP_ADDRH = addr>>8;
        IAP_DATA = dat;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        Delay(200);
        Delay(200);
        EEPROMIdle();
}

衰不堪言 发表于 2015-5-8 12:36:05

EEPROMEraseSector(0x000);
                                        Delay(20);
                                        EEPROMEraseSector(0x000);
                                        Delay(20);
                                        EEPROMProgramByte(0x0001,ADC1);
                                        Delay(20);
                                        EEPROMProgramByte(0x0001,ADC1);
                                        Delay(20);
                                        EEPROMProgramByte(0x0003,ADC2);
                                        Delay(20);
                                        EEPROMProgramByte(0x0003,ADC2);

小李非刀 发表于 2015-5-8 13:19:01

STC官网有库函数例程,已经自动处理速度的问题,LZ可以试试

STCunio 发表于 2015-5-8 13:57:29

本帖最后由 STCunio 于 2015-5-8 14:34 编辑

用我这个程序测试吧,我这个可以实现自动下载,第1次需要掉电,下载频率在config.h文件中修改,修改MAIN_Fosc的宏定义即可,STC-ISP软件上最低波特率设置和Serialbegin(2400,1,COM1)中的第一个参数保持要一致,调试也方便,用串口1来打印EEPROM的数据,我这个是在IAP15W2K61S2的STC官方试验箱测试的,请注意一下eeprom的地址。晶振在config.h中修改,“最低波特率”必须Serialbegin(2400,1,COM1)中的第一个参数保持要一致,这里就是2400默认的。实现自动下载必须满足两个条件:1、config.h的MAIN_Fosc的值必须和STC-ISP保持一致;2、“最低波特率”必须Serialbegin(2400,1,COM1)中的第一个参数保持要一致。

wt13568089592 发表于 2015-5-8 16:21:30

改延时参数吧

衰不堪言 发表于 2015-5-8 16:23:46

wt13568089592 发表于 2015-5-8 16:21
改延时参数吧

延时参数改过了,不起作用

小李非刀 发表于 2015-5-9 14:36:24

衰不堪言 发表于 2015-5-8 16:23
延时参数改过了,不起作用

那就直接使用STC官网的库函数版本例程吧,就是22.1184MHZ编译测试的。
页: [1]
查看完整版本: 15F2K60S2 频率变高,EEPROM操作不了