用的是IAR FOR STM8,有个项目想精确的知道下delay行数的延时时间是多少,上网搜了下竟然没有,而且发现好些人提问怎么又这样的函数,我就用示波器测量做了个精确延时函数,分享给各位朋友吧。(16M晶振)用的时钟启动函数是
- void ClkInit(void)
- {
- CLK_ECKR |=0x1; //开启外部时钟
- while(!(CLK_ECKR&0x2)); //等待外部时钟rdy
- CLK_CKDIVR &= 0xF8; //CPU无分频 16M
- CLK_SWR = 0xB4; //选择外部时钟
- while(!(CLK_SWCR&0x8));
- CLK_SWCR |=0x2; //使能外部时钟
- }
- 延时函数
- //--- 微秒级延时--------------------------
- void Delayus(void)
- {
- asm("nop"); //一个asm("nop")函数经过示波器测试代表100ns
- asm("nop");
- asm("nop");
- asm("nop");
- }
-
- //---- 毫秒级延时程序-----------------------
- void Delayms(unsigned int time)
- {
- unsigned int i;
- while(time--)
- for(i=900;i>0;i--)
- Delayus();
- }
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』