打印

哪位高人给一个max485一对多通信的程序啊

[复制链接]
2305|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Angelica2ge|  楼主 | 2013-5-6 21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
hopewise| | 2013-5-7 08:03 | 只看该作者
网上大把

使用特权

评论回复
板凳
hopewise| | 2013-5-7 10:01 | 只看该作者
以前搞过,见下面(部分):
//*****************UART中断子函数********************
//***************************************************
void uart_int0(void) interrupt 4
{   
          if(f_dmx==1)                                                 //如果是dmx模式,则执行下面内容
          {
             uchar iv;
             databuff=SBUF;
             RI=0;
             if(RB8==0)                                       
             {
                    CHK_SIGN=0;                  //清接允许接收数据标志位   
                    if(databuff==0)              //接收到的数据为0时,说明接收到起始信号
                        {
                               DMX_SIGN=0;           //允许接收起始代码(低电平有效)
                               ADDR_CON=0;           //地址位记数器复位
                               RECDAT=0;             //数据接收个数控制 起始后清零
                               return;                            
                         }
                         else                        //没有接收到起始信号,则
                         {
                               DMX_SIGN=1;           //暂停接收起始代码
                               return;
                         }
                  }
              else
              {
                        if(CHK_SIGN==0)                          
                        {
                               if(DMX_SIGN==0)
                               {
                                         DMX_SIGN=1;
                                         if(databuff==0)                                
                                         {
                                               CHK_SIGN=1;                                     //收到起始代码  CHK_SIGN=1表示可以接受下面的数据
                                               return;
                                         }
                                   }
                                   return;                                                     //没有接收到起始代码
                            }
                    if(CHK_SIGN==1)                                                                                                            //收到起始代码后,则
                        {
                                   ADDR_CON++;                                                  //地址计数器加1
                                   if(ADDR_CON>=address)                                        //判断当前地址号计数器是否属于本机地址
                                   {
                                          Dmxdata_temp[RECDAT]=SBUF;                            //接收数据
                                          RECDAT++;                                             //准备接收下一个数据
                                          if(RECDAT>=7)      
                                          {
                                                 CHK_SIGN=0;                                    //接收完毕暂停,等待下一个启动信号                                       
                                                 iv=0;
                                                 for(iv=0;iv<7;iv++)                                                         //iv的大小限制了后面的非本地址的内容无效
                                         {
                                               if(Dmxdata[iv]!=Dmxdata_temp[iv])             //把接收到的所有DMX数据copy给数组Dmxdata[iv]
                                                                           {
                                                                                 Dmxdata[iv]=Dmxdata_temp[iv];
                                                                                     f_dmx_update=1;                     //DMX数据更新标志位
                                                                           }
                                             }
                                           }

                                     }
                                    return;

                             }

                      }

           }
           else
           {
                      if((f_dimming==1)|(f_change==1)|(f_fade==1)|(f_sound==1))          
                          {
                               RI=0;
                                   return;                               //要是调光或者彩变或者渐变或者声控的话,则不接受
                          }          
                      else  receive_data_from_master();             //本机处于从功能模式,则接收主机的内容(注:不是DMX512控制台内容)       

           }

}

使用特权

评论回复
地板
coody| | 2013-5-7 10:43 | 只看该作者
LZ,你看看MODBUS协议,世界通用,RS485,一对多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

24

帖子

0

粉丝