在线情况
楼主
  • 头像
  • 级别
    • 积分7
    • 经验1110
    • 文章45
    • 注册2008-02-29
    关于UART的地址位多机通讯
    在学习MSP430F149的时候,关于多机通讯有两种模式,一种是空闲位多机模式,另一种是地址位多处理机模式
    在地址位多处理机模式下,有一个位表示该字节是地址还是数据如下:起始位、数据位0---7,地址位,校验位,停止位。当地址位为1时,表示为地址,为0时表示该字节是数据。
    请问,采用一台PC机,与多台单片机进行多机通讯时(PC机发指令,单片机上传数据),上位机如何实现这种地址位方式的通讯?即如何让单片机知道发的是地址还是数据?
    初学单片机串行通讯,很是郁闷,希望好心的朋友指点一二,谢了!
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    上位机串口好似没有这个位,这个要懂得上位编程的哥们确认一下才知道。
    如果对于MCU,有这个位可以方便地用于MCU与MCU之间的通讯便利。
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
    • 门派
    • 职务论坛版主
    • 积分55
    • 经验17687
    • 文章198
    • 注册2006-03-07
    "有一个位表示该字节是地址还是数据如下:起始位、数据位0---7,地址位,校验位,停止位。"
    爱好者,上面是你做重点吧!从而表现出你连 位(Bit) 和 字节(Byte)可能都没有分清楚。

    在SPI接口的通信中只有8个位的数据和时钟,而在UART(RS232,RS485)的通信中,传送一个字节需要:
    1位起始位+8位数据(1个字节)+奇偶校验位+停止位 组成的。
    只要你使用MCU的UART模块,除1个字节的数据为外的位都是由硬件完成的,你只需要配置好UART的相关设置就可以了。

    然后就是包的定义了,当然包的最有单不是位啦,是字节:
    开始标标+地址+数据+检验+结束
    如下
    0x02 0x13 ...... 0x?? 0x03
    开始 地址 数据   检验 结束

    包和包的之间区别在于判断收到字节与字节的间隔时间.

     
    微控网感谢您的参与
    在线情况
    4
    • 头像
    • 级别
      • 积分7
      • 经验1110
      • 文章45
      • 注册2008-02-29
      非常感谢两位朋友的回复!
      您说的“硬件实现”的那些内容我也明白,我现在的意思是:如何利用串口调试精灵来与实验板的UART通讯,实验板采用“addredd-bit”方式设置成多机通讯方式。上位机发送一帧数据(其中含有地址,数据),实验板接收上位机发送的内容,当地址与自己相符时做出反应,地址不符时不预理睬。
      我的问题是:串口调试精灵能完成类似这样的“address-bit”发送功能吗?如何实现?
      微控网感谢您的参与
      在线情况
      5
      • 头像
      • 级别
        • 积分26
        • 经验920
        • 文章44
        • 注册2007-08-13
        串口调试精灵的校验方式,选择 Mark方式就可以了.
        Red-Swallow
        在线情况
        6
        • 头像
        • 级别
          • 积分7
          • 经验1110
          • 文章45
          • 注册2008-02-29
          感谢tianxy的回复!因为我下载的串口调试精灵校验方式只有ODD,EVEN,NONE,所以过去根本无法进行多机通讯下address-bit方式的实验,看了你的回复,我又下了一个串口调试精灵,具有MARK校验方式。
          按照用户手册中的原理介绍,感觉您说的那种方法可以用PC机向430板发送地址信息。等有空试一试。
          多谢您了,朋友!
          微控网感谢您的参与
          在线情况
          7
          • 头像
          • 级别
          • 门派
          • 职务总版主
          • 声望+9
          • 财富5
          • 积分3065
          • 经验390701
          • 文章6744
          • 注册2006-03-07
          tianxy指的“用PC端串口的校验位来代替MSP430多机模式时数据后面地址位”,这个方法好似很棒样子,请爱好者尽快试试程报实验结果详情。期待中...!
          [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
          在线情况
          8
          • 头像
          • 级别
            • 积分26
            • 经验920
            • 文章44
            • 注册2007-08-13
            我一直使用这个程序,采用地址位多机协议,很好用,一点问题没有.


            void comm_init(void)///串口初始化
            {
               UCTL0&=~SWRST;
               UTCTL0&=~TXWAKE;
               UCTL0|=(CHAR+MM+SPB);
               IFG1&=(~(URXIFG0+UTXIFG0));
               ME1|=(UTXE0+URXE0);
               UTCTL0|=(SSEL0+SSEL1);
               UBR00=0x05;//8M/2400
               UBR10=0x0d;
               UMCTL0=0xa4;
               IE1|=URXIE0;
               URCTL0=URXWIE;//只有收到地址字符时才永许中断
            }


            #pragma vector=USART0RX_VECTOR
            __interrupt void USART0RX(void)
            {//接收中断
              unsigned char date,date1;
              _EINT();
              if((URCTL0&0x21)==0x1)
              {//出现错误且该错误非溢出引起
                URCTL0=URXWIE;
               .......;     
                date=RXBUF0;
              }
              else
              {
                date=RXBUF0;
                URCTL0&=~RXERR;
                if(URCTL0&URXWIE)//接受到本机地址否
                {
                  if(date==addr)
                  {
                    URCTL0&=~URXWIE;
                    .......
                  }
                  .....    
                }
                else//接受命令、数据
                {
                  date1=date;
                  ...
                  }
                  else
                  {//接收数据
                  
                      }
                    }
                  }
                }
              }
            }
            Red-Swallow
            在线情况
            9
            • 头像
            • 级别
            • 门派
            • 职务总版主
            • 声望+9
            • 财富5
            • 积分3065
            • 经验390701
            • 文章6744
            • 注册2006-03-07
            哥们,能否再将采用地址位多机协议的演示程序重新加一个贴子贴出来,然后再加些注解和原理呢?
            这样的话我可以整理到学习专区中!
            [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
            在线情况
            10
            • 头像
            • 级别
              • 积分7
              • 经验1110
              • 文章45
              • 注册2008-02-29
              感谢tinaxy朋友的指点!我已经按照您所说的方法写了一个小程序,用新下载的串口精灵,把校验方式设置为MARK,进行了粗略的调试,很成功!已经弄懂了地址位多机方式的工作原理。
              再次感谢这位热心的朋友!给我们这些初学者指点迷津,谢了!!
              微控网感谢您的参与
              Powered by LeadBBS 9.2 .
              Page created in 0.1875 seconds with 6 queries.