搜索
bottom↓
回复: 14

MAX485通信接法是怎样通信的,跪求例程!

[复制链接]

出0入0汤圆

发表于 2013-2-25 21:15:16 | 显示全部楼层 |阅读模式
MAX485通信接法是怎样通信的,写了了些程序都实现不了通信,在这里和大家讨论下!究竟是怎样实现的!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-2-25 21:17:42 | 显示全部楼层
补充一下两个单片机是不共电源的地的,也就是说两台机器只有Max485的a和b接在一起而已!谢谢大家

出155入0汤圆

发表于 2013-2-25 21:23:21 | 显示全部楼层
看你的原理图好像是U3只发送,U1只接收,还有是否仿真不用把晶振加上啊?一般用法是DE/RE接到一个IO口上控制是收还是发再有就是复位电路好像也没有啊。

出0入0汤圆

 楼主| 发表于 2013-2-25 21:43:01 | 显示全部楼层
yijingkun 发表于 2013-2-25 21:23
看你的原理图好像是U3只发送,U1只接收,还有是否仿真不用把晶振加上啊?一般用法是DE/RE接到一个IO口上控 ...

是没有啊?晶振电路和复位电路那些都不是重点,仿真是不用加的!重点在Max485通信!我真的不太明白这样子接485是怎样实现通信的?谢谢了!

出155入0汤圆

发表于 2013-2-25 21:51:12 | 显示全部楼层
软件上就和uart一样啊,SBUF=XXX。只不过485芯片把51的UART输出的数据进行了协议转换。485A和485B是差分通讯,好像是定义A比B高几十个毫伏就是逻辑高,反之是逻辑零。你要搞清楚什么啊?

出0入0汤圆

 楼主| 发表于 2013-2-25 22:10:30 | 显示全部楼层
yijingkun 发表于 2013-2-25 21:51
软件上就和uart一样啊,SBUF=XXX。只不过485芯片把51的UART输出的数据进行了协议转换。485A和485B是差分通 ...

嗯!谢谢!问一下MAX485的连线方法只是两根线而已吗?不要共地之类的吗?还有就是我对USART协议不是很清楚,能不能说些大概的?

出0入0汤圆

发表于 2013-2-25 22:19:46 | 显示全部楼层
485不用共地都可以的

出0入0汤圆

发表于 2013-2-25 22:23:22 | 显示全部楼层
串口通信+处理好收发使能

出0入0汤圆

 楼主| 发表于 2013-2-25 22:45:13 | 显示全部楼层
dtlz 发表于 2013-2-25 22:19
485不用共地都可以的

嗯!多谢了!

出0入0汤圆

 楼主| 发表于 2013-2-25 22:45:35 | 显示全部楼层
duedue 发表于 2013-2-25 22:23
串口通信+处理好收发使能

嗯!好的!

出0入0汤圆

发表于 2013-2-26 14:53:16 来自手机 | 显示全部楼层
通信线A接A,B接B,开机时主从机都设置为接受状态,当需要通信时,由主机控制数据收发

出0入0汤圆

 楼主| 发表于 2013-2-27 21:53:40 | 显示全部楼层
谢谢大家了!我的问题解决了!其实就是用uart的程序!

出0入0汤圆

发表于 2013-2-28 09:29:22 | 显示全部楼层

出0入0汤圆

发表于 2013-3-1 09:21:29 | 显示全部楼层
//发送一个字节
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_();
}



//串口中断服务程序
void  UART1_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 uchar  counter=0;
                static uchar rsov=0;

                if(   ((big==0) && ((tmp==0xA0) ||(tmp==0xcf))   )||(rsov==1))
{
             big=1;
                         rsov=1;
                         temp[counter]=tmp;
                         counter++;
            if((counter>7)&&( over==0))
                        {
                                big=0;
                                rsov=0;
                                over=1;
                                temp2[0]=temp[0];
                                temp2[1]=temp[1];
                                temp2[2]=temp[2];
                                temp2[3]=temp[3];
                                temp2[4]=temp[4];
                                temp2[5]=temp[5];
                                temp2[6]=temp[6];
                                temp2[7]=temp[7];
                               
                               
                                counter=0;
                        }
                       
                        return;
    }
                else
                {
                        big=0;
                 rsov=0;
                         counter=0;
                }
}

出0入0汤圆

 楼主| 发表于 2013-3-3 13:29:33 | 显示全部楼层
lihw2@ 发表于 2013-3-1 09:21
//发送一个字节
void Sendchar(unsigned char d)
{

实在感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表