📄 cplc.c
字号:
#include <AT89X52.h>
#include <intrins.h>
#define xin P1
#define yout P0
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar bdata buf45,cmd45,xbuf,ybuf;
uchar data ssbuf[12],tempbuf,phbuf,tempseth,tempsetl,phseth,phsetl,comm,timer;
uchar data t_y4,t_u1,t_d1,td3,t_u6;
uint data tu3;
uchar bdata xbuf1,mode0;
uchar data fu,fv,fw,fx,fy,fz;//临时变量
uchar data sdelay;
sbit mclk=P2^0;
sbit sdao=P2^1;
sbit dcs=P2^2;
sbit sdai=P2^3;
sbit rbuf=buf45^0;
sbit wbuf=buf45^7;
sbit cmd0=cmd45^0;
sbit cmd=cmd45^7;
sbit load=P2^7;
sbit ldac=P2^6;
sbit temp=P2^4;
sbit php=P2^5;
sbit x0=xbuf^0;
sbit x1=xbuf^1;
sbit x2=xbuf^2;
sbit x3=xbuf^3;
sbit x4=xbuf^4;
sbit x5=xbuf^5;
sbit x6=xbuf^6;
sbit x7=xbuf^7;
sbit xin8=P3^2;
sbit y0=ybuf^0;
sbit y1=ybuf^1;
sbit y2=ybuf^2;
sbit y3=ybuf^3;
sbit y4=ybuf^4;
sbit y5=ybuf^5;
sbit y6=ybuf^6;
sbit y7=ybuf^7;
sbit bs=xbuf1^0;
sbit bt=xbuf1^1;
sbit bu=xbuf1^2;
sbit bv=xbuf1^3;
sbit bw=xbuf1^4;
sbit tclk=xbuf1^5;
sbit fcom=xbuf1^6;
sbit x8=xbuf1^7;
sbit jjsta=mode0^0;
sbit ttsta=mode0^1;
sbit tdsta=mode0^2;
sbit m3=mode0^3;
sbit m4=mode0^4;
sbit m5=mode0^5;
sbit m6=mode0^6;
sbit m7=mode0^7;
void delay (uint day)
{
while (--day!=0);
}
void trans (void)
{
uchar data ii;
mclk=0;
for (ii=8;ii>0;ii--)
{
sdao=wbuf;
mclk=1;
_nop_();
buf45<<=1;
mclk=0;
_nop_();
}
sdao=0;
}
void rdsr (void)
{
uchar i;
dcs=1;
mclk=0;
dcs=0;
cmd45=0x05;
for (i=8;i>0;i--)
{
sdao=cmd;
mclk=1;
cmd45<<=1;
mclk=0;
}
sdao=0;
sdai=1;
for (i=8;i>0;i--)
{
cmd0=sdai;
mclk=1;
cmd45=_crol_(cmd45,1);
mclk=0;
}
cmd45=_cror_(cmd45,1);
dcs=1;
}
void wwip (void)
{
uchar l;
l=0;
cmd0=1;
while (cmd0 && (++l<=200))
{
rdsr ();
}
}
void wren (void)
{
mclk=0;
dcs=0;
buf45=0x06;
trans ();
wwip ();
dcs=1;
}
void wrsr (uchar srmd)
{
wren ();
dcs=1;
mclk=0;
dcs=0;
buf45=0x01;
trans ();
buf45=srmd;
trans ();
wwip ();
dcs=1;
}
void wrmem (uchar dd,uchar aa)
{
wren ();
dcs=1;
mclk=0;
buf45=0x02;
dcs=0;
trans ();
buf45=dd;
trans ();
buf45=aa;
trans ();
cmd45=0;
wwip ();
dcs=1;
mclk=1;
}
uchar rdmem (uchar dd)
{
uchar i;
dcs=1;
mclk=0;
buf45=0x03;
dcs=0;
trans ();
buf45=dd;
trans ();
for (i=8;i>0;i--)
{
_nop_();
rbuf=sdai;
mclk=1;
buf45=_crol_(buf45,1);
mclk=0;
_nop_();
}
buf45=_cror_(buf45,1);
dcs=1;
return (buf45);
}
void dac (uchar aa,uchar rag,uchar dd)
{
load=1;
ldac=1;
_nop_();
buf45=aa;
buf45<<=6;
mclk=1;
sdao=wbuf;
mclk=0;
buf45<<=1;
mclk=1;
sdao=wbuf;
mclk=0;
buf45=dd;
mclk=1;
if (rag==0)
{
sdao=0;
}
else sdao=1;
mclk=0;
_nop_();
for (aa=8;aa>0;aa--)
{
mclk=1;
sdao=wbuf;
mclk=0;
buf45<<=1;
}
load=0;
_nop_();
load=1;
_nop_();
ldac=0;
_nop_();
ldac=1;
sdao=0;
mclk=1;
}
void format (void)
{
dac(0,0,0);
bs=1;
tclk=0;
fcom=0;
mode0=0;
timer=10;
yout=0xff;
ybuf=0xff;
xbuf=0xff;
xin=0xff;
php=1;
bv=php;
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
SCON = 0x50;
T2CON=0;
RCAP2H=0x4c; //65136=fe70,62536=f448
RCAP2L=0x00;
TH2=0x4c;
TL2=0x00;
PS=1;
TR1=1;
TR2=1;
RI=0;
TI=0;
EA=1;
ET2=1;
ES=1;
}
void dinput (void)
{
// xin=0xff;
// xin8=1;
php=1;
temp=1;
fu=128;
ET2=0;
dac(0,1,fu);
ET2=1;
for (fw=64;fw>0;fw/=2)
{
delay (50);
bv=php;
if (bv)
{
fu-=fw;
}
else
{
fu+=fw;
}
ET2=0;
dac(0,1,fu);
ET2=1;
}
phbuf=fu;
fu=128;
ET2=0;
dac(1,0,fu);
ET2=1;
for (fw=64;fw>0;fw/=2)
{
delay (50);
bv=temp;
if (bv)
{
fu-=fw;
}
else
{
fu+=fw;
}
ET2=0;
dac(1,0,fu);
ET2=1;
}
tempbuf=fu;
xbuf=xin;
x8=xin8;
}
void deal (void)
{
//*************冷冻机*************
/*
x0: 热保护正常
!x0: 热保护异常
x1: 高压正常
!x1: 高压异常
x2: 低压正常
!x2: 低压正常
x3: 给水阀上限未到
!x3: 给水阀上限已到
x4: 给水阀下限未到
!x4: 给水阀下限已到
x5: 启动酒精泵
!x6: 启动回水泵
x7:
x8:
x9: 温度输入
x10: PH输入
y0: 报警
y1: 酒精
y2: 送水泵
y3: 冷冻机
y4: 回水泵
y5: H液泵
y6: 给水阀
*/
dcs=0;
if (!y3)
{
if (td3>0)
{
td3--;
}
else
{
if (tempbuf<tempsetl)
{
y3=1;
tu3=360;
}
}
}
else
{
if (tu3>0)
{
tu3--;
}
else
{
if (!x1 && !x2)
{
y0=1;
if (tempbuf>tempseth)
{
y3=0;
td3=200;
}
}
}
}
if (x1 ||x2) //*************报警*************
{
y3=1;
tu3=360;
if (y0)
{
y0=0;
}
else
{
y0=1;
}
}
//*************回水泵*************
if (!y4)
{
if (!x7)
{
y4=1;
t_y4=20;
}
}
else
{
if (t_y4>0)
{
t_y4--;
}
else
{
if (x7)
{
y4=0;
}
}
}
//*************给水阀*************
if (y6)
{
if (!x4 && x3)
{
y6=0;
}
}
else
{
if (!x3 && x4)
{
y6=1;
}
}
//*************酒精*************
if (x6)
{
if (y1)
{
if (t_d1>0)
{
t_d1--;
}
else
{
y1=0;
t_u1=20;
}
}
else
{
if (t_u1>0)
{
t_u1--;
}
else
{
y1=1;
t_d1=20;
}
}
}
else
{
y1=1;
y1=1;
t_u1=20;
t_d1=20;
}
if (t_u1>20) t_u1=20;
if (t_d1>20) t_d1=20;
//*************H 液泵*************
if (phbuf<phsetl)
{
y5=1;
}
if (phbuf>phseth)
{
y5=0;
}
//*************送水泵*************
if (y2)
{
if (!x3 && x4)
{
y2=0;
}
}
else
{
if (!x4 && x3)
{
y2=1;
}
}
dcs=1;
}
void youtput (void)
{
yout=ybuf;
ET2=0;
ES=0;
TI=0;
SBUF=0xaa;
while(!TI);
TI=0;
SBUF=tempbuf;
while(!TI);
TI=0;
SBUF=tempsetl;
while(!TI);
TI=0;
SBUF=xbuf;
while(!TI);
TI=0;
SBUF=phbuf;
while(!TI);
TI=0;
SBUF=ybuf;
while(!TI);
TI=0;
RI=0;
ET2=1;
ES=1;
}
void main(void)
{
delay(1000);
format();
timer=10;
wrsr (0x00);
tempseth=rdmem(0);
tempsetl=rdmem(1);
phseth=rdmem(2);
phsetl=rdmem(3);
t_u1=20;
t_d1=20;
t_u6=20;
t_y4=20;
tu3=360;
td3=200;
while (1)
{
dcs=0;
if (tclk)
{
tclk=0;
dinput();
deal();
youtput();
}
if (fcom)
{
fcom=0;
comm=ssbuf[0];
tempseth=ssbuf[1];
tempsetl=ssbuf[2];
phseth=ssbuf[3];
phsetl=ssbuf[4];
ET2=0;
wrmem(0,tempseth);
wrmem(1,tempsetl);
wrmem(2,phseth);
wrmem(3,phsetl);
ET2=1;
}
ET2=1;
TR2=1;
dcs=1;
}
}
void cpu_int4(void) interrupt 4
{
// uchar data ssbuf[10],tempbuf,phbuf,tempseth,tempsetl,phseth,phsetl,comm;
ES=0;
RI=0;
if (SBUF==0x55)
{
fv=SBUF;
for (fv=0;fv<10;fv++)
{
sdelay=0;
while (!RI)
{
if (--sdelay==0)
{
fv=0;
goto ssbr;
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
RI=0;
ssbuf[fv]=SBUF;
}
fcom=1;
TI=0;
}
ssbr: RI=0;
ES=1;
}
void cpu_int5(void) interrupt 5
{
TF2=0; //(50ms/每次)
if (--timer==0)
{
timer=10;
tclk=1; //(500ms/每次)
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -