485 programme.txt

来自「485通讯程序」· 文本 代码 · 共 130 行

TXT
130
字号
void dsend()//数据发送子程序
{ 
    uchar i;
    uchar sum;
        do
            {
                dere487=1;
                _nop_();
                            
    
                SBUF=0xaa;
                while(TI==0);
                TI=0;
                
                dere487=0;
                _nop_();
                            
    
                while(RI==0);
                RI=0;
                dogds1232();
            }while(SBUF!=0xbb);
        do
            {
                sum=0;
                
                dere487=1;
                _nop_();
                
                for(i=0;i<4;i++)
                    {
                        SBUF=bcdtab[i];
                        sum+=bcdtab[i];
    //求发送校验和
                        while(TI==0);
                        TI=0;
                    }
                
                SBUF=sum;        //send the sum
                while(TI==0);
                TI=0;
                
                dere487=0;
                _nop_();
                            
    
                while(RI==0);    
    //wait the master answer
                RI=0;
                dogds1232();
            }while(SBUF!=0);    //回答出错,则重发
}

*************************************************************
void drec() //串口接收子程序
{ 
        uchar i;
        uchar rsum;
    do
        {
            dere487=0;
            _nop_();
                
                
                while(RI==0);
                RI=0; 
                
                dogx5045();
            }while(SBUF!=0xaa);        //判断slave请求
            
        dere487=1;
        _nop_();
        
        
        
        SBUF=0xbb;        //发应答信号
        while(TI==0);
        TI=0;
        
        while(1)
            {
                rsum=0;        //清接收校验和
                dere487=0;
                _nop_();
                            
    
                for(i=0;i<4;i++)
                    {
                      while(RI==0);
                        RI=0; 
                        retab[i]=SBUF;
                        rsum+=retab[i];
    //求接收校验和
                    }
                while(RI==0);    
    //receive the sum
                RI=0; 
                _nop_();
                _nop_();
                _nop_();
                
                if(SBUF==rsum)
                    {
                        dere487=1;
                        _nop_();
                            
        
                        
                        SBUF=0x00;    
    //校验和相同发00
                        while(TI==0);
                        TI=0;
                        break;
                    }
                else
                    {
                        dere487=1;
                        _nop_();
                            
                
                        
                        SBUF=0xff;    
    //出错发ff,重新接收
                        while(TI==0);
                        TI=0;
                        dogx5045();
                    }
            }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?