打印

两个at89s52的51单片机多路开关信号传输

[复制链接]
1720|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duhun01|  楼主 | 2013-2-19 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用2个at89s52芯片的51单片机做开关信号传输、就是把单片机a的P0、P1、p2读取开关信号,然后传送到单片机b上面,点亮相对应b的P0、p1、p2上的led灯
发送单片机
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
void main(void)
{
        uchar a[3];  
    uchar i=0;
    int j;
        TMOD=0x20;
        TH1=0xFF;
        TL1=0xFF;
        SCON=0x40;
        PCON=0x80;
        TR1=1;
        P0=0xFF;
        P1=0xFF;
        P2=0xFF;
       while(1)
       {
         while(P0==0xFF||P1==0xFF||P2==0xFF);
               j=0;
      a[j]=P0;  
      j++;  
               a[j]=P1;
      j++;
               a[j]=P2;
             SBUF=a[j];
     j=0;
             while(TI==0);
                  TI=0;
             while(P0!=0xFF);
             while(P1!=0xFF);
             while(P2!=0xFF);  

  }
        
}
接受单片机
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
void main(void)
{
        uchar i=0;
    int j;
    uchar a[3];
    uchar k=0;
        TMOD=0x20;
        TH1=0xFF;
        TL1=0xFF;
        SCON=0x50;
        PCON=0x80;
        TR1=1;
       while(1)
       {
         while(RI==0);
            RI=0;
            a[j]=SBUF;
            j=0;
            P0=a[j];j++;
            P1=a[j];j++;
            P2=a[j];j=0;         
  }
        
}
这是我自己编的程序,我总感觉有些问题,我不知道数组怎么按顺序传送,再怎么按顺序接受,求大神指点

相关帖子

沙发
airwill| | 2013-2-19 21:51 | 只看该作者
这程序问题大着呢.
明明是三个字节. 才执行了一个 SBUF=a[j]; 发送中丢了2个字节的数据.
如果变化太快, 串口来不及发送该怎么处理?  没有考虑到.
接收端, 收了一个字节, 却发到三个端口. 肯定也错误.

比较好的办法, 考虑采用 FIFO 来处理吧, 必须考虑数据溢出问题.

使用特权

评论回复
板凳
duhun01|  楼主 | 2013-2-20 19:51 | 只看该作者
求大神,写好c给看看,小弟菜鸟,不知道如何去改,求大神写好,我好去挨句分析

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝