当前位置:文档之家› 基于RS485的简单现场总线通信系统设计的主从机代码1

基于RS485的简单现场总线通信系统设计的主从机代码1

#include
#include //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
uchar a=0,b=0,flag=0;
int num=10,num1=0;
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void reinit()
{ P10=0;
P11=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}

void Delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}
void display(uchar num) //显示
{
uchar i,j;
j=table[num%10];
i=table[num/10];
P2=0XFD;
P0=j;
Delay(1);
P2=0xff;
P2=0xfE;
P0=i;
Delay(1);
P2=0xff;
}

void re_main()
{ reinit();
while(1)
{
display(a);
if(a==99)
break;
}
//等待串口中断产生,然后更新显示
}
void send(uchar key_num)
{
SBUF=key_num;
while(!TI);
TI=0;
}
void tr_main()
{
P1=0xff;
TMOD=0x21;
TH0=(65535-45872)/256;
TL0=(65535-45872)%256;
ET0=1;
TR0=1;
REN=1;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=0;
while(1)
{

if(num1==20)
{
num1=0;
num++;
}
send(num);
display(0);
if(num>20)
{
num=0;
ES=1;
break;
}

}
}
void Time0() interrupt 1 //定时器0定时中断显示
{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;

}
void ser() interrupt 4
{
while(!RI);
RI=0;
a=SBUF;
}

void main()
{
reinit();
while(!flag)
{
while(!RI);
RI=0;
b=SBUF;
/* if(SBUF==0xfe)
{
tr_main();
flag=1;
}
else if(SBUF==0xfc)
{ re_main();
flag=1;

} */
switch(b)
{ case 0xfd:
tr_main();
flag=1;
break;

case 0xfc:
re_main();
flag=1;
break;
}

}
}

相关主题
文本预览
相关文档 最新文档