找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2143|回复: 8
收起左侧

单片机串口通信程序错误

[复制链接]
ID:661003 发表于 2019-12-19 20:41 来自手机 | 显示全部楼层 |阅读模式
3黑币
我用上位机发送数字对应的灯亮
哪里错了,灯不亮?求改错
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar dat,num;
uint a,i;
void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TH1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        while(1)
        {
          if(num==1)
          {
              switch(dat)
                  {case1:P0=0xfe;break;
                   case2:P0=0xfd;break;
                   case3:P0=0xfb;break;
               case4:P0=0xf7;break;
                   case5:P0=0xef;break;
               case6:P0=0xdf;break;
               case7:P0=0xbf;break;
               case8:P0=0x7f;break;
                   case0:P0=0xff;break;
                    }
                        ES=1;
                        num=0;
                }
        }
}

  void ser() interrupt 4
{
     RI=0;
         dat=SBUF;
         ES=0;
         num=1;
}

18c73e0374bfbbf3.jpg
回复

使用道具 举报

ID:235200 发表于 2019-12-19 23:11 | 显示全部楼层
程序看起来没错,关键是你上位机发送时是以何种代码发送,未打开HEX开关时,发送1,接收则是31,要找开HEX开发,发送01才收到1
回复

使用道具 举报

ID:668822 发表于 2019-12-19 23:44 | 显示全部楼层
不懂帮顶一下!
回复

使用道具 举报

ID:609989 发表于 2019-12-20 13:59 | 显示全部楼层
给你调好了,问题出在case 语句上,我给你的P0改成P2了,你自己改回来。
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar dat,num;
uint a,i;

void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TH1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        while(1)
        {
          if(num==1)
          {
              switch(dat)
                  {
                                        case 1:P2=0xfe;break;
                    case 2:P2=0xfd;break;
                    case 3:P2=0xfb;break;
                                        case 4:P2=0xf7;break;
                    case 5:P2=0xef;break;
                                        case 6:P2=0xdf;break;
                    case 7:P2=0xbf;break;
                    case 8:P2=0x7f;break;
                    case 0:P2=0xff;break;
                                          
                    }
                        ES=1;
                        num=0;
                }
        }
}

  void ser() interrupt 4
{
                        RI=0;
         dat=SBUF;
         ES=0;
         num=1;
}
回复

使用道具 举报

ID:235200 发表于 2019-12-20 14:54 | 显示全部楼层
baiyun1234 发表于 2019-12-20 13:59
给你调好了,问题出在case 语句上,我给你的P0改成P2了,你自己改回来。
#include
#include

除了P0改为P2,还改了什么?看不出来
回复

使用道具 举报

ID:609989 发表于 2019-12-20 15:53 | 显示全部楼层
csmyldl 发表于 2019-12-20 14:54
除了P0改为P2,还改了什么?看不出来

原版:case1:,我改成了:case 1:他的case中间的空格没有,语句写法还需巩固下。
回复

使用道具 举报

ID:661003 发表于 2019-12-20 22:16 来自手机 | 显示全部楼层
baiyun1234 发表于 2019-12-20 13:59
给你调好了,问题出在case 语句上,我给你的P0改成P2了,你自己改回来。
#include
#include

大神,这个程序只可以控制单个LED灯亮,能不能改成花样流水
回复

使用道具 举报

ID:532541 发表于 2019-12-21 08:05 | 显示全部楼层
图上没看到晶振的频率多少,这个好波特率有关,11.0592,或22.1184Mhz 9600 或 19200波特率发数据
回复

使用道具 举报

ID:609989 发表于 2019-12-21 18:08 | 显示全部楼层
电子1912 发表于 2019-12-20 22:16
大神,这个程序只可以控制单个LED灯亮,能不能改成花样流水

如下:给你调好了,P0改成P2了,自己改回来。
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar dat,num,t;

void delayms(uint time)
{
        uint x,y;
        for(x=0;x<time;x++)
          for(y=0;y<112;y++);
}
void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TH1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        while(1)
        {
          if(num==1)
          {
                          delayms(500);
              switch(dat)
                  {
                                       
                    case 1:P2=0xfe;break;
                    case 2:P2=0xfd;break;
                    case 3:P2=0xfb;break;
                    case 4:P2=0xf7;break;
                    case 5:P2=0xef;break;
                    case 6:P2=0xdf;break;
                    case 7:P2=0xbf;break;
                    case 8:P2=0x7f;break;
                    case 0:P2=0xff;break;
                                        case 9:
                                        {
                               
                                                delayms(500);       
                                                P2=0xfe;
                                                delayms(500);       
                                                P2=0xfd;
                                                delayms(500);       
                                                P2=0xfb;
                                                delayms(500);       
                                                P2=0xf7;
                                                delayms(500);       
                                                P2=0xef;
                                                delayms(500);       
                                                P2=0xdf;
                                                delayms(500);       
                                                P2=0xbf;
                                                delayms(500);       
                                                P2=0x7f;
                                                delayms(500);       
                                                P2=0xff;
                                        }break;
                                }
                  
                        ES=1;
                        num=0;
                }
        }
}

  void ser() interrupt 4
{
          RI=0;
         dat=SBUF;
         ES=0;
         num=1;
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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