MAX485通信接法是怎样通信的,跪求例程!
MAX485通信接法是怎样通信的,写了了些程序都实现不了通信,在这里和大家讨论下!究竟是怎样实现的! 补充一下两个单片机是不共电源的地的,也就是说两台机器只有Max485的a和b接在一起而已!谢谢大家 看你的原理图好像是U3只发送,U1只接收,还有是否仿真不用把晶振加上啊?一般用法是DE/RE接到一个IO口上控制是收还是发再有就是复位电路好像也没有啊。 yijingkun 发表于 2013-2-25 21:23 static/image/common/back.gif看你的原理图好像是U3只发送,U1只接收,还有是否仿真不用把晶振加上啊?一般用法是DE/RE接到一个IO口上控 ...
是没有啊?晶振电路和复位电路那些都不是重点,仿真是不用加的!重点在Max485通信!我真的不太明白这样子接485是怎样实现通信的?谢谢了! 软件上就和uart一样啊,SBUF=XXX。只不过485芯片把51的UART输出的数据进行了协议转换。485A和485B是差分通讯,好像是定义A比B高几十个毫伏就是逻辑高,反之是逻辑零。你要搞清楚什么啊? yijingkun 发表于 2013-2-25 21:51 static/image/common/back.gif
软件上就和uart一样啊,SBUF=XXX。只不过485芯片把51的UART输出的数据进行了协议转换。485A和485B是差分通 ...
嗯!谢谢!问一下MAX485的连线方法只是两根线而已吗?不要共地之类的吗?还有就是我对USART协议不是很清楚,能不能说些大概的? 485不用共地都可以的 串口通信+处理好收发使能 dtlz 发表于 2013-2-25 22:19 static/image/common/back.gif
485不用共地都可以的
嗯!多谢了! duedue 发表于 2013-2-25 22:23 static/image/common/back.gif
串口通信+处理好收发使能
嗯!好的! 通信线A接A,B接B,开机时主从机都设置为接受状态,当需要通信时,由主机控制数据收发 谢谢大家了!我的问题解决了!其实就是用uart的程序!{:lol:} {:lol:}{:lol:}{:lol:} //发送一个字节
void Sendchar(unsigned char d)
{
SBUF=d;
while(!TI); //等待发送完成,TI置位
TI=0;
}
//发送字符串
void SendString(unsigned char *str)
{
while(*str)
{
Sendchar(*str) ;
str++;
}
}
void sen485(uchar *p,uchar i)//发送
{
uchar x;
EA=0;
REN=0;
_nop_();
_nop_();
DIR=1;//rs485 发送模式
_nop_();
_nop_();
delaycom(8000);
for(x=0;x<i;x++)
{
Sendchar(*p);
p++;
}
delaycom(5000);
DIR=0;//rs485 接收模式
REN=1;
EA=1;
_nop_();
_nop_();
_nop_();
_nop_();
}
//串口中断服务程序
voidUART1_Rountine(void)interrupt 4//放在这里 和放在main()里面是一样的
{
unsigned char idata RxData=0;
EA=0;
if(RI) //必须判断RI(接收中断标志)是否为1
{
RI=0;
RxData = SBUF;
ISP_Check(RxData); //在这里添加你的接收代码
}
EA=1;
}
void delaycom(unsigned int time)
{
while(--time);
}
//
void ISP_Check(unsigned char tmp)//判断就收数据是否符合规定的长度与协议,如ok就存到temp2。
{
static uchar big=0;
static ucharcounter=0;
static uchar rsov=0;
if( ((big==0) && ((tmp==0xA0) ||(tmp==0xcf)) )||(rsov==1))
{
big=1;
rsov=1;
temp=tmp;
counter++;
if((counter>7)&&( over==0))
{
big=0;
rsov=0;
over=1;
temp2=temp;
temp2=temp;
temp2=temp;
temp2=temp;
temp2=temp;
temp2=temp;
temp2=temp;
temp2=temp;
counter=0;
}
return;
}
else
{
big=0;
rsov=0;
counter=0;
}
}
lihw2@ 发表于 2013-3-1 09:21 static/image/common/back.gif
//发送一个字节
void Sendchar(unsigned char d)
{
实在感谢!
页:
[1]