- 打卡等级:以坛为家II
- 打卡总天数:455
- 最近打卡:2025-05-01 12:36:53
金牌会员
- 积分
- 2097
|
发表于 2024-8-3 11:55:25
|
显示全部楼层
本帖最后由 wjhhhhh 于 2024-8-3 11:57 编辑
发文字.rar
(1.29 KB, 下载次数: 59)
可以参考一下。
/**把关机时的台 写二个字节到第二个扇区 前一字节的前四位是波段 后四位和后一字节的八位是调谐频道****/
/** 写入二个字节到第二个扇区***提前到开机时就找到这个地址 关机时写入到这个地址节省时间*/
void EEP_Ws2(u8 RW_zj1,u8 RW_zj2)//前四位波段少于15 写入二个字节是因为单个数据会出现0xFF
{EZtmp[0]=RW_zj1; EZtmp[1]=RW_zj2;
//guan_ji_hao =ik<<8 & (ik-1);//这次断电时存入的地址
//提前到开机时就找到这个地址 关机时节省时间
EEPROM_read(512,RWtmp,512);//第二扇区(地址512 0x0200)起 512字节全读出来511~1023
for(ik=0;ik<512;ik++)
{if((RWtmp[ik]==0xFF)&&(RWtmp[ik+1]==0xFF))//有二个连续字节FF 没有写过
{EEPROM_write(ik+512,EZtmp,2); //追加 写入收到的2个
break; //跳出ik 0~511循环
} //0~511循环到此 电烙铁
if(ik>=510) //循环到510仍然没有连续的两个FF
{SectorErase(512); //没有了连续的2个FF 擦除第二扇区
RWtmp[0]=EZtmp[0];RWtmp[1]=EZtmp[1];//新的二个数据填进地址0和1 这个笨写法编译后code比循环写法少了23个字节!
EEPROM_write(512,RWtmp,2); //512是第二扇区起始
}
}
}
/*** 开机读出上次关机前的"台"****************************** */
void kai_ji_R() //读二个字节是因为第二个数据会出现0xFF
{EEPROM_read(512,RWtmp,512);//从地址512(第二扇区起始)开始把512个(512~1023)全读出来
for(ik=0;ik<512;ik++) //找连续的2个FF 读出的RWtmp[x]是序号
{if((RWtmp[0]==0xFF)&&(RWtmp[1]==0xFF))//有过擦除操作后或新的芯片第一次运行RWtmp[0]RWtmp[1]全是FF
{PWM_7(0x001A); //开机就调频 F 缺省频段 调频 第一次开机遇全FF会出错?
PWM_8(0x01F0); //开机缺省频点 陕西交通 89.6 MHz
break; //跳出ik循环
}
if((RWtmp[ik]==0xFF)&&(RWtmp[ik-1]==0xFF)) //这里RWtmp[ik]是第二扇区的 两个FF是存入(写过)和没写过的分界
{xu_hao=(ik-3); //RWtmp[]第二扇区存储的台的序号 RWtmp[x]是序号
EEPROM_read(512,RWtmp,512); //从地址512(第二扇区首)把512个全读出来 RWtmp[x]是波段、调谐数据
bo_duan =(RWtmp[xu_hao]&0xF0)>>4; //波段0000 xxxx xxxx <=15
tiao_xie=((RWtmp[xu_hao]&0x0F)<<8) | (RWtmp[xu_hao+1]);
if(bo_duan>=2){Q1_EN=1;}//遇到了短波 发高电平给短波高放当电源
else{Q1_EN=0;} //发低电平 没了短波高放电源
guan_ji_hao=(ik-1) <<8 & ik;//这次断电时存入的地址 高位在前
break; //跳出ik 0~511循环else
}
} // ik 0~511循环到此
} |
|