⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 2051数字频率计源码,运行在AT892051上
💻 C
字号:



#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;		//开机等待2秒钟
  else save.erase_wait_time=0;

  if((E_read(0,&i),i)!=SAVE_RIGHT_FLAG){        				// *********   无纪录数据:   ********** //
	BeepN(1,50);								//无纪录数据响1声
    for(i=2;i<=15;i++)  						
    { 
	    do														//初始化2-15为16-29.这是绝对地址
	    {	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.这是默认的数据
	    {	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.这是数据新地址
    {	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);  	//存存储状态标志:0xaa
	wait_5ms();

    do															//初始化0为AA.这是使用标志
    {	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=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;
		}
	}														//判断两份数据是否相等

	if(j==0)												//两份相等,无错
	{
	    for(i=0;i<TIME_LEN;i++)								//无错读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);	//保存标志
	}
	else													//不等,有错:
	{
		E_read( (E_read(SAVE_FLAG_POINT,&value),value) , &dont_die);//有错读存储标志

		if( dont_die==SAVE_A )
		{
BeepN(2,10);								//取A则想2声
		    for(i=0;i<TIME_LEN;i++)									//标志是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														//标志是B,则A已存完,取A
		{															//若标志错,说明开始操作标志,
BeepN(3,10);								//取B则想3声
		    for(i=0;i<TIME_LEN;i++)									//那么A已经存完,故以为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);		//标志不对保存标志为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);			//读齿数
  }


rom_vivid=TRUE;
goto good_rom;

l_bad_eeprom:
	work.error=ERROR_ROM_DO_NOT_EXIST;						//存储器不存在或坏的存储器
	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;											//清除数据存储指令






//==============  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
}






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -