[51单片机] 在仿真时不执行语句是怎么回事

[复制链接]
 楼主| a601182450 发表于 2014-10-8 08:58 | 显示全部楼层 |阅读模式
请求高手,我在C51单片机开发平台Keil uVision4版本中,在做仿真调试时,怎么有的语句它不执行的呢,编译时也没有提示出错,情况如图

本帖子中包含更多资源

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

×
ningling_21 发表于 2014-10-8 10:53 | 显示全部楼层
可能和编译优化级别有关系
wangch_sh 发表于 2014-10-8 11:28 | 显示全部楼层
哪条语句不执行
xuyaqi 发表于 2014-10-8 17:08 | 显示全部楼层
优化掉了
 楼主| a601182450 发表于 2014-10-9 16:36 | 显示全部楼层
降低优化等级也不行
ayb_ice 发表于 2014-10-9 17:16 | 显示全部楼层
整合优化到公共部分去了
four_zhg 发表于 2014-10-9 22:51 | 显示全部楼层
把优化关掉试试看
 楼主| 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++;
        
}





microxh 发表于 2014-10-13 13:19 | 显示全部楼层
只要KEIL软仿真的测试结果正确无误就可, 没必要纠缠绿色执行程序色标, KEIL IDE也不是百分百准确无误,我用KEIL3也一样, 不影响软仿真测试结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部