标题: 51单片机精准延时 [打印本页]

作者: 252622979    时间: 2019-12-27 14:50
标题: 51单片机精准延时
经过实测的12T 51单片机精延时,希望对初学者有帮助
/**********************  void Delay10us() **********************
时钟为11.0592MHz时, 调用该函数延时9.77us,调用两次延时19.53us
可以在多个Delay10us()间加入_nop_()指令, _nop_()指令延时1.08us
1 如延时30us, 如下调用实际延时30.39us:
   _nop_();
   Delay10us();
   Delay10us();
   Delay10us();
2 如延时40us, 如下调用实际延时40.14us:
   _nop_();
   Delay10us();
   Delay10us();
   Delay10us();
   Delay10us();
****************************************************************/
void Delay10us()
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
}

/**********************  void Delay100us() **********************
时钟为11.0592MHz时, 调用该函数延时99.83us
****************************************************************/
void Delay100us()
{
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
  Delay10us();
}

/**********************  void Delay1ms() **********************
时钟为11.0592MHz时, 调用该函数延时1000.5us
****************************************************************/
void Delay1ms()
{
  unsigned char i;

  for(i=0; i<229; i++)
  {
    _nop_();
  }
}

/**********************  void Delay10ms() **********************
时钟为11.0592MHz时, 调用该函数延时10006us
****************************************************************/
void Delay10ms()
{
  Delay1ms();  
  Delay1ms();
  Delay1ms();
  Delay1ms();
  Delay1ms();
  Delay1ms();
  Delay1ms();
  Delay1ms();
  Delay1ms();
  Delay1ms();  
}

/**********************  void DelayX10ms() *********************
时钟为11.0592MHz时, 调用该函数延时N(N<=255)倍的10ms
****************************************************************/
void DelayX10ms(unsigned char nCount)
{
   while(nCount--)
   {
     Delay10ms();
   }
}












欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1