单片机延时C语言程序

本文详细探讨了单片机中使用C语言实现延时程序的方法,包括基本原理、常见算法以及如何优化延时精度。内容涵盖定时器配置、循环计数法和查表法等实现技巧,适合嵌入式初学者和进阶开发者参考。
摘要由CSDN通过智能技术生成
(晶振12MHz,一个机器周期1us.)
一. 500ms延时子程序
程序:
void delay500ms(void){
   unsigned char i,j,k;
   for(i=15;i>0;i--)
     for(j=202;j>0;j--)
       for(k=81;k>0;k--);
}
产生的汇编:
C:0x0800     7F0F      MOV       R7,#0x0F
C:0x0802     7ECA      MOV       R6,#0xCA
C:0x0804     7D51      MOV       R5,#0x51
C:0x0806     DDFE      DJNZ      R5,C:0806
C:0x0808     DEFA      DJNZ      R6,C:0804
C:0x080A     DFF6      DJNZ      R7,C:0802
C:0x080C     22        RET      
计算分析:
程序共有三层循环
一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us
二层循环m:R6*(n+3) = 202*165 = 33330us          DJNZ   2us + R5赋值 1us = 3us
三层循环: R7*(m+3) = 15*33333 = 499995us        DJNZ   2us + R6赋值 1us = 3us
循环外:    5us             子程序调用 2us + 子程序返回 2us + R7赋值
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值