打印

KEIL 编译优化问题?

[复制链接]
1408|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wsl_5631|  楼主 | 2009-8-3 19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
重新整理一下发帖
下面的程序 会执行到while(1);请高手指点

#include"STC89C58RD+.H"
#include<stdlib.h>
#include<intrins.h>

#define        uchar            unsigned char
#define        ulint            unsigned long int

#pragma ot(9,speed)                //9级优化

#define        BUZZER            P1_0


#define        WORK        0
#define        SET            1
#define        IDLE        2


idata    ulint      data_var;
idata    ulint      idata_var;
xdata    ulint      xdata_var;


data    uchar      status;



void    key_process(uchar key);
void    delay5us();
void    delay5ms();




void    main()
{
        while(1)
        {
             status = WORK;
            key_process(1);
        }
}
   
void    key_process(uchar key)
{
    switch(status)
    {
        case WORK:
            switch(key)
            {
                case 1:
                    data_var = 0;
                    delay5us();
                    BUZZER = 1;
                    delay5ms();
                    BUZZER = 0;
                    status = IDLE;
                    break;
                case 2:
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    while(1);
                    break;
                default:
                    break;
            }
            break;
        case SET:
            switch(key)
            {
                case 1:
                    xdata_var = 0;
                    delay5us();
                    BUZZER = 1;
                    delay5ms();
                    BUZZER = 0;
                    status = IDLE;;
                    break;
                case 2:
                    idata_var = 0x897890;
                    delay5us();
                    BUZZER = 0;
                    delay5ms();
                    BUZZER = 1;
                    status = IDLE;
                    break;
                default:
                    break;
            }
            break;
        case IDLE:
            break;
        default:
            break;
    }
}
void    delay5us()
{
    uchar i;
    for(i=0;i<5;i++);
}
void    delay5ms()
{
    uchar i;
    for(i=0;i<50;i++)delay5us();
}

相关帖子

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

本版积分规则

43

主题

335

帖子

2

粉丝