找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2290|回复: 0
打印 上一主题 下一主题
收起左侧

max485多机通信程序只进行到第一个从机

[复制链接]
跳转到指定楼层
楼主
ID:125407 发表于 2016-7-5 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用以下程序进行proteus仿真,只有从机1响应而且开关不起作用,从机1、2除了地址外相同,请诸位看看是什么原因,怎么改!
#include<reg51.h>
#define unit unsigned int
#define uchar unsigned char
#define   addr1      0x31  
#define   addr2      0x32   
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
void delay(unit z)
{
  unit x,y;
  for(x=z;x<0;x--);
  for(y=110;y>0;y--);
}
void Uart_Init(void)
{
   TMOD=0x20;   
   TH1=250;
   TH0=250;
   TR1=1;      
   PCON=0x80;     
   SCON=0xd0;     
   TI=1;
   RI=1;
}
uchar Receive(void)   
{  
    uchar Data;
        while(!RI);     
    Data=SBUF;   
    RI=0;
    return Data;
}
void send_addr(uchar addr)   
{       
    uchar tem;
        while(addr!=tem)   
  {
    while(!TI);     
    TI=0;           
    TB8=1;         
    SBUF=addr;      
        P03=0;
    tem=Receive();
        P03=1;
  }
}
void send_data(uchar ddata)   
{  
   while(!TI);     
   TI=0;           
   TB8=0;         
   SBUF=ddata;      
   while(!TI);
}

void main()
{
   Uart_Init();       
   P03=0;
   while(1)
   {
   if(P01==0)
   {
         delay(5);
         if(P01==0)
         {
         P03=1;
         delay(1);
         send_addr(addr1);   
     send_data(0x33);
         delay(1);
         P03=0;
         }
        }
    if(P02==0)
   {
         delay(5);
         if(P02==0)
         {
         P03=1;
         delay(1);
         send_addr(addr2);   
     send_data(0x34);
         delay(1);
         P03=0;
         }
        }
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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