📄 tsystem.c
字号:
ComHandle[sio]->TxdProWarn=0;
InitialY12Task(sio);
break;
case TaskNoCOM02: //COM3 驱动程序
Init_COM3();//16C554_CSA
ComHandle[sio]->UseInfo=2;
ComHandle[sio]->Status=0x02;
//0:未初始化 1:TXD 2:Wait 3:STOP
ComHandle[sio]->CanRxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->CanRxdBuf,0,300);
ComHandle[sio]->headCanMail=NULL;
ComHandle[sio]->TransCanMail=NULL;
ComHandle[sio]->RxdBuf=(unsigned int *)malloc(300);
memset(ComHandle[sio]->RxdBuf,0,300);
ComHandle[sio]->RxdBufTail = 0;
ComHandle[sio]->RxdBufHead = 0;
ComHandle[sio]->RxdBufLength = 0;
ComHandle[sio]->RxdBufSize = 300;
ComHandle[sio]->RxdProWarn = 1;
ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->TxdBuf,0,300);
ComHandle[sio]->TxdBufHead=0;
ComHandle[sio]->TxdBufTail=0;
ComHandle[sio]->TxdBufLength=0;
ComHandle[sio]->TxdBufSize=300;
ComHandle[sio]->TxdProWarn=0;
InitialY12Task(sio);
break;
case TaskNoCOM03: //COM4 驱动程序
Init_COM4();//16C554_CSB
ComHandle[sio]->UseInfo=2;
ComHandle[sio]->Status=0x02;
//0:未初始化 1:TXD 2:Wait 3:STOP
ComHandle[sio]->CanRxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->CanRxdBuf,0,300);
ComHandle[sio]->headCanMail=NULL;
ComHandle[sio]->TransCanMail=NULL;
ComHandle[sio]->RxdBuf=(unsigned int *)malloc(300);
memset(ComHandle[sio]->RxdBuf,0,300);
ComHandle[sio]->RxdBufTail = 0;
ComHandle[sio]->RxdBufHead = 0;
ComHandle[sio]->RxdBufLength = 0;
ComHandle[sio]->RxdBufSize = 300;
ComHandle[sio]->RxdProWarn = 1;
ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->TxdBuf,0,300);
ComHandle[sio]->TxdBufHead=0;
ComHandle[sio]->TxdBufTail=0;
ComHandle[sio]->TxdBufLength=0;
ComHandle[sio]->TxdBufSize=300;
ComHandle[sio]->TxdProWarn=0;
InitialY12Task(sio);
break;
case TaskNoCOM04: //COM5 驱动程序
Init_COM5();//16C554_CSC
ComHandle[sio]->UseInfo=2;
ComHandle[sio]->Status=0x02;
//0:未初始化 1:TXD 2:Wait 3:STOP
ComHandle[sio]->CanRxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->CanRxdBuf,0,300);
ComHandle[sio]->headCanMail=NULL;
ComHandle[sio]->TransCanMail=NULL;
ComHandle[sio]->RxdBuf=(unsigned int *)malloc(300);
memset(ComHandle[sio]->RxdBuf,0,300);
ComHandle[sio]->RxdBufTail = 0;
ComHandle[sio]->RxdBufHead = 0;
ComHandle[sio]->RxdBufLength = 0;
ComHandle[sio]->RxdBufSize = 300;
ComHandle[sio]->RxdProWarn = 1;
ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->TxdBuf,0,300);
ComHandle[sio]->TxdBufHead=0;
ComHandle[sio]->TxdBufTail=0;
ComHandle[sio]->TxdBufLength=0;
ComHandle[sio]->TxdBufSize=300;
ComHandle[sio]->TxdProWarn=0;
InitialY12Task(sio);
break;
case TaskNoCOM05: //COM6 驱动程序
Init_COM6();//16C554_CSD
ComHandle[sio]->UseInfo=2;
ComHandle[sio]->Status=0x02;
//0:未初始化 1:TXD 2:Wait 3:STOP
ComHandle[sio]->CanRxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->CanRxdBuf,0,300);
ComHandle[sio]->headCanMail=NULL;
ComHandle[sio]->TransCanMail=NULL;
ComHandle[sio]->RxdBuf=(unsigned int *)malloc(300);
memset(ComHandle[sio]->RxdBuf,0,300);
ComHandle[sio]->RxdBufTail = 0;
ComHandle[sio]->RxdBufHead = 0;
ComHandle[sio]->RxdBufLength = 0;
ComHandle[sio]->RxdBufSize = 300;
ComHandle[sio]->RxdProWarn = 1;
ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
memset(ComHandle[sio]->TxdBuf,0,300);
ComHandle[sio]->TxdBufHead=0;
ComHandle[sio]->TxdBufTail=0;
ComHandle[sio]->TxdBufLength=0;
ComHandle[sio]->TxdBufSize=300;
ComHandle[sio]->TxdProWarn=0;
InitialY12Task(sio);
break;
default: break;
}
return (TRUE);
}
unsigned char InitialComHandle(void)
{
int i;
for(i=0;i<MAXCOMNUM;i++)
{
ComHandle[i]=(struct TComStruct *)malloc(sizeof(struct TComStruct));
if(ComHandle[i]==NULL) return(FALSE);
memset(ComHandle[i],0,sizeof(struct TComStruct));
}
return (TRUE);
}
unsigned char CreateDbase(void)
{ //YX SOE AC DC LN YM DW YK
pDataLibary=(struct Libarystruct *)malloc(sizeof(struct Libarystruct));
if(pDataLibary==NULL) return(FALSE);
memset(pDataLibary,0,sizeof(struct Libarystruct));
pDataLibary->yxbuf=YXBUF;
pDataLibary->ymbuf=YMBUF;
return (TRUE);
}
void DbaseTask(void)
{
int i,j,k,m;
TakeLetterDbase(); //要求处理接收的邮件
if(((TaskStatus(DbaseTaskNo)&0x80)!=0)) //定时巡检
{//档位生成
ResetTimer(DbaseTaskNo);
for(i=0;i<4;i++)
{
switch(DWTYPE[i])
{
case 0x00://编码型
j=0;
k=DWBNO[i][4];
if(k!=0)
{
k--;
if( ChkBit(YXBUF,k)!=0) j=j+16;
}
k=DWBNO[i][3];
if(k!=0)
{
k--;
if( ChkBit(YXBUF,k)!=0) j=j+8;
}
k=DWBNO[i][2];
if(k!=0)
{
k--;
if( ChkBit(YXBUF,k)!=0) j=j+4;
}
k=DWBNO[i][1];
if(k!=0)
{
k--;
if( ChkBit(YXBUF,k)!=0) j=j+2;
}
k=DWBNO[i][0];
if(k!=0)
{
k--;
if( ChkBit(YXBUF,k)!=0) j=j+1;
}
pDataLibary->dw[i].dw=j;
pDataLibary->dw[i].dwvalue=j*25;
break;
case 0x01://位置型
k=0;
for(j=0;j<20;j++)
{
m=DWBNO[i][j];
if(m!=0)
{
m--;
if(ChkBit(YXBUF,m)!=0)
{
k=j+1;
break;
}
}
}
pDataLibary->dw[i].dw=k;
pDataLibary->dw[i].dwvalue=k*25;
break;
case 0x02://直流型
k=DWBNO[i][0];
if(k==0)
{
j=0;
}else
{
k--;
j=ADCLIB[k].ZVALUE[0];
}
j=j+125;
k=j/250;
pDataLibary->dw[i].dw=k;
pDataLibary->dw[i].dwvalue=k*25;
break;
}
}
}
}
void TakeLetterDbase(void)
{
if(TRead(DbaseTaskNo,pDataLibary->Letter))
{
// 0 长度
// 1 目的任务号
// 2 源任务号
// 3 cmd
// 4 datbuf[]
if(pDataLibary->Letter[0]==0) return;
switch(pDataLibary->Letter[3])
{
default: break;
}
}
}
void YkTask(void)
{
int i,n,j,m;
unsigned char ch, SourceTaskNum,YkCmd,YkNum,YkTyp,YkRet;
if(((TaskStatus(YkTaskNo)&0x20)!=0))
{//接收到1个邮件
Task[YkTaskNo].WaitStatus=ch;
if(TRead(YkTaskNo,pVar->YKRecLetter))
{
/* : YkSet YkRet YkExe YkEsc
length : 0 0x08 0x08 0x08 0x08
comack : 1 0x00 0x00 0x00 0x00
Node : 2 0x00 0x00 0x00 0x00
DestTask: 3 YkTaskNo YkTaskNo YkTaskNo YkTaskNo
SourTask: 4 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
: 5 YKCMD=0xE0 YKCMD=0xE1 YKCMD=0xE2 YKCMD=0xE3
: 6 YKTYP=0xCC/0x33 YKTYP=0xCC/0x33/0xFF YKTYP=0xAA YKTYP=0x55
: 7 YKNUM YKNUM YKNUM YKNUM
*/
SourceTaskNum=pVar->YKRecLetter[4];
YkCmd=pVar->YKRecLetter[5];
YkTyp=pVar->YKRecLetter[6];
YkNum=pVar->YKRecLetter[7];
switch(YkCmd)
{
case 0xE0://遥控预置
if(pVar->YKFG!=0) break;
YkRet=YkTyp;
if(SetYknum(YkNum,YkTyp)==FALSE) YkRet=0xff;
pVar->YkTyp=YkTyp;
pVar->YkNum=YkNum;
pVar->YKTrnLetter[0]=0x08;
pVar->YKTrnLetter[1]=0x00;
pVar->YKTrnLetter[2]=0x00;
pVar->YKTrnLetter[3]=SourceTaskNum;
pVar->YKTrnLetter[4]=YkTaskNo;
pVar->YKTrnLetter[5]=0xE1;
pVar->YKTrnLetter[6]=YkRet;
pVar->YKTrnLetter[7]=YkNum;
if(TWrite(pVar->YKTrnLetter))
{
pVar->YKFG=0xff;
pVar->ykcomm=yksetup;
SetTimer(YkTaskNo,30720);//30 秒
}else
{
pVar->ykcomm=yknull;
pVar->YKFG=0;
ClearYknum(YkNum);
SetTimer(YkTaskNo,0);
};
break;
case 0xE2://遥控执行
if(pVar->YKFG==0) break;
if(YkTyp!=0xAA) break;
ExeYknum(pVar->YkNum,pVar->YkTyp);
Wait(YkTaskNo,2048);
break;
case 0xE3://遥控撤消
EscYknum(pVar->YkNum);
pVar->ykcomm=yknull;
pVar->YKFG=0;
SetTimer(YkTaskNo,0);
break;
}
}
}
if(((TaskStatus(YkTaskNo)&0x40)!=0))
{// 继电器复归
ResetWait(YkTaskNo);
EscYknum(pVar->YkNum);
pVar->ykcomm=yknull;
pVar->YKFG=0;
SetTimer(YkTaskNo,0);
}
if(((TaskStatus(YkTaskNo)&0x80)!=0))
{// 遥控命令超时等待 30秒
ResetTimer(YkTaskNo);
EscYknum(pVar->YkNum);
SetTimer(YkTaskNo,0);
pVar->ykcomm=yknull;
pVar->YKFG=0;
}
}
void Init_BlockTrans_PTS_Exint(void)
{
SamplePts_Exint.ptscount=255; /* 控制块计数 */
SamplePts_Exint.ptssrc=(unsigned int)AD7874_DAT;/* 源地址 */
SamplePts_Exint.ptsdst=(unsigned int)ADBUF0; /* 目地址 */
SamplePts_Exint.ptscon.di=1; /*1:自动增1 目 */
SamplePts_Exint.ptscon.si=0; /*1:自动增1 源 */
SamplePts_Exint.ptscon.du=1; /* 0:块传递完成后重载ptsdst */
/* 1:块传递完成后保持ptsdst */
SamplePts_Exint.ptscon.su=1; /* 0:块传递完成后重载ptssrc */
/* 1:块传递完成后保持ptssrc */
SamplePts_Exint.ptscon.b_w=0; /* 0:字传输 1:字节传输 */
SamplePts_Exint.ptscon.mode=0; /* 100:单字(节)传输 */
/* 000:块传输 */
/* 110:AD传输 */
/* 010:PWM传输 */
SamplePts_Exint. ptsblock=4; /* */
setbit(&p2_dir, 2); /* P2.2=inport */
setbit(&p2_mode,2); /* P2.2=Exint */
setbit(&p2_reg, 2); /* P2.2作为输入口必须先置 1 */
int_pend1=int_pend1 & 0xbf;
// ptssel=ptssel | EXINT_INT_BIT;
// int_mask1=int_mask1 | 0x40;
}
void Init_BlockTrans_PTS_EPA0(void)
{
SamplePts_Epa0.ptscount=1; /* 控制块计数 */
SamplePts_Epa0.ptssrc=(unsigned int)(&epa0_time); /* 源地址 */
SamplePts_Epa0.ptsdst=(unsigned int)(&epa0value); /* 目地址 */
SamplePts_Epa0.ptscon.di=1; /*1:自动增1 目 */
SamplePts_Epa0.ptscon.si=0; /*1:自动增1 源 */
SamplePts_Epa0.ptscon.du=1; /* 0:块传递完成后重载ptsdst */
/* 1:块传递完成后保持ptsdst */
SamplePts_Epa0.ptscon.su=0; /* 0:块传递完成后重载ptssrc */
/* 1:块传递完成后保持ptssrc */
SamplePts_Epa0.ptscon.b_w=0; /* 0:字传输 1:字节传输 */
SamplePts_Epa0.ptscon.mode=0; /* 100:单字(节)传输 */
/* 000:块传输 */
/* 110:AD传输 */
/* 010:PWM传输 */
SamplePts_Epa0. ptsblock=1; /* */
// ptssel=ptssel | 0x10;
int_mask=int_mask | EPA0_INT_BIT;
}
void Init_EPA0_Freq(unsigned int freq)
{
t2control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
epa0_con=COMPARE|RE_ENABLE|USE_TIMER2|RESET_OWN_TIMER; /* 软件定时器 */
setbit(&p1_reg, 0); /* P1.0作为输入口必须先置 1 */
setbit(&p1_dir, 0); /* P1.0=inport */
setbit(&p1_mode,0); /* P1.0=EPA0 */
epa0_time=freq;/* 625 */
// int_mask=int_mask | EPA0_INT_BIT;
}
void Init_SoftTimer(void)
{
t1control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
epa3_con=COMPARE|RE_ENABLE|USE_TIMER1|RESET_OWN_TIMER; /* 软件定时器 */
setbit(&p1_reg, 3); /* P1.3作为输入口必须先置 1 */
clrbit(&p1_dir, 3); /* P1.3=outport */
clrbit(&p1_reg, 3); /* P1.3=0 */
setbit(&p1_dir, 3); /* P1.3=inport */
setbit(&p1_mode,3); /* P1.3=EPA3 */
epa3_time=5000;/* 1ms */
int_mask=int_mask | EPA3_INT_BIT;
}
void Init_COM1(void)
{
unsigned char ch;
clrbit(&p2_mode, 0);
clrbit(&p2_mode, 1); /* P2.0 P2.1 I/O */
clrbit(&p2_dir, 0); /* P2.0=outport */
clrbit(&p2_dir, 1); /* P2.1=outport */
setbit(&p2_reg, 0); /* P2.0作为输入口必须先置 1 */
setbit(&p2_reg, 1); /* P2.1作为输入口必须先置 1 */
switch(comset[2].speed) //20000000/speed/16
{
case 0x00://300B
sp_baud=0x9046; /* 300BPS */
break;
case 0x01://600B
sp_baud=0x8823; /* 600BPS */
break;
case 0x02://1200B
sp_baud=0x8411; /* 1200BPS */
break;
case 0x03://1800B
sp_baud=0x82B6; /* 1800BPS */
break;
case 0x04://2400B
sp_baud=0x8208; /* 2400BPS */
break;
case 0x05://3600B
sp_baud=0x815B; /* 3600BPS */
break;
case 0x06://4800B
sp_baud=0x8104; /* 4800BPS */
break;
case 0x07://7200B
sp_baud=0x80AD; /* 7200BPS */
break;
case 0x08://9600B
sp_baud=0x8081; /* 9600BPS */
break;
case 0x09://19.2KB
sp_baud=0x8041; /* 19.2kbS */
break;
}
// sp_baud=0x8208; /* 2400BPS */
sp_con=0x09; /* 模式一 */
ch=sp_status;
setbit(&p2_reg, 0); /* P2.0作为输入口必须先置 1 */
setbit(&p2_reg, 1); /* P2.1作为输入口必须先置 1 */
clrbit(&p2_dir, 0); /* P2.0=outport */
setbit(&p2_dir, 1); /* P2.1=inport */
setbit(&p2_mode, 0);
setbit(&p2_mode, 1); /* P2.0 P2.1为特殊功能方式 */
wsr=0x1f;
// sp_baud_1f=0x8208; /* 2400BPS */
sp_con_1f=0x09;/* 模式一 */
ch=sp_status_1f;
p2_reg_1f=p2_reg_1f | 0xff;
p2_dir_1f=p2_dir_1f & 0xfe;
p2_mode_1f=p2_mode_1f | 0x03;
p2_reg_1f=p2_reg_1f | 0xff;
wsr=0;
// p2_dir &=0xfe; /* TXD输出 */
// p2_mode |=0x03;
int_mask1=int_mask1 | 0x18;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -