1)空操作延?r (12MHz)
void delay10us(){ _NOP_(); _NOP_(); _NOP_(); _NOP_(); _NOP_(); _NOP_();} 2)循?延?r (12MHz)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--);}延?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?。