📄 tinter.c
字号:
ComHandle[0]->CanRxdBuf[time_value+2]=RCAN0_BYT2;
ComHandle[0]->CanRxdBuf[time_value+3]=RCAN0_BYT3;
ComHandle[0]->CanRxdBuf[time_value+4]=RCAN0_BYT4;
ComHandle[0]->CanRxdBuf[time_value+5]=RCAN0_BYT5;
ComHandle[0]->CanRxdBuf[time_value+6]=RCAN0_BYT6;
Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
time_value=0;
break;
default: break;
}
}else
{//----------------------------
if(value==0x7f)
{//对时
switch(RCAN0_LEN)
{
case 0x08:ClockBuf[0]=RCAN0_BYT0;
ClockBuf[1]=RCAN0_BYT1;
ClockBuf[2]=RCAN0_BYT2;
ClockBuf[3]=RCAN0_BYT3;
ClockBuf[4]=RCAN0_BYT4;
ClockBuf[5]=RCAN0_BYT5;
ClockBuf[6]=RCAN0_BYT6;
break;
case 0x28:ClockBuf[7] =RCAN0_BYT0;
ClockBuf[8] =RCAN0_BYT1;
ClockBuf[9] =RCAN0_BYT2;
ClockBuf[10]=RCAN0_BYT3;
ClockBuf[11]=RCAN0_BYT4;
ClockBuf[12]=RCAN0_BYT5;
ClockBuf[13]=RCAN0_BYT6;
value=ClockBuf[6];
value=value+ClockBuf[7];
value=value+ClockBuf[8];
value=value+ClockBuf[9];
value=value+ClockBuf[10];
value=value+ClockBuf[11];
value=value+ClockBuf[12];
if(value==ClockBuf[13])
{
portid=DS_REGA;
value=0x26;
asm estb value, [portid];
portid=DS_REGB;
value=0x8E;
asm estb value, [portid];
portid=DS_SECOND;
value=ClockBuf[12];
time_value=(value/16)*10;
value=value & 0x0f;
value=value+time_value;
asm estb value, [portid];
portid=DS_MINUTE;
value=ClockBuf[11];
time_value=(value/16)*10;
value=value & 0x0f;
value=value+time_value;
asm estb value, [portid];
portid=DS_HOUR;
value=ClockBuf[10];
time_value=(value/16)*10;
value=value & 0x0f;
value=value+time_value;
asm estb value, [portid];
portid=DS_DATE;
value=ClockBuf[9];
time_value=(value/16)*10;
value=value & 0x0f;
value=value+time_value;
asm estb value, [portid];
portid=DS_MONTH;
value=ClockBuf[8];
time_value=(value/16)*10;
value=value & 0x0f;
value=value+time_value;
asm estb value, [portid];
portid=DS_YEAR;
value=ClockBuf[7];
time_value=(value/16)*10;
value=value & 0x0f;
value=value+time_value;
asm estb value, [portid];
portid=DS_CENTURY;
value=20;
asm estb value, [portid];
portid=DS_REGB;
value=0x1E;
asm estb value, [portid];
portid=DS_REGC;
asm eldb value, [portid];
portid=DS_REGD;
asm eldb value, [portid];
}
break;
}//switch
}//对时
}//--------------------------------
CAN0_CMD=RCAN_RELEASE;
}//接收中断
value=CAN0_STS;
if((value & 0x40)!=0)
{//错误处理
pVar->Can_Error[0]++;
CAN0_CMD=RCAN_RELEASE;
}
if((value & 0x04)!=0)
{//发送中断
if(ComHandle[0]->TransCanMail!=NULL)
{
TCAN0_ID =(ComHandle[0]->TransCanMail)->Data[0];
TCAN0_LEN =(ComHandle[0]->TransCanMail)->Data[1];
TCAN0_INDX =(ComHandle[0]->TransCanMail)->Data[2];
TCAN0_BYT0 =(ComHandle[0]->TransCanMail)->Data[3];
TCAN0_BYT1 =(ComHandle[0]->TransCanMail)->Data[4];
TCAN0_BYT2 =(ComHandle[0]->TransCanMail)->Data[5];
TCAN0_BYT3 =(ComHandle[0]->TransCanMail)->Data[6];
TCAN0_BYT4 =(ComHandle[0]->TransCanMail)->Data[7];
TCAN0_BYT5 =(ComHandle[0]->TransCanMail)->Data[8];
TCAN0_BYT6 =(ComHandle[0]->TransCanMail)->Data[9];
ComHandle[0]->TransCanMail=(ComHandle[0]->TransCanMail)->Link;
CAN0_CMD=TCAN_REQUEST;
if(ComHandle[0]->TransCanMail==NULL)
{
CAN0_CTL=CAN_CTRL_RIE;
ComHandle[0]->Status=02; //wait;
//屏蔽发送中断 等待接收
}else CAN0_CTL=CAN_CTRL_TIE;
}else CAN0_CTL=CAN_CTRL_RIE;
Task[0].WaitStatus |=1;
Task[0].WaitStatus &=Task[0].WaitControl;
}
break;
case 0x14: /* EPA4 中断 */
time_value=epa4_time;
break;
default: break;
}
int_no = epaipv; /* An interrupt EPAx has occured. */
}
}
void Exint_isr(void)
{
wsr=0;
int_mask=int_mask | EPA0_INT_BIT;
// if(Pass==1)
// {
// Task[YcCalcTaskNo].WaitStatus =Task[YcCalcTaskNo].WaitStatus | 0x02;
// }
// Pass++;
}
void EPA0_SoftTimer(void)
{ /* EPA0 中断 AD7865 */
register unsigned int value;
wsr=0;
value=epa0_time;
if(Pass<nextSampleTable->SLimit)
{
value=Pass*4;
ADBUF0[value]=AD_DATA; value++;
ADBUF0[value]=AD_DATA; value++;
ADBUF0[value]=AD_DATA; value++;
ADBUF0[value]=AD_DATA; value++;
Pass++;
}else
{
if(Pass==nextSampleTable->SLimit)
{
Task[YcCalcTaskNo].WaitStatus =Task[YcCalcTaskNo].WaitStatus | 0x02;
}else Pass++;
}
p2_reg |=0x08;
p2_reg &=0xf7;
p2_reg |=0x08;
}
void EPA2_SoftTimer(void) /* 1S */
{ /* EPA2 中断 DS12887 IRQ 秒中断 */
register unsigned long portid;
register unsigned char value;
wsr=0;
int_mask=int_mask | EPA0_INT_BIT;
value=epa2_time;
msvalue=0;
portid=DS_SECOND;
asm eldb value, [portid];
Sys_Second=value;
portid=DS_MINUTE;
asm eldb value, [portid];
Sys_Minute=value;
portid=DS_HOUR;
asm eldb value, [portid];
Sys_Hour=value;
portid=DS_DATE;
asm eldb value, [portid];
Sys_Day=value;
portid=DS_MONTH;
asm eldb value, [portid];
Sys_Month=value;
portid=DS_YEAR;
asm eldb value, [portid];
Sys_Year=value;
portid=DS_CENTURY;
asm eldb value, [portid];
Sys_Century=value;
portid=DS_REGC;
asm eldb value, [portid];
portid=DS_REGD;
asm eldb value, [portid];
}
void EPA3_SoftTimer(void) /* 1ms */
{
int i;
register unsigned long portid;
register unsigned int portioa;
register unsigned int portiob;
register unsigned char value;
register unsigned char data;
register unsigned char image;
wsr=0;
int_mask=int_mask | EPA0_INT_BIT;
value=epa3_time;
pVar->sdelay++;
/* YkTask ================================================= */
Task51: value=Task[51].Use;
image=Task[51].WaitControl;
asm
{
bbc value, 0, Task50;
bbs image, 7, Task51_timer;
}
asm br Task50;
Task51_timer: portioa=Task[51].TimerCount;
portioa=portioa-1;
Task[51].TimerCount=portioa;
asm
{
cmp r0,portioa;
bne Task51_OverPoll;
}
portioa=Task[51].TimerLimit;
if(portioa!=0)
{
Task[51].WaitStatus=Task[51].WaitStatus | 0x80; //定时到
Task[51].TimerCount=portioa;//初始化时间基值
}
Task51_OverPoll:asm
{
bbs image, 6, Task51_OverWait;
};
asm br Task50;
Task51_OverWait:portioa=Task[51].OverWaitCount;
portioa=portioa-1;
Task[51].OverWaitCount=portioa;
asm
{
cmp r0, portioa;
bne Task50;
}
Task[51].WaitStatus =Task[51].WaitStatus | 0x40;//定时到
//Task[51].WaitControl=Task[51].WaitControl & 0xBF;//定时到
/* YcCalc ===Task=============================================== */
Task50: value=Task[50].Use;
image=Task[50].WaitControl;
asm
{
bbc value, 0, Task49;
bbs image, 7, Task50_timer;
}
asm br Task49;
Task50_timer: portioa=Task[50].TimerCount;
portioa=portioa-1;
Task[50].TimerCount=portioa;
asm
{
cmp r0,portioa;
bne Task50_OverPoll;
}
portioa=Task[50].TimerLimit;
if(portioa!=0)
{
Task[50].WaitStatus=Task[50].WaitStatus | 0x80; //定时到
Task[50].TimerCount=portioa;//初始化时间基值
}
Task50_OverPoll:asm
{
bbs image, 6, Task50_OverWait;
};
asm br Task49;
Task50_OverWait:portioa=Task[50].OverWaitCount;
portioa=portioa-1;
Task[50].OverWaitCount=portioa;
asm
{
cmp r0, portioa;
bne Task49;
}
Task[50].WaitStatus =Task[50].WaitStatus | 0x40;//定时到
//Task[50].WaitControl=Task[50].WaitControl & 0xBF;//定时到
/* XmScan ===Task=============================================== */
Task49: value=Task[49].Use;
image=Task[49].WaitControl;
asm
{
bbc value, 0, Task48;
bbs image, 7, Task49_timer;
}
asm br Task48;
Task49_timer: portioa=Task[49].TimerCount;
portioa=portioa-1;
Task[49].TimerCount=portioa;
asm
{
cmp r0,portioa;
bne Task49_OverPoll;
}
portioa=Task[49].TimerLimit;
if(portioa!=0)
{
Task[49].WaitStatus=Task[49].WaitStatus | 0x80; //定时到
Task[49].TimerCount=portioa;//初始化时间基值
}
Task49_OverPoll:asm
{
bbs image, 6, Task49_OverWait;
};
asm br Task48;
Task49_OverWait:portioa=Task[49].OverWaitCount;
portioa=portioa-1;
Task[49].OverWaitCount=portioa;
asm
{
cmp r0, portioa;
bne Task48;
}
Task[49].WaitStatus =Task[49].WaitStatus | 0x40;//定时到
//Task[49].WaitControl=Task[49].WaitControl & 0xBF;//定时到
/* DisPlay======Task============================================ */
Task48: value=Task[48].Use;// asm eldb value, 2350[portid];
image=Task[48].WaitControl;
asm
{
bbc value, 0, Task47;
bbs image, 7, Task48_timer;
}
asm br Task47;
Task48_timer: portioa=Task[48].TimerCount;
portioa=portioa-1;
Task[48].TimerCount=portioa;
asm
{
cmp r0,portioa;
bne Task48_OverPoll;
}
portioa=Task[48].TimerLimit;
if(portioa!=0)
{
Task[48].WaitStatus=Task[48].WaitStatus | 0x80; //定时到
Task[48].TimerCount=portioa;//初始化时间基值
}
Task48_OverPoll:asm
{
bbs image, 6, Task48_OverWait;
};
asm br Task47;
Task48_OverWait:portioa=Task[48].OverWaitCount;
portioa=portioa-1;
Task[48].OverWaitCount=portioa;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -