📄 eye5.c
字号:
/*====================================================================
*这是在DS87C520/W77E58单片机上运行的程序,文件名为eye5.c
*功能:DS87C520/W77E58作为中转站一方面与上位机(PC机或工控机)通讯,
* 另一方面与下位机(AT89C52单片机作为分站)通讯。与上位机通讯,
* 使用RS232接口,以DS87C520/W77E58的SCON1通讯口通讯,T1作波特
* 率发生器, 波特率为9600;与下位机通讯-本例备有两台下位机,使
* 用RS485接口。以DS87C520/W77E58的SCON0通讯口通讯,T2作波特率
* 发生器, 波特率为9600。配套上位机程序为xsa3.c。配套下位机程序
* 为eye121.c。
======================================================================*/
#include <w77e58.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
void timedelay(uint timess);
uchar n,kc1,kc2,aa,coni;
uint r;
uchar xdata rbut[12],rbut2[12];
uchar xdata tbut[12];
uchar xdata rbut3[16];
uchar xdata tbut3[42];
sbit p13=P1^3;
sbit p14=P1^4;
void timedelay(uint timess)
{
uint tj;
for (tj=timess;tj>0;tj--){;}
}
sio0() interrupt 4 using 1
{
if (aa!=0x1) goto two;
one:if (SM2==0) goto noar;
if (SBUF!=0x01) goto noads;
SM2=0;
noads:RI=0;
TI=0;
return;
noar:;
rbut[kc2]=SBUF;
kc2++;
if (kc2!=10) goto noads;
ES=0;
SM2=1;
EA=0;
goto noads;
two:if (aa!=0x2) goto noads2;
if (SM2==0) goto noar2;
if (SBUF!=0x02) goto noads2;
SM2=0;
noads2:RI=0;
TI=0;
return;
noar2:;
rbut2[kc2]=SBUF;
kc2++;
if (kc2!=10) goto noads2;
ES=0;
SM2=1;
EA=0;
goto noads2;
}
sio1() interrupt 7 using 2
{
if (RI_1==0) {
if (TI_1==0) {RI_1=0;TI_1=0;return;}
SBUF1=tbut3[kc1];
kc1++;
if (kc1!=42) {RI_1=0;TI_1=0;return;}
kc1=0;
SCON1=0xf0;
loo1:if (TI_1==0) goto loo1;
RI_1=0;
TI_1=0;
}
if (SM2_1==0) {
rbut3[kc2]=SBUF1;
kc2++;
if (kc2!=15) {RI_1=0;TI_1=0;return;}
kc2=0;
SCON1=0xe8;
SBUF1=0xff;
TB8_1=0;
SM2_1=0;
RI_1=0;
TI_1=0;
}
if (SBUF1!=1) {RI_1=0; return;}
SM2_1=0;
RI_1=0;
}
void main()
{
SP=0xdf;
timedelay(10000);
kc1=0;
kc2=0;
aa=0;
PMR=0x01;
for (coni=0;coni<10;coni++)
{
tbut[coni]=0x00;
rbut[coni]=coni*3;
rbut2[coni]=coni*2;
}
T2CON=0; //11.0592mhz,9600=ffdch;1200=fee0h
RCLK =1;
TCLK =1;
RCAP2H=0xff;
RCAP2L=0xdc;
TR2=1;
PS=1;
timedelay(10000);
loop4: p14=1; //准备发送
timedelay(20000);
SCON=0xe8;
ES=0;
EA=0;
SBUF=01;
loo1:if (TI==0) goto loo1;
TI=0;
SM2=0;
SBUF=tbut[kc1];
kc1++;
if (kc1!=11) goto loo1;
p14=0; //准备接收
SCON=0xf0;
ES=1;
EA=1;
aa=1;
r=0;
loo:;
if (kc2!=10) {r++; if(r>65530) {goto sss;} else {goto loo;}}
sss:kc1=0;
kc2=0;
p14=1; //准备发送
timedelay(10000);
SCON=0xe8;
ES=0;
EA=0;
SBUF=02;
loo2:if (TI==0) goto loo2;
TI=0;
SM2=0;
SBUF=tbut[kc1];
kc1++;
if (kc1!=11) goto loo2;
p14=0; //准备接收
SCON=0xf0;
ES=1;
EA=1;
aa=2;
r=0;
loo3:;
if (kc2!=10) {r++; if(r>65530) {goto loop;} else {goto loo3;}}
loop:;
for (coni=0;coni<10;coni++)
{
tbut3[coni]=rbut[coni];
}
for (coni=10;coni<20;coni++)
{
tbut3[coni]=rbut2[coni-10];
}
for (coni=20;coni<42;coni++)
{
tbut3[coni]=coni-20;
}
kc1=0;
kc2=0;
TMOD=0x20;
PCON=0x0;
TL1=0xfd; //6mhz, smod=0,600== e6;1200==0xf3
TH1=0xfd; //11.0592mhz,smod=0,1200==0xe8;9600==0xfd
TR1=1; //12mhz,smod=0,1200== e6;9600==0xfd
CKCON=0x00;
SADDR1=01;
SADEN1=0;
SCON1=0xf0;
PS1=1;
ES1=1;
EA=1;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -