【整理者】61ic.com
【提供者】llz77
【詳細說明】IAR FOR STM8精确延時函數
用的是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();
}
希望對大家有用