📄 tsystem.c
字号:
outportb(PTC_A_CMD, 0xFF); /* output */
outportb(PTC_B_CMD, 0xFF); /* output */
InitYk();
clrbit(&p2_dir, 3); /* P2.3=outport */
clrbit(&p2_mode,3); /* P2.3=I/O */
clrbit(&p6_dir,4); /* P6.4=SCK=outport */
clrbit(&p6_dir,5); /* P6.5=SO=outport */
clrbit(&p6_dir,6); /* P6.6=CS=outport */
clrbit(&p6_dir,7); /* P6.7=WP=outport */
clrbit(&p6_mode,4); /* P6.4=I/O=SCK */
clrbit(&p6_mode,5); /* P6.5=I/O=SO=SI */
clrbit(&p6_mode,6); /* P6.6=I/O=CS */
clrbit(&p6_mode,7); /* P6.7=I/O=WP */
setbit(&p6_reg, 4); /* P6.4=I/O=VCC */
setbit(&p6_reg, 5); /* P6.5=I/O=VCC */
setbit(&p6_reg, 6); /* P6.6=I/O=VCC */
setbit(&p6_reg, 7); /* P6.7=I/O=VCC */
Wren_Cmd(); //写允许命令
Wren_Cmd(); //写允许命令
Wrsr_Clr(); //1.4 second reset
for(i=0;i<10;i++)
{
delay(1000);
}
for(i=0;i<32;i++)
{
yktest[i]=0;
}
for(i=0;i<10;i++)
{
KeyCount[i]=0;
};
for(i=0;i<25;i++)
{
YSFG[i]=0;
}
YSIPR=(unsigned long)SoeBuf;
YSCON=0;
rst_wdog();
rst_wdog();
for(i=0;i<120;i++)
{
BvBuf[i]=0;
SoeBuf[i].msl=0;
SoeBuf[i].msh=0;
SoeBuf[i].sec=0;
SoeBuf[i].hou=0;
SoeBuf[i].min=0;
SoeBuf[i].day=0;
SoeBuf[i].object0=0;
SoeBuf[i].object1=0;
}
rst_wdog();
for(i=0;i<0x1000;i++)
{
YXBUF0[i]=0;
YXBUF1[i]=0;
};
rst_wdog();
for(i=0;i<1024;i++)
{
LastLcdBuf[i]=~LcdBuf[i];
};
epa0error=0;
errorf=0;
rst_wdog();
for(i=0;i<MAXTASK;i++)
{
Task[i].Use=0;
Task[i].ResetNum=0; //复位次数
Task[i].WaitControl=0x00;
Task[i].WaitStatus=0;
Task[i].TimerCount=0;
Task[i].TimerLimit=0;
Task[i].OverWaitCount=0;
Task[i].OverWaitLimit=0;
Task[i].MailQueueLimit=0;
Task[i].MailQueueLength=0;
Task[i].MailQueueHead=NULL;
Task[i].MailQueueTail=NULL;
Task[i].Args=NULL;
Task[i].TaskFunc=NULL;
};
rst_wdog();
outportb(PSD_CONTROL_E, 0x00); /* I/O */
outportb(PSD_DIRECTION_E, 0xBF); /* PE.7 OUTPUT LED2 */
outportb(PSD_DRIVE_E, 0x00); /* 互补输出 */
outportb(PSD_DIRECTION_B, 0xff); /* outport */
outportb(PSD_DRIVE_B, 0x00); /* 互补输出 */
outportb(PSD_DRIVE_A, 0x00); /* 互补输出 */
outportb(PSD_DRIVE_F, 0x00); /* 互补输出 */
outportb(PSD_DIRECTION_A, 0x00); /* inport */
ch=inportb(PSD_DATAIN_A);
ch=ch | 0x02;
outportb(PSD_DIRECTION_A, 0xff); /*outport */
outportb(PSD_DATAOUT_A, ch);
outportb(PSD_DRIVE_A, 0x00); /* 互补输出 */
outportb(PSD_PMMR0, 0x38);
outportb(PSD_PMMR2, 0x70);
setbit(&p1_reg, 2); /* P1.2作为输入口必须先置 1 */
clrbit(&p1_dir, 2); /* P1.2=outport */
clrbit(&p1_mode,2); /* P1.2=I/O */
setbit(&p1_reg, 2); /* P1.2作为输入口必须先置 1 */
setbit(&p1_dir, 2); /* P1.2=inport */
setbit(&p1_mode,2); /* P1.2=EPA2 */
epa2_con=CAPTURE|DOWN_EDGE|USE_TIMER1;
int_mask=int_mask | EPA2_INT_BIT;
setbit(&p2_dir, 7); /* P2.7=inport */
clrbit(&p2_mode,7); /* P2.7=I/O */
clrbit(&p2_dir, 3); /* P2.3=outport */
clrbit(&p2_mode,3); /* P2.3=I/O */
/* outportb(DS_REGA, 0x26); *Clock initialize*/
/* outportb(DS_REGB, 0x8E); *Clock initialize*
outportb(DS_SECOND, 30);
outportb(DS_MINUTE, 10);
outportb(DS_HOUR, 12);
outportb(DS_DATE, 18);
outportb(DS_MONTH, 5);
outportb(DS_YEAR, 2);
outportb(DS_CENTURY, 20);
outportb(DS_REGB, 0x1E); */
inportb(DS_REGC);
inportb(DS_REGD);
pVar->KeyFg=0;
msvalue=0;
kr_time_run=0;
XMFlag=0;
XMCount=0;
XM0FullFlag=0;
XM1FullFlag=0;
YS_addr=(unsigned long)YXBUF0;
pVar->IC1821=init1821();
pVar->NewKey=0xffff;
pVar->OldKey=0xffff;
pVar->KeyValue=NULLKEY;
pVar->KeyID=NULLKEY;
outportb(PSD_DIRECTION_B, 0xff); /* outport */
outportb(PSD_DRIVE_B, 0x00); /* 互补输出 */
Lcdoff();
LcdAcmd(0x3E); delay(2000);
LcdBcmd(0x3E); delay(2000);
LcdAcmd(0x3F); delay(2000);
LcdBcmd(0x3F); delay(2000);
LcdAcmd(0x3F); delay(2000);
LcdBcmd(0x3F); delay(2000);
LcdAcmd(0x3F); delay(2000);
LcdBcmd(0x3F); delay(2000);
LcdAcmd(0xC0); delay(2000);
LcdBcmd(0xC0); delay(2200);
LcdAcmd(0xB8); delay(2000);
LcdBcmd(0xB8); delay(2000);
LcdAcmd(0x40); delay(2000);
LcdBcmd(0x40); delay(2000);
MAP(0,0,127,7, PICTURE );
for(i=0;i<MAXCOMNUM;i++) /* 串行通信规约配置表 */
{
ComConfig[i].Use=0;
ComConfig[i].Com=0;
};
ComConfig[0].Use=0x00;
ComConfig[0].Com=0x00; /* 串行通信R13维护软件规约程序 */
rst_wdog();
tcan_num=0;
tcan_len=0;
tcanbuf_len=0;
systimems=0;
SegFg=0;
// InitR13_1();
rst_wdog();
pVar->MenuMode=FACE_MENU;
init_coef();
// flash_boot_set_unlock_bybass();
rst_wdog();
pVar->yxsum=yxnum*20;
pVar->ymsum=ymnum*20;
switch(yxnum)//遥信板个数
{
case 0x01:yx_num=0x01;
break;
case 0x02:yx_num=0x03;
break;
case 0x03:yx_num=0x07;
break;
case 0x04:yx_num=0x0F;
break;
case 0x05:yx_num=0x1F;
break;
case 0x06:yx_num=0x3F;
break;
default: yx_num=0x00;
break;
}
switch(ymnum)//遥脉板个数
{
case 0x01:ym_num=0x01;
break;
case 0x02:ym_num=0x03;
break;
case 0x03:ym_num=0x07;
break;
case 0x04:ym_num=0x0F;
break;
default: ym_num=0x00;
break;
}
pVar->Lcd_BG_Count=10000;
Init_SoftTimer();
InitAD7865();
InitKR();
InitYx();
init_soepm();
InitSampleTable();
InitYC();
InitYk();
InitialComHandle();
InitialComDevice(Can0ComhandleNo);
InitialComDevice(Can1ComhandleNo);
InitialComDevice(TaskNoCOM00);
InitialComDevice(TaskNoCOM01);
InitialComDevice(TaskNoCOM02);
InitialComDevice(TaskNoCOM03);
InitialComDevice(TaskNoCOM04);
InitialComDevice(TaskNoCOM05);
Init_Run_Led();
Default_bvtm();
}
unsigned char InitPostStation(void)
{
int i;
struct Mail FARDATA *TempPtr;
PostStation.MailQueueLength=0;
PostStation.MailQueueHead=NULL;
for(i=0;i<MAXEMPMAIL;i++)
{
// TempPtr=(struct Mail FARDATA *)malloc(sizeof(struct Mail));
// if(TempPtr==NULL)
// {
// return(FALSE);
// }
TempPtr=&Message[i];
TempPtr->Link=PostStation.MailQueueHead;
PostStation.MailQueueHead=TempPtr;
PostStation.MailQueueLength++;
};
PostStation.TotMailNum=PostStation.MailQueueLength;
return(TRUE);
}
void MultiTask(void)
{
unsigned int i=0,j=0,k=0;
register unsigned int port;
register unsigned char value;
unsigned char ch;
union WTEMP_ST wtmp;
enable();
enable_pts();
pVar->ResetSum++;
wtmp.Word=pVar->ResetSum;
Wren_Cmd(); //写允许命令
Byte_Write(0,wtmp.B.Low);
Wren_Cmd(); //写允许命令
Byte_Write(1,wtmp.B.High);
wtmp.B.Low=Byte_Read(0);
wtmp.B.High=Byte_Read(1);
pVar->ResetSum=wtmp.Word;
Wren_Cmd(); //写允许命令
Wrsr_Cmd(); //1.4 second reset
while(1)
{//------------while---------------------------------------
for(i=47;i<MAXTASK;i++)
{
(*(Task[46].TaskFunc))(Task[46].Args);
if(((Task[0].Use) & (Task[0].WaitStatus))) (*(Task[0].TaskFunc))(Task[0].Args);
LCD_Device();
if(((Task[1].Use) & (Task[1].WaitStatus))) (*(Task[1].TaskFunc))(Task[1].Args);
LCD_Device();
if(((Task[2].Use) & (Task[2].WaitStatus))) (*(Task[2].TaskFunc))(Task[2].Args);
LCD_Device();
if(((Task[3].Use) & (Task[3].WaitStatus))) (*(Task[3].TaskFunc))(Task[3].Args);
LCD_Device();
if(((Task[4].Use) & (Task[4].WaitStatus))) (*(Task[4].TaskFunc))(Task[4].Args);
LCD_Device();
if(((Task[5].Use) & (Task[5].WaitStatus))) (*(Task[5].TaskFunc))(Task[5].Args);
LCD_Device();
if(((Task[6].Use) & (Task[6].WaitStatus))) (*(Task[6].TaskFunc))(Task[6].Args);
LCD_Device();
if(((Task[7].Use) & (Task[7].WaitStatus))) (*(Task[7].TaskFunc))(Task[7].Args);
LCD_Device();
(*(Task[46].TaskFunc))(Task[46].Args);
LCD_Device();
if(((Task[i].Use) & (Task[i].WaitStatus)))
{
(*(Task[i].TaskFunc))(Task[i].Args);
LCD_Device();
};
LCD_Device();
KeyScan();
LCD_Device();
};
enable();
rst_wdog();
};//------------while---------------------------------------
}
void SystemInit(void)
{
InitAllVar();
InitPostStation();
InitSysPara();
CreateDbase();
CreateTask();
/* CreateComTask(); */
}
void SystemRun(void)
{
MultiTask();
}
void SystemReset(void)
{
wdog();
while(1)
{
disable();
}
}
void XmScan(void)
{
if(((TaskStatus(XmScanTaskNo) & 0x80)!=0)) //定时巡检
{
ResetTimer(XmScanTaskNo);
SCANKR();
}
// if(((TaskStatus(XmScanTaskNo) & 0x08)!=0))
// {
// }
}
void SetFirstChan(struct SampleTableStruct *pSampleTable)
{
register unsigned int portid;
register unsigned int value;
register unsigned char addr,data;
disable();//电子开关 关断
DataBusOut(BSQ_BOARD_1_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_2_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_3_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_4_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_5_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_6_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_7_573, BSQ_BOARD_NULL);
DataBusOut(BSQ_BOARD_8_573, BSQ_BOARD_NULL);
enable();
//电子开关切换到下一条线路
disable();
addr=pSampleTable->Board1_Addr[0];
data=pSampleTable->Board1_Data[0];
// addr=BSQ_BOARD_1_573;//第1块板
// data=BSQ_BOARD_NUM1;
value=PIO_A_DAT; /* outpout 数据总线 */
asm stb data, [value];
asm stb data, [value];
asm stb data, [value];
value=PIO_B_DAT; /* output 地址总线 */
asm stb addr, [value];
asm stb addr, [value];
asm stb addr, [value];
asm stb addr, [value];
data=0xff;
asm stb data, [value]; //清地址总线
addr=pSampleTable->Board2_Addr[0];
data=pSampleTable->Board2_Data[0];
// addr=BSQ_BOARD_2_573;//第1块板
// data=BSQ_BOARD_NUM1;
value=PIO_A_DAT; /* outpout 数据总线 */
asm stb data, [value];
asm stb data, [value];
asm stb data, [value];
asm stb data, [value];
value=PIO_B_DAT; /* output 地址总线 */
asm stb addr, [value];
asm stb addr, [value];
asm stb addr, [value];
asm stb addr, [value];
asm stb addr, [value];
data=0xff;
asm stb data, [value]; //清地址总线
enable();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -