?? init.c
字號(hào):
#include "paramac.h"
#include "24c01.h"
#include "save.h"
#include "show.h"
#include "debug.h"
// 初始化子程序:
void init(void){
unsigned char i,j;
unsigned char value,dont_die=0;
wait_5ms();
I_init(); //24c01 初始化
timer0_const.high=0xd9;
timer0_const.low=0x0c; //10 mS at 12 MHz
timer0_const.high1=0xf8;
timer0_const.low1=0x5a; //2 mS at 12 MHz
run_time.every_A_seconds=RUN_TIME_EVERY_A_SECONDS;
run_time.every_B_minutes=RUN_TIME_EVERY_B_MINUTES;
test.t_num_c=REFRESH_TIME;
test.t_num_max=TEST_TIME_OVER_TIME;
POWER_DOWN_PIN=1;
POWER_DOWN_PIN=1;
POWER_DOWN_PIN=1;
POWER_DOWN_PIN=1;
if(!KEY_PIN) save.erase_wait_time=200; //開(kāi)機(jī)等待2秒鐘
else save.erase_wait_time=0;
if((E_read(0,&i),i)!=SAVE_RIGHT_FLAG){ // ********* 無(wú)紀(jì)錄數(shù)據(jù): ********** //
BeepN(1,50); //無(wú)紀(jì)錄數(shù)據(jù)響1聲
for(i=2;i<=15;i++)
{
do //初始化2-15為16-29.這是絕對(duì)地址
{ E_write_no_wait(i,i+14);
wait_5ms();
if(++dont_die==0)goto l_bad_eeprom;
}while((E_read(i,&value),value)!=i+14);
do //初始化16-29為0.這是默認(rèn)的數(shù)據(jù)
{ E_write_no_wait(i+14,0);
wait_5ms();
if(++dont_die==0)goto l_bad_eeprom;
}while((E_read(i+14,&value),value)!=0);
}
save.next_addr=SAVE_NEW_DATA; //30H
do //初始化1為30H.這是數(shù)據(jù)新地址
{ E_write_no_wait(1,save.next_addr);
wait_5ms();
if(++dont_die==0)goto l_bad_eeprom;
}while((E_read(1,&value),value)!=save.next_addr);
E_write_no_wait( (E_read(SAVE_FLAG_POINT,&i),i) ,SAVE_A); //存存儲(chǔ)狀態(tài)標(biāo)志:0xaa
wait_5ms();
do //初始化0為AA.這是使用標(biāo)志
{ E_write_no_wait(0,SAVE_RIGHT_FLAG);
wait_5ms();
if(++dont_die==0)goto l_bad_eeprom;
}while((E_read(0,&value),value)!=SAVE_RIGHT_FLAG);
}
else // ******** 有紀(jì)錄數(shù)據(jù): ********* //
{
j=0;
for(i=0;i<TIME_LEN;i++)
{
if( (E_read((E_read(i+SAVE_A_POINT,&value),value),&value),value)!=
(E_read((E_read(i+SAVE_B_POINT,&dont_die),dont_die),&dont_die),dont_die) )
{
j=1;
break;
}
} //判斷兩份數(shù)據(jù)是否相等
if(j==0) //兩份相等,無(wú)錯(cuò)
{
for(i=0;i<TIME_LEN;i++) //無(wú)錯(cuò)讀A或讀B
{
E_read((E_read(i+SAVE_A_POINT,&value),value),&work.time[i]);
}
if((E_read((E_read(SAVE_FLAG_POINT,&value),value),
&dont_die),dont_die)!=SAVE_A)SaveFlag(SAVE_A); //保存標(biāo)志
}
else //不等,有錯(cuò):
{
E_read( (E_read(SAVE_FLAG_POINT,&value),value) , &dont_die);//有錯(cuò)讀存儲(chǔ)標(biāo)志
if( dont_die==SAVE_A )
{
BeepN(2,10); //取A則想2聲
for(i=0;i<TIME_LEN;i++) //標(biāo)志是A,則A未存完,取B
{
E_read((E_read(i+SAVE_B_POINT,&value),value),&work.time[i]);
}
save.rq_save_timeA=0;
SaveA(); //取B后同步A
}
else //標(biāo)志是B,則A已存完,取A
{ //若標(biāo)志錯(cuò),說(shuō)明開(kāi)始操作標(biāo)志,
BeepN(3,10); //取B則想3聲
for(i=0;i<TIME_LEN;i++) //那么A已經(jīng)存完,故以為A正確,也取A
{
E_read((E_read(i+SAVE_A_POINT,&value),value),&work.time[i]);
}
save.rq_save_timeB=0;
SaveB(); //取A后同步B
if((E_read((E_read(SAVE_FLAG_POINT,&value),value),
&dont_die),dont_die)!=SAVE_A)SaveFlag(SAVE_A); //標(biāo)志不對(duì)保存標(biāo)志為A
}
}
save.rq_save_timeA=TIME_LEN;
save.rq_save_timeB=TIME_LEN;
E_read(SAVE_NEXT_POINT,&save.next_addr); //讀新地址
E_read((E_read(SAVE_GEAR_POINT,&i),i),&work.gear_id); //讀齒數(shù)
}
rom_vivid=TRUE;
goto good_rom;
l_bad_eeprom:
work.error=ERROR_ROM_DO_NOT_EXIST; //存儲(chǔ)器不存在或壞的存儲(chǔ)器
rom_vivid=FALSE;
good_rom:
work.gear_num=gear_id_list[work.gear_id];
show_gear_show();
black_left_zero_of_run_time();
save.rq_save_timeA=save.rq_save_timeB=TIME_LEN;
save.rq_save_timeB=TIME_LEN;
save.rq_save_timeA=TIME_LEN;
rq_save_time=FALSE; //清除數(shù)據(jù)存儲(chǔ)指令
//============== T0 inittialize:
TMOD=0x11;
TR0=1;
ET0=1;
//============== T1 inittialize:
// TMOD=(TMOD&0x0f)|0x10;
TR1=1;
ET1=1;
//=============== ext0 inittialize
IT0=1; //edge trag.
EX0=1;
//
EA=1; //this line just enable the MCU's interrupt
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -