1. 单片机编写延时程序
void delay(unsigned int x) //延时 x ms { unsigned int i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } 延时1ms 即为使x=1; 这程序延时约1ms(x=1时用keil测出来约 0.96831272ms,近似1ms),用C语言很难做到准确的1ms。注意晶振为11.0592MHZ的时候用~ 晶振为12MHZ时 把 i=120 近似值1ms
2. 单片机怎么写延时程序
1.
可以用_nop_( )函数来实现微秒级的延时。
2.
_nop_(); // 直接当成一条语句使用,产生一条NOP指令NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
3.
注:使用该函数时,需要将头文件#include<intrins.h>包含进源文件中
3. 单片机编写延时程序时提高精度的方法
51单片机精确延时有两个办法: 1、采用定时器来延时。
2、用汇编语言来编制延时程序。
4. 单片机延时程序设计
void delay(uint xms)
{ uint j; for(;xms>0;xms--) for(j=110;j>0;j--);
}
这是一个延时子函数,比较的精确,如果想更精确一点就用到定时器,如下
void delay(uint xms)
{ while(xms) { TH0=(65536-1000)/256; TL0=(65536-1000)%256; TR0=1; while(!TF0); xms--; }
}
5. 单片机延时程序流程图
1.软件延时
利用多个指令的执行来延时,累加每个指令的运行时间,来计算出延时的总时间。一般写成一个延时函数。
如,以下是10ms软件延时。
delay_10ms() {
int c = 1000; // 调整常数,以达到要求的延时,但很难!
while(c != 0) {
c--;
}
}
以上函数被调用一次,就延时10ms,多次调用可以达到任意更大的时间要求。
!但是,在延时时,就其它什么事也做不了了,就是干等啊!
2.硬件延时
利用定时器/计数器芯片,或用微控制器内部的定时器/计数器,实际上,它就是对晶振的分频(分频系数可编程设置),得到一个精确的低频的周期信号,用这个周期信号(比如10ms)去触发中断,每10ms调用一次定时中断服务程序。在定时中断服务程序中加入计数变量,就可以得到任意的定时了。
在10ms没有到时,微控制器可以运行其它程序,10ms到时再自动进去中断服务程序以处理定时任务,不会像软件延时阻塞了。
3.操作系统中,都有个硬件延时,和定时中断,可以看ucos ii中的源码,节拍时钟,和汇编语言实现的定时中断。
4.硬件延时,要占用一个定时器/计数器硬件资源。
6. 单片机汇编语言延时程序
DELAY:
MOV R3,#100 ;2
DLY0:
MOV R2,#249 ;2*100
DLY1:
DJNZ R2,DLY1 ;249*2*100
MOV R2,#248 ;2*100
DLY2:
DJNZ R2,DLY2 ;248*2*100
DJNZ R3,DLY0 ;2*100
RET ;2
以上假设12M晶振,延时共2+(249*2+2+248*2)*100+2=100004微妙=100.004毫秒
7. 单片机编写延时程序实现LED灯闪烁
在单摆的中间放一个红外对管,这样单摆每过一次中间就会有一个脉冲信号。这个脉冲信号连接外部中断,通过中断来统计次数。再用定时器定时1秒,1秒后把中断次数输出到液晶上。显示过后计数清零,定时器再次定时1秒。不断重复就行。
8. 单片机编写延时程序命令
定义一个延时xms毫秒的延时函数voiddelay(unsignedintxms)//xms代表需要延时的毫秒数{unsignedintx,y;for(x=xms;x》0;x--)for(y=110;y》0;y--);}使用:voidDelay10us(ucharMs){uchardatai;for(;Ms》0;Ms--)for(i=26;i》0;i--);}i=[(延时值-1.75)*12/Ms-15]/4扩展资料1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好。3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
9. 单片机延时程序的延时时间
定时,是指在做一件事情过程中,后台有个计时器,预定时间到后触发另一项工作。
延时,是指在做一件事情过程中,保持一种工作状态的时间。利用循环处理的方式实现的延时,并不精确。
1、当中断发生时,CPU被打断先执行中断服务。导致执行时间变长。
2、使用高级语言时,编译的结果受优化等级等多方面因素干扰,难以计算。
3、在有MMU和Cache的MCU中,指令的执行速度还会受到缓存的影响。利用定时器延时: 1、因为定时器累加与CPU无关,即使中断,仍然会保持计数。不受上述问题影响 2、缺点需要占用定时器资源。3、功耗也会高一些。