📄 tks.c
字号:
check();
}
//*************************************************************************************************
/* for(ji=0;ji<10;ji++)
for(ki=0;ki<4;ki++)
{
if(point1==32768)
point1=0x0010;
eepwrite(point1/256,point1%256,addate[ji][ki].adh);
check();
point1++;
if(point1==32768)
point1=0x0010;
eepwrite(point1/256,point1%256,addate[ji][ki].adl);
point1++;
if(point1==32768)
point1=0x0010;
eepwrite(point1/256,point1%256,addate[ji][ki].adig);
} */
}
void time0() interrupt 1
{
uchar y;
TR0=1;
TL0=0x00;
TH0=0x4c;
count++;
if(count==19)
{ ms50=1; // 1s 时间到了 开始发送
count=0; //恢复准备
ms2=1; //还不知道用来干什么
//address=0xa0; //从0号开始
//address=what[0];//其实只是其中的高三位 编号作为子机地址 若是不行改成0
address=0;
}
if(ms50==1)
{
for(y=0;y<2;y++)
{ se=0;
qi=0; //发送前把接收的位置清零 从高位其接收存到addate中
send(address); //收回来的是哪一路 共有四路模拟量
delay6ms(10); //延时需要7MS 发送1 接收3个 用了4 在给出一半的冗余时间
if(se==1)
{ se=0;
break ;
}
}
// ccount1++; //暂时还用不上 不知道在哪里用了??写得太多了
address++;
if((address&0x0f==4))
// address=what[0];
{
address=0;
ms50=0;
adp1++;
adp2++;
adp1=adp1%10; //十路中的循环
adp2=adp2%10;//十路循环
}
}
}
void ext1() interrupt 2
{
}
void time1() interrupt 3
{
}
void serial() interrupt 4 //串行中断 接收数据
{
//读回来的数据还没有保存到eeprom
uchar ud=0;
if(TI==1)
;
else
{ if(RI==1)
{
if(ET0==0)
{
what[ud]=SBUF;
ud++;
what[8]=ud;
ms1=1;
}
else
{
switch(qi)
{
case 0:
addate[adp2][address].adh=SBUF; //这里应该与上一个数
se=0;
break;
case 1:
addate[adp2][address].adl=SBUF;
se=0;
break;
case 2:
addate[adp2][address].adig=SBUF;
se=0;
break;
case 3:
ud=SBUF;
if(addate[adp2][address].adh+addate[adp2][address].adl+addate[adp2][address].adig==ud)
{
se=1;
}
/* if(addate[adp2][address].adh+addate[adp2][address].adl==ud)
{
se=1;
}
*/
qi=0;
//**********************读回来的数据存入eeprom中***********************
eepwrite(point2/256,point2%256,addate[adp2][address].adh);
check();
point2=point2+1;
if(point2==0x7fef)
point2=0;
eepwrite(point2/256,point2%256,addate[adp2][address].adl);
check();
point2=point2+1;
if(point2==0x7fef)
point2=0;
eepwrite(point2/256,point2%256,addate[adp2][address].adig);
check();
point2=point2+1;
if(point2==0x7fef)
point2=0;
break;
}
qi++;
RI=0;
}
}
}
}
void search(void)
{ uchar kk,qt;
qt=0xa0;
EX0=0;
EX1=0;
ET0=0;
ET1=0;
for(kk=0;kk<8;kk++)
{
send(qt);
delay3ms(4); //3.2ms
qt++;
}
//EX0=1;
IE0=0;
ET0=1; //开中断
TR0=1;
}
void main(void)
{ uchar i,j,led,mul,m;
//***********************************************************************************//
{ //一般的初始化
SP=0x60;
con=0; // 开液晶屏
cs=1; // iic eeprom 有效
delay(100);
disinit(); //液晶显示初始化
adp2=9; //指向最后一点数据
adp1=0; //指向第一点数据
} // 一般的初始化结束
//***************************若是可调则先调用search()子函数***********************
//search();
//*************************************************************************************//
//********************************************复位时取出地址指针*******************************//
/* eepwrite(0x7f,0xff,0x00); //预先写入的数据
check();
eepwrite(0x7f,0xfe,0x00);
check();
eepwrite(0x7f,0xfd,0x00);
check();
eepwrite(0x7f,0xfc,0x78);
check(); //刚开始时写入7fff的地址值是0也就是说从0开始写入数据
eepwrite(0x7f,0xfa,0);
check();
*/
point1=eepread(0x7f,0xff);
point1<<=8;
point1=point1|eepread(0x7f,0xfe);
point2=eepread(0x7f,0xfd);
point2<<=8;
point2=point2|eepread(0x7f,0xfc);
which=eepread(0x7f,0xfb); //读出上次掉电前转换的是哪一路
select=eepread(0x7f,0xfa);//读出上次掉电前是什么模式
move=eepread(0x7f,0xf9);
pause=eepread(0x7f,0xf8); //初始值可以写进去
//掉电前系统正在做什么事情 是否要接着上次的工作????? 比较复杂
//****************************************读出数据最后一次写入的10点数据***********************************//
//point2=point1;
for(i=0;i<10;i++)
for(j=0;j<4;j++)
{ // addate[10][4];
if(point1==0x7fef)
point1=0x00;
addate[i][j].adh=eepread(point1/256,point1%256);
point1++;
if(point1==0x7fef)
point1=0x0000;
addate[i][j].adl=eepread(point1/256,point1%256);
point1++;
if(point1==0x7fef)
point1=0x0000;
addate[i][j].adig=eepread(point1/256,point1%256);
point1++ ;
}
maxinit();//总线485通信初始化
select=0;
pause=0;
while(1)
{ //which
if(select==1)
{
if(ms2==1)
{
ms2=0;
m=(mul+adp1)%10;
//z中断应不应该关掉呢?? 不能关的
for(i=0;i<4;i++)
{
switch(i)
{
case 0: write(0x80,0);
// write(0x30+i,1);
break;
case 1: write(0x90,0);
// write(0x30+i,1);
break;
case 2: write(0x88,0);
// write(0x30+i,1);
break;
case 3: write(0x98,0);
// write(0x30+i,1);
break;
}
//write(0x80+i*8,0);
write(0x30+i,1);
write(':',1);
write(' ',1);
write(' ',1);
write(0x30+addate[m][i].adh/10,1);
write(0x30+addate[m][i].adh%10,1);
write(0x30+addate[m][i].adl/10,1);
write(0x30+addate[m][i].adl%10,1);
write(' ',1);
write(' ',1);
write(0x30+addate[m][i].adig/10,1);
write(0x30+addate[m][i].adig%10,1);
} //for
} //ms2
led=key();
switch(led)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: mul=led; break;
case 10:select=0;break;
case 11:pause=!pause;break;
}
} //select
else
{
if(pause==1)
{
led=key();
switch(led)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: mul=led; break;
case 10:select=1;break;
case 11:pause=!pause;break;
}
continue ;
}
else
{
if(ms2)
{ ms2=0;
for(i=0;i<4;i++)
{
switch(i)
{
case 0: write(0x80,0);
// write(0x30+i,1);
break;
case 1: write(0x90,0);
// write(0x30+i,1);
break;
case 2: write(0x88,0);
// write(0x30+i,1);
break;
case 3: write(0x98,0);
// write(0x30+i,1);
break;
} //switch
write(0x30+i,1);
write(':',1);
write(' ',1);
write(' ',1);
write(0x30+addate[adp2][i].adh/10,1);
write(0x30+addate[adp2][i].adh%10,1);
write(0x30+addate[adp2][i].adl/10,1);
write(0x30+addate[adp2][i].adl%10,1);
write(' ',1);
write(' ',1);
write(0x30+addate[adp2][i].adig/10,1);
write(0x30+addate[adp2][i].adig%10,1);
} //for i=0
} //if ms2
} //else2
led=key();
switch(led)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: mul=led; break;
case 10:select=1;break;
case 11:pause=!pause;break;
}
} // else1
} // while
} // main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -