?? eye5.c
字號(hào):
/*====================================================================
*這是在DS87C520/W77E58單片機(jī)上運(yùn)行的程序,文件名為eye5.c
*功能:DS87C520/W77E58作為中轉(zhuǎn)站一方面與上位機(jī)(PC機(jī)或工控機(jī))通訊,
* 另一方面與下位機(jī)(AT89C52單片機(jī)作為分站)通訊。與上位機(jī)通訊,
* 使用RS232接口,以DS87C520/W77E58的SCON1通訊口通訊,T1作波特
* 率發(fā)生器, 波特率為9600;與下位機(jī)通訊-本例備有兩臺(tái)下位機(jī),使
* 用RS485接口。以DS87C520/W77E58的SCON0通訊口通訊,T2作波特率
* 發(fā)生器, 波特率為9600。配套上位機(jī)程序?yàn)閤sa3.c。配套下位機(jī)程序
* 為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; //準(zhǔn)備發(fā)送
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; //準(zhǔn)備接收
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; //準(zhǔn)備發(fā)送
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; //準(zhǔn)備接收
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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -