找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串口通信程序错误

查看数: 3171 | 评论数: 8 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-12-19 20:41

正文摘要:

我用上位机发送数字对应的灯亮 哪里错了,灯不亮?求改错 #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar dat,num; uint a,i; void main() {      & ...

回复

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;
}
ID:532541 发表于 2019-12-21 08:05
图上没看到晶振的频率多少,这个好波特率有关,11.0592,或22.1184Mhz 9600 或 19200波特率发数据
ID:661003 发表于 2019-12-20 22:16
baiyun1234 发表于 2019-12-20 13:59
给你调好了,问题出在case 语句上,我给你的P0改成P2了,你自己改回来。
#include
#include

大神,这个程序只可以控制单个LED灯亮,能不能改成花样流水
ID:609989 发表于 2019-12-20 15:53
csmyldl 发表于 2019-12-20 14:54
除了P0改为P2,还改了什么?看不出来

原版:case1:,我改成了:case 1:他的case中间的空格没有,语句写法还需巩固下。
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 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:668822 发表于 2019-12-19 23:44
不懂帮顶一下!
ID:235200 发表于 2019-12-19 23:11
程序看起来没错,关键是你上位机发送时是以何种代码发送,未打开HEX开关时,发送1,接收则是31,要找开HEX开发,发送01才收到1

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

Powered by 单片机教程网

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