精简指令集(RISC)单片机延时的延时函数时间计算

单片机类型

RISC单片机,即基于精简指令集计算(Reduced Instruction Set Computing)架构的单片机,近年来在嵌入式系统领域得到了广泛的应用。以下是关于RISC单片机的详细介绍:

一、RISC单片机概述

RISC单片机采用精简指令集架构,其核心在于指令集的简化和硬件结构的优化。与传统的复杂指令集(CISC)单片机相比,RISC单片机具有更高的执行效率和更低的功耗。它们通常通过流水线技术、寄存器到寄存器的数据传输以及固定的指令长度等特性来提高性能。

二、RISC单片机的优势

  1. 高效执行:RISC指令集相对简单,每条指令的执行时间更短,且易于通过流水线技术并行处理,从而提高了处理器的整体执行效率。
  2. 低功耗:由于指令集简化和硬件结构优化,RISC单片机在运行时消耗的功率更低,适合对功耗有严格要求的嵌入式系统。
  3. 可定制性和灵活性:一些RISC单片机(如基于RISC-V架构的单片机)具有开放源代码和可定制性,用户可以根据具体需求对指令集和硬件结构进行定制和优化。
  4. 高性价比:由于开放源代码和可定制性,RISC单片机的成本相对较低,同时性能优越,因此具有较高的性价比

单片机型号

该单片机为中基国威单片机p02.

官方代码

查询了该单片机的手册清除看门狗占用一个指令周期

nop占用一个指令周期

前置知识

要懂其中的计算就必须了解周期的概念

时钟周期

 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。

 在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。

 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。

机器周期

 在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。

指令周期

 指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

 通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

单片机中定时器(Timer)、计数器(Counter)区别:

定时器和计数器在单片机内部使用同一电路来实现:当这一电路选择为定时器功能时,其输入源通常来自于内部输入的单位时间脉冲(比如由时钟源产生),包含有时间的概念在里面;当这一电路选择为计数器功能时,其输入源通常来自于外部事件触发,用于统计外部事件的数量,没有时间概念在里面。                        
原文链接:https://blog.csdn.net/xiebingsuccess/article/details/88824389

总结概括

周期:
振荡周期:时钟周期也称为振荡周期,定义为时钟频率的倒数。12MHz晶振的时钟周期就是1/12 us、1MHz就是1us。
状态周期:2个振荡周期为1个状态周期。
机器周期:1个机器周期含6个状态周期,12个时钟周期。指令周期是取出一条指令并执行这条指令的时间。12MHz晶振的机器周期就是12*1/12us=1us。
指令周期:完成一条指令所需的时间就是指令周期,不同的指令,指令周期也不一样。它是指CPU完成一条操作的所需的全部时间。

机器周期=6状态周期=12振荡周期

实现延时的方法有多种

  • 循环    采用for或者while循环,让计算机跑无用的代码,从而达到延时的目的
  • 定时器    通过定时器的计时功能,来达到延时的目的
  • 系统调用    该功能其实还是通过以上的两种方式来实现,当时这种功能出现在有系统的程序里面,执行系统延时的情况下,单片机可以去执行别的函数,直到系统时间到,从而回来接着执行该代码,这实际上也提高了效率

这里我们用的是循环的方法进行延时

计算公式

时钟周期 = 1/时钟频率
机器周期 = 完成一个基本操作所需要的时间 = 时钟周期*n(n取决于单片的不同而不同)
指令周期 = 完成一次指令所需的时间           = 一或者两个机器周期 

而我们的计算公式则是:
(count(次数)*指令周期所需的时钟周期数(例如c51就是12)*循环中的指令数)/时钟频率

计算

回到最开始的代码

那我们只需计算里面while(y--)这层函数延时的时间

经查阅该单片机的指令为精简指令,机器周期为一个时钟周期

; 假设y的值已经通过某种方式(如初始化代码或直接从C编译器)加载到R0中  
    MOV R0, #140  ; 将140移动到R0寄存器(这通常不是由汇编器直接生成的,而是由编译     器处理)    
; 开始循环  
    LOOP_START:  
    DEC R0      ; 将R0的值递减1  

  ClrWdt();//一个时钟周期
  Nop();//一个时钟周期
  Nop();
  Nop();
  Nop();
  BRNZ LOOP_START  ; 如果R0不为0,则跳转回LOOP_START  
; 循环结束后的代码  
; ...

一共有九条指令。所以指令周期为九然后循环140次。

指令周期为一个或几个机器周期

机器周期为时钟周期*n(n取决于单片的不同而不同)

time=机器周期*150=(各个指令周期相加)*140=1/2M*(9+5)*140=0.0098s≈1ms

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值