找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机程序case后改为接字符怎么就不行了?

查看数: 2725 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-11-1 17:00

正文摘要:

这是用单片机串口接收字符控制舵机的部分程序,按照下面的程序发送16进制的0和1能控制电机,但是改为case'a',case'b',然后发送字符a,b,都不能控制,为什么呢?请教怎么改? typedef unsigned int u16;  &nbs ...

回复

ID:281060 发表于 2018-11-2 15:35
case之后应该是整形常量
ID:415069 发表于 2018-11-2 14:08
加个断点看看收到的是什么值
ID:419630 发表于 2018-11-2 13:41
重新输入
ID:213173 发表于 2018-11-2 11:54
发送字符a,b都不能控制的原因是在串口助手里要选择文本模式。文本模式下'a'=0x41,'b'=0x42。中断函数这样写试试。
void Com_Int(void) interrupt 4
{
        RI = 0;
        cmd = SBUF; //这里接收到的是16进制
        SBUF = cmd; //回传接收到的数据            
        while(!TI);        //等待发送中断请求标志位为1
        TI=0;                   //发送中断请求标志位清0
        switch(cmd)
        {
                case('a'): SG1_count = 25;break;
                case('b'): SG1_count = 5 ;break;
                default: break;
        }       
}




ID:213280 发表于 2018-11-2 09:51
那啊啊啊 发表于 2018-11-1 23:09
类型不对

cmd的类型吗
ID:387733 发表于 2018-11-2 06:38
从编译后的汇编程序看,没有问题的,查查其他原因:

    20:         switch(cmd)
C:0x0035    E502     MOV      A,cmd(0x02)
C:0x0037    249E     ADD      A,#0x9E
C:0x0039    6008     JZ         C:0043
C:0x003B    04         INC      A
C:0x003C    7008     JNZ      C:0046
    21:                                 {
    22:                                 case 'a':  
    23:                                         SG1_count = 25;
C:0x003E    750319   MOV      SG1_count(0x03),#0x19
    24:                                         break;
C:0x0041    8003      SJMP     C:0046
    25:                                 case 'b':  
    26:                                         SG1_count = 5;                        
C:0x0043    750305   MOV      SG1_count(0x03),#0x05
    27:                                         break;
    28:                                 default: break;
    29:         }
ID:141497 发表于 2018-11-1 23:32
case(0):
case(1):
这样试一下。
ID:419452 发表于 2018-11-1 23:09
类型不对
ID:213280 发表于 2018-11-1 22:50
qq948096770 发表于 2018-11-1 19:03
类型不对吧,switch(整数A)---case A的可能值

意思是要重新定义cmd的类型吗
ID:89515 发表于 2018-11-1 19:26
case后面必须是整形常量
ID:419303 发表于 2018-11-1 19:03
类型不对吧,switch(整数A)---case A的可能值

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

Powered by 单片机教程网

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