标题: 51单片机之间的通讯问题 [打印本页]

作者: zxc5230    时间: 2016-5-3 00:00
标题: 51单片机之间的通讯问题
小弟想用51单片机搞个多机通讯,可是proteus仿真里面一直没反应。问下单片机之间的收发就只需要把RXD和TXD交叉连接起来就好了可是却没反应。下面是我的程序。求帮忙!主机程序 /***************   writer:shopping.w   ******************/#include <reg51.h>
#define uchar unsigned char
#define zj1 1                                 //从机1
#define zj2 2                                //从机2
uchar KeyValue=0;                        //键值
uchar code str[]="0123456789ABCDEF";
uchar pointer_1=0,pointer_2=0;
void delay(uchar x)
{
        uchar i ,j;
        while(x--)
        {
                 for(i=0;i<130;i++)
                for(j=0;j<x;j++);
        }
}
void proc_key(uchar nobe_number)         //发送程序
{
        delay(200);
        SCON=0xc0;                        //        串行方式3.多机通讯
        TMOD=0x20;                          //                         T1方式2
        TH1=TL1=0xfd;
        TR1=1;
        TB8=1;
        SBUF=nobe_number;
        while(TI==0);
        TI=0;
        TB8=0;
        switch(nobe_number){                   //切换从机
                case 1:{
                        SBUF=str[pointer_1++];
                        if(pointer_1>=16)pointer_1=0;
                        break;
                }
                case 2: {
                  SBUF=str[pointer_2++];
                        if(pointer_2>=16)pointer_2=0;
                        break;
                }
                        default :break;       
        while(TI==0);
        TI=0;
}         }
void main()
{
        while(1)
        {       
                P1=0xff;
                while(P1==0xff);
                 switch(P1)                        //切换从机
                {
                        case 0xef : proc_key(zj1);break;
                        case 0xfe : proc_key(zj2);break;
                }
        }
}


作者: zxc5230    时间: 2016-5-3 00:05
下面是从机的程序,因为想先搞个简单的所以我从机1和从机2只是前面的宏定义的序号不同可以让主机来区分从机。程序都是一样的。求帮忙
/***************   writer:shopping.w   ******************/
#include <reg51.h>
#define uchar unsigned char
#define zj1 1
sbit P3_7=P3^7;
uchar code table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void display(uchar ch){
        if((ch>=48)&& (ch<=57))P2=table[ch-48];
        else if ( ( ch>=65)&&(ch<=70)) P2=table[ch-55] ;
}
void main()
{
        SCON = 0xf0;                  //串行方式3多机通讯,允许接受,中断标志清零
        TMOD = 0x20;                  //T1方式2
        TH1  = 0xfd;
        TL1  = 0xfd;
        TR1=1;
        EA= 1;
        ES   = 1;
        while(1);
}

void receive (void) interrupt 4
{
        RI=0;
        if(RB8==1){
                if(SBUF==zj1){           //如果选择了次从机引脚就翻转
                SM2=0;
                P3_7=!P3_7;          }
        return;
        }
        display(SBUF);         //将主机穿过来的型号通过查表来输出
        SM2=1;
}
作者: 51mcu    时间: 2016-5-3 06:57
单片机通信的程序实例网上比较多,你百度一下,应该可以找到很多的。
作者: cjjcjj1    时间: 2016-5-3 12:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: zxc5230    时间: 2016-5-3 12:19
cjjcjj1 发表于 2016-5-3 12:07
你好!你最后需要几个从机一起工作

其实想搞3个从机
作者: cjjcjj1    时间: 2016-5-3 12:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火星人坏坏    时间: 2016-5-3 12:30
cjjcjj1 发表于 2016-5-3 12:20
留下你的联,系,方,式,我加你

我加你




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1