找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13858|回复: 30
收起左侧

Rs485通信单片机C程序

  [复制链接]
ID:208133 发表于 2017-6-5 18:54 | 显示全部楼层 |阅读模式
Rs485通信单片机源程序如下:
  1. /*******************************************************************************
  2. *  标题:                  RS485串口通信试验(接受与发送)                         *
  3. *                                                                                                                                                            *
  4. *  1.通过本例程了解串口的基本原理及使用 ,理解并掌握对串口进行初始化                            *
  5. *                                                                                                                                                                *
  6. *  2.请使用串口调试助手(Baud 4800、数据位8、停止位1、效验位无)做为上位机(发送)数据和(接受)数据,
  7. *    请在字符串输入框中输入字符和数字(HEX),按发送按钮。观看接受窗显示情况.也可以用自动循环发送。
  8. *
  9. *  3.试验RS485需要用RS232转485的转换头。开板A对485转换头A  B对应485转换头B.接法大家可以参考原理图。
  10. *                                                                                       *
  11. * 请学员认真消化本例程,学会用C语言操作串口和485的实现                              *
  12. ********************************************************************************/

  13. #include <REG52.H>
  14. #include <stdio.h>

  15. sbit RS485E=P3^7;   //定义485的使能脚
  16. bit SendFlag;
  17. unsigned int ReData,SenData;

  18. /**************************************
  19.             延时程序
  20. **************************************/
  21. void delay(unsigned char i)
  22. {
  23.         unsigned char j;
  24.         for(i; i > 0; i--)
  25.                 for(j = 200; j > 0; j--);
  26. }


  27. void main (void) {


  28.         SCON = 0x50;      //REN=1允许串行接受状态,串口工作模式1                             
  29.             TMOD|= 0x20;      //定时器工作方式2                    
  30.                 PCON|= 0x80;                                                         
  31.                 TH1  = 0xFd;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)   
  32.                 //TH1 = 0xF3;         // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
  33.             TL1 = 0xF3;      
  34.                 TR1  = 1;                                                            
  35.                 ES   = 1;        //开串口中断                  
  36.                 EA   = 1;        // 开总中断
  37.        
  38.            // IE = 0x0;
  39.    
  40.         while(1)
  41.     {
  42.        
  43.           if (SendFlag==1)    // max485(半双工通信) RE/DE定义 RE=0为接受状态  DE=1为发送状态(参考MAX485芯片管脚)
  44.              {   RS485E=1;           //                              RS5485E=0为接收状态  RS5485E=1为发送状态
  45.               SBUF=SenData;           //发送数据
  46.                   delay(50);
  47.        }
  48.          else
  49.           {

  50.               RS485E=0;              //接收状态
  51.           }

  52. }

  53. }

  54. /****************************************************
  55.                串口中断程序
  56. ******************************************************/
  57. void ser_int (void) interrupt 4 using 1
  58. {
  59. if(TI == 1)
  60. {
  61.         TI = 0;
  62.         SendFlag = 0;
  63. }
  64. ……………………

  65. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
C程序.zip (17.23 KB, 下载次数: 382)

评分

参与人数 3黑币 +6 收起 理由
gsr64 + 1 很给力!
黄钊 + 1
154462859 + 4 赞一个!

查看全部评分

回复

使用道具 举报

ID:47286 发表于 2017-6-5 21:00 | 显示全部楼层
不用做发送标记来改变485芯片的状态 上电后485的控制端置低 一直出于接收状态 发送函数里置高 发送完毕拉低就行了
回复

使用道具 举报

ID:208410 发表于 2017-6-6 14:53 | 显示全部楼层
好东西,谢谢楼主!!!!!!!!!!!
回复

使用道具 举报

ID:234694 发表于 2017-11-10 21:56 | 显示全部楼层
犀利啊。多谢楼主分享!
回复

使用道具 举报

ID:273288 发表于 2018-1-8 16:17 | 显示全部楼层
想来学习一下
回复

使用道具 举报

ID:277300 发表于 2018-1-18 11:11 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:277300 发表于 2018-1-18 11:12 | 显示全部楼层
想来学习一下
回复

使用道具 举报

ID:295094 发表于 2018-3-21 16:24 来自手机 | 显示全部楼层
485地址从哪设置
回复

使用道具 举报

ID:297486 发表于 2018-3-26 20:25 | 显示全部楼层
学习了
回复

使用道具 举报

ID:297647 发表于 2018-3-27 10:13 | 显示全部楼层
下载试试看吧
回复

使用道具 举报

ID:70953 发表于 2018-5-7 23:28 | 显示全部楼层
这个程序是由问题的。我测试的时候,232传输数据是没有问题的。但是利用485,发现返回数据是有规律的错误,而且,超过两个字节后,最后一个字节自动改为00,请问各位可有这个问题。
回复

使用道具 举报

ID:329256 发表于 2018-5-14 00:29 | 显示全部楼层
tzcl 发表于 2018-5-7 23:28
这个程序是由问题的。我测试的时候,232传输数据是没有问题的。但是利用485,发现返回数据是有规律的错误, ...

我的单片机板子推荐程序也是这样,但是返回的信号一直是00,发送数据也不是返回的发送数据值,似乎像随机数,被淹没在大片的00中,很快就冲没了
回复

使用道具 举报

ID:228452 发表于 2018-5-16 05:03 | 显示全部楼层
SBUF=SenData; //send data
                  Delay(50);
This will depend on baud rate
回复

使用道具 举报

ID:156682 发表于 2018-5-16 23:20 | 显示全部楼层
非常感谢,非常感谢
回复

使用道具 举报

ID:306032 发表于 2018-5-21 20:31 | 显示全部楼层
感谢感谢
回复

使用道具 举报

ID:338503 发表于 2018-7-21 08:23 | 显示全部楼层

RE: Rs485通信单片机C程序

非常感谢
回复

使用道具 举报

ID:137447 发表于 2018-8-15 17:55 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:389650 发表于 2018-8-24 17:30 | 显示全部楼层
简单易懂!适合小白白啊!还有发现51黑好多资料!!!那,我就注册了一个
回复

使用道具 举报

ID:392042 发表于 2018-11-17 17:43 | 显示全部楼层
学习了,好东西!!
回复

使用道具 举报

ID:428400 发表于 2018-11-17 20:17 | 显示全部楼层
有使用过的朋友吗
回复

使用道具 举报

ID:439307 发表于 2018-12-4 19:04 | 显示全部楼层
可以,这个非常的合适
回复

使用道具 举报

ID:439307 发表于 2018-12-4 19:17 | 显示全部楼层
这个非常的给力
回复

使用道具 举报

ID:164746 发表于 2018-12-22 20:50 | 显示全部楼层
正在弄485   学习一下
回复

使用道具 举报

ID:421260 发表于 2018-12-23 08:48 | 显示全部楼层
把  delay(50); 改为 while(SendFlag ==1).
回复

使用道具 举报

ID:47652 发表于 2018-12-26 05:56 | 显示全部楼层
收藏!谢谢分享!
回复

使用道具 举报

ID:9727 发表于 2019-1-29 10:38 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:627463 发表于 2019-10-29 22:48 | 显示全部楼层
请问一直收不到数据是怎么回事
回复

使用道具 举报

ID:627463 发表于 2019-10-29 22:50 | 显示全部楼层
程序很清晰!!!
回复

使用道具 举报

ID:641019 发表于 2019-11-13 10:46 | 显示全部楼层
好东西,就是下载要money
回复

使用道具 举报

ID:674198 发表于 2020-4-10 09:13 | 显示全部楼层
下载下来试试
回复

使用道具 举报

ID:371606 发表于 2020-10-10 22:25 | 显示全部楼层
使用很方便
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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