单片机写延时程序的几种方法

 1)空操作延?r (12MHz)
  void delay10us(){   _NOP_();   _NOP_();   _NOP_();   _NOP_();   _NOP_();   _NOP_();2)循?延?r  (12MHz)Void delay500ms(){unsigned char ijk;for(i=15;i>0;i--)     for(j=202;j>0;j--)         for(k=81;k>0;k--);}延?r??r?=[(k*2+3)*j+3]*i+5k*2+3=165 us165*j+3=33333 us33333*i+5=500000 us=500 ms3)??r器中?嘌?r(工作方式2) (12MHz)#include<reg52.h>sbit led=P1^0;unsigned int num=0;void main(){  TMOD=0x02;  TH0=6;  TL0=6;  EA=1;  ET0=1;  TR0=1;while(1)  {    if(num==4000)    {      num=0;      led=~led;    }  }}void T0_time() interrupt 1{num++;}
4)C程序嵌入?合?言延?r #pragma asm……?合?言程序段 ……#pragma endasm
KEIL?件仿真?y量延?r程序延?r?r?


 

?是前段事件??之延?r程序、由於不懂?合?言,故NO.4?o程序。希望?δ阌?椭?。。?br />

???2MHz晶振,?C器周期??uS,在?绦性?for循?延?r程式的?r候Void delay500ms(){unsigned char i,j,k;for(i=15;i>0;i--)     for(j=202;j>0;j--)         for(k=81;k>0;k--);}?值需要1???C器周期,跳?需要2???C器周期,?绦幸淮?or循?的空操作需要2???C器周期,那么,??兜谌?A循? for(k=81;k>0;k--);,?牡诙?A跳?到第三?需要2?C器周期 ,?值需要1???C器周期,?绦?1次?t需要2*81???C器周期,?绦幸淮味?Afor循?的事件??1*2+1+2;?绦辛?20次,?t(81*2+3)*220+3,?绦?5次一?循?,?t [(81*2+3)*220+3]*15,由於不需要?纳想A跳往下?,?t只加?值的一???C器周期,另外?入?延?r子函?岛吞?鲈?函?稻?枰????C器周期,故?需要+5。  

unsigned char i,j,k;用一???C器周期,+上?出函?档?*2???C器周期,?t最好需+5???C器周期的?r?。

以上是单片机写延时程序的几种方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>