📄 initial.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 + -