请问有高手懂DMX512通信协议吗?帮我看看这段接收程序什么问题

2020-02-02 09:19发布

用的51单片机,接受12路的调光台没有问题,可是接在珍珠台上,一至十路也没什么问题,十路以后就开始混乱,路数越大越乱,发现十路以后接收的不只是本地址,比如我设置的地址15,单片机一会接受15路的信号,一会接收16路的信号。越到后面接受的旁路信号越多。求高手指点
  下面是接受子函数:

  SCON=0x90;
  PCON=0x80;
  EA=1;
  ES=1;       ;//初始化函数,晶振8M

void see() interrupt 4             ;//串口中断
{
  if(RI==1)
   {
     
      if(!RB8)
             {  flag2=1;
                      num=0;
                 }
            else if(flag2)
              {
                    
              if(num==temp)            //temp 是我自己设定的地址
               {
                   P2=SBUF;         //取出数据
                        flag2=0;
                         num=0;
                       }
           
                           num++;
           }   
        RI=0;
   }
   
}

谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
lsls
1楼-- · 2020-02-04 04:25
/****************************************************************************/
//串行中断以接收通道数据.
/****************************************************************************/       
void Seri(void) interrupt 4 using 2
{       
        if(RI)
        {
                RI = 0;       
                 
                if(1)
//                if(RunMode == DMX || RunMode == SLAVE)
                {
                        if((RB8==0) && (SBUF == 0))
                        {
                                if(Channel[0] == 0)
                                        SignalCount ++;                               
                                else
                                {                        
                                        SignalCount = 0;
                                }

                                if(SignalCount > 10)
                                        DMXCount = 0;

                                ChanCount = 0;
                                ChanAddr = 0;
                               
                        }
                        else if(RB8==1)
                        {
                                if(ChanCount < 513)
                                        ChanCount ++;  
               
                                if((ChanCount == 1) && (SBUF == 'A') && (AddrFlagCount < 10))        //修改地址
                                        AddrFlagCount ++;
                                if((ChanCount == 1) && (SBUF != 'A'))        //不修改地址
                                        AddrFlagCount = 0;

                                if(AddrFlagCount > 5)
                                        AddrFlag = 1;
                                else
                                        AddrFlag = 0;

                                if((AddrFlag == 1) && (ChanCount == 2))
                                        AddrH = SBUF;
                                if((AddrFlag == 1) && (ChanCount == 3))
                                        AddrL = SBUF;

                                if(AddrFlag == 0)
                                {
                                        if(ChanCount == 1)
                                        {
                                                Channel[0] = SBUF;
                                                ChanAddr ++;
                                        }

                                        if((ChanCount > Addr) && (ChanCount <= Addr + CHAN))
                                        {
                                                Channel[ChanAddr] = SBUF;
                                                ChanAddr ++;                                          
                                        }
                                }                         
                        }
                }
        }
}                                          
lampearl982615
2楼-- · 2020-02-04 07:34
lampearl982615 发表于 2012-10-25 15:04
/****************************************************************************/
//串行中断以接收通道 ...

你个挖坟的!
HeP028
3楼-- · 2020-02-04 12:52
zjq_go 发表于 2009-9-17 10:33
呵呵,非常感谢 50cents
    的确是的,换成char就可以了
我明白问题所在了,INT型函数占用时间多,而DMX ...

不会吧,你领导知道你这个想法不K死你才怪,你只要你设定的地址里的数据就好了,其他的当然丢弃了,你还是好好看下DMX512协议再写程序吧,
kcfoo1
4楼-- · 2020-02-04 18:04
 精彩回答 2  元偷偷看……
liuli45600
5楼-- · 2020-02-04 23:58
bbs2009 发表于 2012-11-21 16:59
这里不许 留邮箱 或 QQ 的 。 有问题 发帖。

等级太低 加不了好友   我发了个帖子 麻烦你帮我看一下..谢谢了
http://www.amobbs.com/thread-5507977-1-1.html  这个是链接

一周热门 更多>