打印
[51单片机]

双机通信问题

[复制链接]
1343|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
保持沉没了|  楼主 | 2013-12-5 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Rbuf = 0;
uchar code dis_7[] = {
    0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,         //共阴段码
    0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};
    //段码表 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, off
//-------------------------------
void delay(uint k)
{
    uint i, j;
    for(i = 0; i < k; i++)  for(j = 0; j < 200; j++);
}
//-------------------------------
void Display(uchar x)
{
    P2 = 0xFF;
    P0 = dis_7[x / 16];      //输出高四位
    P2 = 0xFE;  delay(2);
    P2 = 0xFF;
    P0 = dis_7[x % 16];      //输出低四位
    P2 = 0xFD;  delay(2);
}
//-------------------------------
void UART()interrupt 4
{
    if(RI) {
      RI = 0;                //清除中断标志
      Rbuf = SBUF;
    }
    if(TI) {
      TI = 0;                //清除中断标志
    }
}
//-------------------------------
void main()
{
    uchar t1, i;
    SCON = 0x50;             //串口工作在方式1
    PCON &= 0x7F;            //SMOD=0
    TMOD = 0x20;             //定时器1当做波特率发生器
    TH1 = 0xFD;              //初值, 9600 @ 11.0592MHz
    TL1 = 0xFD;
    TR1 = 1;
    ES = 1;
    EA = 1;
    while (1) {
      for (i = 0; i < 100; i++)//多次循环,便于观察与发送
        Display(Rbuf);       //显示收到的数据
      SBUF = t1;             //发送数据
      P1 = ~t1;              //本机显示
      t1++;
      // t1--;
    }
}
这几个led灯怎么点亮的看不懂

aaaaaaaaaa.png (17.2 KB )

aaaaaaaaaa.png

相关帖子

沙发
NE5532| | 2013-12-5 12:50 | 只看该作者
你是发送方看不懂还是接收方看不懂?这个软件大有可优化的地方啊。

使用特权

评论回复
板凳
保持沉没了|  楼主 | 2013-12-5 13:06 | 只看该作者
本帖最后由 保持沉没了 于 2013-12-5 13:12 编辑
NE5532 发表于 2013-12-5 12:50
你是发送方看不懂还是接收方看不懂?这个软件大有可优化的地方啊。

发送方的发送数据从哪来的就是t1给了sbuf,t1是什么

使用特权

评论回复
地板
ningling_21| | 2013-12-5 13:36 | 只看该作者
保持沉没了 发表于 2013-12-5 13:06
发送方的发送数据从哪来的就是t1给了sbuf,t1是什么

t1没有初始值,每循环一次加1,很没有逻辑...

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
保持沉没了 + 3
5
NE5532| | 2013-12-5 13:41 | 只看该作者
保持沉没了 发表于 2013-12-5 13:06
发送方的发送数据从哪来的就是t1给了sbuf,t1是什么

一个内存的变量啊,用于做要发送的数据的,不是定义了t1的么?楼主是C语言的问题??

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
保持沉没了 + 3
6
保持沉没了|  楼主 | 2013-12-5 13:43 | 只看该作者
本帖最后由 保持沉没了 于 2013-12-5 14:45 编辑
ningling_21 发表于 2013-12-5 13:36
t1没有初始值,每循环一次加1,很没有逻辑...

但是程序运行起来没问题,运行后,接受方的数码管点亮,然后开始累加,同时发送发p1口led灯累加点亮,但是为什么共阴极是高电平时,数码管还是亮的?

使用特权

评论回复
7
保持沉没了|  楼主 | 2013-12-5 13:45 | 只看该作者
NE5532 发表于 2013-12-5 13:41
一个内存的变量啊,用于做要发送的数据的,不是定义了t1的么?楼主是C语言的问题?? ...

时定义了,但没有初始值,他是先进行的t1的累加,然后开始发送t1的数据,这回看明白了,谢谢
1

使用特权

评论回复
8
NE5532| | 2013-12-5 20:27 | 只看该作者
保持沉没了 发表于 2013-12-5 13:43
但是程序运行起来没问题,运行后,接受方的数码管点亮,然后开始累加,同时发送发p1口led灯累加点亮,但是 ...

你是在实物上看到亮了还是在仿真里看到亮了?

使用特权

评论回复
9
保持沉没了|  楼主 | 2013-12-6 07:52 | 只看该作者
proteus仿真里

使用特权

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

本版积分规则

12

主题

78

帖子

0

粉丝