打印

89c55wd,RS485通讯,能发送不能收,什么问题?

[复制链接]
4127|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cpu51|  楼主 | 2010-8-15 12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送正常,接收不能,接收时RX的脚(P3.0)也有电平变化。就是不产生中断,请高手指点。

//*************************初始化***************************************
//发送数据和接收数据前的控制板通讯初始化
//9600BPS,发送数据—接收数据
//10BIT一帧,1个起始位,8BIT数据,1个停止位。
//****************************************************
void comm_port_init(void)
{
  SCON=0x50;    //串口工作方式1,单机方式,发送的是数据,接受的也是数据,
ren=1 允许接收,TB0=0;
  TMOD=0x20;    //定时器1工作方式2
  PCON=0;       //波特率不增倍
  TL1=0xfd;     //计数初值9600bps
  TH1=0xfd;     //重装值
  TR1=1;        //启动定时器
  ES=1;         //串行中断允许  
  tx_en=0;      // 接收使能
  }
//******************************************************************  
//串口中断函数
//接收代码,
//******************************************************************  
void rec_int(void) interrupt 4
{
green_lamp=0;    //接收指示灯亮
    ES=0;    //串口中断禁止
    if(1==RI)         //是接收引起的中断
     {
      buff=SBUF;
      RI=0;           //清除接收标志
     a=buff;
     }
  
    else if(1==TI)
      {
        TI=0;         //是发送引起的中断
       }
    ES=1;
    green_lamp=1;//接收指示灯灭
}

相关帖子

沙发
chunyang| | 2010-8-15 17:42 | 只看该作者
总的中断使能位要置位,EA=1。

使用特权

评论回复
板凳
cpu51|  楼主 | 2010-8-15 18:40 | 只看该作者
主程序中是有的 EA=1
main()
{  
   TMOD=0x01; //T0为16位计数
   IT0=1;    //INT0设为边沿触发方式
   IT1=1;    //INT1设为边沿触发方式
   EX0=0;    //int0中断允许
   EX1=0;    //int1中断允许
   ET0=1;    //T0中断允许    计时用
   ET1=1;    //T1中断允许    串行通讯用
//  ET2=0;    //T2中断no允许  
   PT0=1;      //T0优先  
   EA=1;       //总中断允许
   TH0=0x0;
   TL0=0x0;

   rx=tx=1;
   comm_port_init();   //通讯
   math_my_address();  //ID
   red_lamp=0;
   expand_lamp=0;      //延时
  
// eeprom_debug();      //write debug data
   read_eeprom_data();  //read data

   TR0=0;//           TR1=0;
   delayms(2000);
   expand_lamp=1;

  while(1)
   {

    runa1();
   runa2();
   }
}

使用特权

评论回复
地板
apan| | 2010-8-15 22:24 | 只看该作者
485是有方向控制的,你是在接收状态吗?

使用特权

评论回复
5
chunyang| | 2010-8-16 01:15 | 只看该作者
接收准许了么?REN=1。只要正确的设定波特率、中断使能寄存器并开启接收就一定能发生中断,其它程序在此毫无意义,仅检查几个设置即可。

使用特权

评论回复
6
chunyang| | 2010-8-16 01:18 | 只看该作者
另外注意相关设置的语句文法是否正确,仔细检查,包括符号和注释。

使用特权

评论回复
7
cpu51|  楼主 | 2010-8-16 20:12 | 只看该作者
终于搞定了,在初始化中加一句PS=1;就可以了,不过有点没懂,为什么PS=0,就不能中断?

使用特权

评论回复
8
chunyang| | 2010-8-17 00:47 | 只看该作者
你说的PS指的是什么?

使用特权

评论回复
9
baou001| | 2010-8-25 16:29 | 只看该作者
你的问题跟我现在的问题差不了很远,问题不在于程序本身,是在RS 485的电路,在RS 485电路没做好时没有出现差分接收,就没有低电平出现,就不能接收

使用特权

评论回复
10
JYJ_BIG| | 2011-7-7 09:41 | 只看该作者
PS?????是接受使能控制吗?

使用特权

评论回复
11
gpzmvp| | 2011-7-14 16:30 | 只看该作者
看你程序的延时应该也行了估计是你电路问题...
看下你A端B端有没有上拉或者下拉电阻...
6脚(上拉)
7脚(下拉)
上拉下拉的阻值随你485使用环境而定吧...
(不拉可以调通但是拉一定要拉对要不接收不了的)
另外你的RE/DE端有没有加反相...
电路没问题就主要看你的控制端吧...

使用特权

评论回复
12
shenquan| | 2011-7-14 19:05 | 只看该作者
数字的,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:承接工业远程控制系统及设计研发,DCS控制系统,无线采集控制系统,单片机设计,工业设备维修,仪器仪表、控制系统维护、检修。

98

主题

458

帖子

0

粉丝