请问有高手懂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条回答
wowo
1楼-- · 2020-02-02 11:39
 精彩回答 2  元偷偷看……
zjq_go
2楼-- · 2020-02-02 16:19
恩,舞台灯光上用的,怎么没人知道呢?
50cents
3楼-- · 2020-02-02 18:33
看不懂,不过觉得把晶体换成16M,把第二句改成 PCON=0;就行了。
zjq_go
4楼-- · 2020-02-02 21:47
为什么啊?
那不是一样的?
还不是250K的速率
50cents
5楼-- · 2020-02-03 03:28
不知道为什么,前些天做梦时梦见一位长者说的。他说8字不吉利,以后你遇到困难碰到8字就去掉,把它加到第二个8字上就行了。
所以
  SCON=0x90;
  PCON=0x80;
  EA=1;
  ES=1;       ;//初始化函数,晶振8M
要改成
  SCON=0x90;
  PCON=0x0;
  EA=1;
  ES=1;       ;//初始化函数,晶振16M

昨晚又梦见他,我跟他说不换晶体行不行啊。他跟我说也行!
把unsigned int的 num和temp 换成 unsigned char就行。

你可以试试,不行的话告诉我,我今晚做梦时帮你骂他。
zjq_go
6楼-- · 2020-02-03 03:36
 精彩回答 2  元偷偷看……

一周热门 更多>