程序执行到delay函数时程序运行出错,感觉一直在delay()函数中不返回。将delay()中的work()去掉后程序运行正常

时间:2020-12-03 23:42:12
#include <reg51.h>

#include <absacc.h>
#define uchar unsigned char

sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_0 = P1^0;

int direction = 1;
int target_up[21] ;
int target_down[21];
int target[21];
int h  , q , i , n ;

void open();
void close();
void up();
void ppp();
void stop();
void down();
int get();
void work();
//程序执行到delay函数时程序运行出错,感觉一直在delay()函数中不返回。将delay()中的work()去掉后程序运行正常
void work(){ 
q = get();
if(q > 0){
if ( q > 0 && q < 21){  //门内按键
target[q] = 1;
}else if ( q > 20 && q < 41){  //目前楼层
h = q - 20;
}else if (q > 100 && q < 121 ){ //门外按键 上行
target_up[q - 100] = 1;
}else if (q > 200 && q < 221){ //下行
target_down[q - 200] = 1;
}
}
}


void delay (){
int x  , y , z;
for (x = 0 ; x < 100 ; x++ ){
for (  y = 0 ; y < 100 ; y++){
for ( z = 0 ; z < 20 ; z++){
work();
}s
}
}
}

int get(){
while (RI != 1);
RI = 0;
return SBUF;
}

void up(){
P1_0 = 1;
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
}

void down(){
P1_0 = 0;
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
}
void stop(){
P1_0 = 1;
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
delay();
open();
}

void open (){

P1_0 = 1;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
delay();
close();

}

void close(){

P1_0 = 1;
P1_1 = 1;
P1_3 = 1;
P1_2 = 0;
delay();
P1_2 = 1;
}


void ppp(){
direction = 1;
if (direction == 1){
for ( i = 1 ; i < 21 ; i++){
if (target_up[i] == 1 ){
while ( i > h){
up();
if(get() != 0){
work();
//return;
}
}
while( i < h ){
down();
if(get() != 0){
work();
//return;
}
}
stop();
target_up[i] = 0;
}
if (target[i] == 1 ){
while ( i > h){
up();
if(get() != 0){
work();
//return;
}
}
while( i < h ){
down();
if(get() != 0){
work();
//return;
}
}
stop();
target[i] = 0;
}
}
}
direction = 2;
if (direction == 2 ){
for ( i = 20 ; i > 0 ; i--){
if (target[i] == 1 || target_down[i] == 1){
while ( i < h){
down();
if(get() != 0){
work();
}
}
while( i < h){
up();
if(get() != 0){
work();
}
}
stop();
delay();
open();
target[i] = 0;
target_down[i] = 0;
}
}

}
}

void main (){
TMOD = 0x21;
TL1 = 0xe8;
TH1 = 0xe8;
TH0 = 0xfc;TL0 = 0x18;
TR0 = ET0 = EA = 1;
PCON = 0x00;
TR1 = 1;
SCON = 0x50;
while (1){ 
if (get() != 0){
work();
}
ppp();
}
}

4 个解决方案

#1


求解答,,自己想不通

#2


问题是不是出在get函数的这句:

while (RI != 1);

RI不为1时一直在死循环,什么情况下RI会为1?

#3


对了对了,,,没注意到这一句,谢谢

#4


int get(){
while (RI != 1);
RI = 0;
return SBUF;
}

work()也没啥问题,建议查一下get()函数,这儿有一个死循环。注意while之后的;。

#1


求解答,,自己想不通

#2


问题是不是出在get函数的这句:

while (RI != 1);

RI不为1时一直在死循环,什么情况下RI会为1?

#3


对了对了,,,没注意到这一句,谢谢

#4


int get(){
while (RI != 1);
RI = 0;
return SBUF;
}

work()也没啥问题,建议查一下get()函数,这儿有一个死循环。注意while之后的;。