微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大神们这个程序,进入子函数就出不来了怎么办?

大神们这个程序,进入子函数就出不来了怎么办?

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
//uchar code fasong[]="abcd";//h1 h2 d1 d2
uchar count,flag,g,h,k,l,i,x;
sbit a=P2^3;//h1
sbit b=P2^2;//h2
sbit c=P2^1;//d1
sbit d=P2^0;//d2
sbit led0=P0^0;//oì?ìμ?1
sbit led1=P0^1;//oì?ìμ?2
sbit led2=P0^2;//μà?¢1?a
sbit led3=P0^3;//μà?¢11?
sbit led4=P0^4;//μà?¢2?a
sbit led5=P0^5;//μà?¢21?
sbit e=P1^3;
void init()
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
}
void delaya()
{
unsigned char i;
for(i=0;i<0x14;i++)
{
TH1=0x3c;
TL1=0xb0;
TR1=1;
while(!TF1);
TF1=0;
}
}
void zijian()
{
unsigned char i,w;
TMOD=0x10;
while(1)
{
if(e==0)
{
  w=0x01;  
  for(i=0;i<8;i++)
  {
  P0=w;
  w<<=1;
  delaya();
  P0=0x00;
  delaya();
  while(e==1)
  {
  P0=0x00;
  w=0x01;
  i=8;
  }
   }
  }
}
}
void main()
{
init();
TMOD=0x10;
P0=0x00;
delaya();
P0=0x02;
delaya();
P0=0x00;
delaya();
P0=0x08;
delaya();
P0=0x00;
delaya();
init();   
while(1)
{    g=h=k=l=1;                    
  if(x==1)
  {
   while(1)//youdaigaizheng
   {
    led2=1;
    led0=1;
    if(c==0)
    {
     while(1)
     {if(a==0)
     { while(1)
      {if(c==1&&a==1)
      {
       led2=0;
       delaya();
       led3=1;
       delaya();
       led0=0;
       g=0;
      }
     }
     }}
   
    }
   
   }
  }
   if(x==2)
  {
   while(h)
   {
    led4=1;
    led1=1;
    if(b==0)
    {
     while(1)
     {if(d==0)
     { while(h)
      {if((b==1)&&(d==1))
      {
       led4=0;
       delaya();
       led5=1;
       delaya();
       led0=0;
       h=0;
      }
     }
     }}
   
    }
   
   }
  }   
  if(x==3&&flag==1)
   {
    ES=0;                              
    flag=0;      
    //  SBUF=P1&0x1f;  
    SBUF=P2;
    while(!TI);   
    TI=0;                     
    ES=1;      
    // P2=~(P2&0x1f);
    //  P1=~(P1&0x1f);        
                }
      if(e==0) zijian();
  
}
}
void ver() interrupt 4
{
         RI=0;                       
         x=SBUF;               
         flag=1;               
}

还有个问题啊,这个我收到1这个程序,怎么跳出来

简化你的问题吧~

void zijian()
{
unsigned char i,w;
        TMOD=0x10;
//while(1)
//{
        if(e==0)
        {       
                w=0x01;               
                for(i=0;i<8;i++)
                {
                P0=w;
                w<<=1;
                delaya();
                P0=0x00;
                delaya();
                if(e==1)
                {
                P0=0x00;
                w=0x01;
                i=8;
                }
                        }
                }
//}
怎么跳回到主函数

函数没问题,如果实在有问题,你可以试着把i=8;这个语句去掉试试,不行的话,试试把TMOD=0x10;去掉

void zijian()
{
unsigned char i,w;
TMOD=0x10;
while(1)
{
if(e==0)
{
  w=0x01;  
  for(i=0;i<8;i++)
  {
  P0=w;
  w<<=1;
  delaya();
  P0=0x00;
  delaya();
  while(e==1)
  {
  P0=0x00;
  w=0x01;
  i=8;
  }
   }
  }
}
}
你上面写的这个函数,程序会一直等e==1

你程序中使用了6个while(1)死循环,不死那才怪。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top