51单片机的延时函数快速生成技巧

简介: 51单片机的延时函数快速生成技巧

     可以借助软件快速生成代码。利用STC-ISP 就可以

1.打开stc-isp后点击软件延时计算器

2.选择好使用的单片机型号、晶振频率、延时的时间

3.点击生成代码 即可。

有时候生成的c代码会有

_nop_();            //这句指令执行仅仅耗费1微秒的时间,可以删除,影响不大

       我们可以将这句代码给删除掉 ,不删除程序就会报错(你没有定义_nop_()的前提下)。删除后其实基本上不会产生太大的误差,因为1微妙实在是太短了。

使用心得:

       我们可以将生成的代码稍微改造一下,可以让我们的程序更加灵活,例如生成一个一毫秒的延时函数,通过在函数定义时增加一个形参变量,通过形参变量来控制1ms延时程序执行的次数来随意调节时长。

生成后复制过来的代码是这样的:

void Delay1ms()   //@11.0592MHz
{
  unsigned char i, j;
 
  _nop_();
  i = 2;
  j = 199;
  do
  {
    while (--j);
  } while (--i);
}

       在花括号里面的那一堆程序段就可以空耗CPU一毫秒,从而达到延时。

下面我们对它进行稍微的改造

void Delay(int n)   //@11.0592MHz
{
    while(n--)                //将延时一毫秒的程序循环执行n次,通过形参来调节延时的时长
    {
      unsigned char i, j;
 
                            //    _nop_();注释掉这行代码
      i = 2;
      j = 199;
      do
      {
        while (--j);
      } while (--i);
    }
}

       在声明函数时 新增一个形参变量,用来接收执行次数,灵活调整延时的时间。在函数体中包上一个while()循环。这样就改造完成了。

同样 ,汇编语言也可以这样,现象生成一个100毫秒的延时函数

DELAY100MS:     ;@11.0592MHz
  PUSH 30H
  PUSH 31H
  MOV 30H,#180
  MOV 31H,#68
NEXT:
  DJNZ 31H,NEXT
  DJNZ 30H,NEXT
  POP 31H
  POP 30H
  RET
 

然后对延时子函数进行改造,例如

DELAY:  MOV R7,#5   ;@11.0592MHz
D1:
  PUSH 30H
  PUSH 31H
  MOV 30H,#180
  MOV 31H,#68
NEXT:
  DJNZ 31H,NEXT
  DJNZ 30H,NEXT
  POP 31H
  POP 30H
  DJNZ R7,D1
  RET

第一行多加了        MOV    R7,#5           ,倒数第二行多加了     DJNZ R7,D1

可以通过修改第一行#后面的数字来修改延时的时长,例如现在是5  那么延时的就是500ms

改成3  那么就延时300ms  因为我是拿延时100毫秒的汇编代进行改造的。

stc-isp里面除了可以烧写程序外还有很多功能,例如定时器的自动配置、波特率的计算等等

相关文章
|
消息中间件 SQL Kubernetes
《Apache Flink 案例集(2022版)》——4.云原生——小红书-Native Flink on Kubernetes 在小红书的实践(1)
《Apache Flink 案例集(2022版)》——4.云原生——小红书-Native Flink on Kubernetes 在小红书的实践(1)
1040 0
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
存储 关系型数据库 MySQL
在 MySQL 中使用 LOWER
【8月更文挑战第9天】
802 1
在 MySQL 中使用 LOWER
|
前端开发 JavaScript
在Vue中,如何使用CSS过渡和动画来实现淡入淡出的效果?
在Vue中,如何使用CSS过渡和动画来实现淡入淡出的效果?
1131 1
|
机器学习/深度学习 SQL 人工智能
隐私计算技术路线介绍及对比
隐私计算技术路线介绍及对比
2169 0
微信公众平台开发(1)--账号注册流程图文详解
本文目录 1. 注册地址 2. 类型选择 3. 基本信息 4. 选择类型 5. 信息登记 5.1 选择主体类型 5.2 主体信息登记 5.3 管理员信息登记 5.4 创作者信息(选填) 6. 公众号信息 7. 微信认证
1004 0
|
芯片
复习单片机:蜂鸣器(内含:1 蜂鸣器介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象)
复习单片机:蜂鸣器(内含:1 蜂鸣器介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象)
1370 0
复习单片机:蜂鸣器(内含:1 蜂鸣器介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象)
|
存储 芯片
4.8 51单片机-PCF8591(ADC/DAC)转换芯片
4.8 51单片机-PCF8591(ADC/DAC)转换芯片
1089 0
4.8 51单片机-PCF8591(ADC/DAC)转换芯片
FreeRTOS入门教程(信号量的具体使用)
FreeRTOS入门教程(信号量的具体使用)
568 0
|
移动开发 JSON 前端开发
我收藏的这 100 + 个”杀手级“网站,你用过几个?
我收藏的这 100 + 个”杀手级“网站,你用过几个?

热门文章

最新文章