📄 init_sys.c
字号:
/******************************************************************
; 提供50ms延时子程序
; 函数原型: void wait_50ms(void)
*******************************************************************/
void Wait_50ms(void)
{
os_wait2(K_TMO, 25);
}
//如是第一次上电则初始化EEPROM
// ttt 为1 时正常初始化,0时强行恢复出厂数据
void FLASH_INIT(uchar ttt ) {
uchar *Poitc;
uchar *Poitt11;
uchar *Poitt22;
xdata uint mmk;
uchar Summ,timee;
Looppp0:
timee=0;
// read_fm_memory(0,iic_data_buf,12);
while (1) { // wait for EEProm is free
if (EETask == 0xff) break;
os_wait2(K_TMO, 2);
}
EECmd = FM_MEMORY_RD;
FM_addr=0;
FM_num=12;
EETask = os_running_task_id();
os_send_signal(FMROM);
os_wait2(K_SIG, 0);
EETask = 0xff; //EEProm read =================sample
if(iic_data_buf[8]!= MM0xa5||ttt==0) {
Nessst44888:
Poitt11=(uchar *)&Para_all_True.Apn[0];
Clr_MeM(Poitt11,(sizeof(Para_all_True)));
Poitt11=(uchar *)&Para_all_True.Apn[0];
Poitt22=(uchar *)&struct_Para_all_IniteValue.Apn[0];
for(mmk=0;mmk<sizeof(Para_all_True);mmk++) {
*Poitt11++= *Poitt22++;
}
//清除所有报警 记录
Clr_BaoJingJiLu_All() ;
}
else {
Nessst:
Poitc=&Para_all_True.Apn[0];
//read_fm_memory(0,Poitc,128);
while (1) { // wait for EEProm is free
if (EETask == 0xff) break;
os_wait2(K_TMO, 2);
}
EECmd = FM_MEMORY_RD;
FM_addr=0;
FM_num=253;
EETask = os_running_task_id();
os_send_signal(FMROM);
os_wait2(K_SIG, 0);
Summ=0;
for(mmk=0;mmk<252;mmk++)
Summ+=iic_data_buf[mmk];
if(Summ!= iic_data_buf[mmk]) {
if(++ timee>9) {
EETask = 0xff; //EEProm read =================sample
goto Nessst44888; //连续记取6次不成功则恢复出厂设置
}
else {
EETask = 0xff; //EEProm read =================sample
goto Nessst;
}
}
EETask = 0xff; //EEProm read =================sample
for(mmk=0;mmk<253;mmk++)
*Poitc++=iic_data_buf[mmk];
//**说 明: 读报警记录到内存
#if (Is_JiLuRecIn2416 == 1 )
Read_BaoJingJiLu_To_CpuRam() ;
#endif
}
if(Is_Para_all_True_OK()==0) //读出数据不对时,重复
goto Looppp0;
MoveByte((uchar *)&Para_all_True_Bak, (uchar *)&Para_all_True, sizeof(Para_all_True));
Para_all_True_Bak.Change_Flag=0;
Add_CSSUM();
}
/**********************************************************************
**函数原型: void Rf_2262()
**入口参数:
**出口参数: 无
**返 回 值: 无
**说 明: Rf2262子程序INIT
************************************************************************/
// 250us
uchar RF_sta=0;
uchar Low_Cnt=0;
uchar High_Cnt=0;
uchar WeiShu=0;
uint Hlcnt=0;
uint Hlcntshu[26],jji,mmkh;
#define LOWV 1
#define HIGHV 3
uchar ppp2;
uchar hhh[40],loww[40],ill;
void Rf_2262() {
switch(RF_sta) {
case 0:
WeiShu=0; //接收到的位数复位
ppp2=P2;
if(RF315_in_P==0) {
RF_sta=1;
High_Cnt=1;
}
break;
case 1: //检测高电平
if(RF315_in_P==0) { // if high
High_Cnt++;
}
else {
RF_sta=2;
Low_Cnt=1;
}
break;
case 2: //检测低电平
if(RF315_in_P==1) { //if di
Low_Cnt++;
if( Low_Cnt>25) {
EA=0;
Hlcnt=0;
while(RF315_in_P==1) { //di
if(++Hlcnt>880) {
EA=1; RF_sta=0;
return;
}
jji=10;
}
mmkh=Hlcnt;
jji=0;
while(1) {
Hlcnt=0;
while(RF315_in_P==0) { //gao
if(++Hlcnt>6000) {
EA=1; RF_sta=0;
return;
}
}
Hlcntshu[jji++]= Hlcnt;
if((Hlcnt>300&&Hlcnt<410)||Hlcnt<60||Hlcnt>690){
EA=1; RF_sta=0;
return;
}
Hlcnt=0;
while(RF315_in_P==1) { //di
if(++Hlcnt>6000) {
EA=1; RF_sta=0;
return;
}
}
Hlcntshu[jji++]= Hlcnt;
if((Hlcnt>300&&Hlcnt<410)||Hlcnt<60||Hlcnt>690){
EA=1; RF_sta=0;
return;
}
if(jji>=24) {
for(jji=0;jji<24;jji++) {
XinRf315_Value[0]<<=1;
if( Hlcntshu[jji]<300) {
XinRf315_Value[0]|=1;
}
else {
XinRf315_Value[0]&=( (unsigned long)(~1) );
}
}
if(XinRf315_B==0) {
XinRf315_B=1;
RF_sta=0;
XinRf315_Value[1]=XinRf315_Value[0];
}
jji=1;
break;
}
}
}
EA=1;
}
else {
RF_sta=0;
}
break;
default:
RF_sta=0;
break;
}
}
/*
{
switch(RF_sta) {
case 0:
WeiShu=0; //接收到的位数复位
ppp2=P2;
if(RF315_in_P==0) {
RF_sta=1;
High_Cnt=1;
}
break;
case 1: //检测高电平
if(RF315_in_P==0) { // if high
High_Cnt++;
}
else {
RF_sta=2;
Low_Cnt=1;
}
break;
case 2: //检测低电平
if(RF315_in_P==1) { //if di
Low_Cnt++;
if(WeiShu>=24) {
if( High_Cnt==LOWV&&Low_Cnt>=(8*LOWV) ) {
// if( High_Cnt==LOWV&&High_Cnt==(LOWV-1)&&Low_Cnt>=(8*LOWV) ) {
//在这里接收到一帧数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -