搜索
bottom↓
回复: 8

if()语句出现错误,第一次遇到这种奇怪问题

[复制链接]

出0入0汤圆

发表于 2014-6-26 21:18:38 | 显示全部楼层 |阅读模式
我用的单片机是HT66F50在对程序进行硬件仿真时出现if语句里面的条件成立但是没有执行条件成立的语句反而执行条件不成立语句,部分代码
case 5: {
                                                        if(1 == OffOn){//这里条件是成立的但是执行了不成立的语句
                                                                _tm3c0 &= ~0x08 ; //定时器暂时不计时这里没执行
                                                                LEDTime = LEDPWM ;//关闭掉LED
                                                                OffOn = 0 ; //设置为关状态
                                                                ConfigState = 3 ; //设置配置指示灯为呼吸灯
                                                                //这里在程序完善的时候可以把用户参数放入eeprom
                                                        }else{
                                                                _tm3c0 |= 0x08 ;  //开启定时器即可恢复灯亮执行这里
                                                                OffOn =  1 ; //设置为开状态
                                                                ConfigState = 0 ; //关掉配置指示灯
                                                               
                                                        }
                                                       
                                                }break ;
在仿真过程中在执行if判断之后立即进入定时器中断,中断完成回来就执行else语句,这其表示不解,望老手分析解答!
开发环境用的IDE3000 下面传上全部代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出1000入0汤圆

发表于 2014-6-26 21:26:22 | 显示全部楼层
没用过这个芯片,但是仿真和真实电路有差别的

出0入0汤圆

发表于 2014-6-26 21:42:29 | 显示全部楼层
改成
if (offon==1) 或者 if (offon)
试试呢

出0入0汤圆

发表于 2014-6-26 21:43:25 | 显示全部楼层
jswd0810 发表于 2014-6-26 21:40
看看编译后的汇编语句,是否被优化掉了,我以前用keil的时候遇到过,某段程序老是不执行,看汇编语句根本没 ...

很有可能

出0入0汤圆

发表于 2014-6-26 21:46:50 | 显示全部楼层
看反汇编

出0入0汤圆

发表于 2014-6-26 22:11:29 | 显示全部楼层
case 5:{}这是什么句式?

出0入0汤圆

发表于 2014-6-26 22:12:33 | 显示全部楼层
不要动不动就说编译器出问题了,楼主确定自己代码没有问题,你试试直接if(1)看看能否执行。

出0入0汤圆

 楼主| 发表于 2014-6-26 23:17:56 | 显示全部楼层
cumtgao 发表于 2014-6-26 22:12
不要动不动就说编译器出问题了,楼主确定自己代码没有问题,你试试直接if(1)看看能否执行。 ...

C语言代码自我感觉没问题,我只if里面的判断方式修改一下就可以执行啦!
case 5: {
                                                        if( OffOn  == 1){原来这里是if(1 == OffOn)现在修改啦
                                                                _tm3c0 &= ~0x08 ; //定时器暂时不计时这里可以执行啦
                                                                LEDTime = LEDPWM ;//关闭掉LED
                                                                OffOn = 0 ; //设置为关状态
                                                                ConfigState = 3 ; //设置配置指示灯为呼吸灯
                                                                //这里在程序完善的时候可以把用户参数放入eeprom
                                                        }else{
                                                                _tm3c0 |= 0x08 ;  //开启定时器即可恢复灯亮
                                                                OffOn =  1 ; //设置为开状态
                                                                ConfigState = 0 ; //关掉配置指示灯
                                                               
                                                        }
                                                       
                                                }break ;
汇编看不大懂下面是两种的汇编结果
                                ;file H:\HTK_Project\test\test.c
                                ;80                                                case 5: {
                                ;81                                                                if(1 == OffOn  ){
01EE        5F25        clr     i
01EF        7025        set     [0A5H].0
01F0        1F05        clr     ACC
01F1        7C95        sz      [095H].1 解释若[095H].1为0则跳过下一行
01F2        1F85        set     ACC
01F3        4425        xor     a, i
01F4        390A        snz     Z
01F5        29FF        jmp     L92
                                ;file H:\HTK_Project\test\test.c
                                ;82                                                                        _tm3c0 &= ~0x08 ; //定时器暂时不计时
01F6        35D8        clr     T3ON
                                ;file H:\HTK_Project\test\test.c
                                ;83                                                                        LEDTime = LEDPWM ;//关闭掉LED
01F7        4706        mov     a, LEDPWM[0]
01F8        4084        mov     LEDTime[0], a
01F9        4707        mov     a, LEDPWM[1]
01FA        4085        mov     LEDTime[1], a
                                ;file H:\HTK_Project\test\test.c
                                ;84                                                                        OffOn = 0 ; //设置为关状态
01FB        7495        clr     [095H].1
                                ;file H:\HTK_Project\test\test.c
                                ;85                                                                        ConfigState = 3 ; //设置配置指示灯为呼吸灯
01FC        0F03        mov     a, 3H
01FD        408C        mov     ConfigState[0], a
----------------------------------------------------------------------------------------------------------------------------------------下面是正常的----------------------------------------------------------------------------------------------------------------
                                ;file H:\HTK_Project\test\test.c
                                ;80                                                case 5: {
                                ;81                                                                if( OffOn == 1){
01EE        7895        snz     [095H].1 解释若[095H].1不为0则跳过下一行
01EF        29F9        jmp     L92
                                ;file H:\HTK_Project\test\test.c
                                ;82                                                                        _tm3c0 &= ~0x08 ; //定时器暂时不计时
01F0        35D8        clr     T3ON
                                ;file H:\HTK_Project\test\test.c
                                ;83                                                                        LEDTime = LEDPWM ;//关闭掉LED
01F1        4706        mov     a, LEDPWM[0]
01F2        4084        mov     LEDTime[0], a
01F3        4707        mov     a, LEDPWM[1]
01F4        4085        mov     LEDTime[1], a
                                ;file H:\HTK_Project\test\test.c
                                ;84                                                                        OffOn = 0 ; //设置为关状态
01F5        7495        clr     [095H].1
                                ;file H:\HTK_Project\test\test.c
                                ;85                                                                        ConfigState = 3 ; //设置配置指示灯为呼吸灯
01F6        0F03        mov     a, 3H
01F7        408C        mov     ConfigState[0], a
                                ;file H:\HTK_Project\test\test.c
                                ;86                                                                        //这里在程序完善的时候可以把用户参数放入eeprom
                                ;87                                                                }else{
01F8        29FC        jmp     L79
                                L92:
                                ;file H:\HTK_Project\test\test.c
                                ;88                                                                        _tm3c0 |= 0x08 ;  //开启定时器即可恢复灯亮
01F9        31D8        set     T3ON
                                ;file H:\HTK_Project\test\test.c
                                ;89                                                                        OffOn =  1 ; //设置为开状态
01FA        7095        set     [095H].1
                                ;file H:\HTK_Project\test\test.c
                                ;90                                                                        ConfigState = 0 ; //关掉配置指示灯
01FB        5F0C        clr     ConfigState[0]
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-30 13:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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