标题: Rs485通信单片机C程序 [打印本页]

作者: RumRumPum    时间: 2017-6-5 18:54
标题: Rs485通信单片机C程序
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, 下载次数: 384)



作者: dzbj    时间: 2017-6-5 21:00
不用做发送标记来改变485芯片的状态 上电后485的控制端置低 一直出于接收状态 发送函数里置高 发送完毕拉低就行了
作者: fengxu81    时间: 2017-6-6 14:53
好东西,谢谢楼主!!!!!!!!!!!
作者: akyo32    时间: 2017-11-10 21:56
犀利啊。多谢楼主分享!

作者: 154462859    时间: 2018-1-8 16:17
想来学习一下
作者: numberv5    时间: 2018-1-18 11:11
学习学习
作者: numberv5    时间: 2018-1-18 11:12
想来学习一下
作者: 电子电工    时间: 2018-3-21 16:24
485地址从哪设置
作者: 三达集团    时间: 2018-3-26 20:25
学习了
作者: 落木清风    时间: 2018-3-27 10:13
下载试试看吧
作者: tzcl    时间: 2018-5-7 23:28
这个程序是由问题的。我测试的时候,232传输数据是没有问题的。但是利用485,发现返回数据是有规律的错误,而且,超过两个字节后,最后一个字节自动改为00,请问各位可有这个问题。
作者: 扔回海里ly    时间: 2018-5-14 00:29
tzcl 发表于 2018-5-7 23:28
这个程序是由问题的。我测试的时候,232传输数据是没有问题的。但是利用485,发现返回数据是有规律的错误, ...

我的单片机板子推荐程序也是这样,但是返回的信号一直是00,发送数据也不是返回的发送数据值,似乎像随机数,被淹没在大片的00中,很快就冲没了
作者: mick32    时间: 2018-5-16 05:03
SBUF=SenData; //send data
                  Delay(50);
This will depend on baud rate
作者: jia302    时间: 2018-5-16 23:20
非常感谢,非常感谢
作者: carolineee    时间: 2018-5-21 20:31
感谢感谢
作者: gsr64    时间: 2018-7-21 08:23
标题: RE: Rs485通信单片机C程序
非常感谢
作者: bird666    时间: 2018-8-15 17:55
感谢分享
作者: Braver1    时间: 2018-8-24 17:30
简单易懂!适合小白白啊!还有发现51黑好多资料!!!那,我就注册了一个
作者: cgm423    时间: 2018-11-17 17:43
学习了,好东西!!
作者: 难得糊涂2018    时间: 2018-11-17 20:17
有使用过的朋友吗
作者: tao1112    时间: 2018-12-4 19:04
可以,这个非常的合适
作者: tao1112    时间: 2018-12-4 19:17
这个非常的给力
作者: qgbdxm    时间: 2018-12-22 20:50
正在弄485   学习一下
作者: szqinyi    时间: 2018-12-23 08:48
把  delay(50); 改为 while(SendFlag ==1).
作者: 榆林上校    时间: 2018-12-26 05:56
收藏!谢谢分享!
作者: yasi666    时间: 2019-1-29 10:38
谢谢分享
作者: ammmm    时间: 2019-10-29 22:48
请问一直收不到数据是怎么回事
作者: ammmm    时间: 2019-10-29 22:50
程序很清晰!!!
作者: 15889661439    时间: 2019-11-13 10:46
好东西,就是下载要money
作者: moyu2016    时间: 2020-4-10 09:13
下载下来试试
作者: 刀妹    时间: 2020-10-10 22:25
使用很方便




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1