yao1 发表于 2011-10-21 20:14:47

双机通讯(还在等待审核)

(还在等待审核。。。)
//甲机通过串口控制乙机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);
    }
}

yao1 发表于 2011-10-24 10:57:19

审核通过啦... 我是不是该把这个帖子删除了呢?

xts 发表于 2012-9-28 11:32:42

原来是一位不发话的高手,多谢分享。回来顶你来了。

snail_dongbin 发表于 2012-9-28 11:45:28

初学吧!怎么双机用uart? 51就一个 stc的也最多两个!太浪费了!
有空折腾下协议吧!比较实用,比如发送的不是A 是字符串 如“led 1 ON”
“led 1 OFF” 或是 “star data1 data 2 shop”
以及如何检测开始位和结束位, 甚至在大量时写个环形缓冲阵列,怎么提取等等

51与其他通信,比较经济的是是双机模拟IIC或是模拟spi 这种方法简单,省资源!

zhuangchao12 发表于 2012-9-28 13:45:10

snail_dongbin 发表于 2012-9-28 11:45 static/image/common/back.gif
初学吧!怎么双机用uart? 51就一个 stc的也最多两个!太浪费了!
有空折腾下协议吧!比较实用,比如发送的 ...

楼上说的是正道。

cumtgao 发表于 2012-9-28 14:02:17

双机通讯 TX-RXRX-TX直接通就可以了如果只是实验的话

yao1 发表于 2012-9-28 14:58:57

xts 发表于 2012-9-28 11:32 static/image/common/back.gif
原来是一位不发话的高手,多谢分享。回来顶你来了。

我不是高手 {:funk:}1年前发的帖子被你翻出来了 啊 学单片机已经有1年多了 但是感觉还是一知半解{:dizzy:}

洗澡哥 发表于 2013-8-1 11:46:09

yao1 发表于 2012-9-28 14:58 static/image/common/back.gif
我不是高手   1年前发的帖子被你翻出来了 啊 学单片机已经有1年多了 但是感觉还是一知半解{:dizz ...

51双机通讯直接直接用的RXD TXD相接,可以吗?
我用的是一块开发板和自己焊的一块最小系统(没用RS232等电平转换电路)。直接连接可以通讯吗?

07071624 发表于 2013-8-1 15:24:10

洗澡哥 发表于 2013-8-1 11:46 static/image/common/back.gif
51双机通讯直接直接用的RXD TXD相接,可以吗?
我用的是一块开发板和自己焊的一块最小系统(没用RS232等电 ...

可以的,注意要共GND,还有两机的晶振得一样

洗澡哥 发表于 2013-8-1 15:46:44

07071624 发表于 2013-8-1 15:24 static/image/common/back.gif
可以的,注意要共GND,还有两机的晶振得一样

确实是的。我用12M和11.0592M通讯。波特率设置为9600,误差太大,不能通讯。设置为2400就行了{:lol:}

song77 发表于 2013-8-1 17:43:03

做过uart的远距离(50m)通讯
页: [1]
查看完整版本: 双机通讯(还在等待审核)