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

📄 initial.c

📁 pdh控制程序
💻 C
字号:
#ifndef _INITIAL_C_
#define _INITIAL_C_

#include "api.h"
#include "ioserial.h"


void initial_global_variable( void )
{
	SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
	SYSTEM_DEVICE_STATUS xdata *psdev = &gsystemStauts;

	memset(psys, 0, sizeof(SYSTEM_INFOMATION) );
	memset(psdev, 0, sizeof(SYSTEM_DEVICE_STATUS) );

	psdev->protocol = SYSTEM_PROTOCOL_VERSION;
	psdev->local.protect_condition = IDB_PROTECT_E_3;
	psdev->remote.protect_condition = IDB_PROTECT_E_3;

	psdev->local.soft_version = SYSTEM_SOFTWARE_VERSION;
	psdev->remote.soft_version = SYSTEM_SOFTWARE_VERSION;

	psys->setbuffer[1] |=  SYSTEM_PROTECT_E_3;
	psys->sendrc7017 = SETCMDSERIAL;
	psys->SetCommandCounter = 0;
	psys->system_type = 0xaa;
}

void initial_light( void )
{
	BYTE counter;
	
	for( counter=4; counter>=2;counter-- )
	{
		WriteChip( LOCAL_FIBERALARM_ADDR, ~(0x01<<counter) );
		WriteChip( REMOTE_FIBERALARM_ADDR, ~(0x01<<counter) );
		taskDelay( 300 );
		RUN = ~RUN;
	}
	WriteChip( LOCAL_FIBERALARM_ADDR, 0xfd );
	WriteChip( REMOTE_FIBERALARM_ADDR, 0xfd );
	taskDelay( 300 );
	
	WriteChip( LOCAL_FIBERALARM_ADDR, INVALID );
	WriteChip( REMOTE_FIBERALARM_ADDR, INVALID );
	
	for( counter=0; counter<gSystemInfo.max_system_e1;  counter++ )
	{
		WriteChip( LOCAL_E1ALARM_ADDR, ~(0x01<<counter) );
		WriteChip( REMOTE_E1ALARM_ADDR, ~(0x01<<counter) );
		taskDelay( 300 );
		RUN = ~RUN;
	}
	WriteChip( LOCAL_E1ALARM_ADDR, INVALID );
	WriteChip( REMOTE_E1ALARM_ADDR, INVALID );
	
	/*写软件不环回*/
	WriteChip( SOFTLOOP_ADDR, 0x00 );
}

void Init_w78e58_cpu(void)
{
	CHPENR	= 0x87;/*解锁、在华邦有辅助内部RAM时,它要控制使用辅助RAM的寄存器时需要解锁*/
	CHPENR	= 0x59;/*当解锁后控制完、需要写个0关锁*/
	CC		= 0x10;/*内部辅助RAM使用,0x00不使用*/
	CHPENR	= 0;/*关锁*/
	CN		= 0x00;/*读ROM*/
}

void initial_cpu( void )
{
	DISABLE_INTERRUPT;

	Init_w78e58_cpu();

	TMOD	= 0x21;

	TH0		= 0xb8;		//初始化定时器0
	TL0		= 0x00;		//22.1184MHz时钟下定时时间为10ms
	TR0		= 1;		//定时器运行控制位

	TH1		= 0xfa;		//22.1184MHz时钟下BOAU RATE 9600bps
	TL1		= 0xfa;
	TR1		= 1;

	SCON	= 0x50;		//初始化串行口

	P4CONA	= 0x00;
	P4CONB	= 0x00;
	XICON	= 0x00;
	CS = 0;
	UD = 0;

	INC = 0; 

	PS		= 0;		//串口优先级高
	ET0 	= 1;		//定时器中断允许
	ET1		= 0;		//用于产生波特率,禁止中断
	ES		= 1;
	PT0		= 0;		//定时器优先级低

	initIocomm();
}

#if _LCD_MENU_

BYTE check_system_i2c( void )
{
	BYTE buffer[2][0x10],counter;

#if _LCD_MENU_
	WP = LOW;
#endif
	memset( buffer, 0, sizeof(buffer) );
	for( counter=0; counter<0x10; counter++ )
		buffer[0][counter] = counter;

	I2C_WriteData( 0, 0x10, &buffer[0][0] );
	I2C_ReadData( 0, 0x10, &buffer[1][0] );
	if( memcmp( &buffer[0][0], &buffer[1][0], 0x10 ) )
		return FALSE;
	else
		return TRUE;
}

void init_system_i2c( void )
{
	/*在没有检测到EEPROM时,程序是可以正常运行的,运行灯
	将快速的闪烁*/

	if( check_system_i2c() == TRUE )
	{
		gSystemInfo.run_time = 40;

		init_system_infomation();
	}
	else
		gSystemInfo.run_time = 10;
}

#endif

void initial_system( void )
{
	DISABLE_INTERRUPT;

#if _LCD_MENU_
	WP = HIGH;
#endif

	initial_cpu();

	/*在初始化CPU时打开了中断,在这再次关闭中断*/
	DISABLE_INTERRUPT;
	initial_global_variable();

#if _LCD_MENU_
	/*先初始化LCD和菜单,再读EEPROM控制对比度*/
	menu_key_voice( KEY_VOICE_DISABLE );
	initial_menu();
	init_system_i2c();
#else
	gSystemInfo.run_time = 40;
#endif
    initial_light();
	initial_serial1();
	system_watchdog( SYSTEM_NORMAL );

	ENABLE_INTERRUPT;
}




#endif

⌨️ 快捷键说明

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