2
收藏
微博
微信
复制链接

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

提问于
2024-12-03 19:02


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

双机通信.png

    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.png

max487.jpg

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


分别对两个单片机下载程序
发送端
  1. #include
  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

  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, 下载次数: 70)
2020-6-19 20:11 上传
点击文件名下载附件 RS485双机通信程序.zip (28.13 KB, 下载次数: 85)
2020-6-19 20:11 上传
点击文件名下载附件




收藏 48 0 2
粉丝
0
关注
0
主题
2
感谢分享
0

回答于 · 2024-12-03 22:25

粉丝
0
关注
0
主题
1
不对啊,没有用到485使能io口啊,单纯就是串口发送和接收
0

回答于 · 2024-12-03 23:52