单片机延时程序怎么写?是根据什么原理写的?有什么方法吗?

 我来答
yhchen2001
2012-07-20 · TA获得超过737个赞
知道小有建树答主
回答量:348
采纳率:90%
帮助的人:129万
展开全部
单片机中做延时,如果是时间比较短的情况,和单片机的机器周期时间,或单片机运行单个命令的时间是同一个单位时间的话,那么用循环运行一些没有动作的命令来延时,算每个命令的时间是多少,循环了多少次,那延时时间就可以算出来的了。
另外一种延时,时间相对机器周期的单位时间来说比较大,好像要MS,S 以上,那么可以用单片机的定时器来做,那就比较准确的时间的了,
北京康思
2018-09-20 广告
void timer0_zd() interupt 1 /定时器0,定时中断子程序 { TL0 = 0x0; / 设置定时器初值 TH0 = 0x4C; / 设置定时器初值 a+; /开关按下延时,延时到之后,电磁阀开始动作。 if(a=2... 点击进入详情页
本回答由北京康思提供
ouyanglingjun
推荐于2017-10-09 · 超过12用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:24.7万
展开全部
1、比较死板的方法是自己写一个delay函数,里面用for,while等做一些循环,下面是1ms的延时函数
void delay1ms(void)
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
具体算法是//(3j+2)*i=(3×33+2)×10=1010(us),但精确度不高,如果想准确点可以调节相应的参数用示波器来实
现,上面的函数适用于程序简单,对时间性要求不高,如:点led灯,单个按键操作等等。
2,就是用定时器中断里面设定标志位来产生延时的方法,比如你可以把定时器设定为每1ms进一次中断,在中断里面
把一个标志位(如flag)置一
当你需要1ms延时的时候你可以先初始化定时器,然后查询标志位是否置一,置一则执行if后面的语句,即if(fla{};
当你需要10ms延时时,你可以把flag设置为uchar,中断里面flag++;外面查询用if(10==flag){};
以此类推,上面的方法精确度高适用地方。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式