//******发送DMX数据(主机发送,从机接收)*********
//*********************************************
void SendBytes(void)
{
SCON=0xC0; //串口UART工作于方式3(即9位UART),TB8=0,并禁止串行接收.
PCON=0;
SBUF=0xff;
while(!TI){;} //要是TI=0,则等待
TI=0;
SCON=0xD8; //串口UART工作于方式3(即9位UART),TB8=1
SBUF=0xff; //发送OXFF(起始码)
while(!TI){;}
TI=0;
SBUF=tab01_master_to_slave[0];
while(!TI) {;}
TI=0;
SBUF=tab01_master_to_slave[1];
while(!TI){;}
TI=0;
SBUF=tab01_master_to_slave[2];
while(!TI){;}
TI=0;
SBUF=tab01_master_to_slave[3];
while(!TI) {;}
TI=0;
SBUF=tab01_master_to_slave[4];
while(!TI){;}
TI=0;
SBUF=tab01_master_to_slave[5];
while(!TI){;}
TI=0;
SBUF=tab01_master_to_slave[6];
while(!TI){;}
TI=0;
SBUF=tab01_master_to_slave[7];
while(!TI){;}
TI=0;
SCON=0xD0; //发送内容后,允许uart串行接收产生中断
//PCON=PCON&0x7f;
}
//**********从机接收来自主机的DMX数据*********&
//*********************************************
void receive_data_from_master()
{
databuff=SBUF;
RI=0;
if(RB8==0) //RB=0,SBUF=0;启动信号
{
CHK_SIGN=0; //清接允许接收数据标志位
if(databuff==0xff) //接收到的数据为0xff时,说明接收到起始信号
{
DMX_SIGN=0; //允许接收起始代码
RECDAT=0; //数据接收个数控制 起始后清零
return; //收到起始代码返回
}
else //没有接收到起始信号,则
{
DMX_SIGN=1; //暂停接收起始代码
return;
}
}
else
{
if(CHK_SIGN==0)
{
if(DMX_SIGN==0)
{
DMX_SIGN=1;
if(databuff==0xff) //判断是否为起始代码(0xff)
{
CHK_SIGN=1; //收到起始代码 CHK_SIGN=1表示可以接受下面的数据
return;
}
}
return; //没有接收到起始代码退出中断
}
if(CHK_SIGN==1)
{
tab02_slave_from_master[RECDAT]=SBUF; //接收数据
RECDAT++; //准备接收下一个数据
if(RECDAT>=8)
{
CHK_SIGN=0; //接收完毕暂停,等待下一个启动信号
//if(tab02_slave_from_master[7]==2) PWM_init();
return;
}
}
}
}
|