📄 theprogramofsupervisesandcontrol.c
字号:
for(m=error_num;m<=9;m++)
da[m+10]=da[m];
da[13]+=0x80;
da[17]=error_co;
}
int process(int re_data,uint number)
{
int temp_rt;
uint a,case_num,error_code;
switch(number)
{
case 0: {
da[11]=0x3A;
if(re_data!=0x3A)
{
error_code=3;
case_num=0;
error(error_code,case_num);
}
}break;
case 1: {
da[12]=0x02;
if(re_data!=0x02)
{
error_code=0x02;
case_num=0x02;
error(error_code,case_num);
}
}break;
case 2: { da[13]=re_data;
if(re_data==0x14)
{
w_r=0;
da[13]=0x14;
}
else if(re_data==0x15)
{
w_r=1;
da[13]=0x15;
}
else
{ error_code=0x01;
case_num=0x04;
error(error_code,case_num);
}
} break;
case 3: { if(w_r==0)
da[14]=state=re_data;
else if(w_r==1)
{
state=re_data;
re_data&=0x80;
da[14]=state_RT+re_data;
state_RT=0;
}
} break;
case 4: {
da[15]=da[4];
if(w_r==0)
{ if(state&0x10)
{
temp_high=re_data;
}
else if(state&0x08)
{
temp_low=re_data;
}
}
else if(w_r==1)
{ temp_rt=value_temp;
da[15]=temp_rt;
}
}break;
case 5: { da[16]=re_data;
if(w_r==0)
{ if(state&0x04)
{
humd_high=re_data;
}
}
else if(w_r==1)
da[16]=value_humi;
}break;
case 6: {
da[17]=re_data;
if(w_r==0)
{
if(state&0x01)
{
vol_low=re_data;
}
}
else if(w_r==1)
da[17]=vol_RT;
}break;
case 7: {
da[7]&=0x0F;
da[18]=da[7];
}break;
case 8: {
da[19]=0;
for(a=7;a>=1;a--)
{
R_LRC^=da[a];
da[19]^=da[a+11];
}
if(w_r==0)
{ if(R_LRC!=re_data)
{
error_code=0x03;
case_num=0x0B;
error(error_code,case_num);
}
}
}break;
case 9: {
da[20]=0x0D;
if(re_data!=0x0D)
{
error_code=0x04;
case_num=0x0C;
error(error_code,case_num);
}
}break;
case 10: {
da[21]=0x0A;
if(re_data!=0x0A)
{
error_code=0x04;
case_num=0x0D;
error(error_code,case_num);
}
}break;
default: break;
}
}
void initial(void)
{
DataInput(0x09,0xff); //7219初始化
DataInput(0x0C,0x01);
DataInput(0x0b,0x03);
DataInput(0x0a,0x0f);
DataInput(0x0f,0x00);
set8155=0x03; //8155初始化
pa8155=0xff; //初始化使得光藕不导通
pb8155=0xff; //初始化使得指示灯不亮
IE=0x90; //定时器初始化,开窜行口中断,关闭定时器1中断定时器1作为串口波特率2400发生器,开定时器0中断和外部中断
PCON=0x00; //波特率加倍
SCON=0x50; //窜行口工作方式1(十位异步收发),同意接受,TI=0,RI=0;
TCON=0x40; //外部中断0电平触发,中断标志清0,定时器运行标志关,无定时器溢出标志
TMOD=0x20; //定时器1工作于方式2,8位自动,做波特率发生器,定时器2 工作于方式1
TH1=0xFD;
TL1=0xFD;
IP=0x00;
r_in=0;
r_out=22;
t_in=22;
t_out=0;
buf_empty=1;
buf_full=0;
done=0;
humd_high=50;
temp_high=30;
temp_low=10;
vol_low=130;
}
void main()
{
uint h,l,p;
value humi_val,temp_val;
uchar error,checksum;
initial();
s_connectionreset();
while(1)
{ error=0;
error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI); //measure humidity
error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP); //measure temperature
if(error!=0) s_connectionreset(); //in case of an error: connection reset
else
{ humi_val.f=(float)humi_val.i; //converts integer to float
temp_val.f=(float)temp_val.i; //converts integer to float
calc_sth11(&humi_val.f,&temp_val.f); //calculate humidity, temperature
value_humi=(uint)humi_val.f;
value_temp=(uint)temp_val.f;
real[0]=value_temp/10;
real[2]=value_temp%10;
real[1]=value_humi/10;
real[3]=value_humi%10;
DataInput(0x04,real[0]);
DataInput(0x03,real[2]);
DataInput(0x02,real[1]);
DataInput(0x01,real[3]);
}
while(done)
{
r_in=0;
r_out=22;
t_in=22;
t_out=0;
buf_full=0;
buf_empty=1;
done=0;
state=0;
PCON=0x00;
SCON=0x50;
TCON=0x40;
TMOD=0x20;
IE=0x90;
TH1=0xFD;
TL1=0xFD;
IP=0x00;
R_LRC=0;
for(h=0;h<=21;h++)
da[h]=0;
}
P1_4=0;
while(r_in!=r_out)
{}
for(l=0;l<=21;l++)
{
if(da[l]>47&&da[l]<58)
da[l]-=48;
else if(da[l]>64&&da[l]<71)
da[l]-=55;
}
for(l=0;l<=10;l++)
{
p=2*l;
da[l]=da[p]*16+da[p+1];
}
for(r_in=0;r_in<=21;r_in++)
{
process(da[r_in],r_in);
if(da[18]!=0)
break;
}
AlarmDetect();
TmpCompare(); //进入电炉处理程序
HumCompare(); //进入湿机处理程序
VoltCompare();
for(l=0;l<=10;l++)
{
p=da[l+11];
p>>=4;
da[2*l]=p;
da[2*l+1]=da[l+11]&0x0F;
}
for(l=0;l<=21;l++)
{
if(da[l]>=0&&da[l]<=9)
da[l]+=48;
else if(da[l]>9&&da[l]<16)
da[l]+=55;
}
IE=0x90;
P1_4=1;
for(t_out=0;t_out<=21;t_out++)
{
TI=0;
SBUF=da[t_out];
while(TI!=1);
if(t_out==21)
{
buf_full=0;
buf_empty=1;
IE=0;
}
}
done=1;
}
}
serial()interrupt 4 using 1
{
if(RI&~buf_full)
{
da[r_in]=SBUF;
RI=0;
if(r_in==21)
{
buf_full=1;
buf_empty=0;
}
r_in++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -