重新整理一下发帖
下面的程序 会执行到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();
} |