#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上来,但是看不明白,功能好象是检测数据发送时总线有没有被别的设备占用,具体也不知道怎么修改,求大家帮忙分析一下这个程序 
转载 
 
 |