#define NEW99CLIENT_CHECKDELAY (FP32)1000000/SERIALBAND*11/((FP32)1000/(CPUFREQ/CLOCKCYCLE)*(108/12)) //串口一个字节所需要的循环次数
BOOL Com1SendPack(INT8U PROTO_NEW99CLIENT_DATA * cData) //使用主串口发出
{
INT8U ci,cNum=NEW99CLIENT_CHECKDELAY;
if(GetSerialSendNum()>0)
return 0;
ci=LOCADDRESSH+LOCADDRESSL; //本机地址
while(--ci);
#if(PROTO_NEW99CLIENT_SEMIDUPLEX)
if(!m_bNew99MainBeing)
{ //主机不存在
while(--ci)
{
_nop_();
if(RXD)
{
if(!(--cNum)) //检测发送检是否在一个字节内全部为高
{
SetAllInt(false);
goto NEWCLIENT_SEND; //为了提高检测到可以发数据到实际发送数据之间的速度
//特用了GOTO语句
}
}
else
cNum=NEW99CLIENT_CHECKDELAY;
}
}
else
{
#endif
while(--ci)
{
_nop_();
if(TXD)
{
if(!(--cNum)) //检测发送检是否在一个字节内全部为高
{
SetAllInt(false); //关闭串口中断
goto NEWCLIENT_SEND; //为了提高检测到可以发数据到实际发送数据之间的速度
//特用了GOTO语句
}
}
else
cNum=NEW99CLIENT_CHECKDELAY; //如果主机存在,则等待发送脚常高,否则等发送脚常高
}
#if(PROTO_NEW99CLIENT_SEMIDUPLEX)
}
#endif
return 0;
NEWCLIENT_SEND:
SendByte(cData[0],1); //发送数据
SetAllInt(true); //打开串口中断
ci=1;
while(ci<cData[4])
{
SendByte(cData[ci],0);
ci++;
}
m_dwNew99RegisterTick=GetTickCount();
return 1;
}
上面程序是从别的地方看到的,用在51上,我想移植到32上来,但是看不明白,功能好象是检测数据发送时总线有没有被别的设备占用,具体也不知道怎么修改,求大家帮忙分析一下这个程序
转载
|