DMX512接收程序

控制/MCU

1814人已加入

描述

  DMX512协议最先是由USITT(美国剧院技术协会)发展成为从控制台用标准数字接口控制调光器的方式。DMX512超越了模拟系统,但不能完全代替模拟系统。DMX512的简单性、可靠性以及灵活性使其迅速成为资金允许情况下选择的协议,除了调光器外,一系列不断增长的控制设备就是证据。DMX512仍然是科学上的一个新领域,具有在规则基础上产生的各种奇妙技术。

  DMX512是围绕工业标准EIA-485接口设计的。EIA-485属于接口、电压、电流等的“电”端。系统是基于沿着屏蔽导体双绞线的向下对称发送而建立的。这种缠绕结构确保所产生的干扰会同样地作用于两个信号,因此保证了一致的数字定相。所用的导线应该是由一条或两条双绞线、箔片和编织筛所构成的合适的数据导线。对称音频导线则不能完成这个工作。通常地,就如任何网段一样,导线两头应该有两个终端。

  灯光控制台通常在一头作为终端,而另一头应该只有一个120Ω的电阻。EIA485规范只支持“雏菊链”或每段上最多以32个“单元负载”所构成的串行网络。制造商声称每段可以长达1000m。但是,要特别指出的是,中继器的作用应该考虑到700m或800m左右,这样可以防止环境的异常。

    DMX512接收程序

  void Serial() interrupt 4 using 2

  {

  databuff=SBUF; RI=0;

  if(RB8==0) // RB8=0,SBUF=0;复位信号

  {

  CHK_SIGN=0; // 允许接收起始代码

  if(databuff==0) // 判断是否收到复位信号,是(SUBF=0),否(SUBF=!0)

  {

  DMX_SIGN=0; // 允许接收起始代码

  ADDR_CON=0; // 地址号计数器

  RECDAT=0; // 数据接收控制

  return;

  }

  else

  {

  DMX_SIGN=1; // 暂停接收起始代码 return;

  }

  }

  else

  {

  if(CHK_SIGN==0) // RB8=1,SBUF=0。起始帧

  {

  if (DMX_SIGN==0)

  {

  DMX_SIGN=1;

  if(databuff==0)// 判断是否起始代码

  {

  CHK_SIGN=1; // 接下来开始接收数据

  return; // 收到起始代码而退出中断

  }

  }

  return; // 没有接收到起始代码而退出中断

  }

  if(CHK_SIGN==1) // RB8=1,接收数据

  {

  ADDR_CON++; // 地址号计数器加1

  if(ADDR_CON 》= channel) // 判断当前地址号计数器是否属于本机地址

  {

  Dmxdat[RECDAT]=SBUF; // 接收数据 RECDAT++; // 下一个数据

  if(RECDAT 》= DmxCH) // 判断是否到本机的最后一个通道地址(这里DmxCH=4)

  {

  CHK_SIGN=0; // 接收完本机所有通道数,则暂停,等待下一个复位

  return;

  }

  }

  return;

  }

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分