STC系列单片机理论上速度是AT89C51单片机的12倍。因为STC单片机是1机器周期单片机(在不分频的情况下)。那么我们在AT89C51单片机上熟悉的软件延时程序如果修改才可以适用于STC单片机呢?
为此,我进行了修改和实验,希望可以与涉及此问题的朋友一起讨论。
/*********************************************************************************************/
void delay (unsigned int a){ // 1ms延时程序
unsigned int i;
while( --a != 0){
   for(i = 0; i < 125; i++);//  
}             //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
/*********************************************************************************************/
以上是AT89C51单片机使用的延时程序,出自《单片机的C语言应用程序设计》一书。书中说这款延时程序并不精准,要根据实际情况做一定的调整。经过对时钟周期和指令时间的计算,得出这个程序中的延时数值需要提高6倍才可以适用于STC单片机。
将125提高6倍,改为686

/***1T模式单片机延时1ms*****11.0592MHZ***************/
void delay(unsigned  int ms)
{
 unsigned int  i,j;
 for(i=0;i<ms;i++)
  for(j=0;j<686;j++)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
}