找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机1通过串口通信向单片机2发送“你好”,MAX487,RS485通信

[复制链接]
跳转到指定楼层
楼主

    以485通信为例,其中包括AT89C52,MAX487芯片和虚拟中端,实现两个单片机之间的通讯。


    MAX487-MAX491以及MAX1487是用于baiRS-485与RS-422通信的低功耗收发器,du每个器件中都具有一个驱动器和一zhi个接收器。MAX483、MAX487、MAX488以及daoMAX489具有限摆率驱动器,可以减小EMI,并降低由不恰当的终端匹配电缆引起的反射,实现最高250kbps的无差错数据传输。MAX481、MAX485、MAX490、MAX491、MAX1487的驱动器摆率不受限制,可以实现最高2.5Mbps的传输速率。
    这些收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120μA至500μA之间。另外,MAX481、MAX483与MAX487具有低电流关断模式,仅消耗0.1μA。所有器件都工作在5V单电源下。



    驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态,防止过度的功率损耗。接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。
    MAX487与MAX1487具有1/4单位负载的接收器输入阻抗,使得总线上最多可以有128个MAX487/MAX1487收发器。使用MAX488-MAX491可以实现全双工通信,而MAX481、MAX483、MAX485、MAX487与MAX1487则为半双工应用设计。


分别对两个单片机下载程序
发送端
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int


  4. void delay_ms(uint ms)
  5. {
  6.         uchar time;
  7.         while(ms--)
  8.         for(time=0;time<115;time++);       
  9. }


  10. void UART_sendOneByte(uchar dat)
  11. {
  12.         SBUF=dat;//将被发送的单字节数据放入串口SBUF数据发送缓冲器
  13.         while(TI==0);//等待SBUF缓冲器中的数据被发送完毕(发送完毕后TI被硬件写1)
  14.         TI=0;//将TI位(发送完成标志位)清零
  15. }

  16. void UART_sendEnter(void)
  17. {
  18.         UART_sendOneByte(0x0d);
  19.         UART_sendOneByte(0x0a);
  20. }

  21. void UART_sendstring(uchar *str)
  22. {
  23.         while(*str)
  24.         {
  25.                 UART_sendOneByte(*str);
  26.                 str++;               
  27.         }
  28. }



  29. void main()
  30. {

  31.     uchar temp=0;
  32.     TMOD=0x20;  //设置定时器T1为方式2
  33.     TH1=0xfd;  //波特率9600
  34.     TL1=0xfd;
  35.     SCON=0x40;       //串口初始化方式1发送,不接收
  36.     PCON=0x00;       //SMOD=0
  37.     TR1=1;  //启动T1
  38.    
  39.      while(1)
  40.     {
  41.                            UART_sendstring("你好");
  42.                 delay_ms(1000);//延时1秒
  43.                    UART_sendstring("你好");
  44.                 delay_ms(1000);//延时1秒
  45.                 UART_sendstring("你好");
  46.                 delay_ms(1000);//延时1秒
复制代码

接收端
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. void delay_ms(uint ms)
  5. {
  6.         uchar time;
  7.         while(ms--)
  8.         for(time=0;time<115;time++);       
  9. }


  10. void UART_sendOneByte(uchar dat)
  11. {
  12.         SBUF=dat;//将被发送的单字节数据放入串口SBUF数据发送缓冲器
  13.         while(TI==0);//等待SBUF缓冲器中的数据被发送完毕(发送完毕后TI被硬件写1)
  14.         TI=0;//将TI位(发送完成标志位)清零
  15. }

  16. void UART_sendEnter(void)
  17. {
  18.         UART_sendOneByte(0x0d);
  19.         UART_sendOneByte(0x0a);
  20. }

  21. void UART_sendstring(uchar *str)
  22. {
  23.         while(*str)
  24.         {
  25.                 UART_sendOneByte(*str);
  26.                 str++;               
  27.         }
  28. }


  29. void main( )
  30. {
  31. uchar temp=0;
  32.     TMOD=0x20;  //设置定时器T1为方式2
  33.     TH1=0xfd;  //波特率9600
  34.     TL1=0xfd;
  35.     SCON=0x50;       //设置串口为方式1接收,REN=1
  36.     PCON=0x00;       //SMOD=0
  37.     TR1=1;  //启动T1
  38.     while(1)
  39.    {
复制代码
串口通信Proteus仿真.zip (43.88 KB, 下载次数: 79) RS485双机通信程序.zip (28.13 KB, 下载次数: 92)




评分

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

查看全部评分

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

使用道具 举报

沙发
ID:560110 发表于 2020-6-24 22:31 | 只看该作者
感谢分享
回复

使用道具 举报

板凳
ID:866258 发表于 2021-1-8 09:53 | 只看该作者
不对啊,没有用到485使能io口啊,单纯就是串口发送和接收
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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