MAX485通信接法是怎样通信的,跪求例程!

2020-01-30 14:10发布

MAX485通信接法是怎样通信的,写了了些程序都实现不了通信,在这里和大家讨论下!究竟是怎样实现的!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
lihw2@
1楼-- · 2020-02-01 07:33
//发送一个字节
void Sendchar(unsigned char d)
{
       
        SBUF=d;
        while(!TI);        //等待发送完成,TI置位
        TI=0;
}

//发送字符串
void SendString(unsigned char *str)       
{
        while(*str)
        {
                Sendchar(*str) ;
                str++;
        }
}

void sen485(uchar *p,uchar i)//发送
{
        uchar x;
        EA=0;
        REN=0;
        _nop_();
        _nop_();
        DIR=1;//rs485 发送模式
        _nop_();
        _nop_();
       
        delaycom(8000);
        for(x=0;x<i;x++)
                {
                  Sendchar(*p);
                  p++;
                }
        delaycom(5000);
        DIR=0;//rs485 接收模式
        REN=1;
        EA=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}



//串口中断服务程序
void  UART1_Rountine(void)  interrupt 4  //放在这里 和放在main()里面是一样的
{
        unsigned char idata RxData=0;
        EA=0;
           if(RI)                         //必须判断RI(接收中断标志)是否为1
    {
            RI=0;
            RxData = SBUF;       
                        ISP_Check(RxData); //在这里添加你的接收代码
    }
        EA=1;
}

void delaycom(unsigned int time)
{
        while(--time);
}


//
void ISP_Check(unsigned char tmp)//判断就收数据是否符合规定的长度与协议,如ok就存到temp2。
{
   
    static uchar big=0;
                static uchar  counter=0;
                static uchar rsov=0;

                if(   ((big==0) && ((tmp==0xA0) ||(tmp==0xcf))   )||(rsov==1))
{
             big=1;
                         rsov=1;
                         temp[counter]=tmp;
                         counter++;
            if((counter>7)&&( over==0))
                        {
                                big=0;
                                rsov=0;
                                over=1;
                                temp2[0]=temp[0];
                                temp2[1]=temp[1];
                                temp2[2]=temp[2];
                                temp2[3]=temp[3];
                                temp2[4]=temp[4];
                                temp2[5]=temp[5];
                                temp2[6]=temp[6];
                                temp2[7]=temp[7];
                               
                               
                                counter=0;
                        }
                       
                        return;
    }
                else
                {
                        big=0;
                 rsov=0;
                         counter=0;
                }
}
qq602828308
2楼-- · 2020-02-01 12:33
lihw2@ 发表于 2013-3-1 09:21
//发送一个字节
void Sendchar(unsigned char d)
{

实在感谢!

一周热门 更多>