找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初学单片机,如何在主函数里面调用我在串口助手里面输入的数字

[复制链接]
跳转到指定楼层
楼主
初学单片机,哪位大哥帮我看下如何在主函数里面调用我在串口助手里面输入的数字,我下面的不行啊帮忙看下哪里错了

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

使用道具 举报

沙发
ID:341289 发表于 2018-5-30 12:25 | 只看该作者
sbit led=P2^0;         //D1
sbit led1=P2^1;         //D1
sbit led2=P2^2;         //D1

void delay(u16 i)
{
        while(i--);       
}

void display()
{
        while(1)
        {
                led=0;
                delay(50000); //大约延时450ms
                led=1;
                delay(50000); //大约延时450ms       
        }               
}


void display1()
{
        while(1)
        {
                led1=0;
                delay(50000); //大约延时450ms
                led1=1;
                delay(50000); //大约延时450ms       
        }               
}

void display2()
{
        while(1)
        {
                led2=0;
                delay(50000); //大约延时450ms
                led2=1;
                delay(50000); //大约延时450ms       
        }               
}
void UsartInit()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}


void main()
{
            UsartInit();
              switch(SBUF)
            {
                  case(1):
                      display() ;break;
              case(2):
                      display1() ;break;
                  case(3):
                      display2() ;break;
            }
        while(1);
}

void Usart() interrupt 4
{
        u8 receiveData;
        receiveData=SBUF;//出去接收到的数据
        RI = 0;//清除接收中断标志位
        SBUF=receiveData;//将接收到的数据放入到发送寄存器
        while(!TI);                         //等待发送数据完成
        TI=0;                                                 //清除发送完成标志位
}
回复

使用道具 举报

板凳
ID:333428 发表于 2018-6-3 18:29 来自触屏版 | 只看该作者
你把switch放到中断看看,感觉是sbuf的问题
回复

使用道具 举报

地板
ID:174087 发表于 2018-6-3 20:09 | 只看该作者
串口助手输入的“数字”其实是字符,并且有对应的ASCII码值,你把case里的123当做字符用单引号括起来就可以了,或者使用ASCII值
回复

使用道具 举报

5#
ID:317135 发表于 2018-6-4 10:25 | 只看该作者
你这里问题有;
第一:不能直接判断SBUF寄存器里面的数据
第二:你得确定串口来的数据是1.2.3,或者是ASCII码值


void main()
{
             u8  receiveData;
             receiveData=SBUF;
             UsartInit();
               switch(receiveData)
             {
                   case(1):                //可能是ASSCII码0X31
                       display() ;break;
               case(2):                     //可能是ASSCII码0X32
                       display1() ;break;
                   case(3):                  //可能是ASSCII码0X33
                       display2() ;break;
             }
         while(1);
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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