⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51bbs论坛c51编程这是我写的dmx512的接收程序,请各位大侠看看,有没有更好的方法,减少中断处理程序的时间。谢谢!!.htm

📁 DMX512资料及其DMX512接收程序
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://www.c51bbs.com/c51bbs/topic/c51bbs696713.htm -->
<HTML><HEAD><TITLE>C51BBS论坛>>C51编程:这是我写的DMX512的接收程序,请各位大侠看看,有没有更好的方法,减少中断处理程序的时间。谢谢!!</TITLE>
<META http-equiv=Content-Type content="text/html; charset=Gb2312">
<SCRIPT language=javascript>function MM_findObj(n, d) { var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;}function MM_changeProp(objName,x,theProp,theValue) {var obj = MM_findObj(objName);if (obj && (theProp.indexOf("style.")==-1 || obj.style)) eval("obj."+theProp+"='"+theValue+"'");}</SCRIPT>
<LINK 
href="C51BBS论坛C51编程这是我写的DMX512的接收程序,请各位大侠看看,有没有更好的方法,减少中断处理程序的时间。谢谢!!.files/nobgcolor.css" 
type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY bgColor=#efefef leftMargin=35 
background=C51BBS论坛C51编程这是我写的DMX512的接收程序,请各位大侠看看,有没有更好的方法,减少中断处理程序的时间。谢谢!!.files/c51bbs.jpg 
topMargin=80><TD class=pw>用【<SPAN style="CURSOR: hand" 
onclick="MM_changeProp('spancontent','','style.fontSize','9pt','SPAN')"> 小 
</SPAN>|<SPAN style="CURSOR: hand" 
onclick="MM_changeProp('spancontent','','style.fontSize','10.5pt','SPAN')"> 中 
</SPAN>|<SPAN style="CURSOR: hand" 
onclick="MM_changeProp('spancontent','','style.fontSize','12pt','SPAN')"> 大 
</SPAN>】字体浏览</TD> 
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD><SPAN id=spancontent>
      <H3>C51编程:这是我写的DMX512的接收程序,请各位大侠看看,有没有更好的方法,减少中断处理程序的时间。谢谢!! [liping_88] 
      <FONT color=#d5d5d5>2005-9-7&nbsp;9:04:35</FONT></H3>
      <P>/***********************************************************************<BR>*FunName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;SerialIntSer(void)&nbsp;interrupt&nbsp;4<BR>*<BR>*Discription:&nbsp;<BR>*<BR>*In:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None&nbsp;&nbsp;&nbsp;<BR>*<BR>*Out:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None&nbsp;<BR>*<BR>*Notes:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>*<BR>************************************************************************/<BR>void&nbsp;SerialIntSer(void)&nbsp;interrupt&nbsp;4<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_testbit_(RI))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!RB8)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(SBUF&nbsp;==&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;//收到复位信号,设置接收参数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_bRcv&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_iCnt&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_cCnt&nbsp;=&nbsp;1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_bRcv)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((g_iCnt&nbsp;&gt;=&nbsp;g_iSysAddr)&nbsp;&amp;&amp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(g_iCnt&nbsp;&lt;&nbsp;g_iSysAddr&nbsp;+&nbsp;SYS_CHANNEL_NUM))&nbsp;//如果当前数据是本机地<BR>址到本机最后一个通道之间的数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//根据g_cCnt放入缓冲区.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewRcvData[g_cCnt]&nbsp;=&nbsp;SBUF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_cCnt++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果已接收了本机所有通道的数,则暂停,等待下一个复位。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(g_cCnt&nbsp;==&nbsp;SYS_CHANNEL_NUM&nbsp;+&nbsp;1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_bRcv&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_iCnt++;&nbsp;&nbsp;&nbsp;&nbsp;//DMX512主机发的数据个数计数器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR></P>
      <UL>
        <LI><B>................ [szwdt] <FONT 
        color=#d5d5d5>2005-9-7&nbsp;9:21:03</FONT></B>
        <P>//------------------------------------------------------------------<BR>struct&nbsp;<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;In;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Out;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Buff[0x40];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//循环队列&nbsp;0x00..0x3f<BR>}Rx;<BR>//------------------------------------------------------------------<BR>void&nbsp;Serial(void)&nbsp;interrupt&nbsp;4<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(TI)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(RI)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RI&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;=&nbsp;(Rx.In&nbsp;+&nbsp;1)&nbsp;&amp;&nbsp;0x3f;&nbsp;//循环队列&nbsp;0x00..0x3f<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(next&nbsp;!=&nbsp;Rx.Out)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rx.Buff[Rx.In]&nbsp;=&nbsp;SBUF;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rx.In&nbsp;=&nbsp;next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;=&nbsp;SBUF;&nbsp;&nbsp;&nbsp;&nbsp;//防止置溢出标志<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>//------------------------------------------------------------------<BR>void&nbsp;main(void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Init_MCU();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;while(1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Rx.In&nbsp;!=&nbsp;Rx.Out)&nbsp;//队列中有数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从队列中取出数据处理<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCON&nbsp;|=&nbsp;PCON;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCON&nbsp;=&nbsp;PCON;&nbsp;&nbsp;&nbsp;&nbsp;//防止在执行上条指令时发生中断造成的无法唤醒<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>//------------------------------------------------------------------<BR><BR></P>
        <LI><B>szwdt,你的程序是用来接收一般的数据吧,在DMX512里有复位数据的检测,你的程序里都没有,这样的话怎样知道目前的数据是针对哪个机器哪个通道的? 
        [liping_88] <FONT color=#d5d5d5>2005-9-7&nbsp;10:38:57</FONT></B>
        <P><BR></P>
        <LI><B>你还是没有明白队列的意义,为什么非要从硬件SBUF中取数据呢?为什么你不愿意从队列中取数据呢 [szwdt] <FONT 
        color=#d5d5d5>2005-9-7&nbsp;12:28:07</FONT></B>
        <P><BR></P><!--Add Reply--></LI></UL></SPAN></TD></TR></TBODY></TABLE><A 
href="http://www.c51bbs.com/c51bbs/moredata.asp?syid=696713">点击回主题参与讨论 
&gt;&gt;&gt;</A><BR>_____________________________________________________________________________<BR>Copyright&copy;,C51BBS论坛 
2000-2003 <BR><BR><IFRAME name=ad 
src="C51BBS论坛C51编程这是我写的DMX512的接收程序,请各位大侠看看,有没有更好的方法,减少中断处理程序的时间。谢谢!!.files/ad.htm" 
frameBorder=0 width="100%" scrolling=no height=80 allowTransparency 
color="#efefef"> </IFRAME></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -