用的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;
}
}
谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
//串行中断以接收通道数据.
/****************************************************************************/
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 ++;
}
}
}
}
}
}
你个挖坟的!
不会吧,你领导知道你这个想法不K死你才怪,你只要你设定的地址里的数据就好了,其他的当然丢弃了,你还是好好看下DMX512协议再写程序吧,
等级太低 加不了好友 我发了个帖子 麻烦你帮我看一下..谢谢了
http://www.amobbs.com/thread-5507977-1-1.html 这个是链接
一周热门 更多>