|
- /***************************************************************************************************
- 【函数名称】 delay10s()
- 【函数功能】 延迟10.000000秒,12M晶振
- 【参数简介】 12M,12分频,每周期1us 10S = 10,000,000 us ,= 200*250*200 /2
- for--汇编完应为DJNZ结构
- 东狮山
- ***************************************************************************************************/
- void delay10s(void)
- {
- unsigned char i,j,k;
- for(i=99;i>0;i--) //10,000,004us
- {
- for(j=250-1;j>0;j--) //250*400=100ms
- {
- for(k=200-2,_nop_();k>0;k--); //减去3个周期 200 -2*2 +1, 200*2=400 us
- }
- for(k=200-3,_nop_(),_nop_();k>0;k--); //100ms减去3个周期 200 -2*2 +1
- }
- //减去5个周期
- for(j=250-1;j>0;j--) //250*400=100ms
- {
- for(k=200-2,_nop_();k>0;k--); //减去3个周期 200 -2*2 +1, 200*2=400 us
- }
- for(k=200-3-1,_nop_();k>0;k--);
- }
- /***************************************************************************************************
- 【函数名称】 delay10s2()
- 【函数功能】 延迟10秒,12M晶振
- 【参数简介】 使用LONG类型是为了更简洁些
- 东狮山
- ***************************************************************************************************/
- void delay10s2(void)
- {
- unsigned long i;
- unsigned char j;
- for(i=71428;i>0;i--); //9,999,926 us
- for(j=34;j>0;j--); //69 us
- _nop_(); //1 us
- }
复制代码
只要程序中没有中断,软件延时也是没有问题的.
两个都可以精确定到10.000000s,KEIL编译.
习惯写C,可以看汇编后的结果,其实for(x--)汇编完就是DJNZ,效率也是很高的.
谁说C不行?第一个是为了说明初偿的,否则程序可以写得非常简洁的. |
|