找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1836|回复: 13
打印 上一主题 下一主题
收起左侧

RS485的单片机程序问题求助

[复制链接]
跳转到指定楼层
楼主
  1. #include <REG52.H>
  2. #include <stdio.h>

  3. sbit RS485 = P1^4;   
  4. bit SendFlag;
  5. unsigned int ReData,SenData;

  6. void delay(unsigned char i)
  7. {
  8.         unsigned char j;
  9.         for(i; i > 0; i--)
  10.                 for(j = 200; j > 0; j--);
  11. }

  12. void main (void)
  13.         {
  14.     SCON = 0x50;                       
  15.           TMOD|= 0x20;     
  16.                 PCON|= 0x80;                                                         
  17.                 TH1 = 0xF3;         
  18.                 TL1 = 0xF3;      
  19.                 TR1  = 1;                                                            
  20.                 ES   = 1;      
  21.                 EA   = 1;      
  22.         
  23.            // IE = 0x0;

  24.         while(1)
  25.     {
  26.         
  27.           if (SendFlag==1)   
  28.               {  
  29.                                 RS485=1;         
  30.               SBUF=SenData;           
  31.                   delay(50);
  32.        }
  33.          else
  34.              {
  35.               RS485=0;        
  36.              }
  37.     }
  38.   }

  39. void ser_int (void) interrupt 4 using 1
  40. {
  41. if(TI == 1)
  42. {
  43.         TI = 0;
  44.         SendFlag = 0;
  45. }

  46. if(RI == 1)      
  47. {
  48.         RI = 0;                  
  49.         ReData = SBUF;  
  50.         SenData=ReData;
  51.         SendFlag = 1;
  52. }
  53. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:261451 发表于 2018-1-12 15:40 | 只看该作者
通过串口助手发送00,每次接收到的不同

回复

使用道具 举报

板凳
ID:274868 发表于 2018-1-12 16:39 | 只看该作者
兄弟,首先你的代码注释为零啊,如果是老51单片机的话,晶振12MHZ,当前配置应该是正确的void UartInit(void)                //4800bps@12.000MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xF3;                //设定定时初值
        TH1 = 0xF3;                //设定定时器重装值
        TR1 = 1;                //启动定时器1
        ES = 1;                //使能串口中断
        EA = 1;                //使能总中断
}
回复

使用道具 举报

地板
ID:47286 发表于 2018-1-13 00:29 | 只看该作者
你是不是AB线接反了
回复

使用道具 举报

5#
ID:23606 发表于 2018-1-13 10:39 | 只看该作者
换11.0592晶体并重新设置定时器试试
回复

使用道具 举报

6#
ID:261451 发表于 2018-1-15 10:44 | 只看该作者
把232收发口短接收发正常,接上232转485后,短接TR+和TR-收发就不对了

P]BEUAB$GN=UH`XN{CCBS.png (22.27 KB, 下载次数: 42)

P]BEUAB$GN=UH`XN{CCBS.png
回复

使用道具 举报

7#
ID:261451 发表于 2018-1-15 10:44 | 只看该作者
dzbj 发表于 2018-1-13 00:29
你是不是AB线接反了

没有接反
回复

使用道具 举报

8#
ID:261451 发表于 2018-1-15 10:45 | 只看该作者
是不是232转485有问题啊
回复

使用道具 举报

9#
ID:261451 发表于 2018-1-15 10:46 | 只看该作者
pangfive 发表于 2018-1-12 16:39
兄弟,首先你的代码注释为零啊,如果是老51单片机的话,晶振12MHZ,当前配置应该是正确的void UartInit(voi ...

和程序里面设置的一样啊
回复

使用道具 举报

10#
ID:70953 发表于 2018-5-7 23:32 | 只看该作者
你的问题解决了吗?我也是这个问题,真心不知道怎么回事,期待有人能给予解答。
回复

使用道具 举报

11#
ID:324682 发表于 2018-5-7 23:34 | 只看该作者

支持正常 哈多发多大大的大的
回复

使用道具 举报

12#
ID:324682 发表于 2018-5-7 23:35 | 只看该作者
tzcl 发表于 2018-5-7 23:32
你的问题解决了吗?我也是这个问题,真心不知道怎么回事,期待有人能给予解答。

同求  搞得一头雾水
回复

使用道具 举报

13#
ID:316757 发表于 2018-5-7 23:47 | 只看该作者
请问这是实现什么功能的
回复

使用道具 举报

14#
ID:70953 发表于 2018-5-8 00:13 | 只看该作者
我有种想哭的感觉!在我的记忆中485通信是A连A,B连B,通信数据有问题,但是比较规律,就是在最后一位改成00,其他的位返回有错,但是有规律,我折腾了一晚上,结果就是因为A连B,B连A.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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