📄 c51bbs论坛c51编程这是我写的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 9:04:35</FONT></H3>
<P>/***********************************************************************<BR>*FunName: void SerialIntSer(void) interrupt 4<BR>*<BR>*Discription: <BR>*<BR>*In: None <BR>*<BR>*Out: None <BR>*<BR>*Notes: <BR>*<BR>************************************************************************/<BR>void SerialIntSer(void) interrupt 4<BR>{<BR> if (_testbit_(RI))<BR> {<BR> if (!RB8)<BR> {<BR> if (SBUF == 0) //收到复位信号,设置接收参数。<BR> {<BR> g_bRcv = 1; <BR> g_iCnt = 0; <BR> g_cCnt = 1;<BR> } <BR> }<BR> else<BR> {<BR> if (g_bRcv)<BR> {<BR> if ((g_iCnt >= g_iSysAddr) && <BR> (g_iCnt < g_iSysAddr + SYS_CHANNEL_NUM)) //如果当前数据是本机地<BR>址到本机最后一个通道之间的数。<BR> {<BR> //根据g_cCnt放入缓冲区.<BR> NewRcvData[g_cCnt] = SBUF; <BR> g_cCnt++;<BR> //如果已接收了本机所有通道的数,则暂停,等待下一个复位。<BR> if (g_cCnt == SYS_CHANNEL_NUM + 1)<BR> g_bRcv = 0;<BR> }<BR> g_iCnt++; //DMX512主机发的数据个数计数器 <BR> }<BR> }<BR> }<BR> else<BR> {<BR> TI = 0;<BR> }<BR>}<BR></P>
<UL>
<LI><B>................ [szwdt] <FONT
color=#d5d5d5>2005-9-7 9:21:03</FONT></B>
<P>//------------------------------------------------------------------<BR>struct <BR>{<BR> unsigned char In;<BR> unsigned char Out;<BR> unsigned char Buff[0x40]; //循环队列 0x00..0x3f<BR>}Rx;<BR>//------------------------------------------------------------------<BR>void Serial(void) interrupt 4<BR>{<BR> unsigned char next;<BR> if (TI)<BR> {<BR> TI = 0;<BR> }<BR> <BR> if (RI)<BR> {<BR> RI = 0;<BR> next = (Rx.In + 1) & 0x3f; //循环队列 0x00..0x3f<BR> if (next != Rx.Out)<BR> {<BR> Rx.Buff[Rx.In] = SBUF;<BR> Rx.In = next;<BR> }<BR> else<BR> {<BR> next = SBUF; //防止置溢出标志<BR> }<BR> }<BR>}<BR>//------------------------------------------------------------------<BR>void main(void)<BR>{<BR> Init_MCU();<BR><BR> while(1)<BR> {<BR> if (Rx.In != Rx.Out) //队列中有数据<BR> {<BR> //从队列中取出数据处理<BR> }<BR> else<BR> {<BR> PCON |= PCON;<BR> PCON = PCON; //防止在执行上条指令时发生中断造成的无法唤醒<BR> }<BR> }<BR>}<BR>//------------------------------------------------------------------<BR><BR></P>
<LI><B>szwdt,你的程序是用来接收一般的数据吧,在DMX512里有复位数据的检测,你的程序里都没有,这样的话怎样知道目前的数据是针对哪个机器哪个通道的?
[liping_88] <FONT color=#d5d5d5>2005-9-7 10:38:57</FONT></B>
<P><BR></P>
<LI><B>你还是没有明白队列的意义,为什么非要从硬件SBUF中取数据呢?为什么你不愿意从队列中取数据呢 [szwdt] <FONT
color=#d5d5d5>2005-9-7 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">点击回主题参与讨论
>>></A><BR>_____________________________________________________________________________<BR>Copyright©,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 + -