⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max485.txt

📁 这是基于MAX485通信的程序。可以实现485通信的基本功能。
💻 TXT
字号:

void sendwframe(void)   
{   
    unsigned char data i;   
    b-rightMeterFame=0;   
    RDCTP-command-table[13]=0x43;// 更新命令缓冲区    
    RDCTP-command-table[14]=0xc3;   
    RDCTP-command-table[15]=0x44;  //更新命令缓冲区累加和校验字节    
    RE-DE=1;   //设置MAX485进入发送状态    
    for(i=0;i<17;i++)   
    {   
    SBUF=RDCTP-command-table[i];   //发送缓冲区内的数据    
    delay();            //延时,以防止智能仪表端接收数据丢失    
    }   
     RE-DE=0;       //设置MAX485进入接收状态    
     b-timerOver=0;  //复位接收超时标志    
     counter-10ms=0x00;     // 复位10MS计数器    
     ET0=1;  //开定时器T0中断    
     RT0=1; //y启动定时器T0    
     Do   
     {   
     if(b-timerOver)   //判断是否产生了接收超时    
        {   
        TR0=0;  //停止定时器T0    
        ET0=0;  //关闭定时器T0的中断    
        b-timerOver=0;    //复位接收超时标志    
        counter-10ms=0x00; //复位10MS计数器    
        RE-DE=1;   //设置MAX485进入发送状态    
        m-meterAddrC=0X00;智能//智能仪表数据帧地址段计数器清零    
        RS485-status=0x00;  //复位RS485中断接收程序状态标志    
        b-rightMeterFrame=0;//清除正确接收数据帧标志    
        }   
     }     
   
} 


  在总线末端接一个匹配电阻,吸收总线上的反射信号,保证正常传输信号干净、无毛刺。匹配电阻的取值应该与总线的特性阻抗相当。
  当总线上没有信号传输时,总线处于悬浮状态,容易受干扰信号的影响。将总线上差分信号的正端A+和+5电源间接一个10K的电阻;正端A+和负端B-间接一个10K的电阻;负端B-和地间接一个10K的电阻,形成一个电阻网络。当总线上没有信号传输时,正端A+的电平大约为3.2V,负端B-的电平大约为1.6V,即使有干扰信号,却很难产生串行通信的起始信号0,从而增加了总线抗干扰的能力。
4 通信规则
  由于RS-485通讯是一种半双工通讯,发送和接收共用同一物理信道。在任意时刻只允许一台单机处于发送状态。因此要求应答的单机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下,才能应答。半双工通讯对主机和从机的发送和接收时序有严格的要求。如果在时序上配合不好,就会发生总线冲突,使整个系统的通讯瘫痪,无法正常工作。要做到总线上的设备在时序上的严格配合,必须要遵从以下几项原则:
  1) 复位时,主从机都应该处于接收状态。
  SN75176芯片的发送和接收功能转换是由芯片的 RE* ,DE端控制的。RE*=1,DE=1时,SN75176发送状态;RE*=0,DE=0时,SN75176处于接收状态。一般使用单片机的一根口线连接RE*,DE端。在上电复位时,由于硬件电路稳定需要一定的时间,并且单片机各端口复位后处于高电平状态,这样就会使总线上各个分机处于发送状态,加上上电时各电路的不稳定,可能向总线发送信息。因此,如果用一根口线作发送和接收控制信号,应该将口线反向后接入SN75176的控制端,使上电时SN75176处于接收状态。
  另外,在主从机软件上也应附加若干处理措施,如:上电时或正式通讯之前,对串行口做几次空操作,清除端口的非法数据和命令。
  2) 控制端RE*,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度。
  在RS-232,RS-422等全双工通讯过程中,发送和接收信号分别在不同的物理链路上传输,发送端始终为发送端,接收端始终为接收端,不存在发送、接收控制信号切换问题。在RS-485半双工通讯中,由于SN75176的发送和接收都由同一器件完成,并且发送和接收使用同一物理链路,必须对控制信号进行切换。控制信号何时为高电平,何时为低电平,一般以单片机的TI,RI信号作参考。
  发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能;
  接收时,检测RI是否建立起来,当RI为高电平后,接收完毕,又可以转为发送。
  在理论上虽然行得通,但在实际联调中却出现传输数据时对时错的现象。根据查证有关资料,并在联调中借助存储示波器反复测试,才发现一个值得注意的问题,我们可以查看单片机的时序:
 

⌨️ 快捷键说明

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