打印
[51单片机]

在仿真时不执行语句是怎么回事

[复制链接]
1155|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请求高手,我在C51单片机开发平台Keil uVision4版本中,在做仿真调试时,怎么有的语句它不执行的呢,编译时也没有提示出错,情况如图

相关帖子

沙发
ningling_21| | 2014-10-8 10:53 | 只看该作者
可能和编译优化级别有关系

使用特权

评论回复
板凳
wangch_sh| | 2014-10-8 11:28 | 只看该作者
哪条语句不执行

使用特权

评论回复
地板
xuyaqi| | 2014-10-8 17:08 | 只看该作者
优化掉了

使用特权

评论回复
5
a601182450|  楼主 | 2014-10-9 16:36 | 只看该作者
降低优化等级也不行

使用特权

评论回复
6
ayb_ice| | 2014-10-9 17:16 | 只看该作者
整合优化到公共部分去了

使用特权

评论回复
7
four_zhg| | 2014-10-9 22:51 | 只看该作者
把优化关掉试试看

使用特权

评论回复
8
a601182450|  楼主 | 2014-10-10 09:24 | 只看该作者
本帖最后由 a601182450 于 2014-10-10 09:41 编辑

请问七楼,怎么操作才可以关掉优化呢?源程序如下;   请高手帮我看一下这个程序有问题不,sec的值不会变的,不知道怎么回事?

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit rw=P1^1;
sbit ne=P1^2;
uchar code table[]="0123456789:";        
uchar num,sec,tcnt,min,h;
void delay_lcd(uchar a)
{
        uchar x,y;
        for(x=a;x>0;x--)
                for(y=110;y>0;y--)
                {}
        
}


void init_lcd()
{
               
        ne=0;
        write_lcdcom(0x38);
        write_lcdcom(0x0c);
        write_lcdcom(0x06);
        write_lcdcom(0x01);

}

void write_lcddata(uchar date)
{  
        rs=1;
        rw=0;
        P2=date;
        delay_lcd(5);
        ne=1;
        delay_lcd(5);        
        ne=0;

               
}


void write_lcdcom(uchar com)
{
                        
        rs=0;
        rw=0;
        P2=com;
        delay_lcd(5);
        ne=1;
        delay_lcd(5);
        ne=0;

}
void tim()
{
                uchar h,min,sec;
        if(tcnt==20)
        {
                tcnt=0;
                sec++;                        
        
                if(sec==60)
                        {
                                sec=0;
                                min++ ;
                                if(min==60)
                                {
                                        min=0;
                                        h++;
                                        if(h==24)
                                        h=0;

                                }
                        }        
               
        }
}

void display(uchar shi,ge)
{
        write_lcdcom(0x80+0x0a);
        write_lcddata(table[ge]);
        write_lcdcom(0x80+0x09);
        write_lcddata(table[shi]);
}

/*void display(uchar h_ch,uchar h_ge,uchar minsh_a,uchar minge_a,uchar sh_a,uchar ge_a)
{
                 
        write_lcdcom(0x80+0x0a);
        write_lcddata(table[ge_a]);
        write_lcdcom(0x80+0x09);
        write_lcddata(table[sh_a]);
               
        write_lcdcom(0x80+0x07);
        write_lcddata(table[minge_a]);
        write_lcdcom(0x80+0x06);
        write_lcddata(table[minsh_a]);

        write_lcdcom(0x80+0x04);
        write_lcddata(table[h_ge]);
        write_lcdcom(0x80+0x03);
        write_lcddata(table[h_ch]);

} */

void main()
{
        

        init_lcd();
        write_lcdcom(0x80+0x08);
        write_lcddata(table[10]);
        write_lcdcom(0x80+0x05);
        write_lcddata(table[10]);


        TMOD=0X01;
        
        TH0=(65535-50000)/255;
        TL0=(65535-50000)%255;
        ET0=1;
        EA=1;
        TR0=1;
               
        while(1)
                {
//                        display(h/10,h%10,min/10,min%10,sec/10,sec%10);
                        tim();
                        display(sec/10,sec%10);
                }
        }

void t0()interrupt 1
{

        TH0=(65535-50000)/255;
        TL0=(65535-50000)%255;
        tcnt++;
        
}





使用特权

评论回复
9
microxh| | 2014-10-13 13:19 | 只看该作者
只要KEIL软仿真的测试结果正确无误就可, 没必要纠缠绿色执行程序色标, KEIL IDE也不是百分百准确无误,我用KEIL3也一样, 不影响软仿真测试结果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝