查看: 1011|回复: 0
打印 上一主题 下一主题

新手求助程序问题,有些地方看不懂

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-8 07:40:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表