搜索
bottom↓
回复: 12

【求助】2个单片机+PC通信

[复制链接]

出0入0汤圆

发表于 2012-6-8 00:05:39 | 显示全部楼层 |阅读模式
最近做个东西,需要2个单片机和PC通信,具体方案是:PC跟A单片机通信,然后A单片机跟B单片机通信。这个该怎么实现呢?另外,怎么保证上位机发给单片机(或者单片机发给单片机)多个字节数据时不会出现数据错误现象,如果加验证码的话有什么好的思路呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-6-8 00:09:46 | 显示全部楼层
CRC校验就没有问题,如果你认为你够强大可以做数据逆算。得到正确的数据。

出0入0汤圆

 楼主| 发表于 2012-6-8 00:46:41 | 显示全部楼层
具体怎么做呢?比如我A单片机发给B单片机4个 0x22,0xc3,0xa0,0xfe 是不是再算个校验码发过去呢?

出0入0汤圆

发表于 2012-6-8 08:36:41 | 显示全部楼层
A<-> PC <->B

出0入0汤圆

发表于 2012-6-8 08:41:32 | 显示全部楼层
找个双串口的,然后建个大缓冲,转发吧~数据方面,简单的呃和校验或者CRC都没问题

出0入0汤圆

 楼主| 发表于 2012-6-8 09:29:14 | 显示全部楼层
我的PC主要是用上位机改A单片机里面的变量数据,主要还是A单片机和B单片机来通信。

出0入0汤圆

发表于 2012-6-8 09:37:37 | 显示全部楼层
pc->a use rs232
a->b use rs485

出0入0汤圆

发表于 2012-6-9 20:21:50 | 显示全部楼层
本帖最后由 yesful 于 2012-6-9 20:23 编辑
smhacker 发表于 2012-6-8 00:46
具体怎么做呢?比如我A单片机发给B单片机4个 0x22,0xc3,0xa0,0xfe 是不是再算个校验码发过去呢? ...


单片机A-->单片机B:Tx_Buff[6],Tx_Buff[0]=0x22,Tx_Buff[1]=0xc3,Tx_Buff[2]=0xa0,Tx_Buff[3]=0xfe,Tx_Buff[4]=CRC16High,Tx_Buff[5]=CRC16Low,
单片机接收到数据后,校验前四字节,然后与Tx_Buff[4],Tx_Buff[5]比较……
建议通信协议用modbus协议

出0入0汤圆

发表于 2012-6-9 20:31:42 | 显示全部楼层
很常见的方案啊,教科书经典之一主从系统。现在最好选双串口的mcu很方便的。

pc-》max232+ 51串口0,,,串口2接max485-》其它好几片485+mcu,

出0入0汤圆

 楼主| 发表于 2012-6-9 22:27:50 | 显示全部楼层
很常见的方案啊,教科书经典之一主从系统。现在最好选双串口的mcu很方便的。

pc-》max232+ 51串口0,,,串口2接max485-》其它好几片485+mcu,

单片机我已经选好了,特定的一个大ram单片机 但是没双串口

出0入0汤圆

 楼主| 发表于 2012-6-9 22:35:02 | 显示全部楼层
单片机A-->单片机B:Tx_Buff[6],Tx_Buff[0]=0x22,Tx_Buff[1]=0xc3,Tx_Buff[2]=0xa0,Tx_Buff[3]=0xfe,Tx_Buff[4]=CRC16High,Tx_Buff[5]=CRC16Low,
单片机接收到数据后,校验前四字节,然后与Tx_Buff[4],Tx_Buff[5]比较……
建议通信协议用modbus协议


CRC校验该怎么写呢?

出0入0汤圆

发表于 2012-6-9 23:11:33 | 显示全部楼层
smhacker 发表于 2012-6-9 22:35
CRC校验该怎么写呢?

给你一段代码参考(当然你也可以用查表法):
/*************************************************************************
** 函数功能:计算crc校验
** 函数名称:void CRC16(unsigned char *data,int len)
** 入口参数:数据长度
** 出口参数:无
*************************************************************************/
unsigned char CRC16Lo;
unsigned char CRC16Hi;
void CRC16(uchar *date,int len)
{
    uchar CL,CH,SaveHi,SaveLo,Flag;
    int i;
    CRC16Lo = 0xFF;
    CRC16Hi = 0xFF;
    CL = 0x01;
    CH = 0xA0;
    for (i=0;i<len;i++)
    {
        CRC16Lo=CRC16Lo^date;            /*每一个数据与CRC寄存器进行异或*/
        for(Flag=0;Flag<8;Flag++)
            {
            SaveHi=CRC16Hi;
            SaveLo=CRC16Lo;
            CRC16Hi=CRC16Hi>>1;            /*高位右移一位*/
            CRC16Lo=CRC16Lo>>1;            /*低位右移一位*/
            if ((SaveHi&1) == 1)
                    {
                CRC16Lo=CRC16Lo|0x80;      /*如果高位字节最后一位为1*/
                    }
            if ((SaveLo&1) == 1)           /*如果LSB为1,则与多项式码进行异或*/
                  {
                CRC16Hi=CRC16Hi^CH;
                CRC16Lo=CRC16Lo^CL;
                  }
        }
    }
}

出0入0汤圆

 楼主| 发表于 2012-7-25 08:43:43 | 显示全部楼层
多谢多谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 16:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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