📄 tongx3.c
字号:
/*********************************************************************
*文件名: tongx3.c
*功 能:AT89C52与N台AT89C2051通讯,双方均有RS485接口 ,AT89C52用T2作
* 波特率发生器, 波特率为9600,配套89C2051程序为EYE124.C
**********************************************************************/
#include <reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
sbit p14=P1^4;
uchar idata kc1,kc2,aa,iii;
uchar idata rbut2[36];
uchar idata tbut[12];
uchar idata rbut[16];
uint idata r;
void timedelay(uint timess);
sio0() interrupt 4
{
one:if (SM2==0) goto noar;
if (SBUF!=aa) goto noads;
SM2=0;
noads:RI=0;
TI=0;
return;
noar:;
rbut[kc2]=SBUF;
kc2++;
if (kc2!=16) goto noads;
SM2=1;
goto noads;
}
void timedelay(uint timess)
{
uint tj;
for (tj=timess;tj>0;tj--){;}
}
void intrbut(void)
{
uchar coni;
for (coni=0;coni<3;coni++)
{
rbut[coni]=0;
}
rbut[2]=0x87; //8888888
rbut[3]=0xa2;
rbut[4]=0x38;
rbut[5]=0x87; //8888888
rbut[6]=0xa2;
rbut[7]=0x38;
rbut[8]=0x87; //8888888
rbut[9]=0xa2;
rbut[10]=0x38;
rbut[11]=0x87; //8888888
rbut[12]=0xa2;
rbut[13]=0x38;
}
void communi(void) /* RS-485 通讯 */
{
uchar coni;
kc1=0;
kc2=0;
aa=0;
intrbut();
for (coni=0;coni<10;coni++)
{
tbut[coni]=0x00;
}
tbut[2]=01;
tbut[3]=02;
tbut[4]=03;
tbut[5]=tbut[2]+tbut[3]+tbut[4]; //add check
TR2=1;
for (coni=0;coni<64;coni++)
{
aa=coni+1;
p14=1; //准备发送
timedelay(20000);
SCON=0xe8;
ES=0;
EA=0;
SBUF=aa;
loo1:if (TI==0) goto loo1;
TI=0;
SCON=0xe0;
SBUF=tbut[kc1];
kc1++;
if (kc1!=11) goto loo1;
kc1=0;
p14=0; //准备接收
SCON=0xf0;
ES=1;
EA=1;
r=0;
loo:;
if (kc2!=16) {r++; if(r>65530) {goto sss;} else {goto loo;}}
sss:;
kc2=0;
if(r>65530) {intrbut();}
for (iii=0;iii<12;iii++)
{
rbut2[(aa-1)*12+iii]=rbut[2+iii];
}
}
TR2=0;
EA=1;
}
void main(void)
{
SP=0xdf;
timedelay(10000);
EA=0;
kc1=0;
kc2=0;
T2CON=0; //11.0592mhz,9600=ffdc;1200=fee0h
T2IE=1; //12.0mhz, 9600=ffd9h;1200=fec8h
T2RSE=1;
RCAP2H=0xff;
RCAP2L=0xdc;
EA=1;
communi();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -