当前位置: 代码迷 >> 单片机 >> stc89c52 P1 I/O口函数递归控制亮灯的有关问题
  详细解决方案

stc89c52 P1 I/O口函数递归控制亮灯的有关问题

热度:51   发布时间:2016-04-28 15:41:40.0
stc89c52 P1 I/O口函数递归控制亮灯的问题
#include <reg52.h> //?·????
void sleep(void);    
void led(int * a,int b);
void  main ()

   int a[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
   led(a,0);
}

 void  sleep(void)
 {
   int i = 0;
  //while (i++ <  10000) ; ?????°
    while (i < 20000) i++; //?????ó
 }
 
 void led(int * a,int b)
 { 
 P1 = a[b++];
 sleep();
 if (b < 8) led(a,b);
 P1 = a[--b];
 sleep();
}


想不明白没使用循环啊,为什么上载后会自动循环,,,
------最佳解决方案--------------------
单片机平台编译器通常为默认函数为不可重入的

因为重入的代价很高(相对单片机有限的资源来说)

如果非要这么干,须加关键字进行说明
------其他解决方案--------------------
跟你用的编译器有关系  你应该是KEIL吧    这个用C写  它是不断的循环执行MAIN函数的 你可以只在MAIN里面调用sleep  然后单步调试  你就可以看出效果的   另外  C51/52不建议你用递归调用 
------其他解决方案--------------------
谢谢版主大大,看了你的博客,我也是专科生,刚好处于大二的迷茫期,,,看了你的博客挺受鼓励的

引用:
单片机平台编译器通常为默认函数为不可重入的

因为重入的代价很高(相对单片机有限的资源来说)

如果非要这么干,须加关键字进行说明