如果用全双工的通讯芯片就可以进行通讯,但用485就不能实现通讯了 。下面是小弟的代码。求大神指点指点小弟。串口通讯 :0F 00 0F
0F 01 0E
0F 02 0D
0F 04 0B
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar recive[3],rec_num; //定义数组大小
sbit RS485_DIR = P3^3; //定义485管脚
void send(); //声明发送函数
void delay(uint t) //延时函数
{
uint i;
for(t;t>0;t--)
for(i = 110;i>0;i--);
}
void UsartInit() //串口初始化
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //波特率4800
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
delay(20);
RS485_DIR =0;
delay(100);
UsartInit();
while(1);
}
void Usart() interrupt 4
{
uchar checkXOR;
RS485_DIR=0;
if(RI)
{
RI = 0;
recive[rec_num] = SBUF ;
rec_num++;
if((rec_num ==3)&&(recive[0] == 0x0f))//判断第一个数组
{
checkXOR = recive[0]^recive[1];///异或一二数组
if(checkXOR == recive[2]) //与数组三比较
{
switch(recive[1])
{
case 0x00:
send();
rec_num = 0;
break;
case 0x01:
send();
rec_num = 0;
break;
case 0x02:
send();
rec_num = 0;
break;
case 0x04:
send();
rec_num = 0;
break;
}
}
}
if(TI)
{
TI = 0;
}
}
}
void send()//发送函数
{
uchar i;
RS485_DIR=1;
for(i=0;i<3;i++) //把数组给SBUF
{
SBUF = recive[i];
delay(100);
}
RS485_DIR=0;
}
|