洗澡哥 发表于 2013-8-1 11:45:06

51双机通讯直接直接用的RXD TXD相接,可以吗

RT。我用的是一块开发板和自己焊的一块最小系统(没用RS232等电平转换电路)。直接连接可以通讯吗?是不是都有说232的话就能直接连了?

shanyan 发表于 2013-8-1 11:45:53

可以呀,距离不能太远!

洗澡哥 发表于 2013-8-1 11:48:08

shanyan 发表于 2013-8-1 11:45 static/image/common/back.gif
可以呀,距离不能太远!

可是我用了论坛里的一个别人调通的程序,却通讯不了{:cry:}

洗澡哥 发表于 2013-8-1 11:49:58

这是程序,是论坛里找的

//甲机通过串口控制乙机LED
//名称:甲机发送控制命令字符
//说明:甲单片机负责向外发送控制命令字符“A”“B”“C”,或者停止发送,乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。
//发送:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbitk=P3^3;
sbitLED1=P0^0;
sbitLED2=P0^1;
sbitA1=P1^0;
sbitA2=P1^1;
sbitA3=P1^2;
sbitA4=P1^3;      
sbitA5=P1^4;

void delay(unsigned char z)
{      
      unsigned int x,y;
            for(x=z;x>0;x--)
                  for(y=120;y>0;y--);      
}

void send(unsigned char c)
{
      SBUF=c;   //发送c
      while(TI==0); //等待发送完毕
      TI=0;    //TI清零以便下次发送
}

void main()
{
    uchar X=0;
    TMOD=0X20; //T1工作模式2
    SCON=0X40;// 0100 0000(SM0 SM1 SM2 RENTB8 RB8 TI RI)串口模式1
//REN=0;SM0=0;SM1=1;// 0   1   0   0    0   0   00
    TH1=0xfd;//12M 9600bps
    TL1=0xfd;
    TI=0;
    TR1=1;
      
    while(1)
    {
         if(k==0)    //按下K时选择操作代码0,1,2,3
         {
               while(k==0);
               X=(X+1)%4;         
         }
         switch(X)   //根据操作代码发送A/B/C或停止发送
         {
             case 0:                  
                  LED1=LED2=0;
                  break;
             case 1:
                  send('A');
                  LED1=~LED1;
                  LED2=0;
                  break;
             case 2:
                  send('B');
                  LED2=~LED2;
                  LED1=0;
                  break;
             case 3:
                  send('C');
                  LED1=~LED1;
                  LED2=~LED2;                     
                  break;               
         }
         delay(100);      
    }
}

///////////////////////////////////////////////////////////////////////////////
//接收 乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbitk=P3^3;
sbitLED1=P0^0;
sbitLED2=P0^1;
sbitA1=P1^0;
sbitA2=P1^1;
sbitA3=P1^2;
sbitA4=P1^3;      
sbitA5=P1^4;

void delay(unsigned char z)
{      
      unsigned int x,y;
            for(x=z;x>0;x--)
            for(y=120;y>0;y--);      
}

void main()
{
    TMOD=0X20; //T1工作模式2
    SCON=0X50;// 0100 0000(SM0 SM1 SM2 RENTB8 RB8 TI RI)串口模式1 允许接收REN=1
                        // 0   1   0   1    0   0   00
    TH1=0xfd;//12M 9600bps
    TL1=0xfd;
    RI=0;
    TR1=1;

    A1=A2=A3=A4=A5=0;
    LED1=LED2=0;
    A5=1;
    while(1)
    {
         if(RI)//如收到则LED闪烁
         {
            RI=0;
            switch(SBUF)//根据所收到的不同命令字符完成不同动作
            {
                   case 'A': LED1=~LED1;LED2=0;break;//LED1闪烁
                   case 'B': LED2=~LED2;LED1=0;break; //LED2闪烁
                   case 'C': LED1=~LED1;LED2=~LED2;//双闪烁
            }         
         }
         else LED1=LED2=0; //关闭LED
         delay(100);
    }
}

洗澡哥 发表于 2013-8-1 12:46:57

shanyan 发表于 2013-8-1 11:45 static/image/common/back.gif
可以呀,距离不能太远!

我看了一下,TTL通讯确实用不到232.可能是别的原因吧。

lgg88 发表于 2013-8-1 12:48:09

几米范围都可以的交叉相连

tbkmcjl 发表于 2013-8-1 13:08:37

还有GND接GND啊

洗澡哥 发表于 2013-8-1 13:15:52

lgg88 发表于 2013-8-1 12:48 static/image/common/back.gif
几米范围都可以的交叉相连

距离就是杜邦线的长度,应该不是距离的问题

洗澡哥 发表于 2013-8-1 13:16:55

tbkmcjl 发表于 2013-8-1 13:08 static/image/common/back.gif
还有GND接GND啊

恩,这个有注意,共地了

tbkmcjl 发表于 2013-8-1 13:21:16

晶振应该是11.0592MHz

洗澡哥 发表于 2013-8-1 13:44:26

shanyan 发表于 2013-8-1 11:45 static/image/common/back.gif
可以呀,距离不能太远!

问题解决了。原来是两个晶振频率不一样。都换了11.0592就好了{:lol:}

洗澡哥 发表于 2013-8-1 13:51:40

tbkmcjl 发表于 2013-8-1 13:21 static/image/common/back.gif
晶振应该是11.0592MHz

我刚刚把两个晶振都用11.0592就成功了。{:handshake:}
不过都是12M不行吗?是不是因为波特率的误差

tbkmcjl 发表于 2013-8-1 14:00:09

洗澡哥 发表于 2013-8-1 13:51 static/image/common/back.gif
我刚刚把两个晶振都用11.0592就成功了。
不过都是12M不行吗?是不是因为波特率的误差 ...

拿本书去认真读,不教你了{:titter:}

洗澡哥 发表于 2013-8-1 14:08:49

tbkmcjl 发表于 2013-8-1 14:00 static/image/common/back.gif
拿本书去认真读,不教你了

{:lol:} 好的。那我去看书了

大米饭 发表于 2013-8-1 14:31:58

两个晶振频率不一样无所谓,只要设置波特率一致就OK了

tbkmcjl 发表于 2013-8-1 14:32:55

定时器1在12M晶振下无法实现标准的9600BPS。

洗澡哥 发表于 2013-8-1 14:41:44

本帖最后由 洗澡哥 于 2013-8-1 14:45 编辑

大米饭 发表于 2013-8-1 14:31 static/image/common/back.gif
两个晶振频率不一样无所谓,只要设置波特率一致就OK了

{:funk:} 那我主机11.0592M,从机12M就不能正常通讯。把从机也换了11.0592M就能正常通讯了。
我是按照这个设置的波特率9600,没问题吧?
是不是因为12M设置波特率有误差呢?

大米饭 发表于 2013-8-1 14:55:12

12M晶振12T波特率设置成9600误差8.51%      STC1T型设置成9600波特率误差是0.16%
明显8.51%的误差太大了,就不能用

大米饭 发表于 2013-8-1 14:56:54

洗澡哥 发表于 2013-8-1 14:41 static/image/common/back.gif
那我主机11.0592M,从机12M就不能正常通讯。把从机也换了11.0592M就能正常通讯了。
我是按照这 ...

你没看到后面8.51%的误差啊,对于串口通信是致命的误差啊

zhaoqiwen 发表于 2013-8-1 15:03:01

大哥不要共地么?

黑暗深处 发表于 2013-8-1 15:26:43

共地,RX <---> TX    TX <---> RX    GND <---> GND
其实连接方法跟接串口的模块式一样的,波特率统一就行,一般30cm以内不会有问题

洗澡哥 发表于 2013-8-1 15:27:42

大米饭 发表于 2013-8-1 14:56 static/image/common/back.gif
你没看到后面8.51%的误差啊,对于串口通信是致命的误差啊

理解了。果然是误差太大!
把波特率调成2400,误差0.16就能用了

洗澡哥 发表于 2013-8-1 15:30:56

zhaoqiwen 发表于 2013-8-1 15:03 static/image/common/back.gif
大哥不要共地么?

我共地了。
问题出在波特率设置上。12M和11.0592M在波特率9600上误差太大,换2400就好了

qlb1234 发表于 2013-8-1 15:34:24

如果你兩臺機都是12MHz的晶振,誤差一樣,理論上亦可通訊。

洗澡哥 发表于 2013-8-1 15:43:42

黑暗深处 发表于 2013-8-1 15:26 static/image/common/back.gif
共地,RXTX    TXRX    GNDGND
其实连接方法跟接串口的模块式一样的,波特率统一就行,一般30cm以内 ...

你说的没错。
我是波特率没设置号,误差太大,影响通讯了

洗澡哥 发表于 2013-8-1 15:45:01

qlb1234 发表于 2013-8-1 15:34 static/image/common/back.gif
如果你兩臺機都是12MHz的晶振,誤差一樣,理論上亦可通訊。

我也这么觉得,不过还没试。因为晶振11.0592M焊住了,不好弄下来
下次试一下

黑暗深处 发表于 2013-8-1 16:32:11

洗澡哥 发表于 2013-8-1 15:43 static/image/common/back.gif
你说的没错。
我是波特率没设置号,误差太大,影响通讯了

12M的晶振,2400的波特率可以

大米饭 发表于 2013-8-1 17:01:34

qlb1234 发表于 2013-8-1 15:34 static/image/common/back.gif
如果你兩臺機都是12MHz的晶振,誤差一樣,理論上亦可通訊。

这样可以吗?没试过同等的误差下通信是什么情况,有很多不确定因素啊,有待探索

starsnow 发表于 2013-8-1 17:29:12

qlb1234 发表于 2013-8-1 15:34 static/image/common/back.gif
如果你兩臺機都是12MHz的晶振,誤差一樣,理論上亦可通訊。

我也同意这个观点,一致就行了,你发我收,步调一致,错不了。

song77 发表于 2013-8-1 17:46:10

晶振不一样也是可以的

zhaoqiwen 发表于 2013-8-3 15:29:28

洗澡哥 发表于 2013-8-1 15:30 static/image/common/back.gif
我共地了。
问题出在波特率设置上。12M和11.0592M在波特率9600上误差太大,换2400就好了 ...

bingo!{:lol:} {:lol:}
页: [1]
查看完整版本: 51双机通讯直接直接用的RXD TXD相接,可以吗