⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0x01.c

📁 用RS485通信
💻 C
字号:
#include<reg51.h>

#define uint    unsigned int 
#define uchar    unsigned char
#define pindate P0
sbit RE_DE=P1^3;
sbit MUSIC=P1^0;
sbit YIN=P1^5;
sbit SHI=P1^4;
sbit C=P2^0;
sbit D=P2^1;
sbit X=P2^2;
sbit M=P2^3;
uint R_485;
uchar temp,louhao,fanghao,flag;
uint i,addr;
uchar  call[] = {0xd5,23,1,0}        ;//呼叫数据
uchar  close[] = {0xd5,26,1,0};            //关视频音频
uchar  opendoor[] = {0xd5,24,1,0};       //用户机控制门口机开门数据
uchar  danger[] = {0xd5,22,1,0};          //紧急呼叫
uchar   xying[] = {0xd5,25,1,0};          //有人应答
uchar  xian=0xd6; //空闲
sys_initial()
{pindate=0xff;
YIN=0;
SHI=0;
MUSIC=0;
TMOD=0x20;				   //T1方式2,初值自动恢复
	TL1=0xfd;				   //
	TH1=0xfd;

	PCON=0x00;				   //串行口波特率不加倍
	TR1=1;					  //开启定时/计数器T1
	//SCON=0xf8	   //串口工作方式3,SM2=1,REN=1允许接收,TB8=1表示主机发送的是地址 主从成功使用
	SCON=0x50;	   //SM2=0,REN=1,TB8=1	
	//SCON=0xf0;
PS=1;
//PX1=0;				  //从主成功使用
	EA=1;					   //EA为CPU中断允许控制位,为1开中
//	EX0=1;					   //外中断INTO中断允许控制位,为1开中
//	EX1=1;                     //外中断INT1中断允许控制位,为1开中
   // IT0=0;	
//	IT1=0;			//脉冲触发方式,下降沿有效
	//P3_5=0;					   //发送
	//加上串行口中断开中
//	ES=1;                   //串行口中断开中
	ES=1;
}

void  delay()
{uint i,j;
for(i=0;i<1000;i++)
{
for(j=0;j<100;j++)
;
}
}

void sentopendoor( )
{
ES=0;
RE_DE=1;


opendoor[3]=pindate;
for(i=0;i<4;i++)
{
SBUF=opendoor[i];
while(!TI);
TI=0;

}
delay();
TI=0;

SBUF= xian;
while(TI!=1);                          
TI=0;

ES=1;
RE_DE=0;
}

void sentclose( )
{
ES=0;
RE_DE=1;


close[3]=addr;
for(i=0;i<4;i++)
{
SBUF=close[i];
while(!TI);
TI=0;

}
delay();
TI=0;

SBUF= xian;
while(TI!=1);                          
TI=0;

ES=1;
RE_DE=0;
}

void sentdanger( )
{
ES=0;
RE_DE=1;


danger[3]=addr;
for(i=0;i<4;i++)
{
SBUF=danger[i];
while(!TI);
TI=0;

}
delay();
TI=0;

SBUF= xian;
while(TI!=1);                          
TI=0;

ES=1;
RE_DE=0;
}

void sentxying( )
{
ES=0;
RE_DE=1;


xying[3]=addr;
for(i=0;i<4;i++)
{
SBUF=xying[i];
while(!TI);
TI=0;

}
delay();
TI=0;

SBUF= xian;
while(TI!=1);                          
TI=0;

ES=1;
RE_DE=0;
}


main()
{ 

R_485=0;
RE_DE=0;
addr=pindate;
sys_initial(); //串口初始化
while(1)
{
if(D==0)                    
{
sentopendoor();

}
if(C==0)
{YIN=1;
SHI=1;
MUSIC=0;

sentxying();

}
if(X==0)
{
YIN=0;
SHI=0;
sentclose();
}
if(	M==0)
{sentdanger();
}

}
}






void serial(void) interrupt 4 using 3
{
while(!RI);
RI=0;
temp=SBUF;
if(R_485==0)  //
{

if(temp==0xd5)   
{
R_485=1;
goto reback;

}
else if(temp==0xd6)
{
goto reback;
}

else
{R_485=0;
goto reback;
}


}

else if (R_485==1) //
{
flag=temp;

R_485=2;
goto reback;
}

else if (R_485==2) //
{
louhao=temp;
R_485=3;
goto reback;
}

else if (R_485==3)  //接收
{
fanghao=temp;
R_485=0;
}

if(flag==23) //接收用户ID
{
if( louhao==1  )
{	
if(fanghao==addr)
{ MUSIC=1;
MUSIC=1;
flag=0;

}
}
}
//
else if(flag==22)
{  
if( louhao==1  )
{	
if(fanghao==addr)
{ MUSIC=1;
YIN=1;
SHI=1;
flag=0;
fanghao=0;
louhao=0;
MUSIC=0;
}
   }
}

reback: ;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -