首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-12-20 
stc89c52 P1 I/O口函数递归控制亮灯的问题#include reg52.h //í·???tvoid sleep(void)void led(int * a

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

#include <reg52.h> //í·???t
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++; //ó??ˉoó
 }
 
 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不建议你用递归调用 
[其他解释]
谢谢版主大大,看了你的博客,我也是专科生,刚好处于大二的迷茫期,,,看了你的博客挺受鼓励的

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

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

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

热点排行