找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机之间主从通讯程序 485总线

[复制链接]
跳转到指定楼层
楼主
单片机之间主从通讯实例
单片机之间主从通讯.zip (54.27 KB, 下载次数: 430)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2015-6-5 00:37 | 只看该作者
485主机通讯:
  1. /*********************主机程序**************************/
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit t0 = P0^0;//发送、接收使能
  6. sbit key = P0^1; //控制开关
  7. /***********延时函数**************************/
  8. void delay(uint x)
  9. {
  10.         uchar i;
  11.         while(x--)
  12.         {        for(i=0;i<110;i++);        }
  13. }
  14. /***********串口初始化函数**************************/
  15. void init_UART()
  16. {
  17.         SCON = 0xd0; //工作方式3 允许串口接收
  18.         TMOD = 0x20; //定时器T/C1工作方式2
  19.         PCON = 0x00; //波特率倍频
  20.         TH1 = 0xfd;
  21.         TL1 = 0xfd;
  22.         TR1 = 1;
  23. }
  24. /*****************主函数************************/
  25. void main()
  26. {   
  27.     uchar ADDR=0x01,num=0,tmp;//ADDR地址码,num地址个数
  28.         init_UART();//串口初始
  29.         while(1)
  30.             {
  31.             if(key==0)//判断开关是否被按下
  32.             {
  33.                              delay(50);
  34.                  while(key==0);
  35.                 /*********发送从机地址**********/
  36.                                   TI=0;
  37.                                   TB8=1;//发送地址信号
  38.                                       t0=1;        //发送使能
  39.                                       delay(20);
  40.                                        SBUF=ADDR;//发送地址信号
  41.                                       while(!TI);//等待发送
  42.                                       TI=0;//发送成功
  43.                                       ADDR++;
  44.                                       if(ADDR==6) ADDR=1;


  45.                         /*********接受从机地址**********/
  46.                                 t0=0;        //接受使能
  47.                                 delay(20);
  48.                                 while(!RI);//等待接收从机发回的握手信号
  49.                                 P1=SBUF;         //接收回来的值赋值给显示变量
  50.                                 RI=0;        //接收成功
  51.                                 delay(1000);

  52.                  
  53.              }
  54.                  }
  55. }
  56. /*
  57. 主机:STC12C5A60S2    从机:STC12C4052AD
  58. MAX485通讯
  59. 波特率为9600
  60. 晶振为110592MHZ
  61. 接通第一次按键主机发送01给从机 从机收到后加1返回给主机 发送值最大为5
  62. 圆满成功  2014.9.4 23:41
  63. */
复制代码
回复

使用道具 举报

板凳
ID:1 发表于 2015-6-5 00:38 | 只看该作者
从机程序:
  1. /*********************主机程序**************************/
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit t0 = P3^7;//发送、接收使能
  6. /***********延时函数**************************/
  7. void delay(uint x)
  8. {
  9.         uchar i;
  10.         while(x--)
  11.         {        for(i=0;i<110;i++);        }
  12. }
  13. /***********串口初始化函数**************************/
  14. void init_UART()
  15. {
  16.         SCON = 0xd0; //工作方式3 允许串口接收
  17.         TMOD = 0x20; //定时器T/C1工作方式2
  18.         PCON = 0x00; //波特率倍频
  19.         TH1 = 0xfd;
  20.         TL1 = 0xfd;
  21.         TR1 = 1;
  22. }
  23. /*****************主函数************************/
  24. void main()
  25. {   
  26.     uchar ADDR=0x01,num=0,tmp;//ADDR地址码,num地址个数
  27.         init_UART();//串口初始
  28. //        P1=0xc0;//初始时显示0
  29.         while(1)
  30.             {

  31.                         /*********接受从机地址**********/
  32.                                 t0=0;        //接受使能
  33.                                 delay(20);
  34.                                 while(!RI);//等待接收从机发回的握手信号
  35.                                 tmp=SBUF;         //接收回来的值赋值给显示变量
  36.                                 RI=0;        //接收成功
  37.                                 delay(20);
  38.                                 tmp++;

  39.                 /*********发送从机地址**********/
  40.                                   TI=0;
  41.                                   TB8=1;//发送地址信号
  42.                                       t0=1;        //发送使能
  43.                                       delay(20);
  44.                                        SBUF=tmp;//发送地址信号加1
  45.                                       while(!TI);//等待发送
  46.                                       TI=0;//发送成功
  47.                                       delay(1000);
  48.                          }
  49. }
  50. /*
  51. 本程序为从机程序
  52. 11.0592M晶振 波特率9600
  53. 从机:STC12C4052AD  主机:STC12C5A60S2
  54. 从机数据接加1后发送回主机
  55. 2014年9月4日 23时50分
  56. 实验成功
  57. */
复制代码
回复

使用道具 举报

地板
ID:67573 发表于 2016-2-25 14:53 | 只看该作者
值得学习
回复

使用道具 举报

5#
ID:47286 发表于 2016-2-27 00:52 | 只看该作者
请教楼主

TB8是多机通讯位 这个位只开业0/1还是0~255都可以 从机地址是怎么确定的 一直没有看到比较好的教程
回复

使用道具 举报

6#
ID:128463 发表于 2017-4-8 10:28 | 只看该作者
谢谢分享!!!
回复

使用道具 举报

7#
ID:128463 发表于 2017-4-8 10:31 | 只看该作者
谢谢分享!!!!!!
回复

使用道具 举报

8#
ID:159139 发表于 2017-4-24 00:21 来自手机 | 只看该作者
谢谢楼主,下来学习一下,非常感谢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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