找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1777|回复: 7
收起左侧

单片机串口通信led灯显示程序问题

[复制链接]
ID:672615 发表于 2020-3-3 15:38 | 显示全部楼层 |阅读模式
为什么P2接收了SBUF传过来的数据之后,单片机上led显示的情况和数据不一样

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint num;

void init()
{
        REN=1;
        SM0=0;
        SM1=1;//工作方式一
        TMOD=0X20;
        TH1=0XFD;
        TL1=0XFD; //9600的波特率,
        TR1=1;
        EA=1;
        ES=1;
}

void main()
{
        init();

        while(1)
        {
                P2=num;            //led灯显示
        }
}

void time() interrupt 4
{        
        num=SBUF;
        RI=0;                   //进入中断就说么已经接收到数据了        
        SBUF=num;  //发送数据
        while(!TI);
        TI=0;

}

回复

使用道具 举报

ID:235200 发表于 2020-3-3 19:20 | 显示全部楼层
接收的数据是什么?led灯显示的数据是什么?接收的数据存入num,num又由P2口输出,这一过程绝对是接收的数据与P2口输出的数据一致,在P2=num;这一条语句加上一个条件试试,只有当接收到数据就送一次数据到P2口,不要无限次送数据到P2口
回复

使用道具 举报

ID:213173 发表于 2020-3-3 21:44 | 显示全部楼层
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;

void init()
{
        REN=1;
        SM0=0;
        SM1=1;//工作方式一
        TMOD=0X20;
        TH1=0XFD;
        TL1=0XFD; //9600的波特率,
        TR1=1;
        EA=1;
        ES=1;
}

void main()
{
        init();
        while(1)
        {
             
        }
}

void time() interrupt 4
{        
        num=SBUF;
        RI=0;                   //进入中断就说么已经接收到数据了        
        SBUF=num;  //发送数据
        while(!TI);
        TI=0;
        P2=num;            //led灯显示 0x00~0xff
}
回复

使用道具 举报

ID:672615 发表于 2020-3-4 14:38 | 显示全部楼层
csmyldl 发表于 2020-3-3 19:20
接收的数据是什么?led灯显示的数据是什么?接收的数据存入num,num又由P2口输出,这一过程绝对是接收的数据与P ...

我电脑输入一个00的话,我希望SBUF接收到,传给num,让led=0x00
回复

使用道具 举报

ID:672615 发表于 2020-3-4 14:40 | 显示全部楼层
wulin 发表于 2020-3-3 21:44
#include
#define uchar unsigned char
#define uint unsigned int

试了,不行不管我发送什么数据,LED接受数据之后,只会亮那几个灯,不会变化
回复

使用道具 举报

ID:687694 发表于 2020-3-4 16:21 | 显示全部楼层
在C语言中,数据类型是很严格。你定义num为整型int 为双字节。串口发送,接收数据一般只有8字节,P端口赋值为8字节。这可以编译通过,但并不能让你满意,期间编译器进行了数据类型自动转换。这个实验我也做过,在串口发送十六进制 00 估计能达到你的目的。
回复

使用道具 举报

ID:496117 发表于 2020-3-4 18:51 | 显示全部楼层
我前几天刚好遇到过类似的问题,是没有使用寄存器禁止优化的声明导致的,uint num;改为volatile uint num;
回复

使用道具 举报

ID:213173 发表于 2020-3-4 19:08 | 显示全部楼层
撒打算(⊙o⊙)哦 发表于 2020-3-4 14:40
试了,不行不管我发送什么数据,LED接受数据之后,只会亮那几个灯,不会变化

如果返回的数据是正确的就不是串口问题,检查P2外围电路。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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