📄 b3_2006.c
字号:
作者 :
创立时间 :2005.9.8
第 次修改时间/修改者:
</PRE>
***************************************************/
int Read8255(int ID8255PA,int ID8255PB,int ID8255PC)
{
int kpa,kpb,kpc,fhw,qwei;
kpa=ID8255PA;
kpa=kpa & 0x7f;
kpb=ID8255PB;
fhw= kpb&0x01;
kpb=kpb>>1;
kpc=ID8255PC;
qwei= kpc&0x01;
kpc=kpc>>1;
return CM(kpa,kpb,kpc,qwei,fhw);
}
/*! @function
***************************************************
<PRE>
函数名 : <serail() interrupt 4>
功能 : <serial port receive function>
参数 : <void>
返回值 : <void>
抛出异常 : <无>
---------------------------------------------------
备注 : <interrupt function>
典型用法 : < >
---------------------------------------------------
作者 :
创立时间 :2005.9.8
第 次修改时间/修改者:
</PRE>
***************************************************/
void serail() interrupt 4 using 2
{
unsigned char u,jjj,iii;
EA=0;
//if(RI) BEGIN
if(RI)
{
ucReCom[uiRe_In]=SBUF;
if(ucReCom[uiRe_In]=='@')
{
uiRe_In=0;
ucReCom[uiRe_In]=SBUF;
}
if(ucReCom[0]=='@')
{
ucReCom[uiRe_In]=SBUF;
uiRe_In++;
}
//if(ucReCom[uiRe_In-1]=='%') BEGIN
if(ucReCom[uiRe_In-1]=='%')
{
//if(ucReCom[1]!='%') BEGIN
if(ucReCom[1]!='%' && ucReCom[2]!='%')
{
//1.ClosePower
if(ucReCom[1]=='P' && ucReCom[2]=='W' && ucReCom[3]=='0')
{
/******************************/
// EVENTHAND=ClosPow;
PB8255C=0x00;
/*******************************/
goto mk;
}
//2.OpenPower
if(ucReCom[1]=='P' && ucReCom[2]=='W' && ucReCom[3]=='1')
{
/******************************/
//EVENTHAND=OpenPow;
PB8255C=0xc0;
/*******************************/
goto mk;
}
//3. SAVE speed & time
if(ucReCom[1]=='S' && ucReCom[2]=='A' )
{
/******************************/
jjj=0;
for(u=18;u>2;u--)
{
if((ucReCom[u] < 0x3a) && (ucReCom[u] > 0x2f))
{
iii= ucReCom[u]-0x30;
DP[jjj]= table[iii];
}
else if((ucReCom[u] < 0x4b) && (ucReCom[u] > 0x40))
{
iii= ucReCom[u]-0x37;
DP[jjj]= table[iii];
}
jjj++;
}
do
{
ACC=CMD8279;
}while(clflag == 1);
CMD8279 = 0x08;//显示方式
Delay(1);///
CMD8279 = 0x2f;//分频系数
for(jjj=0;jjj<16;jjj++)
{
CMD8279 = jjj+0x80;
DAT8279 = DP[jjj];
}
/*******************************/
//EVENTHAND=Wri8279;
goto mk;
}
//4.KillError
if(ucReCom[1]=='K' && ucReCom[2]=='E' )
{
/******************************/
EVENTHAND=WAIT;
/*******************************/
goto mk;
}
//5.状态灯
if(ucReCom[1]=='Z' && ucReCom[2]=='T' )
{
/******************************/
//EVENTHAND=State;
switch(ucReCom[3])
{
case 'a': PC8255C=0x40; break; //启动
case 'b': PC8255C=0x20; break; //就绪
case 'c': PC8255C=0x10; break; //测量
case 'd': PC8255C=0x01; break; //完成
case 'e': PC8255C=0x02; break; //出错
case 'f': PC8255C=0x04; break; //出错
case 'g': PC8255C=0x08; break; //出错
case 'h': PC8255C=0x00; break; //状态灯全灭
default : break;
}
/*******************************/
goto mk;
}
//6.发送标志位设置
if(ucReCom[1]=='F')
{
flag=ucReCom[2];
}
mk: jjj=0;
}
//if(ucReCom[1]!='%') END
}
//if(ucReCom[uiRe_In-1]=='%') END
RI=0;
}
//if(RI) END
EA=1;
}
/************************************************************************************************/
void Int_one() interrupt 0 using 0
{
uchar ppt;
uint drH,drL;
EA=0;
ppt = P1;
if((ppt & 0x01) == 0x01) //满足条件则由A“即将打开标记”引起中断
{
P1_5 = 0;
if(P3_4 == 1) //当大小盘同步时 启动计数器0;1,2
{
PA8255C = 0xa0; //1010 0000//open counter
}
goto jjs;
}
if((ppt & 0x02) == 0x02) //满足条件则由B”完全打开标记“引起中断
{
P1_6 = 0;
if(P3_4 == 1)
{
PA8255C = PA8255C & 0xdf; //1101 1111 //close counter 0
A8254CMD = 0x08;
}
goto jjs;
}
if((ppt & 0x08) == 0x08) //满足条件则由D“读取标记”引起中断
{
//1.read 8253
A8254CMD = 0x08;
drL=A8254T0;
drH++;
drH--;
drH=A8254T0;
BUF8253[0]= CONSTER - ( drH*256 + drL );
A8254CMD = 0x48;
drL=A8254T1;
drH++;
drH--;
drH=A8254T1;
BUF8253[1]=CONSTER - ( drH*256 + drL );
A8254CMD = 0x88;
drL=A8254T2;
drH++;
drH--;
drH=A8254T2;
BUF8253[2]=CONSTER - ( drH*256 + drL );
//2.read FFG_PLC
switch (FFG_PLC)
{
case 0: if(P3_5 == 0)
{
FFG_PLC = 1;
}
break;
case 1: if(P3_5 == 1)
{
FFG_PLC = 2;
}
break;
case 2: BUF8253[4] = BUF8253[0];
FFG_PLC = 0;
break;
default: break;
}
//3.data parse
BUF8253[0] = BUF8253[0];
BUF8253[1] = BUF8253[1];
//4.over again initialization 8253
//8253初始化
A8254CMD = 0x38;
A8254T0 = 0xff;
A8254T0 = 0xff;
A8254CMD = 0x78;
A8254T1 = 0xff;
A8254T1 = 0xff;
A8254CMD = 0xb8;
A8254T2 = 0xff;
A8254T2 = 0xff;
//5. grant A B C INT
if((P1_5 == 0) && (P1_6 == 0) && (P1_7 == 0))
{
// P1_5 = 1;
// P1_6 = 1;
// P1_7 = 1;
P1 = P1 | 0xe0;
}
goto jjt;
}
jjs: if((P1 & 0x04) == 0x04) //满足条件则由C”产品响应标记“引起中断
{
P1_7 = 0;
PA8255C = PA8255C & 0x7f; //0111 1111//close counter 1,2
A8254CMD = 0x48;
A8254CMD = 0x88;
}
jjt: EA=1;
}
/***********************************************************************************************/
void main(void)
{
init();
while(1)
{
switch( EVENTHAND )
{
case WAIT :/*** EVENT 0 ***/
EVENTHAND=ReadVol;
break;
case ReadVol :/*** EVENT 1 读电压值判断是否正常、并且看是否上传数据***/
p=Read8255(PA8255A,PB8255A,PC8255A);
//if((p>Max[2])||(p<Min[2]))
if(p>Max[0])
{
EVENTHAND=ERRORs;
}
else
{
if(flag=='a')
{
MCUToPC[1]='a';
_MCUtoPC();
flag='0';
}
EVENTHAND=ReadCur;
}
break;
case ReadCur : /*** EVENT 2 读电流值判断是否正常、并且看是否上传数据***/
{
p=Read8255(PA8255B,PB8255B,PC8255B);
//if((p>Max[3])||(p<Min[3]))
if(p>Max[1])
{
EVENTHAND=ERRORs;
}
else
{
if(flag=='b')
{
MCUToPC[1]='b';
_MCUtoPC();
flag='0';
}
EVENTHAND=WAIT;
}
break;
}
default:
break;
}
}
}
//http://www.tztvu.edu.cn/kfjy/bak2001x/bkjy/jsj/bxk/jk/kcdh/zd601.ppt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -