找回密码
 立即注册

QQ登录

只需一步,快速开始

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

一个串口程序,想让两个单片机相互通讯、控制,哪位大神可以帮我看看哪里出错了

[复制链接]
跳转到指定楼层
楼主
ID:228280 发表于 2017-11-14 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;

uchar key;
uchar code table[]={0x00,0x06,0x5b,0x4f,0x66};

void display(uchar num)
{
        P0=table[num];
        dula=1;
        dula=0;
}

void send(uchar dat)
{
        SBUF=dat;
        while(!TI);
        TI=0;
}

uchar receive(void)      
{
        uchar dat;
       
        while(RI==0);                  
        RI=0;                          
        dat=SBUF;                     
        return dat;                    
}

void keyscan()
{
        if(k1==0)
                key=1;
        if(k2==0)
                key=2;
        if(k3==0)
                key=3;
        if(k4==0)
                key=4;
                send(key);
}

void main(void)
{
        TMOD=0x20;                    
        SCON=0x50;                     
        PCON=0x00;                    
        TH1=0xf4;                     
        TL1=0xf4;
        TR1=1;                        
        REN=1;                        
        P0=0xfe;
        wela=1;
        wela=0;
        P0=0;
        dula=1;
        dula=0;
        while(1)
        {
                display(receive());
                keyscan();
        }
}

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

使用道具 举报

沙发
ID:164602 发表于 2017-11-15 08:35 | 只看该作者
看到你只有一个程序,是不是就是说:你的两台单片机都是同样的程序?
如果是,那么程序是有问题的:
就是display()函数,它要调用receive()函数传递数据,但只要运行到这个函数,单片机就死在这里了,因为不会有机会去执行keyscan()函数,就不会有发送,没有发送,就没有接收,所以,RI永远为零,程序就死这里了。
回复

使用道具 举报

板凳
ID:228280 发表于 2017-12-9 20:17 | 只看该作者
HC6800-ES-V2.0 发表于 2017-11-15 08:35
看到你只有一个程序,是不是就是说:你的两台单片机都是同样的程序?
如果是,那么程序是有问题的:
就是 ...

嗯嗯,谢谢你,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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