15F2K60S2 频率变高,EEPROM操作不了
原来是11.0592MHZ的,后来改成22.1184就不行了,改回去就可以了 不会啊,28M以内都是没问题的,你打电话问问吧0513-55012928 改高频率,里面的延时参数要跟着改 小李非刀 发表于 2015-5-8 11:01改高频率,里面的延时参数要跟着改
多谢斑竹 就是改IAP_CONTR寄存器,0x83改成0x81,还是不行 很明显是延时没到要求啊 kiss2024 发表于 2015-5-8 12:04
很明显是延时没到要求啊
哪个延时? 把代码贴出来,让大家看看 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();
}
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); STC官网有库函数例程,已经自动处理速度的问题,LZ可以试试 本帖最后由 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
改延时参数吧
延时参数改过了,不起作用 衰不堪言 发表于 2015-5-8 16:23
延时参数改过了,不起作用
那就直接使用STC官网的库函数版本例程吧,就是22.1184MHZ编译测试的。
页:
[1]